我有一个分层的考克斯模型,并希望预测的生存曲线,为特定的轮廓,基于该模型。
现在,因为我使用的是一个包含很多层的大型数据集,所以我只想对非常具体的阶层进行预测,以节省时间和内存。
survfit.coxph的帮助页声明:.如果新数据包含地层变量,则根据原始模型的指示层,每一行新数据将包含一条曲线。
当我运行下面的代码(其中的newdata确实包含层变量)时,我仍然可以得到对这两个层的预测,这与帮助页相矛盾。
df <- data.frame(X1 = runif(200),
X2 = sample(c("A", "B"), 200, replace = TRUE),
Ev = sample(c(0,1), 200, replace = TRUE),
Time = rexp(200))
testfit <- coxph( Surv(Time, Ev) ~ X1 + strata(X2), df)
out <- survfit(testfit, newdata = data.frame(X1 = 0.6, X2 = "A"))这里有什么我看不懂的东西吗?
发布于 2021-04-29 10:11:53
我不确定这是一个bug还是survival:::survfit.coxph中的一个特性。看起来,代码中的预期行为是只返回被请求的地层。在职能方面:
strata(X2)在包含newdata的环境中进行计算,结果将返回A。split曲线进入地层,但只有当result$surv是一个矩阵。在您的示例中,它不是矩阵。如果它不是一个bug,我就找不到任何关于它的预期使用的文档。也许值得给作者/维护人员写个便条。
maintainer("survival")
# [1] "Terry M Therneau <xxxxxxxx.xxxxx@xxxx.xxx>"发布于 2021-05-05 22:19:43
一些可能有帮助的评论:
survfit.coxph内部存在效率低下的问题,其中对原始数据集中的每个层计算基线危害,而不仅仅是针对请求的层(参见我对同一个github职位的贡献)。然而,这似乎并不是什么大问题(在拥有大约50万次观测、50%事件和1000个地层的数据集上进行测试),所需时间不到一分钟。- Select all observations you want predictions for
- use `lp <- predict(..., type='lp')` to get the linear predictor for all these observations
- use survfit only on the first observation: `survfit(fit, newdata = expand_grid(newdf, strat = strata_list))`
- Store the resulting survival estimates in a data.frame (or not, that's up to you)
- To calculate predicted survival for other observations, use the PH-assumption (see formula below). This invokes the overhead of `survfit.coxph` only once and if you focus on survival on only a few times (e.g. 5- and 10-year survival), you can reduce the computer time even more

https://stackoverflow.com/questions/67231786
复制相似问题