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
, x
und y
sind stetig; z
ist 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.zph
Befehl 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üssten100 * 10 = 1000
verschiedene 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?
quelle
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!Antworten:
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ür2 × 2
cox.zph
Dies 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 (Funktionenrcorr.cens
undval.surv
) als auch das erneute Abtasten der internen Validierung (Funktionenvalidate
undcalibrate
) sind im R- Paket implementiertrms
Paket . Fallstudien für dierms
quelle
plot(cox.zph(fit[[1]], transform="km", global=TRUE))
, aber das ergabError 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?plot(cox.zph(...), df=2)
. Sehen Sie sich die Fallstudien in den Kursnotizen an, umrms
Beispiele zu finden, oder installieren Sie das Paket (das auch dasHmisc
Paket benötigt) und geben Sie die folgenden Befehle ein, um Hilfedateien aufzurufen:?cph
?validate.cph
?calibrate.cph
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.
quelle
cph
Ausgabe vorschlägt ?