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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:48:03