coxph 和 cph 函数之间生存概率估计的数值差异

Numerical Differences in Survival Probability Estimates between coxph and cph Functions

提问人:Linda A 提问时间:11/17/2023 更新时间:11/17/2023 访问量:33

问:

我目前正在研究从 Cox 比例风险模型中获取生存概率。最初,我使用了 coxph 函数,但对于大数据,在预测数据中所有不同个体的所有时间点时,它被证明很慢。我尝试使用 rms 包中的 cph 函数,这显着提高了计算速度。 但是,我注意到两种方法之间的预测概率略有不同。具体来说,在较小的时间点,差异最多约为小数点后 5 位,而在较高的时间点,它们最多可以达到小数点后 2 位。我将参数设置为相同,甚至获得了相似的系数估计值。

以下是这两个函数的代码:

从 coxph 函数:

S_t <- coxph(Surv(time = Y, event = d) ~ ns(age)+ns(psa)+tstage+deyo+gs+insurance+income+education+race, ties=“breslow”, data = data)

S_t_pred.obj <- survfit(S_t, stype=1, newdata=X, se.fit = FALSE)

S_t_pred.sum <- summary(S_t_pred.obj, times=Y, extend = TRUE)$surv

从 cph 函数:

S_t1 <- cph(Surv(time = Y, event = d) ~ ns(age)+ns(psa)+tstage+deyo+gs+insurance+income+education+race, method=“breslow”, data = data, surv=T)

S_t_pred.sum1 <- survest(S_t1, stype=1, times=Y, newdata=X, se.fit = FALSE, extend = TRUE)$surv

我将不胜感激任何关于为什么会发生这些差异的见解或指导。感谢您抽出宝贵时间接受采访。

R 生存分析 COX-回归生存 RMS

评论

1赞 jpsmith 11/17/2023
你试过这个模型吗?默认值为 TRUE,在 cph 中,默认值为不定义集群级别变量。这个问题是不可重现的,所以我无法测试这是否是原因。robust = TRUEcph()coxphFALSE

答:

1赞 jared_mamrot 11/17/2023 #1

查看每个函数(https://github.com/harrelfe/rms/blob/master/R/cph.s / https://github.com/cran/survival/blob/master/R/coxph.R)的源代码,您可以调整一些选项以获得相同的输出,例如

library(survival)
library(survminer)
# install.packages("rms")
library(rms, quietly = TRUE)

fit <- coxph(Surv(time, status) ~ age, data = lung, ties = "breslow")
fit$var
#>              [,1]
#> [1,] 8.460386e-05

fit2 <- cph(Surv(time, status) ~ age, data = lung, method = "breslow")
fit2$var
#>              age
#> age 8.460363e-05

fit3 <- cph(Surv(time, status) ~ age, data = lung, method = "breslow", singular.ok = TRUE, eps = 1e-6)
fit3$var
#>              age
#> age 8.460386e-05

创建于 2023-11-17,使用 reprex v2.0.2

这适用于您的实际数据吗?

评论

0赞 Linda A 11/21/2023
这个解决方案对我不起作用。我关心的是预测的生存概率,而不是方差。我设置了 se.fit = FALSE,因此甚至没有计算方差-协方差矩阵。
0赞 jared_mamrot 11/21/2023
这是有道理的;如果可以的话,请编辑您的问题以使其可重现,我会看看是否有时间时能找出解决方案。我很确定这是“可以解决的”,所以如果我无法弄清楚,我会悬赏它,有人会想出一个解决方法