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

如何在分段Cox模型汇总中保留非时变协变量的原始N和事件数?

解决分段时变Cox模型中协变量原始样本量/事件数保留问题

当使用survSplit拆分数据集构建分段时变HR的Cox模型后,tbl_regression默认会基于拆分后的重复行计算样本量(N)和事件数,导致不受时间效应影响的协变量(如trt、prior)的统计量被重复计数。以下是具体解决方法:

步骤1:计算原始数据集的样本量和事件数

首先从未拆分的原始数据中提取总样本量和总事件数:

# 从原始veteran数据计算统计量
original_n <- nrow(veteran)
original_nevent <- sum(veteran$status)

步骤2:生成初始结果表格并修改统计量

先构建初始的回归表格,再通过modify_table_body函数替换指定协变量的N和事件数:

# 构建分段时变Cox模型
vet2 <- survSplit(Surv(time, status) ~ ., data= veteran, cut=c(90, 180),
                  episode= "tgroup", id="id")
m2 <- coxph(formula = Surv(tstart, time, status) ~ trt + prior + karno:strata(tgroup),
            data = vet2)

# 生成初始表格
tbl_m2 <- tbl_regression(m2, exponentiate=T) %>% 
  add_n(location = "level") %>% 
  add_nevent(location = "level") %>% 
  bold_p(t = 0.05)

# 修改不受时间影响的协变量的N和事件数
tbl_m2_final <- tbl_m2 %>%
  modify_table_body(
    ~ .x %>%
      mutate(
        # 替换trt、prior的样本量为原始值
        n = case_when(
          variable %in% c("trt", "prior") ~ original_n,
          TRUE ~ n
        ),
        # 替换trt、prior的事件数为原始值
        nevent = case_when(
          variable %in% c("trt", "prior") ~ original_nevent,
          TRUE ~ nevent
        )
      )
  )

# 查看最终表格
tbl_m2_final

方法说明

  • survSplit会将每个患者拆分为多个时段对应的行,默认统计逻辑会重复计算样本量和事件数;
  • 对于trt、prior这类不随时间变化的协变量,其暴露状态在研究全程固定,因此应使用原始数据集的总样本量和事件数;
  • 若有其他不受时间影响的协变量,只需在variable %in% c(...)中添加对应变量名即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 08:15:04