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

如何计算3组及以上的标准化均数差(SMD)?gtsummary报错如何解决

多组场景下计算两两SMD的解决方案

3组及以上场景可以计算组间两两配对的标准化均数差(SMD),出现该报错的原因是gtsummary的add_difference()函数原生仅支持两水平的by分组变量,没有直接内置多组两两比较的逻辑。

基于gtsummary的实现方法

可通过purrr循环生成所有两两分组的比较结果,再合并为汇总表,参考实现代码如下:

library(tidyverse)
library(gtsummary)

# 预处理数据,生成3水平的trt分组
trial_mod <- trial %>%
  mutate(trt = ifelse(age < 40, "Drug C", trt)) %>%
  drop_na(trt) %>%
  select(trt, age, marker, grade, stage)

# 生成所有两两分组组合
group_levels <- levels(factor(trial_mod$trt))
group_pairs <- combn(group_levels, 2, simplify = FALSE)

# 循环计算每组对比的SMD及调整后差值
smd_tables <- map(
  group_pairs,
  function(pair) {
    trial_mod %>%
      filter(trt %in% pair) %>%
      tbl_summary(
        by = trt,
        statistic = list(all_continuous() ~ "{mean} ({sd})"),
        missing = "no",
        include = c(age, marker)
      ) %>%
      add_difference(adj.vars = c(grade, stage)) %>%
      modify_spanning_header(all_stat_cols() ~ paste0("**", pair[1], " vs ", pair[2], "**"))
  }
)

# 合并所有对比结果为一张汇总表
final_table <- tbl_merge(smd_tables)

补充说明

如果不需要调整协变量仅需计算SMD,也可以先用smd包的pairwise_smd()函数直接生成所有组对的SMD结果,再通过add_stat()接口添加到tbl_summary生成的基线表中。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 00:24:03