You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 21:15:37