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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 04:40:56