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

如何在gtsummary中自定义标准化差异统计量并引用分组比例?

在gtsummary中添加自定义分类变量标准化均值差异(SMD)列

要实现你需要的自定义Standardized Difference列,可通过gtsummary的add_stat()函数结合自定义计算函数完成,步骤如下:

1. 编写SMD计算函数

按照你给出的公式cat_smd=abs((p_1-p_0)/(sqrt(p_1*(1-p_1)+p_0*(1-p_0))/2)),编写函数提取分组比例并计算SMD:

cat_smd_fun <- function(data, by, variable) {
  # 获取分组变量的两个水平(exp的0和1)
  by_levels <- sort(unique(data[[by]]))
  # 计算两组中目标类别(如sex=0)的比例
  p0 <- mean(data[[variable]][data[[by]] == by_levels[1]] == 0, na.rm = TRUE)
  p1 <- mean(data[[variable]][data[[by]] == by_levels[2]] == 0, na.rm = TRUE)
  
  # 代入公式计算SMD
  numerator <- abs(p1 - p0)
  denominator <- sqrt(p1*(1-p1) + p0*(1-p0)) / 2
  smd <- numerator / denominator
  
  # 保留两位小数返回
  sprintf("%.2f", smd)
}

2. 生成带自定义列的汇总表

在原有tbl_summary()代码基础上,调用add_stat()添加自定义统计列,指定仅对分类变量应用该函数:

# 加载包
library(tidyverse)
library(gtsummary)

# 创建数据
age = c(34, 26, 42, 39, 17, 32, 28, 35, 42, 42, 44, 21, 26, 19, 34, 38, 20, 23, 33, 39, 28, 30, 19, 30, 37, 22, 32, 26, 18, 26)
care = c(4, 2, 4, 4, 5, 4, 4, 4, 4, 4, 4, 2, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 2, 2, 4, 4, 4, 4)
sex = c(1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1)
exp = c(1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0)
df = data.frame(age, sex, care, exp)

# 生成汇总表并添加SMD列
tbl <- df %>%
  tbl_summary(by = exp,
              type = all_dichotomous() ~ "categorical") %>%
  add_overall() %>%
  add_stat(
    fns = all_categorical() ~ cat_smd_fun,  # 仅对分类变量计算SMD
    label = "**Standardized Difference**", # 设置列标题
    location = "after_overall"             # 放在Overall列之后
  )

# 查看结果
tbl

结果验证

对于sex=0的情况,计算得:

  • p0(exp=0组)= 5/16 ≈ 0.31
  • p1(exp=1组)=7/14=0.50
    代入公式得:
    abs((0.5-0.31)/(sqrt(0.5*0.5 + 0.31*0.69)/2)) ≈ abs(0.19/(0.68/2)) ≈ 0.19/0.34 ≈ 0.56,与你预期的结果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 15:55:01