Я створив кілька регресійних моделей Кокса, і я хотів би побачити, наскільки добре працюють ці моделі, і я подумав, що, можливо, крива ROC або c-статистика можуть бути корисні аналогічно використанню цих статей:
Армітаж використовував логістичну регресію, але мені цікаво, чи можна використовувати модель з пакету виживання, 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" у валідаційній функції. Буду вдячний, якщо ви можете допомогти мені зрозуміти це і переконатися, що я не допустив жодних помилок.
index.corrected
це те, на чому слід підкреслити. Це оцінки можливих майбутніх результатів. u=60
не потрібен, validate
оскільки у вас немає верств. Якщо у вас були верстви, криві виживання можуть перетинатися, і вам потрібно вказати певний часовий момент для отримання узагальненої області ROC.
cph()
команду.