如何对齐rms包中两个cph模型的线性预测器尺度与基线生存?
问题描述
使用rms包的cph()函数构建两个比例风险模型,用于推导药物反应预测得分:
score_baseline:仅包含预处理变量x、yscore_6months:在前者基础上加入治疗6个月后才可测量的变量z
代码如下:
score_baseline <- cph(Surv(t, response)~ x + y, data = df) score_6months <- cph(Surv(t, response)~ x + y + z, data = df)
目前两个模型的线性预测器尺度与基线生存值S₀(t)均不同,询问是否可通过缩放score_6months的系数,使两者的线性预测器尺度与基线生存估计值保持一致。
解决方案
可以通过缩放系数实现两者尺度对齐,但需遵循正确步骤并注意前提条件:
核心原理
rms包的cph()默认会将线性预测器的均值中心化至0,加入新变量z后,线性预测器的方差会发生变化,同时基线生存S₀(t)是基于线性预测器为0的协变量组合(含z的均值)计算的,这导致两个模型的尺度差异。通过将score_6months的线性预测器缩放到与score_baseline相同的方差,即可对齐两者的尺度,同时调整基线生存估计。
具体操作步骤
计算两个模型线性预测器的标准差
# 获取基线模型的线性预测器及标准差 lp_baseline <- predict(score_baseline, type = "lp") sd_baseline <- sd(lp_baseline) # 获取6个月模型的线性预测器及标准差 lp_6months <- predict(score_6months, type = "lp") sd_6months <- sd(lp_6months)计算缩放因子
将score_6months的线性预测器缩放到与score_baseline同尺度,缩放因子为两者标准差的比值:scale_factor <- sd_baseline / sd_6months缩放模型系数并调整基线生存
- 缩放
score_6months的所有回归系数:scaled_coefs <- coef(score_6months) * scale_factor - 调整基线生存
S₀(t):由于比例风险模型中S(t|X) = S₀(t)^exp(Xβ),当β缩放后,原基线生存需调整为S₀_new(t) = S₀_old(t)^(1/scale_factor),可通过rms包的survfit()获取原基线生存后计算:# 获取原6个月模型的基线生存曲线 sf_6months <- survfit(score_6months) # 计算调整后的基线生存概率 sf_scaled <- list(time = sf_6months$time, surv = sf_6months$surv^(1/scale_factor))
- 缩放
关键注意事项
- 比例风险假设:必须确保两个模型均满足比例风险假设,否则缩放后的结果无实际意义,可通过
cox.zph()检验。 - 解释变化:缩放后系数的含义变为"单位协变量变化对应缩放后线性预测器的变化",需在报告中明确说明缩放因子及过程。
- 预测一致性:缩放后,使用
score_6months进行预测时,需将新数据的线性预测器乘以缩放因子,再结合调整后的基线生存计算生存概率。
内容的提问来源于stack exchange,提问作者Devanto
相关产品推荐
相关产品推荐

