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


10

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

JN Armitage och JH van der Meulen,“使用行政数据和皇家外科医学院的查尔森评分来鉴定手术患者的合并症”,《英国外科杂志》,第1卷。97,数字 5,ss。772-781,2010年下半年。

阿米蒂奇采用Logistic回归,但我不知道是否有可能使用来自生存包模式,survivalROC给这个是可能的暗示,但我无法弄清楚如何得到这工作与常规Cox回归。

如果有人向我展示如何在此示例中进行ROC分析,我将不胜感激:

library(survival)
data(veteran)

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

如果可能的话,我将感谢原始的c静态输出和一个漂亮的图表

谢谢!

更新资料

非常感谢您的回答。@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

我不熟悉validate函数和引导程序,但是在看了教授之后。弗兰克·哈雷尔(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”,但是我不确定validate函数中“ u = 60”参数的用途是什么。如果您能帮助我理解这些内容并确认我没有犯任何错误,将不胜感激。


2
我可能会看一下rms软件包及其cph()命令。
chl

2
index.corrected应该强调的是。这些是对未来可能表现的估计。 因为您没有阶层u=60validate所以不需要。如果您有地层,生存曲线会交叉,并且您需要指定一个特定的时间点以获取广义ROC区域。
Frank Harrell

Answers:


2

@chl指出了您问题的具体答案。“ rms”包的cph功能将产生Somers-D,可以将其转换为c-index。但是,Harrell(将c指数引入生物统计学实践)认为,将其作为评估预后指标的一般策略是不明智的,因为它对替代方案的区分能力很低。与其依靠外科文献作为方法学指导,不如在Harrell的著作《回归建模策略》或Steyerberg的《临床预测模型》中寻找积累的智慧。


4
感谢您的来信。我认为和对于描述单个预先指定的模型的预测歧视并不坏。但是正如您所说,他们没有能力做更多的事情。 ÇDxyC
Frank Harrell,

谢谢您的回答,我的情况是我要比较三个分数,并查看它们的表现。我没有时间研究Somers-D部分,一旦有时间我会回来的(我快速浏览了一下,没有发现有用的东西)。我还订购了@FrankHarrell书,“回归建模策略”,ISBN 13:978-0387952321,希望它能指导我进行选择。
Max Gordon

2
由于Dxy = 2 *(c- 0.5),因此给定Dxy的c的计算应该是微不足道的。
DWin

3

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


+1可引导我朝正确的方向发展。我刚刚完成了C统计,并且我要查看的更详细的分数具有0.4365081的C统计,而另一方具有0.4414625(我认为我应该计算0.5-Dxy / 2)。我花了相当长的时间对我的140 000个样本进行计算。我不得不将Bootstraps降低到10,但我不确定这会带来什么影响。我很期待阅读您的书(在邮件中),希望它能帮助我更好地理解方法论,并将C统计量与充足性指数进行比较。
Max Gordon

好。不查看预测值的分布,很难说出.44 vs.43是否有意义。
Frank Harrell

我知道很难对这样的数字发表评论。我将尝试研究分布。我对结果的主要解释是我的模型很少解释,即使差异很小,也可能不是很重要。在生存环境中期望得到的结果很有趣-达到0.8的值(就像我在我的问题中提到的分析中所做的那样)很遥远……但是我的生存再次是植入假体的生存时间,没有病人生存。他们还使用了逻辑回归来改变估计值。
Max Gordon

如果时间很重要或后续时间因受试者而异,则逻辑回归将不起作用。回到最初的问题,如果模型解释的变化很小,则预测的风险将具有狭窄的分布。
Frank Harrell

刚拿到你的书...我很快就了解了生存部分,但是当我在第20章尝试了您的案例研究时,却在impute(w,sz)部分遇到了一个错误:'variable sz没有一个names()属性”。我跟着chapt。8:用getHdata(prostate)加载数据框(在书中找不到网站),做了w <-transcan(〜sz + sg + ap + sbp + dbp +年龄+ wt + hg + ekg + pf + bm + hx,估算= T,已转换= T,imcat =“ tree”,数据=前列腺),但我在命名时没有找到任何东西……
Max Gordon
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.