如何计算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
相关产品推荐
相关产品推荐

