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

R中三因素重复测量ANOVA的Bonferroni校正事后检验报错问询

解决重复测量ANOVA的Bonferroni事后检验报错问题

核心问题原因

  • ezAnova()返回的是汇总结果列表,不是统计模型对象,PostHocTest()无法直接解析这类对象
  • 重复测量aov()模型(含ID:time这类重复测量项)属于aovlist类,并非标准lm类,DescTools::PostHocTest()对这类模型的支持有限

推荐解决方案:使用emmeans包做事后检验

emmeans包对重复测量ANOVA模型的兼容性更好,能直接处理ezAnova依赖的混合模型或重复测量aov模型,且原生支持Bonferroni校正。

步骤1:构建正确的重复测量模型

方式一:基于ezAnova提取混合模型

调用ezAnova()时指定model = TRUE,会返回对应的线性混合模型对象:

library(ez)
# 假设数据集为bp_data,包含字段:ID(被试ID)、time(时间点)、gender(性别)、dose(剂量)、bp(血压)
ez_result <- ezAnova(
    data = bp_data,
    dv = bp,
    wid = ID,
    within = time,
    between = .(gender, dose),
    type = 3,
    model = TRUE  # 关键参数:返回模型对象而非仅汇总结果
)
# 提取用于事后检验的混合模型
lmer_model <- ez_result$model

方式二:直接构建重复测量aov模型

用Error()项指定重复测量的嵌套结构:

aov_model <- aov(bp ~ gender * dose * time + Error(ID/time), data = bp_data)

步骤2:执行Bonferroni校正的事后检验

针对不同效应项(主效应/交互效应),指定对应的分组变量:

library(emmeans)

# 1. 时间点(time)主效应的事后检验
emmeans(lmer_model, pairwise ~ time, adjust = "bonferroni")

# 2. 性别×时间交互效应的事后检验
emmeans(lmer_model, pairwise ~ gender:time, adjust = "bonferroni")

# 3. 剂量×时间交互效应的事后检验
emmeans(lmer_model, pairwise ~ dose:time, adjust = "bonferroni")

# 若使用aov_model,写法完全一致
emmeans(aov_model, pairwise ~ time, adjust = "bonferroni")

备选方案:用multcomp包处理aovlist模型

如果偏好类似PostHocTest的思路,multcomp包支持aovlist类模型的校正检验:

library(multcomp)
# 以time主效应为例,执行Bonferroni校正
glht(aov_model, linfct = mcp(time = "Tukey")) %>% 
    summary(test = adjusted("bonferroni"))

关键注意事项

  • 禁止直接将ezAnova()返回的汇总列表传给PostHocTest(),必须传入原始模型对象
  • 重复测量模型的事后检验需明确区分主效应与交互效应,针对不同效应组合设置检验项

内容的提问来源于stack exchange,提问作者Tarugo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 14:22:15