关于gtsummary/tbl_summary:亚组与基线单独比较的技术问询
实现亚组与基线单独对比的解决方案
用gtsummary直接实现
gtsummary完全支持这种需求,无需手动处理,核心是指定基线为分组变量的参考水平,让add_p()自动计算各亚组与基线的对比P值,而非两两比较。
方法1:设置因子参考组(最简单)
将分组变量转为因子并指定基线(如Grade I)为参考水平,add_p()会自动以该组为基准计算其他组的对比P值:
library(gtsummary) library(dplyr) # 构造示例数据 df <- tibble( grade = factor(c(rep("Grade I", 50), rep("Grade II", 40), rep("Grade III", 30))), age = rnorm(120, 50, 10), sex = sample(c("Male", "Female"), 120, replace = TRUE) ) # 把Grade I设为参考组 df <- df %>% mutate(grade = relevel(grade, ref = "Grade I")) # 生成表格并添加基线对比P值 tbl_summary(df, by = grade) %>% add_p( test = list( all_continuous() ~ "t.test", # 连续变量用t检验 all_categorical() ~ "chisq.test" # 分类变量用卡方检验 ) )
方法2:自定义检验函数(复杂场景适配)
如果需要更灵活的对比逻辑(如多组ANOVA后和基线的事后检验),可以自定义检验函数传递给add_p():
# 自定义连续变量与基线的t检验函数 baseline_t_test <- function(data, variable, by, ...) { baseline_group <- levels(factor(data[[by]]))[1] # 遍历所有非基线组,计算与基线的t检验P值 p_results <- lapply( setdiff(levels(factor(data[[by]])), baseline_group), function(subgroup) { t.test( data[[variable]] ~ data[[by]] %in% c(baseline_group, subgroup) )$p.value } ) # 整理结果格式 tibble( variable = variable, p.value = unlist(p_results), group = setdiff(levels(factor(data[[by]])), baseline_group) ) } # 应用到表格,并自定义表头 tbl_summary(df, by = grade) %>% add_p( test = all_continuous() ~ baseline_t_test, pvalue_fun = function(x) style_pvalue(x, digits = 3) ) %>% modify_header(p.value ~ "**与Grade I对比的P值**")
备选R包
如果偏好其他工具,以下包也支持基线对比:
- tableone:设置分组变量的参考水平后,直接生成包含基线对比P值的特征表,可导出为markdown格式。
- arsenal:
tableby()函数支持指定参考组,轻松生成亚组与基线的对比统计量。
内容的提问来源于stack exchange,提问作者Philipp
相关产品推荐
相关产品推荐

