如何使用gtsummary实现ANOVA组间比较并自动添加显著性标记
解决方案
完全可以在gtsummary框架内完成全流程计算与标注,无需切换SPSS手动处理,核心通过add_stat()函数联动emmeans包自动计算带Bonferroni校正的ANOVA事后检验结果,再生成自定义显著性标记即可。
依赖包
需要提前安装加载以下包:
gtsummary:生成统计表格emmeans:计算事后检验校正p值tidyverse:数据处理
实现代码
# 加载依赖 library(gtsummary) library(emmeans) library(tidyverse) # -------------------------- # 步骤1:自定义显著性标记生成函数 # 规则可根据需求调整,当前规则: # 组1 vs 组2显著标注 * # 组1 vs 组3显著标注 † # 组2 vs 组3显著标注 ‡ # p值阈值可自定义,如<0.01可加额外标记 # -------------------------- get_bonf_sig <- function(data, variable, by, ...) { # 拟合单因素ANOVA模型 aov_fit <- aov(as.formula(paste0(variable, " ~ ", by)), data = data) # 计算Bonferroni校正的两两比较p值 pw_res <- emmeans(aov_fit, as.formula(paste0("pairwise ~ ", by)), adjust = "bonferroni") pw_pvals <- as.data.frame(pw_res$contrasts)$p.value sig_marks <- c() if (pw_pvals[1] < 0.05) sig_marks <- c(sig_marks, "*") if (pw_pvals[2] < 0.05) sig_marks <- c(sig_marks, "†") if (pw_pvals[3] < 0.05) sig_marks <- c(sig_marks, "‡") return(paste(sig_marks, collapse = "")) } # -------------------------- # 步骤2:生成带标记的最终表格 # 替换dat为你自己的数据集即可 # -------------------------- dat %>% tbl_summary( by = group_factor, # 连续变量输出均值(标准差),和SPSS描述性统计格式一致 statistic = all_continuous() ~ "{mean} ({sd})" ) %>% # 添加总体ANOVA的p值 add_p(test = all_continuous() ~ "anova") %>% # 添加两两比较显著性标记列 add_stat( fns = all_continuous() ~ get_bonf_sig, new_col_name = "sig", label = list(sig ~ "两两显著性") ) %>% # 自定义表头与脚注,匹配论文发表要求 modify_header( sig ~ "显著性标记", p.value ~ "总体p值" ) %>% modify_footnote( sig ~ "* 组1与组2比较p<0.05;† 组1与组3比较p<0.05;‡ 组2与组3比较p<0.05,所有p值经Bonferroni校正" )
自定义调整说明
- 若需要将标记直接附在特征名或统计量后,无需单独列,可通过
modify_table_styling()函数将标记列与目标列合并即可 - 若需要调整校正方法,将
adjust = "bonferroni"替换为"tukey"、"holm"等参数即可匹配不同检验要求 - 显著性阈值可自由调整,如增加p<0.01对应
**的规则,只需修改get_bonf_sig函数内的判断逻辑
内容的提问来源于stack exchange,提问作者Oliver Wood
相关产品推荐
相关产品推荐

