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

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()实现,核心步骤如下:

  1. 先用add_q()获取两两比较的校正p值
  2. 对每个变量,根据显著性水平(如α=0.05)为各组分配字母标签
  3. 将标签作为上标追加到统计量行末尾

示例代码(结合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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 02:15:34