pairwise_t_test()可靠性疑问及ANT*BUT交互项多重比较咨询
问题解答
你的pairwise_t_test()用法是正确的,用于在每个ANT分组内比较BUT的不同水平。误差棒无重叠却未得到显著结果,是因为置信区间不重叠≠统计显著性——置信区间反映的是估计精度,而统计检验还要考虑样本量、方差等因素。运行你的代码后,只有flat组的LOW vs MEDIUM对比得到了显著的校正p值(0.036,标记为*),其余对比的校正p值均大于0.05,因此无显著性标签。
针对var ~ ANT*BUT交互模型的多重比较,以下是两种实用方法:
方法1:简单效应比较(使用emmeans)
适合在每个BUT水平下比较ANT,或每个ANT水平下比较BUT:
- 拟合交互模型:
library(emmeans) model <- lm(var ~ ANT*BUT, data = df1)
- 在每个
ANT分组内比较BUT(与你的原始逻辑一致,但通过emmeans实现):
but_ant_pairs <- emmeans(model, ~ BUT | ANT) %>% pairs(adjust = "holm") %>% as.data.frame() %>% rename(p = p.value, p.adj = p.adjusted) %>% mutate( p.adj.signif = case_when( p.adj < 0.001 ~ "***", p.adj < 0.01 ~ "**", p.adj < 0.05 ~ "*", TRUE ~ "ns" ), # 拆分对比组名称 group1 = str_split_fixed(contrast, " - ", 2)[,1], group2 = str_split_fixed(contrast, " - ", 2)[,2], lab = paste0(p.adj.signif, " (p=", round(p.adj, 3), ")") ) %>% add_xy_position(x = "BUT", data = df1, group = "ANT")
- 在每个
BUT水平下比较ANT:
ant_but_pairs <- emmeans(model, ~ ANT | BUT) %>% pairs(adjust = "holm") %>% as.data.frame() %>% rename(p = p.value, p.adj = p.adjusted) %>% mutate( p.adj.signif = case_when( p.adj < 0.001 ~ "***", p.adj < 0.01 ~ "**", p.adj < 0.05 ~ "*", TRUE ~ "ns" ), x = str_extract(contrast, "(LOW|HIGH|MEDIUM)$"), y.position = case_when( x == "LOW" ~ 30, x == "HIGH" ~ 31, x == "MEDIUM" ~ 32 ), lab = paste0(p.adj.signif, " (p=", round(p.adj, 3), ")") )
方法2:全组合成对比较(使用ggpubr)
如果需要比较ANT和BUT的所有6种组合:
- 创建组合分组变量:
df1 <- df1 %>% mutate(ANT_BUT = paste(ANT, BUT, sep = "_"))
- 运行成对t检验:
all_pairs <- df1 %>% pairwise_t_test(var ~ ANT_BUT, adjust = "holm") %>% mutate( lab = paste0(p.adj.signif, " (p=", round(p.adj, 3), ")") ) %>% add_xy_position(x = "ANT_BUT")
交互比较结果可视化
将ANT在BUT内的比较添加到你的现有图表中:
ggplot(df, aes(x= BUT, y= mean, colour= ANT, group = ANT)) + geom_errorbar(aes(ymin= low, ymax= up), colour="black", width=.10) + geom_line() + geom_point(size= 3, shape= 21, fill="white") + # 添加原始的BUT在ANT内的比较 stat_pvalue_manual(val, step.increase=0.05, label = "lab", y.position = 28) + # 添加ANT在BUT内的比较 stat_pvalue_manual(ant_but_pairs, label = "lab", x = "x", y.position = "y.position")
关键提示
- 多重比较时务必关注校正p值,而非原始p值,避免一类错误。
- 置信区间不重叠仅说明估计值的差异,不能直接等同于统计显著性,需通过假设检验验证。
内容的提问来源于stack exchange,提问作者12666727b9
相关产品推荐
相关产品推荐

