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

coxph与cph函数生存概率估计值的数值差异原因咨询

Cox比例风险模型:coxph与cph预测生存概率的差异原因解析

我在基于Cox比例风险模型计算生存概率时,最初使用survival包的coxph函数,但处理大数据集时,为所有个体预测全时间点生存概率的速度很慢。换成rms包的cph函数后,计算速度明显提升,但发现两者输出的预测概率存在细微差异:小时间点差异约在小数点后5位,大时间点差异可达小数点后2位。我已确保两者使用相同的参数设置,且模型系数估计结果接近。

两种方法的实现代码

coxph 代码

S_t <- coxph(Surv(time = Y, event = d) ~ ns(age)+ns(psa)+tstage+deyo+gs+insurance+income+education+race, ties="breslow", data = data)
S_t_pred.obj <- survfit(S_t, stype=1, newdata=X, se.fit = FALSE)
S_t_pred.sum <- summary(S_t_pred.obj, times=Y, extend = TRUE)$surv

cph 代码

S_t1 <- cph(Surv(time = Y, event = d) ~ ns(age)+ns(psa)+tstage+deyo+gs+insurance+income+education+race, method="breslow", data = data, surv=T)
S_t_pred.sum1 <- survest(S_t1, stype=1, times=Y, newdata=X, se.fit = FALSE, extend = TRUE)$surv

差异产生的核心原因

  • 基线生存函数的计算逻辑不同:coxph默认用原始数据的Kaplan-Meier估计作为基线生存函数;而cph在设置surv=T时,采用的是基于协变量均值的基线生存函数——即先计算所有样本线性预测值的均值,再以此为基准推导基线风险,而非直接用原始观测的Kaplan-Meier曲线。这种基线的偏移会随时间累积,导致大时间点的差异被放大。
  • 数值计算的优化策略差异:cph针对大数据场景做了专门的数值优化(比如高效矩阵运算、内存复用),部分计算步骤采用了近似实现,这会带来小时间点的微小精度差异。
  • 时间点扩展的处理细节不同:虽然两者都设置了extend=TRUE,但summary.survfit和survest在处理超出最大观测时间的生存概率时,外推的具体逻辑存在细微差别,进一步拉大了后期时间点的差异。

验证建议

  1. 提取两种模型的基线生存函数直接对比:
    • coxph基线:survfit(S_t, newdata=data.frame(age=mean(data$age), psa=mean(data$psa), ...))(所有协变量取均值)
    • cph基线:survest(S_t1, newdata=data.frame(age=mean(data$age), psa=mean(data$psa), ...))
  2. 检查协变量分布,若大量样本的协变量值偏离均值,两种基线的差异会更显著。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 02:15:13