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
相关产品推荐
相关产品推荐

