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

如何在gtsummary的tbl_continuous中自动分配t-test与ANOVA?

解决gtsummary中tbl_continuous的检验方法切换、主题设置及add_p()示例

一、按分组水平自动切换t-test/ANOVA检验

默认的Wilcoxon/Kruskal-Wallis检验无法通过test.args直接替换逻辑,需通过add_p()的test参数指定自定义函数,实现2水平用t检验、多水平用ANOVA的自动判断:

library(gtsummary)
library(dplyr)
library(broom)

# 自定义自动切换检验的函数
auto_switch_test <- function(data, variable, by, ...) {
  # 获取分组变量的水平数量
  group_levels <- data %>% pull(by) %>% unique() %>% length()
  
  if (group_levels == 2) {
    # 2水平时执行t检验
    t.test(formula = as.formula(paste(variable, "~", by)), data = data)
  } else {
    # 多水平时执行方差分析,用broom整理成gtsummary兼容的格式
    aov(formula = as.formula(paste(variable, "~", by)), data = data) %>%
      tidy() %>%
      slice(1) %>%
      select(p.value)
  }
}

# 应用到分析流程
trial %>% 
  select(trt, marker, grade, response) %>%
  tbl_continuous(marker, statistic = ~"{mean} ({sd})") %>% 
  add_p(test = list(marker = auto_switch_test))

二、tbl_continuous的主题设置

tbl_continuous继承gtsummary的全局主题配置,也支持单表局部调整:

1. 全局主题设置(对所有gtsummary表格生效)

# 定义自定义主题
my_gts_theme <- list(
  "tbl_continuous-str:stat_label" = "均值 (标准差)",  # 调整统计量标签
  "fmt_pvalue" = function(x) style_pvalue(x, digits = 3),  # p值保留3位小数
  "tbl_summary-str:header_bg" = "#f5f5f5"  # 表头背景色
)

# 激活主题
set_gtsummary_theme(my_gts_theme)

# 运行分析即可应用主题
trial %>% 
  select(trt, marker) %>%
  tbl_continuous(marker, statistic = ~"{mean} ({sd})") %>% 
  add_p(test = auto_switch_test)

2. 单表局部调整

无需修改全局主题,直接用modify_table_styling()调整单个表格:

trial %>% 
  select(trt, marker) %>%
  tbl_continuous(marker, statistic = ~"{mean} ({sd})") %>% 
  add_p() %>%
  modify_table_styling(columns = p.value, fmt_fun = style_pvalue, digits = 2)

三、add_p()的统计测试使用示例

1. 强制指定单个检验方法

# 强制对marker使用t检验
trial %>% 
  select(trt, marker) %>%
  tbl_continuous(marker, statistic = ~"{mean} ({sd})") %>% 
  add_p(test = t.test)

2. 为不同变量指定不同检验

# marker用t检验,假设新增的age变量用Wilcoxon检验
trial %>% 
  select(trt, marker, age) %>%
  tbl_continuous(c(marker, age), statistic = ~"{mean} ({sd})") %>% 
  add_p(test = list(marker = t.test, age = wilcox.test))

3. 使用gtsummary封装的检验函数

gtsummary提供了适配包内格式的封装函数,比如test.t.test()、test.anova():

trial %>% 
  select(trt, marker) %>%
  tbl_continuous(marker, statistic = ~"{mean} ({sd})") %>% 
  add_p(test = test.anova)

内容的提问来源于stack exchange,提问作者NEA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 12:52:37