Interpretation und Validierung eines Cox-Regressionsmodells für proportionale Gefahren unter Verwendung von R in Klartext

13

Kann mir jemand mein Cox-Modell im Klartext erklären?

Ich habe das folgende Cox-Regressionsmodell mithilfe der Funktion an alle meine Daten angepasst cph. Meine Daten werden in einem Objekt namens gespeichert Data. Die Variablen w, xund ysind stetig; zist ein Faktor von zwei Ebenen. Die Zeit wird in Monaten gemessen. Bei einigen meiner Patienten fehlen Daten für die Variable z( Anmerkung : Ich habe den nachstehenden Vorschlag von Dr. Harrell gebührend zur Kenntnis genommen, diese Werte zu unterstellen, um ein Verzerren meines Modells zu vermeiden, und werde dies in Zukunft tun).

> fit <- cph(formula = Surv(time, event) ~ w + x + y + z, data = Data, x = T, y = T, surv = T, time.inc = 12)

Cox Proportional Hazards Model
Frequencies of Missing Values Due to Each Variable
Surv(time, event)    w    x    y    z 
                0    0    0    0   14 

                Model Tests          Discrimination 
                                            Indexes        
Obs       152   LR chi2      8.33    R2       0.054    
Events     64   d.f.            4    g        0.437    
Center 0.7261   Pr(> chi2) 0.0803    gr       1.548    
                Score chi2   8.07                      
                Pr(> chi2) 0.0891                      

                   Coef    S.E.   Wald Z   Pr(>|Z|)
         w      -0.0133  0.0503    -0.26     0.7914  
         x      -0.0388  0.0351    -1.11     0.2679  
         y      -0.0363  0.0491    -0.74     0.4600  
         z=1     0.3208  0.2540     1.26     0.2067

Ich habe auch versucht, die Annahme proportionaler Gefahren mit dem folgenden cox.zphBefehl zu testen , weiß aber nicht, wie ich die Ergebnisse interpretieren soll. Das Umgehen plot()des Befehls gibt eine Fehlermeldung aus.

 cox.zph(fit, transform="km", global=TRUE)
            rho chisq      p
 w      -0.1125 1.312 0.2520
 x       0.0402 0.179 0.6725
 y       0.2349 4.527 0.0334
 z=1     0.0906 0.512 0.4742
 GLOBAL      NA 5.558 0.2347

Erstes Problem

  • Kann mir jemand die Ergebnisse der obigen Ausgabe in einfachem Englisch erklären? Ich habe einen medizinischen Hintergrund und keine formelle Ausbildung in Statistik.

Zweites Problem

  • Wie von Dr. Harrell vorgeschlagen, möchte ich mein Modell intern validieren, indem ich 100 Iterationen einer 10-fachen Kreuzvalidierung unter Verwendung von durchführe rms Paket (soweit ich weiß, müssten 100 * 10 = 1000verschiedene Modelle erstellt und sie dann gebeten werden, die Überlebenszeiten vorherzusagen von Patienten, die sie noch nie gesehen hatten).

    Ich habe versucht, die validate Funktion wie gezeigt zu verwenden.

    > v1 <- validate(fit, method="crossvalidation", B = 10, dxy=T)
    > v1
          index.orig training    test optimism index.corrected  n
    Dxy      -0.2542  -0.2578 -0.1356  -0.1223         -0.1320 10
    R2        0.0543   0.0565  0.1372  -0.0806          0.1350 10
    Slope     1.0000   1.0000  0.9107   0.0893          0.9107 10
    D         0.0122   0.0128  0.0404  -0.0276          0.0397 10
    U        -0.0033  -0.0038  0.0873  -0.0911          0.0878 10
    Q         0.0155   0.0166 -0.0470   0.0636         -0.0481 10
    g         0.4369   0.4424  0.6754  -0.2331          0.6700 10

    Wie führt man das 100x Resampling durch? Ich denke, mein oben genannter Code führt die Kreuzvalidierung nur einmal durch.

  • Ich wollte dann wissen, wie gut mein Modell in der Vorhersage war. Ich habe folgendes versucht:

    > c_index <- abs(v1[1,5])/2 + 0.5
    > c_index
    [1] 0.565984

    Bedeutet das, dass mein Modell nur geringfügig besser ist, als eine Münze zu werfen?

Drittes Problem

Dr. Harrell weist darauf hin, dass ich für die kovariaten Effekte eine Linearität angenommen habe und dass die Anzahl der Ereignisse in meiner Stichprobe gerade so groß ist, dass sie für ein zuverlässiges Modell passen, wenn alle kovariaten Effekte zufällig linear sind.

  • Bedeutet dies, dass ich eine Art Interaktionsbegriff in mein Modell aufnehmen sollte? Wenn ja, welche Tipps?
Alexander
quelle
2
Ich habe einige wichtige Änderungen an meiner ersten Frage vorgenommen, etwa drei Stunden nachdem ich sie ursprünglich gestellt hatte. Ich habe versucht, Dr. Harrells sehr hilfreichen Rat zu folgen. Ich würde es immer noch sehr begrüßen, wenn jemand versuchen würde cph, mir die obige Ausgabe in einfachem Englisch zu erklären , oder mich auf einen Verweis verweisen würde, der dies tun würde. Dr. Harrell, vielen Dank für Ihre Hilfe!
Alexander

Antworten:

12

Betrachten Sie zunächst einige Dinge. Erstens schließen Sie zu viele Beobachtungen mit fehlenden Daten aus, was zu einer Verzerrung führt. Betrachten Sie die Mehrfachzuschreibung. Zweitens gibt es eine Plotmethode fürcox.zphDies ist nützlich bei der Beurteilung proportionaler Gefahren. Drittens haben Sie Linearität für die kovariaten Effekte angenommen. Viertens ist die Anzahl der Ereignisse in Ihrer Trainingsstichprobe kaum groß genug, um für ein zuverlässiges Modell zu passen, wenn alle kovariaten Effekte linear sind (was selten vorkommt). Und Ihre Testprobe müsste vielleicht 400 Ereignisse haben, bevor sie eine verlässliche Einschätzung der Vorhersagegenauigkeit liefert. Es ist nicht klar, ob Sie genug Daten hatten, um die Daten in zwei Teile aufzuteilen. Resampling-Validierung (100 Wiederholungen der 10-fachen Kreuzvalidierung oder Verwendung des Bootstraps) ist eine bessere Lösung. Sowohl Ihre ursprüngliche externe Validierung (Funktionen rcorr.censund val.surv) als auch das erneute Abtasten der internen Validierung (Funktionen validateund calibrate) sind im R- Paket implementiertrms Paket . Fallstudien für dierms2×2

Frank Harrell
quelle
1
Dr. Harrell, vielen Dank für Ihre Kommentare. Ich habe versucht zu tippen plot(cox.zph(fit[[1]], transform="km", global=TRUE)), aber das ergab Error in plot.cox.zph(cox.zph(fit[[1]], transform = "km", global = TRUE)) : Spline fit is singular, try a smaller degrees of freedom. Rufe ich diese Funktion falsch auf?
Alexander
1
Wenn ich meine Trainings- und Validierungsdaten kombiniere, habe ich 166 Beobachtungen mit 75 Ereignissen. Wie Sie vorgeschlagen haben, kann ich die Werte meiner Variablen "z" für meine 13 Beobachtungen, denen diese Daten fehlen, unterstellen, um dieses Problem zu beseitigen. Ich mag Ihren Vorschlag, eine 100x 10-fache Kreuzvalidierung durchzuführen. Wenn Sie Zeit haben, würde ich es wirklich begrüßen, wenn Sie einen konkreten Hinweis dazu geben könnten, wie Sie die rms-Pakete verwenden, um dies zu tun. In der Zwischenzeit werde ich Ihre Website weiter durchlesen. Ich würde gerne in Zukunft an Ihrem Kurs teilnehmen. Leider bin ich im Moment in Europa etwas zu weit weg!
Alexander
2
Für das Singularitätsproblem tun plot(cox.zph(...), df=2). Sehen Sie sich die Fallstudien in den Kursnotizen an, um rmsBeispiele zu finden, oder installieren Sie das Paket (das auch das HmiscPaket benötigt) und geben Sie die folgenden Befehle ein, um Hilfedateien aufzurufen:?cph ?validate.cph ?calibrate.cph
Frank Harrell
2
Danke nochmal für deine Hilfe! Dieses Wochenende habe ich Ihre Kursnotizen ausgedruckt und werde diese Woche damit verbringen, sie zu lesen und alle Fallstudien durchzuarbeiten.
Alexander
4

Der Ausgang der R cph - Funktion, basierend auf einem entsprechenden Beispiel wird in diesem einfach zu folgen erklärt Papier von J. Fox.

Ich würde dringend empfehlen, dieses Papier zu lesen, wenn Sie nicht bereits haben.

Zhubarb
quelle
1
Können Sie beschreiben, wie das Papier die Interpretation der cphAusgabe vorschlägt ?
Smillig
2
+1 Danke für den Hinweis und willkommen auf dieser Seite! Es wäre großartig, wenn Sie auch einen kurzen Überblick über den Inhalt des Papiers geben könnten, da wir nach Antworten suchen, die für sich allein stehen können.
Gala
Dieser Link ist nicht mehr vorhanden
Marcin Kosiński
1
Der Link socialsciences.mcmaster.ca/jfox/Books/Companion-1E/… funktioniert derzeit und scheint derselbe zu sein, auf den in dieser Antwort verwiesen wird.
Donnerstag,