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

Lmer三变量交互配对比较:Holm校正计划比较的R实现问询

实现计划内配对比较的Holm校正

步骤1:提取目标组的边际均值

别直接跑全交叉组合的比较,先把你需要的组筛出来。比如你要做同一Training+Hand下Time的前后对比,就用分组的方式提取边际均值:

# 按Training和Hand分组,每组只包含pre和post两个Time水平
emm_target <- emmeans(model1, ~ Time | Training * Hand)

步骤2:在目标组内做配对比较并应用Holm校正

这时候跑配对比较,Holm校正只会针对你设定的这些有意义的对比,不会涉及无意义的跨组组合:

# 每组内比较pre和post,自动用Holm校正p值
pairwise_comp <- pairs(emm_target, adjust = "holm")

# 查看结果
print(pairwise_comp)

手动校正的替代方案

如果你想先获取未校正p值再手动处理,可按以下步骤操作:

1. 自定义计划内对比

先确认全交叉组的顺序,再构建对应对比矩阵:

# 查看全交叉组的顺序,确保对比矩阵位置对应正确
print(emmeans(model1, ~ Training * Time * Hand))

# 构建自定义对比,每个元素对应一个计划内的前后比较
my_contrasts <- list(
  trt_left_pre_vs_post = c(1, -1, 0, 0, 0, 0, 0, 0),
  trt_right_pre_vs_post = c(0, 0, 1, -1, 0, 0, 0, 0),
  sham_left_pre_vs_post = c(0, 0, 0, 0, 1, -1, 0, 0),
  sham_right_pre_vs_post = c(0, 0, 0, 0, 0, 0, 1, -1)
)

# 获取未校正的对比结果
unadjusted_res <- contrast(emmeans(model1, ~ Training * Time * Hand), my_contrasts, adjust = "none")

2. 手动应用Holm校正

提取未校正p值后,用p.adjust函数完成校正:

# 提取未校正p值
raw_p <- unadjusted_res$p.value

# 执行Holm校正
holm_p <- p.adjust(raw_p, method = "holm")

# 更新结果中的p值和校正方法标记
unadjusted_res$p.value <- holm_p
unadjusted_res$adjust <- "holm"

# 查看最终校正后的结果
print(unadjusted_res)

关键提示

核心逻辑是先缩小比较范围,只保留你需要的组或对比,再应用Holm校正——这样校正只会针对有意义的计划内比较,不会被无意义的跨组对比稀释校正效果。其中分组提取emmeans后做配对比较的方法最简便,优先推荐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 09:07:41