使用gtsummary::tbl_summary为分类变量添加SMD的方法咨询
gtsummary为分类变量添加SMD的实现方法
核心原因
你之前用effsize::cohen.d无法适配分类变量,是因为该函数仅支持连续变量的效应量计算,分类变量的SMD基于组间率/构成比差异计算,和连续变量的计算逻辑不同。
最简实现方案
gtsummary已原生支持全类型变量的SMD计算,依赖smd包实现,该包可自动识别字符型、因子型、数值型等所有常用变量类型,无需额外转换:
- 首先安装依赖包:
install.packages(c("gtsummary", "smd")) - 直接调用
add_difference()函数指定SMD作为效应量即可,示例代码:
library(gtsummary) library(smd) # 内置示例数据包含字符/因子/数值类型变量 trial %>% dplyr::select(trt, age, grade, response) %>% # 生成基线特征表 tbl_summary(by = trt) %>% # 批量为所有变量添加SMD add_difference( test = everything() ~ "smd", col_label = "**SMD**" )
自定义实现方案
如果你需要通过add_stat()自行封装计算逻辑,替换effsize::cohen.d为smd::smd()即可适配全类型变量:
# 自定义SMD计算函数,自动适配所有变量类型 calc_smd <- function(data, variable, by, ...) { smd::smd(x = data[[variable]], g = data[[by]])$estimate %>% gtsummary::style_number(digits = 3) } # 调用add_stat添加SMD列 trial %>% dplyr::select(trt, age, grade, response) %>% tbl_summary(by = trt) %>% add_stat(fns = everything() ~ calc_smd) %>% modify_header(add_stat_1 = "**SMD**")
额外说明
- 上述两种方案均支持字符型分类变量,无需提前将字符变量转为因子
- 可通过
estimate_fun参数自定义SMD的小数位数、是否显示置信区间等样式
内容的提问来源于stack exchange,提问作者Inbal Goldshtein
相关产品推荐
相关产品推荐

