我需要在时间相关的 Cox 模型
当我参加生存课程时,我记得累积危险函数的直接导数()不是一个好的估计器,因为 Breslow 估计器给出了一个阶跃函数。
那么,R中有什么函数可以直接使用吗?或者关于这个主题的任何参考?
我不确定是否值得提出另一个问题,所以我只是添加一些背景知识,为什么基线危险函数对我很重要。下面的公式估计了一个对象的生存时间大于另一个对象的概率。在 Cox 模型设置下,需要基线风险函数。
我需要在时间相关的 Cox 模型
当我参加生存课程时,我记得累积危险函数的直接导数()不是一个好的估计器,因为 Breslow 估计器给出了一个阶跃函数。
那么,R中有什么函数可以直接使用吗?或者关于这个主题的任何参考?
我不确定是否值得提出另一个问题,所以我只是添加一些背景知识,为什么基线危险函数对我很重要。下面的公式估计了一个对象的生存时间大于另一个对象的概率。在 Cox 模型设置下,需要基线风险函数。
Cox 模型被明确设计为能够估计风险比,而无需估计基线风险函数。这是一个优势和一个弱点。优点是你不能在你没有估计的函数中犯错误。这是一种真正的力量,也是人们将其称为“半参数”的原因,这在很大程度上是其受欢迎程度的原因。然而,这也是一个真正的弱点,因为一旦你想知道风险比以外的东西,你通常需要基线风险函数,这违背了 Cox 模型的目的。
所以我倾向于只在我对风险比感兴趣时才使用 Cox 模型。如果我想知道其他事情,我通常会转向其他模型,比如这里讨论的模型:http: //www.stata.com/bookstore/flexible-parametric-survival-analysis-stata/
可以使用“basehaz”函数在 R 中估计基线风险函数。“帮助”文件指出它是“预测生存”功能,但显然不是。如果检查代码,显然是survfit
对象的累积风险函数。更愚蠢的是,默认设置是centered=TRUE
a) 不是基线危险函数(顾名思义),并且 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')