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

如何对齐rms包中两个cph模型的线性预测器尺度与基线生存?

问题描述

使用rms包的cph()函数构建两个比例风险模型,用于推导药物反应预测得分:

  • score_baseline:仅包含预处理变量x、y
  • score_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相同的方差,即可对齐两者的尺度,同时调整基线生存估计。

具体操作步骤

  1. 计算两个模型线性预测器的标准差

    # 获取基线模型的线性预测器及标准差
    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)
    
  2. 计算缩放因子
    将score_6months的线性预测器缩放到与score_baseline同尺度,缩放因子为两者标准差的比值:

    scale_factor <- sd_baseline / sd_6months
    
  3. 缩放模型系数并调整基线生存

    • 缩放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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 03:23:42