So führen Sie eine ROC-Analyse in R mit einem Cox-Modell durch


10

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:

JN Armitage und JH van der Meulen, "Identifizierung der Komorbidität bei chirurgischen Patienten unter Verwendung von Verwaltungsdaten mit dem Charlson Score des Royal College of Surgeons", British Journal of Surgery, vol. 97, num. 5, ss. 772-781, Maj 2010.

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.


2
Ich würde mir wahrscheinlich das RMS- Paket und seinen cph()Befehl ansehen .
Chl

2
index.correctedist das, was betont werden sollte. Dies sind Schätzungen der wahrscheinlichen zukünftigen Leistung. u=60wird nicht benötigt, validateda 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.
Frank Harrell

Antworten:


2

@chl hat auf eine bestimmte Antwort auf Ihre Frage hingewiesen. Die Funktion des 'rms'-Pakets cpherzeugt ein Somers-D, das trivial in einen c-Index umgewandelt werden kann. Harrell (der den c-Index in die biostatistische Praxis eingeführt hat) ist jedoch der Ansicht, dass dies als allgemeine Strategie zur Bewertung prognostischer Maßnahmen unklug ist, da er nur eine geringe Fähigkeit zur Unterscheidung zwischen Alternativen aufweist. Anstatt sich für Ihre methodische Anleitung auf die chirurgische Literatur zu verlassen, wäre es klüger, die gesammelte Weisheit in Harrells Text "Regressionsmodellierungsstrategien" oder Steyerbergs "Klinische Vorhersagemodelle" zu suchen.


4
Danke für den Hinweis. Ich denke, dass und nicht schlecht sind, um die prädiktive Diskriminierung eines einzelnen vorgegebenen Modells zu beschreiben. Aber wie Sie sagten, fehlt ihnen die Kraft, mehr als das zu tun. C.DxyC
Frank Harrell

Vielen Dank für Ihre Antworten. Meine Situation ist, dass ich drei verschiedene Ergebnisse habe, die ich vergleichen und sehen möchte, wie sie funktionieren. Ich hatte keine Zeit, mich mit dem Somers-D-Teil zu befassen, und ich werde zurückkommen, sobald ich Zeit hatte (ich hatte einen kurzen Blick darauf und fand nichts Nützliches). Ich habe auch das @ FrankHarrell-Buch "Regression Modeling Strategies", ISBN 13: 978-0387952321, bestellt und hoffe, dass es mich bei meinen Entscheidungen unterstützt.
Max Gordon

2
Da Dxy = 2 * (c - 0,5) ist, sollte die Berechnung von c bei gegebenem Dxy trivial sein.
DWin

3

Abhängig von Ihren Anforderungen erhalten Sie einen leistungsstarken Test, wenn Sie ein Modell in ein größeres Modell einbetten und einen "Chunk" -Likelihood-Ratio- Test für den Mehrwert der zusätzlichen Variablen durchführen. Mein Buch spricht von einem Index, der sich aus diesem Ansatz ergibt (dem "Angemessenheitsindex").χ2


+1, um mich in die richtige Richtung zu führen. Ich habe gerade die C-Statistik beendet und die detailliertere Bewertung, die ich betrachte, hatte eine C-Statistik von 0,4365081, während die andere 0,4414625 hatte (ich denke, ich sollte in meinem Fall 0,5-Dxy / 2 zählen). Ich habe eine ganze Weile gebraucht, um die Berechnung für meine 140 000-Stichprobe durchzuführen. Ich musste die Bootstraps auf 10 senken und bin mir nicht sicher, wie sich das auswirkt. Ich freue mich darauf, Ihr Buch zu lesen (es ist in der Mail) und hoffe, dass es mir hilft, die Methodik besser zu verstehen und die C-Statistik mit dem Angemessenheitsindex zu vergleichen.
Max Gordon

Gut. Es ist nicht leicht zu sagen, ob .44 vs. .43 viel bedeutet, ohne die Verteilungen der vorhergesagten Werte zu betrachten.
Frank Harrell

Ich verstehe, dass es schwierig ist, solche Zahlen zu kommentieren. Ich werde versuchen, die Verteilung zu untersuchen. Meine Hauptinterpretation des Ergebnisses ist, dass mein Modell nur sehr wenig erklärt, und obwohl es einen kleinen Unterschied gibt, ist es wahrscheinlich nicht sehr wichtig. Es wäre interessant, was in einer Überlebensumgebung zu erwarten ist - ein Wert von 0,8 zu erreichen, wie sie es in der Analyse getan haben, auf die ich in meiner Frage verwiesen habe, scheint ziemlich weit weg zu sein ... aber andererseits ist mein Überleben das Überleben einer implantierten Prothese und nicht geduldiges Überleben. Sie verwendeten auch eine logistische Regression, die möglicherweise die Schätzung ändert.
Max Gordon

Die logistische Regression würde nicht funktionieren, wenn die Zeit wichtig ist oder die Nachbeobachtungszeit je nach Thema variiert. Zurück zur ursprünglichen Frage: Die vorhergesagten Risiken sind eng verteilt, wenn das Modell nur sehr geringe Abweichungen erklärt.
Frank Harrell

Ich habe gerade Ihr Buch bekommen ... Ich hatte eine schnelle Sperre für den Überlebensteil, aber wenn ich Ihre Fallstudie in Kapitel 20 ausprobiere, erhalte ich eine Fehlermeldung im Teil "impute" (w, sz): 'Variable sz hat nicht ein Attribut names () '. Ich folgte Kapitel. 8: lud den Datenrahmen mit getHdata (Prostata) (konnte die Website im Buch nicht finden), machte den w <- Transcan (~ sz + sg + ap + sbp + dbp + Alter + wt + hg + ekg + pf +) bm + hx, unterstellt = T, transformiert = T, imcat = "Baum", Daten = Prostata), aber ich habe nichts über die Benennung gefunden ...
Max Gordon
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.