2017-03-16 6 views
1

Guten Tag passen,Coxph Prognosen nicht die Koeffizienten

ich reproduzierbaren Code schreiben könnte und wird sicherlich, wenn sich alle einig, dass etwas nicht in Ordnung ist, aber jetzt denke ich, meine Frage ist ganz einfach und wird jemand zeigen Sie mir die richtige Weg.

ich in einem Datensatz wie folgt arbeite:

created_as_free_user  t  c 
       <fctr> <int> <int> 
1     true 36  0 
2     true 36  0 
3     true  0  1 
4     true 28  0 
5     true  9  0 
6     true  0  1 
7     true 13  0 
8     true 19  0 
9     true  9  0 
10     true 16  0 

I ausgerüstet ist, ein Modell der Cox-Regression wie folgt aus:

fit_train = coxph(Surv(time = t,event = c) ~ created_as_free_user ,data = teste) 
summary(fit_train) 

Und erhalten:

Call: 
coxph(formula = Surv(time = t, event = c) ~ created_as_free_user, 
    data = teste) 

    n= 9000, number of events= 1233 

          coef exp(coef) se(coef)  z Pr(>|z|)  
created_as_free_usertrue -0.7205 0.4865 0.1628 -4.426 9.59e-06 *** 
--- 
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

         exp(coef) exp(-coef) lower .95 upper .95 
created_as_free_usertrue 0.4865  2.055 0.3536 0.6693 

Concordance= 0.511 (se = 0.002) 
Rsquare= 0.002 (max possible= 0.908) 
Likelihood ratio test= 15.81 on 1 df, p=7e-05 
Wald test   = 19.59 on 1 df, p=9.589e-06 
Score (logrank) test = 20.45 on 1 df, p=6.109e-06 

So weit, so gut. Nächster Schritt: Vorhersagen der Ergebnisse zu neuen Daten. Ich verstehe die verschiedenen Arten von Vorhersagen, die vorhersagen.coxph kann mir geben (oder zumindest ich denke, dass ich es tue). Lassen Sie uns die type = "lp" verwenden:

head(predict(fit_train,validacao,type = "lp"),n=20) 

Und erhalten:

 1   2   3   4   5   6   7   8   9   10 
-0.01208854 -0.01208854 -0.01208854 -0.01208854 -0.01208854 -0.01208854 -0.01208854 -0.01208854 -0.01208854 -0.01208854 
     11   12   13   14   15   16   17   18   19   20 
-0.01208854 -0.01208854 0.70842049 -0.01208854 -0.01208854 -0.01208854 -0.01208854 -0.01208854 -0.01208854 -0.01208854 

OK. Aber wenn ich mir die Daten anschauen, die ich zu schätzen, ich versuche:

# A tibble: 9,000 × 3 
    created_as_free_user  t  c 
       <fctr> <int> <int> 
1     true 20  0 
2     true 12  0 
3     true  0  1 
4     true 10  0 
5     true 51  0 
6     true 36  0 
7     true 44  0 
8     true  0  1 
9     true 27  0 
10     true  6  0 
# ... with 8,990 more rows 

Es macht mich zu verwirren ....

Die type = „lp“ ist wohl nicht, dass Sie die linearen Prognosen geben? Für diese Daten oben, die ich versuche zu schätzen, da die created_as_free_user Variable gleich wahr ist, bin ich falsch, die Typ = "lp" Vorhersage zu erwarten ist genau -0.7205 (der Koeffizient des obigen Modells)? Woher kommt der -0.01208854? Ich vermute, es ist eine Art Maßstabssituation, aber ich konnte die Antwort nicht online finden.

Mein letztes Ziel ist das h (t), das durch den Prädiktionstyp = "expected" angegeben wird, aber ich bin nicht so komfortabel damit, weil es diesen -0.01208854-Wert verwendet, den ich nicht vollständig verstehe.

Vielen Dank

Antwort

2

Der Abschnitt Details der in ?predict.coxph lautet:

Das Cox-Modell ein relativ Risikomodell ist; Vorhersagen vom Typ "linearer Prädiktor", "Risiko" und "Terme" beziehen sich alle auf die Probe, aus der sie stammen. Standardmäßig ist der Referenzwert für jeweils die mittlere Kovariate innerhalb von Schichten.

Um zu veranschaulichen, was dies bedeutet, können wir ein einfaches Beispiel betrachten.Einige gefälschte Daten:

test1 <- list(time=c(4,3,1,1,1), 
      status=c(1,1,1,0,0), 
      x=c(0,2,1,1,0)) 

Wir passen ein Modell und Ansicht Prognosen:

fit <- coxph(Surv(time, status) ~ x, test1) 
predict(fit, type = "lp") 
# [1] -0.6976630 1.0464945 0.1744157 0.1744157 -0.6976630 

Die Vorhersagen sind die gleichen wie:

(test1$x - mean(test1$x)) * coef(fit) 
# [1] -0.6976630 1.0464945 0.1744157 0.1744157 -0.6976630 

(Mit dieser Logik und einige Arithmetik können wir zurück aus Ihren Ergebnissen, dass Sie 8849 "trues" von 9000 Beobachtungen für Ihre created_as_free_user Variable haben.)

Verwandte Themen