如何使用 Cox 模型在 R 中进行 ROC 分析

机器算法验证 r 生存
2022-03-17 19:04:36

我创建了一些 Cox 回归模型,我想看看这些模型的性能如何,我认为 ROC 曲线或 c 统计量可能与本文使用的类似:

JN Armitage och JH van der Meulen,“使用皇家外科学院查尔森评分的行政数据识别外科患者的共病”,英国外科杂志,卷。97,编号。5,不锈钢。772-781,2010 年 5 月。

Armitage 使用了逻辑回归,但我想知道是否可以使用生存包中的模型,survivalROC暗示这是可能的,但我不知道如何让它与常规 Cox 回归一起使用。

如果有人能告诉我如何对这个例子进行 ROC 分析,我将不胜感激:

library(survival)
data(veteran)

attach(veteran)
surv <- Surv(time, status)
fit <- coxph(surv ~ trt + age + prior, data=veteran)
summary(fit)

如果可能的话,我会欣赏原始的 c-statics 输出和漂亮的图表

谢谢!

更新

非常感谢您的回答。@Dwin:我只是想确保在选择您的答案之前我已经理解了它。

根据DWin的建议,我理解的计算:

library(survival)
library(rms)
data(veteran)

fit.cph <- cph(surv ~ trt + age + prior, data=veteran, x=TRUE, y=TRUE, surv=TRUE)

# Summary fails!?
#summary(fit.cph)

# Get the Dxy
v <- validate(fit.cph, dxy=TRUE, B=100)
# Is this the correct value?
Dxy = v[rownames(v)=="Dxy", colnames(v)=="index.corrected"]

# The c-statistic according to the Dxy=2(c-0.5)
Dxy/2+0.5

我不熟悉验证功能和引导,但在看过 prof. Frank Harrel在 R-help 上的回答我认为这可能是获得 Dxy 的方法。验证状态的帮助:

...要在每次重新采样时计算 Somers 的 Dxy 等级相关性(这比基于似然的统计数据需要更长的时间)。对应于 Dxy 行的值等于 2 * (C - 0.5),其中 C 是 C 索引或一致性概率。

我想我主要是被这些列弄糊涂了。我认为更正的值是我应该使用的值,但我还没有真正理解验证输出:

      index.orig training    test optimism index.corrected   n
Dxy      -0.0137  -0.0715 -0.0071  -0.0644          0.0507 100
R2        0.0079   0.0278  0.0037   0.0242         -0.0162 100
Slope     1.0000   1.0000  0.2939   0.7061          0.2939 100
...

R-help 问题中,我了解到如果我有分层,我应该在 cph 中有“surv=TRUE”,但我不确定验证函数中“u=60”参数的目的是什么。如果您能帮助我理解这些并检查我没有犯任何错误,我将不胜感激。

2个回答

根据您的需要,将模型嵌入到更大的模型中并进行“块”似然比χ2测试附加变量的附加值会给你一个强大的测试。我的书谈到了由这种方法产生的指数(“充分性指数”)。

@chl 指出了您问题的具体答案。'rms' 包的cph函数将产生一个 Somers-D,它可以简单地转换成一个 c-index。然而,Harrell(将 c-index 引入生物统计实践)认为这作为评估预后措施的一般策略是不明智的,因为它在替代品之间的区分能力很低。与其依赖外科文献作为方法论指导,不如从 Harrell 的著作“回归建模策略”或 Steyerberg 的“临床预测模型”中寻找积累的智慧。