Ich habe einige Cox-Regressionsmodelle erstellt und möchte sehen, wie gut diese Modelle funktionieren. Ich dachte, dass möglicherweise eine ROC-Kurve oder eine c-Statistik nützlich sein könnte, ähnlich wie in diesem Artikel:
Armitage hat die logistische Regression verwendet, aber ich frage mich, ob es möglich ist, ein Modell aus dem Überlebenspaket zu verwenden. Das SurvivalROC gibt einen Hinweis darauf, dass dies möglich ist, aber ich kann nicht herausfinden, wie dies mit einer regulären Cox-Regression funktioniert.
Ich wäre dankbar, wenn mir jemand zeigen würde, wie man eine ROC-Analyse an diesem Beispiel durchführt:
library(survival)
data(veteran)
attach(veteran)
surv <- Surv(time, status)
fit <- coxph(surv ~ trt + age + prior, data=veteran)
summary(fit)
Wenn möglich, würde ich sowohl die rohe C-Statik-Ausgabe als auch eine schöne Grafik schätzen
Vielen Dank!
Aktualisieren
Vielen Dank für die Antworten. @Dwin: Ich möchte nur sichergehen, dass ich es richtig verstanden habe, bevor ich Ihre Antwort auswähle.
Die Berechnung, wie ich sie verstehe, entspricht dem Vorschlag von 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
Ich bin mit der Validierungsfunktion und dem Bootstrapping nicht vertraut, aber nachdem ich mir prof angesehen habe. Frank Harrels Antwort hier auf R-Hilfe Ich dachte mir, dass es wahrscheinlich der Weg ist, den Dxy zu bekommen. Die Hilfe zur Validierung von Zuständen:
... Somers 'Dxy-Rangkorrelation, die bei jedem Resample berechnet werden muss (dies dauert etwas länger als die Wahrscheinlichkeitsstatistik). Die Werte, die der Zeile Dxy entsprechen, sind gleich 2 * (C - 0,5), wobei C der C-Index oder die Konkordanzwahrscheinlichkeit ist.
Ich glaube, die Spalten verwirren mich meistens. Ich dachte mir, dass der korrigierte Wert derjenige ist, den ich verwenden sollte, aber ich habe die Validierungsausgabe nicht wirklich verstanden:
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
...
In der R-Hilfe-Frage habe ich verstanden, dass ich "Surv = TRUE" im cph haben sollte, wenn ich Schichten habe, aber ich bin mir nicht sicher, was der Zweck des Parameters "u = 60" in der Validierungsfunktion ist. Ich wäre Ihnen dankbar, wenn Sie mir helfen könnten, diese zu verstehen und zu überprüfen, ob ich keine Fehler gemacht habe.
index.corrected
ist das, was betont werden sollte. Dies sind Schätzungen der wahrscheinlichen zukünftigen Leistung. u=60
wird nicht benötigt, validate
da Sie keine Schichten haben. Wenn Sie Schichten hatten, können sich Überlebenskurven kreuzen, und Sie müssen einen bestimmten Zeitpunkt angeben, um den verallgemeinerten ROC-Bereich zu erhalten.
cph()
Befehl ansehen .