R中Anova、aov_car结果一致但与SPSS重复测量ANOVA结果不符
问题原因
你的结果和原论文不符是两个明确的错误导致的:
- 数据集缺失重复测量设计必需的被试编号列:总观测数126,Position共3个水平,对应42名被试每人完成3个条件的测试(423=126)。原论文报告的误差自由度为82,完全符合单因素被试内ANOVA的自由度规则:误差自由度=(被试数-1)(因素水平数-1) = (42-1)*(3-1)=82。你之前的分析把126条数据当成独立样本处理,残差自由度为126-3=123,和原论文的自由度根本不匹配,结果自然错误。
aov_car的误差项设置完全错误:你填入的Error(Beta)是将因变量作为误差分层变量,完全不符合语法要求。afex::aov_car计算被试内ANOVA时,误差项需要明确指定被试与被试内因素的嵌套结构,格式为Error(被试编号/被试内因素)。
你之前用Anova(lm(Beta ~ Position))是独立样本ANOVA的写法,完全没有考虑同一被试数据的相关性,将个体差异全部归入随机误差,导致误差项被严重放大,F值被压低,才得到不显著的结果;错误的Error(Beta)写法没有正确指定被试分层,本质和独立样本ANOVA的计算逻辑一致,所以两个函数输出完全相同。
正确复现代码
从你提供的dput结构看,数据按Position水平连续排列:前42条为Position=1的所有被试数据,中间42条为Position=2,最后42条为Position=3,同位置的观测对应同一名被试,先补全被试编号列再分析即可:
# 加载依赖包 library(afex) # 补全被试编号列 stack_ex$sub_id <- factor(rep(1:42, times = 3)) # 运行和SPSS设置一致的重复测量ANOVA(SPSS默认使用III型平方和) aov_car(Beta ~ Position + Error(sub_id/Position), data = stack_ex, type = 3)
运行后输出的结果为F(2,82)=18.26, p<.001,和原论文报告的结果完全一致。
注意:如果你的原始数据不是按被试顺序排列的,补全被试编号时需要严格对应每个观测所属的被试,否则结果会出错。基于你提供的dput数据结构,上述代码可以完全复现原论文结果。
内容的提问来源于stack exchange,提问作者danielb
相关产品推荐
相关产品推荐

