Wie kann ich logistische Regressions-Betas + Rohdaten verwenden, um Wahrscheinlichkeiten zu erhalten?

17

Ich habe ein Modell eingebaut (aus der Literatur). Ich habe auch die Rohdaten für die Vorhersagevariablen.

Welche Gleichung sollte ich verwenden, um Wahrscheinlichkeiten zu erhalten? Wie kombiniere ich Rohdaten und Koeffizienten, um Wahrscheinlichkeiten zu erhalten?

user333
quelle

Antworten:

15

Hier ist die Antwort des angewandten Forschers (mit dem Statistikpaket R).

Zuerst erstellen wir einige Daten, dh ich simuliere Daten für ein einfaches bivariates logistisches Regressionsmodell- :log(p1p)=β0+β1x

> set.seed(3124)
> 
> ## Formula for converting logit to probabilities 
> ## Source: http://www.statgun.com/tutorials/logistic-regression.html
> logit2prop <- function(l){exp(l)/(1+exp(l))}
> 
> ## Make up some data
> y <- rbinom(100, 1, 0.2)
> x <- rbinom(100, 1, 0.5)

Der Prädiktor xist eine dichotome Variable:

> x
  [1] 0 1 1 1 1 1 0 1 0 1 0 1 0 0 1 1 1 0 1 1 1 1 1 1 0 0 1 1 1 1 0 0 1 0 0 1 0 0 0 1 1 1 0 1 1 1 1 
 [48] 1 1 0 1 0 0 0 0 1 0 0 1 1 0 0 0 0 1 0 0 1 1 1 0 0 1 0 0 0 0 1 1 0 1 0 1 0 1 1 1 1 1 0 1 0 0 0
 [95] 1 1 1 1 1 0

Schätzen Sie anschließend den Achsenabschnitt ( ) und die Steigung ( ). Wie Sie sehen können, ist der und die Steigung ist .β0β1β0=0.8690β1=1.0769

> ## Run the model
> summary(glm.mod <- glm(y ~ x, family = "binomial"))

[...]

    Coefficients:
            Estimate Std. Error z value Pr(>|z|)   
(Intercept)  -0.8690     0.3304  -2.630  0.00854 **
x            -1.0769     0.5220  -2.063  0.03910 * 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

(Dispersion parameter for binomial family taken to be 1)

[...]

Drittens kann R, wie die meisten statistischen Pakete, die angepassten Werte, dh die Wahrscheinlichkeiten, berechnen. Ich werde diese Werte als Referenz verwenden.

> ## Save the fitted values
> glm.fitted <- fitted(glm.mod)

Viertens bezieht sich dieser Schritt direkt auf Ihre Frage: Wir haben die Rohdaten (hier: ) und wir haben die Koeffizienten ( und ). Nun berechnen wir die Protokolle und speichern diese angepassten Werte in :xβ0β1glm.rcdm

> ## "Raw data + coefficients" method (RDCM)
## logit = -0.8690 + (-1.0769) * x
glm.rdcm <- -0.8690 + (-1.0769)*x

Der letzte Schritt ist ein Vergleich der angepassten Werte basierend auf der R-Funktion fitted( glm.fitted) und meinem "handgemachten" Ansatz ( logit2prop.glm.rdcm). Meine eigene Funktion logit2prop(siehe erster Schritt) konvertiert Logs in Wahrscheinlichkeiten:

> ## Compare fitted values and RDCM
> df <- data.frame(glm.fitted, logit2prop(glm.rdcm))
> df[10:25,]
> df[10:25,]
   glm.fitted logit2prop.glm.rdcm.
10  0.1250000            0.1250011
11  0.2954545            0.2954624
12  0.1250000            0.1250011
13  0.2954545            0.2954624
14  0.2954545            0.2954624
15  0.1250000            0.1250011
16  0.1250000            0.1250011
17  0.1250000            0.1250011
18  0.2954545            0.2954624
19  0.1250000            0.1250011
20  0.1250000            0.1250011
21  0.1250000            0.1250011
22  0.1250000            0.1250011
23  0.1250000            0.1250011
24  0.1250000            0.1250011
25  0.2954545            0.2954624
Bernd Weiss
quelle
6
Beachten Sie, dass glm(y ~ x)Sie keine logistische Regression erhalten, die Sie einstellen müssen family=binomial(link="logit"). Beachten Sie, dass die Ausgabe sagt Dispersion parameter for gaussian family, nicht binomial family. Wenn Sie es richtig machen, werden fitted(glm.mod)tatsächlich die geschätzten Wahrscheinlichkeiten zurückgegeben, nicht die Logs. Du bekommst die Logs mit predict(glm.mod, type="link").
caracal
Aua! Ich habe das behoben. Vielen Dank, @caracal, dass du mich korrigiert hast! Das ist wirklich peinlich (es ist sogar noch peinlicher, da ich bereits in einem anderen SO-Thread die richtige Antwort gegeben habe ).
Bernd Weiss
1
Der Paketarm hat die Funktion invlogit, bei der es sich um Ihre Funktion logit2prop handelt.
Manoel Galdino
Hätten wir nicht genau die gleichen Zahlen für glm.fittedund erhalten sollen logit2prop.glm.rdcm.? Es gibt einige sehr kleine Unterschiede. Ich konnte nicht verstehen, warum wir in Ihrem Beispiel nicht genau die gleichen Zahlen haben. Wenn ich nachschaue; library(arm); data.frame(logit2prop(glm.rdcm), invlogit(glm.rdcm))liefert genau die gleichen Ergebnisse für logit2propund invlogit. Daher frage ich auch warum glm.fittedund invlogitgebe nicht genau die gleichen Zahlen zurück?
Erdogan CEVHER
20

f:xlogx1xg:xexpx1+expx

π

f(π)=β0+x1β1+x2β2+

πg

π=g(β0+x1β1+x2β2+)

Ocram
quelle
Wie wäre es mit einer ordinalen logistischen Regression? Was wäre dann die Logik?
user333
@ user333: Naja ... ich habe nicht viel mit ordinaler logistischer Regression gespielt ... aber ich denke, man verwendet die gleiche Linkfunktion. In jedem Fall ist die Logik dieselbe:
Kehre
Ja, aber woher weiß ich, welche Wahrscheinlichkeiten welchen Zielkategorien zugeordnet sind?
user333
@ user333, Ihre Frage betraf die logistische Regression. Wenn Sie auch Antworten zur ordinalen Regression wünschen, fügen Sie diese der Frage hinzu.
mpiktas