Як зробити ROC-аналіз у R за допомогою моделі Кокса


10

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

JN Armitage och JH van der Meulen, "Виявлення супутньої захворюваності у хірургічних пацієнтів за допомогою адміністративних даних з Королівським коледжем хірургів Charlson Score", British Journal of Surgery, vol. 97, вип. 5, сс. 772-781, травень 2010 року.

Армітаж використовував логістичну регресію, але мені цікаво, чи можна використовувати модель з пакету виживання, survivalROC дає підказку, що це можливо, але я не можу зрозуміти, як змусити це працювати з регулярною регресією Кокса.

Буду вдячний, якщо хтось покаже мені, як зробити 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

Мені не знайомий з валідаційною функцією та завантаженням, але після того, як я подивився на проф. Відповідь Френка Харрела тут на R-help Я зрозумів, що це, мабуть, спосіб отримати Dxy. Довідка для перевірки стану:

... Кореляція рівня Dxy Somers для обчислення для кожного повторного вибору (це займає трохи більше часу, ніж статистика, заснована на ймовірності). Значення, що відповідають рядку Dxy, дорівнюють 2 * (C - 0,5), де 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 я зрозумів, що у мене повинен бути "surv = TRUE", якщо у мене є страти, але я не впевнений у тому, яка мета параметра "u = 60" у валідаційній функції. Буду вдячний, якщо ви можете допомогти мені зрозуміти це і переконатися, що я не допустив жодних помилок.


2
Я, певно, поглянув на пакет rms та його cph()команду.
chl

2
index.correctedце те, на чому слід підкреслити. Це оцінки можливих майбутніх результатів. u=60не потрібен, validateоскільки у вас немає верств. Якщо у вас були верстви, криві виживання можуть перетинатися, і вам потрібно вказати певний часовий момент для отримання узагальненої області ROC.
Френк Харрелл

Відповіді:


2

@chl вказав на конкретну відповідь на ваше запитання. Функція пакета 'rms' cphпризведе до створення Somers-D, який може тривіально перетворитися на c-індекс. Однак Гаррелл (який ввів c-індекс у біостатистичну практику) вважає це нерозумним як загальну стратегію оцінки прогностичних заходів, оскільки він має низьку силу для дискримінації серед альтернатив. Замість того, щоб посилатися на хірургічну літературу для своїх методичних вказівок, було б розумніше шукати накопичену мудрість у тексті Гаррела, "Стратегії моделювання регресії" або "Моделях клінічного прогнозування" Штейєрберга.


4
DxyC

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

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

3

χ2


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

Добре. Неважко сказати, чи значить .44 проти .43 багато, не дивлячись на розподіли передбачуваних значень.
Френк Харрелл

Я розумію, що важко коментувати такі номери. Я спробую розглянути розподіл. Моя основна інтерпретація результатів полягає в тому, що моя модель пояснюється дуже мало, і хоча є невелика різниця, це, мабуть, не дуже важливо. Було б цікаво, чого очікувати в умовах виживання - досягнення значення .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 = "дерево", дані = простата), але я нічого не знайшов при називанні ...
Макс Гордон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.