R中双被试内变量重复测量ANOVA的事后检验实现方法
双被试内析因设计重复测量方差分析的事后两两比较实现
问题背景
- 实验为30名被试参与的完全被试内2×2析因设计,两个被试内自变量分别为颜色(红/蓝)、刺激呈现侧别(左/右),共4种实验条件,每名被试接受所有条件测试,因变量为反应时RT
- 示例数据构造代码:
df = matrix(nrow = 120, ncol = 0) df = as.data.frame(df) df$ppt_id = c(rep(c(1:30),4)) df$color = c(rep("red", 60), rep("blue", 60)) df$side = c(rep(c(rep("left", 30), rep("right", 30)),2)) df$RT = c(rnorm(30, 600, 50), rnorm(30, 650, 50), rnorm(30, 700, 50), rnorm(30, 600, 50))
- 已使用
rstatix::anova_test()完成重复测量方差分析,检验到颜色与侧别的交互效应显著,分析代码如下:
anova_test( data = df, dv = RT, wid = ppt_id, within = c(color, side), effect.size = "pes")
- 需求:实现该双被试内设计下4种实验条件的所有两两比较事后检验,现有公开资料提及的R事后检验方法多仅适配单因素重复测量、或单被试内+单被试间的混合设计场景。
实现方案
方法1:所有实验条件两两比较(和anova_test()同生态,输出格式兼容)
直接使用rstatix包内置的配对t检验函数,先将两个自变量拼接为单独的条件分组变量即可,无需额外调整数据结构:
- 加载依赖包
library(rstatix) library(tidyverse)
- 生成组合条件列,运行配对比较+多重比较校正
# 生成4种实验条件的唯一标识列 df <- df %>% mutate(condition = paste(color, side, sep = "_")) # 运行两两配对比较,默认使用holm法校正p值,可按需替换为bonferroni、fdr等方法 posthoc_pairwise <- df %>% pairwise_t_test( RT ~ condition, paired = TRUE, p.adjust.method = "holm", wid = ppt_id )
- 可选:补充输出各组描述统计、配对比较效应量(Cohen's d)
# 各条件RT的均值、标准差 desc_stat <- df %>% group_by(condition) %>% get_summary_stats(RT, type = "mean_sd") # 各配对比较的效应量 cohend_res <- df %>% cohens_d(RT ~ condition, paired = TRUE, wid = ppt_id)
方法2:简单效应检验(交互效应显著时的常用后续分析)
如果需要固定其中一个自变量的水平,检验另一个自变量的效应(例如分别在左侧、右侧刺激条件下,比较红蓝颜色的RT差异),可以使用emmeans包实现:
library(emmeans) # 拟合重复测量方差分析模型 rm_aov <- aov(RT ~ color*side + Error(ppt_id/(color*side)), data = df) # 设定简单效应检验逻辑:固定side水平,检验color的效应 simple_side <- emmeans(rm_aov, ~ color | side) # 输出比较结果,带p值校正 pairs(simple_side, adjust = "holm") # 如果需要固定color水平检验side的效应,替换公式即可 simple_color <- emmeans(rm_aov, ~ side | color) pairs(simple_color, adjust = "holm")
注意:两种方法都完全适配双被试内的析因设计,不需要将数据转为宽格式,也不需要额外设置被试间变量,结果可以直接整理到论文中。
内容的提问来源于stack exchange,提问作者Alex M
相关产品推荐
相关产品推荐

