Antworten:
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- :
> 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 x
ist 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 .
> ## 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 :glm.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
glm.fitted
und 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 logit2prop
und invlogit
. Daher frage ich auch warum glm.fitted
und invlogit
gebe nicht genau die gleichen Zahlen zurück?
glm(y ~ x)
Sie keine logistische Regression erhalten, die Sie einstellen müssenfamily=binomial(link="logit")
. Beachten Sie, dass die Ausgabe sagtDispersion parameter for gaussian family
, nichtbinomial family
. Wenn Sie es richtig machen, werdenfitted(glm.mod)
tatsächlich die geschätzten Wahrscheinlichkeiten zurückgegeben, nicht die Logs. Du bekommst die Logs mitpredict(glm.mod, type="link")
.