gtsummary多组分析:如何获取组间事后比较信息及上标字母标注?
多组分组下gtsummary的事后比较与上标标注方案
一、add_q()的正确用法
add_q()就是专门为多组事后比较设计的工具,它会基于add_p()生成的全局检验结果,执行校正后的组间两两比较(默认根据变量类型选择合适的校正方法:连续变量用Tukey,分类变量用Bonferroni),完全匹配你的需求。调用方式很简单:
tbl_summary(data = your_data, by = group_var) %>% add_p() %>% add_q()
执行后会在表格中新增校正后的两两比较p值(即q值),对应事后检验的结果。
二、实现期刊标准的字母上标标注
gtsummary没有直接生成字母上标的内置函数,但可以通过自定义逻辑结合modify_table_body()实现,核心步骤如下:
- 先用
add_q()获取两两比较的校正p值 - 对每个变量,根据显著性水平(如α=0.05)为各组分配字母标签
- 将标签作为上标追加到统计量行末尾
示例代码(结合multcomp包生成规范标签)
multcomp包的cld()函数可以生成符合学术规范的组间比较字母标签,推荐用这个工具来实现:
# 先加载依赖包 library(gtsummary) library(multcomp) # 生成表格并添加全局检验和事后比较结果 tbl <- tbl_summary(data = your_data, by = group_var) %>% add_p() %>% add_q() # 自定义函数:为每个变量生成字母标签并添加到表格 add_letter_superscripts <- function(tbl, alpha = 0.05) { # 提取表格数据 tbl_data <- tbl$table_body # 遍历每个变量 for (var in unique(tbl_data$variable)) { # 获取当前变量的分组和统计量行 var_group_rows <- tbl_data$variable == var & tbl_data$data_type == "summary_stat" & tbl_data$by != "" groups <- unique(tbl_data$by[var_group_rows]) # 用multcomp生成字母标签(以连续变量为例,分类变量可调整模型类型) model <- lm(as.formula(paste(var, "~", group_var)), data = your_data) cld_result <- cld(glht(model, mcp(paste(group_var, "~ Tukey"))), level = alpha) letter_labels <- cld_result$mcletters$Letters[groups] # 将字母作为上标追加到统计量后 tbl_data$value[var_group_rows] <- paste0(tbl_data$value[var_group_rows], "^", letter_labels) } # 更新表格 tbl$table_body <- tbl_data return(tbl) } # 应用函数得到带字母上标的表格 final_tbl <- add_letter_superscripts(tbl)
三、额外说明
add_difference()仅支持两组比较,确实不适合多组场景;add_q()是gtsummary官方针对多组事后比较提供的解决方案,完全适用。- 若需要指定校正方法,可通过
add_q(test = ~tukey_test())或add_q(test = ~bonferroni_test())调整(需提前加载emmeans包)。
内容的提问来源于stack exchange,提问作者Tchuvak
相关产品推荐
相关产品推荐

