R 从Cox-PH模型预测概率

R 从Cox-PH模型预测概率,r,survival-analysis,cox-regression,R,Survival Analysis,Cox Regression,我试图使用cox模型来预测时间(即停止)3后的失效概率 bladder1请阅读predict.coxph的帮助页面。这些都不应该是概率。一组特定协变量的线性预测值是相对于假设(很可能不存在)情况的对数风险比,以及所有预测值的平均值。“预期”最接近概率,因为它是一个预测的事件数,但它需要指定时间,然后除以观察开始时的风险数 对于帮助页面上提供的predict示例,您可以看到预测事件的总数接近实际数量: > sum(predict(fit,type="expected"), na.rm=TRU

我试图使用cox模型来预测时间(即停止)3后的失效概率


bladder1请阅读
predict.coxph
的帮助页面。这些都不应该是概率。一组特定协变量的线性预测值是相对于假设(很可能不存在)情况的对数风险比,以及所有预测值的平均值。“预期”最接近概率,因为它是一个预测的事件数,但它需要指定时间,然后除以观察开始时的风险数

对于帮助页面上提供的
predict
示例,您可以看到预测事件的总数接近实际数量:

> sum(predict(fit,type="expected"), na.rm=TRUE)
[1] 163

> sum(lung$status==2)
[1] 165
我怀疑您可能希望使用
survfit
函数,因为事件概率是1-生存概率

?survfit.coxph
类似问题的代码如下所示:

既然您建议使用bladder1数据集,那么这就是指定时间为5的代码

 summary(survfit(coxmodel), time=5)
#------------------
Call: survfit(formula = coxmodel)

 time n.risk n.event survival std.err lower 95% CI upper 95% CI
    5    302      26    0.928  0.0141        0.901        0.956
它将以列表的形式返回,生存预测作为名为
$surv
的列表元素:

> str(summary(survfit(coxmodel), time=5))
List of 14
 $ n       : int 340
 $ time    : num 5
 $ n.risk  : num 302
 $ n.event : num 26
 $ conf.int: num 0.95
 $ type    : chr "right"
 $ table   : Named num [1:7] 340 340 340 112 NA 51 NA
  ..- attr(*, "names")= chr [1:7] "records" "n.max" "n.start" "events" ...
 $ n.censor: num 19
 $ surv    : num 0.928
 $ std.err : num 0.0141
 $ lower   : num 0.901
 $ upper   : num 0.956
 $ cumhaz  : num 0.0744
 $ call    : language survfit(formula = coxmodel)
 - attr(*, "class")= chr "summary.survfit"
> summary(survfit(coxmodel), time=5)$surv
[1] 0.9282944

谢谢你的回答!是否仍要指定预期类型的后续时间?谢谢您的编辑!这给了我最终解决方案的正确方向。如果类型为'expected',我们可以将每个预测除以总和(163)并将其视为概率吗?我认为您需要在特定数据集上发布此类计算的示例,以便找到您想要的结果。您可能希望对导出的概率求和,以查看它们与完整数据集的匹配程度。summary(survfit(coxmodel,newdata))提供原始模型/数据的时间段概率,而不是新数据。因此survfit对处理新数据持怀疑态度
> str(summary(survfit(coxmodel), time=5))
List of 14
 $ n       : int 340
 $ time    : num 5
 $ n.risk  : num 302
 $ n.event : num 26
 $ conf.int: num 0.95
 $ type    : chr "right"
 $ table   : Named num [1:7] 340 340 340 112 NA 51 NA
  ..- attr(*, "names")= chr [1:7] "records" "n.max" "n.start" "events" ...
 $ n.censor: num 19
 $ surv    : num 0.928
 $ std.err : num 0.0141
 $ lower   : num 0.901
 $ upper   : num 0.956
 $ cumhaz  : num 0.0744
 $ call    : language survfit(formula = coxmodel)
 - attr(*, "class")= chr "summary.survfit"
> summary(survfit(coxmodel), time=5)$surv
[1] 0.9282944