Как сделать 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-индекс в биостатистическую практику) считает, что это неразумно в качестве общей стратегии оценки прогностических показателей, поскольку он обладает низкой способностью различать альтернативы. Вместо того, чтобы полагаться на хирургическую литературу в качестве методологического руководства, было бы разумнее искать накопленную мудрость в тексте Харрелла «Стратегии регрессионного моделирования» или в «Штейербергских моделях клинического прогнозирования».

Dwin
источник
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 = простата) но я ничего не нашел по именованию ...
Макс Гордон