我对 coxph() 和 predict(Surv()) 的使用有一些疑问。我知道我的问题有点长,也许我没有很好地解释自己,但任何意见或建议都值得赞赏。
我正在尝试为房屋屋顶维修制作 Cox PH 模型和预测。我有 5 个输入变量(协变量):
House_Age(也称为开始)、House_Price、Roof_Material_Grp_New、Land_Ownership_Status_Grp、Living_Status_Grp
顾名思义,前两个是数字变量,后三个是分类变量。我的问题是我想让 House_Age 危险取决于时间。我选择对 House_Age 的每三年进行一次“数据拆分”(因此 House_Age 变成变量 Start)——例如,在 7 年后发生事件的情况下,数据看起来像
Start Stop Event_01_Ts
0 3 0 (Censored)
3 3 0 (Censored)
6 1 1 (Event)
Start 等于 House_Age。正如我在对 Start 组的每个值的估计中看到的那样,直到大约 40 年似乎都存在线性相关性,因此我选择了最大 Start/House_Age 为 40 和线性关系
Cox_Mod_Lin <- coxph(Surv(Stop,Event_01_Ts) ~ Start+Roof_Material_Grp_New+House_Contract_Yen+Land_Ownership_Status_Grp+Living_Status_Grp,data=Abt_Roof_Ts_Mdl)
该模型很好,Start 变量的线性系数为 0.1916,指数值为 1.211 coef exp(coef) se(coef) z Pr(>|z|)
Start 1.916e-01 1.211e+00 6.817e-03 28.112 < 2e-16 ***
从孤立的 Start/House_Age 来看,危险每年增加 21% - 是否正确?我的问题是,现在我想预测 1、5 和 10 年的“修复”概率。首先,我尝试使用 survfit 和零向量作为输入来找到基线风险函数
Base <- survfit(Cox_Mod_Lin,Abt_Baseline,type='aalen')
Base_Time_Hz <- as.data.frame(cbind(Base$time,Base$cumhaz))
Base_Time_Hz_1yr <- Base_Time_Hz[which(Base_Time_Hz$Time==1),]
这里 Abt_Baseline 包含数字变量的零和组的零级组值。由此我发现时间=1、5 和 10(仅显示 1 年)的累积风险,并将其与使用 predict 函数找到的“lp”预测的指数相乘。
一年预测:
Pred_01<-Base_Time_Hz_1yr$Cumhaz*exp(predict(Cox_Mod_Lin,Abt_Roof_Score, type="lp"))
如果没有时间相关的输入,这将是可以的,但未来的危险会随着 Start (=House_Age) 变量的变化而变化。我知道 Start 的未来值(每年增加 1),所以我想我可以在预测期间以某种方式整合。所以我有两个主要问题:
- 这似乎是进行建模和(部分)预测的明智方式吗?
- 如果是 - 我如何在预测期内针对变化(增加)的 House_Age/Start 危险进行整合?
有谁能够帮我?