如何用 R 估计 Cox 模型中的基线风险函数

机器算法验证 r 生存 cox模型
2022-01-18 01:02:51

我需要在时间相关的 Cox 模型λ0(t)

λ(t)=λ0(t)exp(Z(t)β)

当我参加生存课程时,我记得累积危险函数的直接导数()不是一个好的估计器,因为 Breslow 估计器给出了一个阶跃函数。λ0(t)dt=dΛ0(t)

那么,R中有什么函数可以直接使用吗?或者关于这个主题的任何参考?

我不确定是否值得提出另一个问题,所以我只是添加一些背景知识,为什么基线危险函数对我很重要。下面的公式估计了一个对象的生存时间大于另一个对象的概率。在 Cox 模型设置下,需要基线风险函数λ0(t)

P(T1>T2)=0S1(t)dS2(t)=0S1(t)S2(t)λ2(t)dt

2个回答

Cox 模型被明确设计为能够估计风险比,而无需估计基线风险函数。这是一个优势和一个弱点。优点是你不能在你没有估计的函数中犯错误。这是一种真正的力量,也是人们将其称为“半参数”的原因,这在很大程度上是其受欢迎程度的原因。然而,这也是一个真正的弱点,因为一旦你想知道风险比以外的东西,你通常需要基线风险函数,这违背了 Cox 模型的目的。

所以我倾向于只在我对风险比感兴趣时才使用 Cox 模型。如果我想知道其他事情,我通常会转向其他模型,比如这里讨论的模型:http: //www.stata.com/bookstore/flexible-parametric-survival-analysis-stata/

可以使用“basehaz”函数在 R 中估计基线风险函数。“帮助”文件指出它是“预测生存”功能,但显然不是。如果检查代码,显然是survfit对象的累积风险函数。更愚蠢的是,默认设置是centered=TRUEa) 不是基线危险函数(顾名思义),并且 b) 采用在任何实际意义上都被广泛认为是有效的预测。

对于你之前的观点:是的,这个函数使用了 step 函数。您可以使用平滑将该输出转换为风险函数。最糟糕的是,该预测的不确定区间是多少?如果你能得到它,你可能会得到菲尔兹奖章。我认为我们甚至不知道自举是否有效。

举个例子:

set.seed(1234)
x <- rweibull(1000, 2, 3)
coxfit <- coxph(Surv(x) ~ 1)
bhest <- basehaz(coxfit)
haz <- exp(diff(bhest[, 1])*diff(bhest[, 2]))
time <- (bhest[-1,2] + bhest[-1000, 2])/2
b <- 2^-3

curve(3*b*x, from=0, to=max(x), xlab='Survival time', ylab='Weibull hazard')
points(t <- bhest[-1,2], h <- diff(bhest[, 1])/diff(bhest[, 2]), col='grey')
smooth <- loess.smooth(t, h)
lines(smooth$x, smooth$y, col='red')
legend('topright', lty=c(1,1,0), col=c('black', 'red', 'grey'), pch=c(NA,NA,1), c('Actual hazard fun', 'Smoothed hazard fun', 'Stepped discrete-time hazards'), bg='white')

在此处输入图像描述