如何在分段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
相关产品推荐
相关产品推荐

