Я создал несколько моделей регрессии Кокса, и мне хотелось бы посмотреть, насколько хорошо работают эти модели, и я подумал, что, возможно, ROC-кривая или c-статистика могут быть полезны, как в этой статье:
Армитидж использовал логистическую регрессию, но мне интересно, если возможно использовать модель из пакета выживания, наЦИА 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» в функции проверки. Я был бы признателен, если бы вы помогли мне понять это и убедиться, что я не допустил ошибок.
cph()
команду.index.corrected
это то, что следует подчеркнуть. Это оценки вероятных будущих результатов.u=60
не нужен,validate
так как у вас нет слоев. Если у вас были страты, кривые выживаемости могут пересекаться, и вам нужно указать конкретный момент времени для получения обобщенной области ROC.Ответы:
@chl указал на конкретный ответ на ваш вопрос. Функция пакета 'rms'
cph
создаст Somers-D, который можно легко преобразовать в c-индекс. Тем не менее, Харрелл (который ввел c-индекс в биостатистическую практику) считает, что это неразумно в качестве общей стратегии оценки прогностических показателей, поскольку он обладает низкой способностью различать альтернативы. Вместо того, чтобы полагаться на хирургическую литературу в качестве методологического руководства, было бы разумнее искать накопленную мудрость в тексте Харрелла «Стратегии регрессионного моделирования» или в «Штейербергских моделях клинического прогнозирования».источник
В зависимости от ваших потребностей, встраивание модели в более крупную модель и выполнение теста «chunk» для правдоподобия для добавленной стоимости дополнительных переменных даст вам мощный тест. Моя книга рассказывает об индексе, возникающем из этого подхода («индекс адекватности»).χ2
источник