R(ezAnova)中emmeans与SPSS估计边际均值结果差异问询
关于ezAnova的emmeans与SPSS估计边际均值差异的排查方向
我之前在从SPSS转R做混合ANOVA时也碰到过一模一样的问题,分享几个大概率导致差异的原因和对应的解决思路:
对比方式的默认设定差异
SPSS默认用的是偏差对比(Deviation Contrast),而emmeans在默认状态下的对比逻辑或者模型拟合时的因素对比矩阵和SPSS不一致。你可以先检查R中各因素的对比设定:# 查看当前对比方式 contrasts(data$Session) contrasts(data$Cue) # 手动设置为和SPSS一致的偏差对比/总和对比 contrasts(data$Session) <- contr.sum(2) contrasts(data$Cue) <- contr.sum(3) contrasts(data$Flanker) <- contr.sum(2) contrasts(data$Group) <- contr.sum(3)重新拟合模型后再计算emmeans,大概率能缩小差异。
边际均值的加权逻辑不同
你的各组被试数不等(25、25、23),这时候差异会特别明显:SPSS计算估计边际均值时默认是平衡样本量加权(按理论相等样本量来计算均值),而emmeans默认用的是实际样本量加权。你可以在emmeans中强制指定平衡加权:emmeans(model, ~ Session*Cue*Flanker*Group, weights = "equal")模型拟合的细节差异
- SPSS的混合ANOVA默认基于传统重复测量框架,可能会自动应用球形校正;而ezAnova本质是用线性混合效应模型拟合,且平方和类型的设定也可能和SPSS有出入。确认你在ezAnova中是否指定了
type = 3(SPSS默认用类型III平方和):ezAnova(data = df, dv = RT, wid = Subject, within = .(Session, Cue, Flanker), between = Group, type = 3) - 另外,两个软件的模型拟合算法(比如迭代收敛的阈值)也可能有细微差别,你可以尝试在R中用
lme4包重新拟合模型后再计算emmeans,对比结果。
- SPSS的混合ANOVA默认基于传统重复测量框架,可能会自动应用球形校正;而ezAnova本质是用线性混合效应模型拟合,且平方和类型的设定也可能和SPSS有出入。确认你在ezAnova中是否指定了
缺失值处理逻辑不一致
SPSS在重复测量分析中默认是按列表删除缺失值,而R中的ezAnova如果没特别设置,可能是按行删除。你可以先对数据做统一的缺失值处理,比如用na.omit()预处理后再拟合模型,看看结果是否对齐。
内容的提问来源于stack exchange,提问作者Kerwin Olfers




