如何在gtsummary合并回归表中为连续变量展示中位数(IQR)
用gtsummary实现自定义合并回归表
针对你的需求,以下是基于mtcars数据的实现代码,可实现分类变量展示logistic回归的病例数(结局阳性数/该水平总数),连续变量按有无结局分组展示中位数(IQR),并支持单变量与多变量回归表合并。
步骤1:数据预处理与包加载
library(gtsummary) library(dplyr) library(tidyr) # 转换结局变量为二分类,指定部分变量为分类类型 mtcars_mod <- mtcars %>% mutate( vs = factor(vs, levels = c(0, 1), labels = c("无结局", "有结局")), cyl = factor(cyl, labels = c("4缸", "6缸", "8缸")), am = factor(am, levels = c(0, 1), labels = c("自动挡", "手动挡")), gear = factor(gear), carb = factor(carb) )
步骤2:自定义连续变量统计量函数
该函数用于按结局分组计算连续变量的中位数(IQR),并整理为指定格式:
stat_continuous <- function(data, variable, by, ...) { data %>% group_by({{ by }}) %>% summarize( stat = paste0(median({{ variable }}, na.rm = TRUE), " (", IQR({{ variable }}, na.rm = TRUE), ")"), .groups = "drop" ) %>% pivot_wider(names_from = {{ by }}, values_from = stat) %>% mutate(stat = paste0(`无结局`, " / ", `有结局`)) %>% pull(stat) }
步骤3:构建单变量logistic回归表
uv_table <- mtcars_mod %>% tbl_uvregression( method = glm, y = vs, method.args = list(family = binomial), # 为分类/连续变量指定不同统计量 statistic = list( categorical = "{n}/{N}", # n=结局阳性数,N=该分类水平总病例数 continuous = stat_continuous ), exponentiate = TRUE, # 输出OR值而非log(OR) pvalue_fun = ~style_pvalue(.x, digits = 3) ) %>% # 调整表头命名 modify_header( label = "**变量**", stat_0 = "**统计量**", estimate = "**OR (95% CI)**", p.value = "**P值**" ) %>% # 添加脚注说明统计量含义 modify_footnote( stat_0 = "分类变量:结局阳性数/该水平总数;连续变量:无结局组/有结局组 中位数(IQR)" )
步骤4:构建多变量回归表并合并
# 拟合多变量logistic回归模型 mv_model <- glm(vs ~ cyl + am + wt + hp, data = mtcars_mod, family = binomial) # 生成多变量回归表 mv_table <- mv_model %>% tbl_regression( exponentiate = TRUE, pvalue_fun = ~style_pvalue(.x, digits = 3) ) %>% modify_header( label = "**变量**", estimate = "**多变量OR (95% CI)**", p.value = "**P值**" ) # 合并单变量与多变量表 merged_table <- tbl_merge( list(uv_table, mv_table), tab_spanner = c("**单变量分析**", "**多变量分析**") ) # 输出最终表格 merged_table
关键说明
- 分类变量的
{n}/{N}统计量中,n自动对应结局阳性(vs=有结局)的病例数,N为该分类水平的总样本量,符合logistic回归中病例数展示需求。 - 连续变量通过自定义函数实现按结局分组的中位数(IQR)展示,格式清晰区分两组结果。
- 通过
tbl_merge可无缝合并单变量与多变量分析结果,表格样式统一。
内容的提问来源于stack exchange,提问作者Arvid Gustafsson
相关产品推荐
相关产品推荐

