如何使用 Cox 回归的时间相关协变量进行预测

机器算法验证 r cox模型 时变协变量
2022-04-03 15:04:18

我使用包生存的函数 survSplit 了解了 R 中 Cox 回归中的时间相关协变量。我将其用作不遵循 Cox 比例假设的协变量的交互项,该假设工作正常。

现在的问题是,我想对新的数据点进行预测,但我怎么能做到这一点,因为我不知道它们能存活多久?我如何知道在我的计算中使用哪个时间值?如果有帮助,我希望计算一年生存的概率。此外,由于某些患者将在数据集中重复,我如何计算校准/区分?

代码:

rm(list = ls(all=T))
library("rms")
library("pec")
data(veteran)

vet2 <- survSplit(Surv(time, status) ~ ., data= veteran, cut=c(90, 180),
                  episode= "tgroup", id="id")
ddist <- datadist(vet2); options(datadist='ddist')
vfit2 <- cph(Surv(tstart, time, status) ~ trt + prior + karno*strat(tgroup), data=vet2,surv = T,X=T,Y=T)
predictSurvProb(vfit2,newdata=vet2[vet2$id==2,],times = c(121,190))
2个回答

使用 Cox 模型计算预测概率

有一种方法可以从 Cox 模型中获得预测,因为时间 ( ) 的生存概率取决于您的 cox 模型,如下所示:tS(t)

S(t)=eH0(t)exp(LP)

在这个公式中H0(t)被称为时间的基线风险t; LP是线性预测器。

如果Xi是预测变量1,2,...,i在 Cox 模型中,是 Cox 模型中的相应系数,则线性预测器的计算如下:βi

LP=X1β1+X2β2+...+Xiβi

您可能已经熟悉什么是线性预测器,但为了清楚起见,我添加了它。

基线危险有点难以获得。为 0的个人的事件的危险。由于 cox 回归的工作方式,这个值没有被估计(看看这个 CV 问题或其他问题,它揭示了更多的光关于基线危险)。然而,在 R 中(我可以看到 OP 使用),在生存包中有一个名为“basehaz()”的函数,它可以让您根据模型的拟合在特定时间点提取基线危险。如果您提取此基线风险,您可以为数据中的任何个人以及未见过的数据完成上述公式,只要您能够计算这些个人的线性预测变量。LP

发生事件或未发生事件的概率如果您想知道事件在时间的概率,只需从 1 中减去概率:tt

P(event|LP)=1S(t)=1eH0(t)exp(LP)

最后备注:请注意,basehaz 函数根据您的特定数据为您提供基线危险。因此,与系数的情况一样,由于过度拟合、偏差等,将其外推到新情况可能不会产生良好的拟合/预测。t

校准与判别

通过一年的预测概率和事件状态,您可以计算各种校准统计数据。

对于区分统计量(c-index),对于删失的响应变量,存在一种特定类型的等级相关性。在 R 中,Hmisc 包中的 rcorr.cens 函数可以为您提供它。

我不能说这些统计数据是否最适合您的研究,因为这主要取决于具体情况(例如,您是在为此设置构建一个新的第一个模型,还是与以前开发的模型进行比较?)

How do I know which time-value to use in my calculations? 

这不是您的模型可以回答您的问题。你是如何选择分界点的?

Cox-PH 模型的结果是每位患者随时间的生存分布。在没有时间依赖性的情况下,可以查看每位患者的总体风险,以比较患者之间的相对风险。由于时间依赖性,人们可以使用累积风险。

如果您对数据中的时间依赖性感兴趣,我建议您使用其他方法(例如随机森林生存),而不是临时修改的 Cox-PH。