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

使用rms包校准Cox模型时出现下标越界错误求助

问题:rms包中calibrate()函数处理含frailty的Cox模型时报错

模型构建

使用rms包构建含frailty项的Cox模型:

rmsfit2 <- cph(Surv(time,stop, Lstate) ~ gender+momedu+sibs+L1.Spostureaway_re+
                 L1.Sgazeaw_re +  L1.Sgazepic_re+ frailty(id), x=TRUE, y=TRUE, surv = TRUE, data=data2step)

validate()运行正常

调用validate()进行bootstrap验证可正常执行:

validate(rmsfit2, method = "boot", B = 100)

返回结果:

index.orig training   test optimism index.corrected   n
Dxy       0.2711   0.2698 0.2671   0.0027          0.2684 100
R2        0.0582   0.0577 0.0562   0.0015          0.0568 100
Slope     1.0000   1.0000 0.9785   0.0215          0.9785 100
D         0.0122   0.0120 0.0117   0.0003          0.0119 100
U        -0.0001  -0.0001 0.0001  -0.0001          0.0001 100
Q         0.0122   0.0121 0.0116   0.0004          0.0118 100
g         0.3162   0.3154 0.3066   0.0088          0.3075 100

calibrate()报错

调用calibrate()时触发下标越界错误:

calibrate(rmsfit2, B = 20)

错误信息:

Error in reliability[, "index.corrected"] : subscript out of bounds

问题原因及解决思路

可能原因

calibrate()函数内部会调用validate()获取可靠性校正参数,但针对含frailty的Cox模型,validate()返回的结果结构可能不符合calibrate()的预期——具体是reliability数据框未生成index.corrected列,导致下标访问失败。这可能是rms包处理frailty模型时的兼容性问题,或是bootstrap过程中部分迭代的结果异常导致结构缺失。

解决思路

  1. 升级rms包:检查当前rms版本,安装最新版(install.packages("rms")),旧版本可能存在frailty模型与calibrate()的兼容bug。
  2. 更换验证方法:将calibrate()的验证方法从bootstrap改为交叉验证,比如:
    calibrate(rmsfit2, method = "crossvalidation", B = 10)
    
  3. 手动执行校准流程:
    • 从模型中提取预测生存概率(比如指定时间点,用survfit(rmsfit2, newdata = data2step))
    • 将预测值分位数分组,计算每组的实际生存概率与预测概率的差异
    • 用绘图工具(如ggplot2)手动绘制校准曲线
  4. 检查bootstrap迭代的稳定性:增大B值(比如设为50),避免因迭代次数过少导致结果结构异常;或在validate()中指定更严格的参数,确保返回完整的校正指标后,再手动传入calibrate()(部分版本的calibrate()支持传入预计算的validate结果)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 22:15:51