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

如何在gtsummary的tbl_regression中添加死亡率(/1000人年)及95%CI?

验证基于Poisson方法计算死亡率及置信区间的正确性

核心逻辑合理性

用Poisson回归计算**死亡率(/1000人年)**及95%置信区间是完全合理的:

  • 死亡率本质是事件数/总人时,属于率的范畴,当事件为稀有事件时,Poisson分布能很好拟合这类计数数据
  • 直接通过Poisson模型拟合n_event ~ offset(log(总随访时间/1000)),可直接得到以/1000人年为单位的率及其置信区间,无需额外转换

典型实现的正确性验证

假设你的代码结构如下(行业常规实现):

library(survival)
library(gtsummary)
library(dplyr)
library(broom)

# 1. 按分组统计事件数、总随访时间
surv_stats <- original_data %>%
  group_by(分组变量) %>%
  summarize(
    n_event = sum(status),  # status为结局变量(1=发生事件,0=截尾)
    total_followup = sum(time),  # time为随访时间(单位:年)
    .groups = "drop"
  )

# 2. Poisson回归计算死亡率及95%CI
pois_model <- glm(n_event ~ offset(log(total_followup/1000)), 
                  data = surv_stats, family = poisson)

# 3. 提取并整理结果
mortality_res <- tidy(pois_model, exponentiate = TRUE, conf.int = TRUE) %>%
  mutate(
    死亡率 = round(estimate, 1),
    95%CI = paste0(round(conf.low, 1), "–", round(conf.high, 1)),
    事件数 = surv_stats$n_event,
    总随访时间 = surv_stats$total_followup
  ) %>%
  select(事件数, 总随访时间, 死亡率, `95%CI`)

# 4. 合并到Cox回归表格
cox_model <- coxph(Surv(time, status) ~ 分组变量, data = original_data)
cox_table <- tbl_regression(cox_model, exponentiate = TRUE) %>%
  add_custom_table(
    mortality_res,
    include = c(死亡率, `95%CI`),
    label = list(死亡率 = "死亡率(/1000人年)", `95%CI` = "95%置信区间")
  )

针对上述代码的验证要点:

  1. 人时转换正确:offset(log(total_followup/1000))确保模型输出的率直接对应每1000人年的事件数,完全匹配需求
  2. 模型参数正确:family = poisson指定了合适的分布,exponentiate = TRUE将对数尺度结果转换为原始率,逻辑无误
  3. 置信区间计算规范:Poisson模型的置信区间基于对数尺度的正态近似,指数化后得到的是率的95%置信区间,符合统计标准
  4. 表格合并逻辑通顺:通过add_custom_table将死亡率结果整合到Cox回归表格中,实现了需求的整合展示

额外注意事项

  • 若数据存在过度离散(事件数方差远大于均值),建议改用quasipoisson族模型,避免置信区间被过度压缩
  • 确保time变量单位为年,若为月/天需先转换(如time/365.25),否则死亡率单位会出错
  • 分组变量的层级需与Cox回归中的分组完全匹配,避免合并表格时出现错位

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 19:12:44