Как сделать ROC-анализ в R с помощью модели Кокса


10

Я создал несколько моделей регрессии Кокса, и мне хотелось бы посмотреть, насколько хорошо работают эти модели, и я подумал, что, возможно, ROC-кривая или c-статистика могут быть полезны, как в этой статье:

JN Armitage och JH van der Meulen, «Идентификация сопутствующей патологии у хирургических пациентов с использованием административных данных с помощью шкалы Charlson Королевского колледжа хирургов», British Journal of Surgery, vol. 97, число 5, сс. 772-781, май 2010.

Армитидж использовал логистическую регрессию, но мне интересно, если возможно использовать модель из пакета выживания, наЦИА Survivage дает представление о том, что это возможно, но я не могу понять, как заставить это работать с обычной регрессией Кокса.

Буду признателен, если кто-нибудь покажет мне, как провести 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 и начальной загрузкой, но, посмотрев на проф. Ответ Фрэнка Харреля на R-help Я подумал, что это, вероятно, способ получить Dxy. Помощь для проверки состояния:

... Корреляция ранга 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-справке я понял, что у меня должно быть слово «Surv = TRUE» в cph, если у меня есть страты, но я не уверен, для чего предназначен параметр «u = 60» в функции проверки. Я был бы признателен, если бы вы помогли мне понять это и убедиться, что я не допустил ошибок.


2
Я бы, наверное, взглянул на пакет rms и его cph()команду.
— хл

2
index.correctedэто то, что следует подчеркнуть. Это оценки вероятных будущих результатов. u=60не нужен, validateтак как у вас нет слоев. Если у вас были страты, кривые выживаемости могут пересекаться, и вам нужно указать конкретный момент времени для получения обобщенной области ROC.
— Фрэнк Харрелл

Ответы:


2

@chl указал на конкретный ответ на ваш вопрос. Функция пакета 'rms' cphсоздаст Somers-D, который можно легко преобразовать в c-индекс. Тем не менее, Харрелл (который ввел c-индекс в биостатистическую практику) считает, что это неразумно в качестве общей стратегии оценки прогностических показателей, поскольку он обладает низкой способностью различать альтернативы. Вместо того, чтобы полагаться на хирургическую литературу в качестве методологического руководства, было бы разумнее искать накопленную мудрость в тексте Харрелла «Стратегии регрессионного моделирования» или в «Штейербергских моделях клинического прогнозирования».


4
Спасибо за примечание. Я думаю, что и не плохи для описания предиктивного различения одной предварительно заданной модели. Но, как вы сказали, им не хватает силы, чтобы делать больше, чем это. CDxyC
— Фрэнк Харрелл

Спасибо за ваши ответы, моя ситуация такова, что у меня есть три разных результата, которые я хочу сравнить и посмотреть, как они работают. У меня не было времени заглянуть в часть Somers-D, и я вернусь, как только у меня будет время (я быстро посмотрел и не нашел ничего полезного). Я также заказал книгу @FrankHarrell "Стратегии регрессионного моделирования", ISBN 13: 978-0387952321, и, надеюсь, она поможет мне в моем выборе.
— Макс Гордон

2
Поскольку Dxy = 2 * (c-0,5), вычисление c для данного Dxy должно быть тривиальным.
— DWin

3

В зависимости от ваших потребностей, встраивание модели в более крупную модель и выполнение теста «chunk» для правдоподобия для добавленной стоимости дополнительных переменных даст вам мощный тест. Моя книга рассказывает об индексе, возникающем из этого подхода («индекс адекватности»).χ2


+1 за руководство в правильном направлении. Я только что закончил делать C-статистику, и более детальная оценка, на которую я смотрю, имела C-статистику 0,4365081, в то время как у другой была 0,4414625 (я думаю, что я должен был считать 0,5-Dxy / 2 в моем случае). Я потратил много времени на расчеты на моем 140 000 образцов; Мне пришлось опустить бутстрепы до 10, и я не уверен, как это повлияет. Я с нетерпением жду чтения вашей книги (она есть в почте), и, надеюсь, она поможет мне лучше понять методологию и сравнить статистику С с индексом адекватности.
— Макс Гордон

Хорошо. Нелегко сказать, что .44 против .43 значит много, не глядя на распределение прогнозируемых значений.
— Фрэнк Харрелл

Я понимаю, что трудно комментировать такие цифры. Я постараюсь посмотреть в распределении. Моя основная интерпретация результата заключается в том, что моя модель мало что объясняет, и хотя есть небольшая разница, вероятно, она не так важна. Было бы интересно, чего ожидать в условиях выживания - достижение значения 0,8, как они сделали в анализе, на который я ссылаюсь в своем вопросе, кажется довольно далеко ... но опять же, мое выживание - это выживание имплантированного протеза и не выживание пациента. Они также использовали логистическую регрессию, которая, возможно, меняет оценку.
— Макс Гордон

Логистическая регрессия не будет работать, если время важно или время наблюдения варьируется между субъектами. Возвращаясь к первоначальному вопросу, прогнозируемые риски будут иметь узкое распределение, если модель объясняет очень незначительные отклонения.
— Фрэнк Харрелл

Только что получил вашу книгу ... У меня была быстрая блокировка в части выживания, но когда я опробую ваш пример из практики в главе 20, но я получаю ошибку в части вменения (w, sz): 'переменная sz не имеет атрибут names (). Я последовал за главой. 8: загрузил фрейм данных с помощью getHdata (простата) (не смог найти веб-сайт в книге), сделал w <- transcan (~ sz + sg + ap + sbp + dbp + age + wt + hg + ekg + pf + bm + hx, вмененный = T, преобразованный = T, imcat = "дерево", data = простата) но я ничего не нашел по именованию ...
— Макс Гордон
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.