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

如何在不同时间区间计算生存分析中的HR(比例风险比)

分段Cox回归计算不同时间区间的HR值

问题背景

已通过survfit和ggsurvplot完成生存分析,但比例风险假设不成立,需要计算0-3年(1095.75天)和3年至研究结束两个时间区间内,依从组与不依从组的风险比(HR)。现有变量包括idnumber、SerialTime(随访天数)、type(分组:依从/不依从)、event1(结局:1=事件发生,0=截尾),整体分析得到的HR为0.53(95% CI:0.31-0.88),计划用survsplit函数实现分段分析但不清楚具体操作。

现有代码

# KM生存曲线拟合
KMcurve <- survfit(Surv(SerialTime, event1)~type, data = KM)

# 绘制生存曲线
ggsurvplot(KMcurve, xlim=c(0, 2191.5), break.x.by = 365.25, ylab="", xlab="Days",
       pval= TRUE, risk.table = "nrisk_cumevents", risk.table.title="",
       legend.labs=c("Non-compliant", "Compliant"), legend.title="",  
       surv.scale = "percent", palette="nejm",
       title="Disease Free Survival",  risk.table.height=.25, 
       censor = TRUE, conf.int = TRUE,
       axes.offset = TRUE) 

# 整体Cox回归
coxph(Surv(SerialTime, event1)~type, data = KM) %>% 
  tbl_regression(exp = TRUE) 

示例数据集

dat <- data.frame(
  id = 1:100,
  SerialTime = as.numeric(sample(95:2900, 100, replace = TRUE)),
  type = as.numeric(rep(1:2)),
  event1 = as.numeric(rep(0:1)))

dput(dat)

分段Cox回归实现步骤

1. 加载必要包

确保survival和gtsummary包已安装并加载:

library(survival)
library(gtsummary)

2. 拆分随访时间区间

以3年(1095.75天)为分界点,用survsplit拆分数据集:

# 定义分界点:3年=365.25*3=1095.75天
split_dat <- survsplit(Surv(SerialTime, event1) ~ ., 
                       data = KM, 
                       cut = 1095.75, 
                       episode = "time_period")
  • cut参数指定时间分界点(单位需与SerialTime一致,此处为天)
  • episode参数生成新变量time_period,标记观测所属时间区间:1代表0-3年,2代表3年以后

3. 拟合分段Cox模型

通过分层交互项直接输出两个区间的HR值:

# 带分层交互项的分段Cox模型
split_cox <- coxph(Surv(tstart, tstop, event) ~ type * strata(time_period), 
                   data = split_dat)

# 指数化输出HR及95%置信区间
split_cox %>% 
  tbl_regression(exp = TRUE)
  • survsplit自动生成tstart(区间起始时间)、tstop(区间结束时间)、event(区间内事件发生状态)三个变量,用于构建时依Cox模型
  • strata(time_period)按时间区间分层,交互项形式会直接输出每个区间内type对应的HR

4. 验证数据拆分结果

可查看拆分后的数据结构,确认时间区间划分正确:

# 查看前5行拆分后的数据
head(split_dat)
# 统计各时间区间的样本量
table(split_dat$time_period)

注意事项

  • 分界点单位必须与SerialTime完全匹配,如需多区间划分,可在cut中添加多个值,如cut = c(1095.75, 2191.5)对应0-3年、3-6年、6年以后三个区间
  • 拟合模型后,建议单独验证每个时间区间内的比例风险假设是否成立

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 23:02:54