Stworzyłem kilka modeli regresji Coxa i chciałbym zobaczyć, jak dobrze działają te modele, i pomyślałem, że być może krzywa ROC lub statystyka c mogą być przydatne podobnie jak w przypadku tych artykułów:
Armitage zastosował regresję logistyczną, ale zastanawiam się, czy można użyć modelu z pakietu przetrwania, survivalROC daje wskazówkę, że jest to możliwe, ale nie mogę wymyślić, jak to zrobić, aby działało z regresją Coxa.
Byłbym wdzięczny, gdyby ktoś pokazał mi, jak przeprowadzić analizę ROC na tym przykładzie:
library(survival)
data(veteran)
attach(veteran)
surv <- Surv(time, status)
fit <- coxph(surv ~ trt + age + prior, data=veteran)
summary(fit)
Jeśli to możliwe, doceniłbym zarówno wyjściową statystykę c, jak i ładny wykres
Dzięki!
Aktualizacja
Dziękuję bardzo za odpowiedzi. @Dwin: Chciałbym mieć pewność, że zrozumiałem to przed wybraniem odpowiedzi.
Obliczenia, jakie rozumiem, zgodnie z sugestią DWina:
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
Nie jestem zaznajomiony z funkcją sprawdzania poprawności i ładowaniem, ale po przyjrzeniu się prof. Odpowiedź Franka Harrela tutaj na R-help Pomyślałem, że to prawdopodobnie sposób na zdobycie Dxy. Pomoc w sprawdzaniu poprawności stanów:
... Korelacja rang Somxa do obliczenia przy każdym ponownym próbkowaniu (zajmuje to nieco więcej czasu niż statystyki oparte na prawdopodobieństwie). Wartości odpowiadające wierszowi Dxy są równe 2 * (C - 0,5), gdzie C jest wskaźnikiem C lub prawdopodobieństwem zgodności.
Chyba najbardziej wprawiają mnie w zakłopotanie kolumny. Doszedłem do wniosku, że należy użyć poprawionej wartości, ale tak naprawdę nie zrozumiałem poprawnego wyniku:
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
...
W pytaniu R-help zrozumiałem, że powinienem mieć „surv = TRUE” w cph, jeśli mam warstwy, ale nie jestem pewien, jaki jest cel parametru „u = 60” w funkcji sprawdzania poprawności. Byłbym wdzięczny, gdybyś pomógł mi je zrozumieć i sprawdzić, czy nie popełniłem żadnych błędów.
index.corrected
należy podkreślić. Są to szacunki prawdopodobnych przyszłych wyników. u=60
nie jest potrzebne, validate
ponieważ nie masz warstw. Jeśli posiadasz warstwy, krzywe przeżycia mogą się krzyżować i musisz określić konkretny punkt czasowy, aby uzyskać uogólniony obszar ROC.
cph()
komendę.