Der von Ihnen verwendete Code schätzt mithilfe der glm
Funktion ein logistisches Regressionsmodell . Sie haben keine Daten angegeben, deshalb werde ich nur einige erfinden.
set.seed(1234)
mydat <- data.frame(
won=as.factor(sample(c(0, 1), 250, replace=TRUE)),
bid=runif(250, min=0, max=1000)
)
mod1 <- glm(won~bid, data=mydat, family=binomial(link="logit"))
Ein logistisches Regressionsmodell modelliert die Beziehung zwischen einer binären Antwortvariablen und in diesem Fall einem kontinuierlichen Prädiktor. Das Ergebnis ist eine logittransformierte Wahrscheinlichkeit als lineare Beziehung zum Prädiktor. In Ihrem Fall ist das Ergebnis eine binäre Antwort, die dem Gewinnen oder Nichtgewinnen beim Spielen entspricht, und sie wird durch den Wert des Einsatzes vorhergesagt. Die Koeffizienten von mod1
werden in protokollierten Quoten angegeben (die schwer zu interpretieren sind), gemäß:
logit ( p ) = log( p( 1 - p )) = β0+ β1x1
Um protokollierte Gewinnchancen in Wahrscheinlichkeiten umzuwandeln, können wir das Obige in übersetzen
p = exp( β0+ β1x1)( 1 + exp( β0+ β1x1) )
Mit diesen Informationen können Sie den Plot einrichten. Zunächst benötigen Sie einen Bereich der Prädiktorvariablen:
plotdat <- data.frame(bid=(0:1000))
Anschließend predict
können Sie anhand Ihres Modells Vorhersagen abrufen
preddat <- predict(mod1, newdata=plotdat, se.fit=TRUE)
Beachten Sie, dass die angepassten Werte auch über abgerufen werden können
mod1$fitted
Durch die Angabe erhalten se.fit=TRUE
Sie auch den Standardfehler für jeden angepassten Wert. Das Ergebnis data.frame
ist eine Matrix mit den folgenden Komponenten: den angepassten Vorhersagen ( fit
), den geschätzten Standardfehlern ( se.fit
) und einem Skalar, der die Quadratwurzel der Dispersion angibt, die zur Berechnung der Standardfehler ( residual.scale
) verwendet wird. Bei einem Binomial-Logit ist der Wert 1 (was Sie durch Eingabe preddat$residual.scale
von sehen können R
). Wenn Sie ein Beispiel dessen sehen möchten, was Sie bisher berechnet haben, können Sie Folgendes eingeben head(data.frame(preddat))
.
Der nächste Schritt ist das Einrichten des Plots. Ich möchte zuerst einen leeren Zeichenbereich mit den Parametern einrichten:
with(mydat, plot(bid, won, type="n",
ylim=c(0, 1), ylab="Probability of winning", xlab="Bid"))
Jetzt können Sie sehen, wo es wichtig ist, die angepassten Wahrscheinlichkeiten zu berechnen. Sie können die den angepassten Wahrscheinlichkeiten entsprechende Linie gemäß der obigen zweiten Formel zeichnen. Mit preddat data.frame
können Sie die angepassten Werte in Wahrscheinlichkeiten umwandeln und damit eine Linie gegen die Werte Ihrer Prädiktorvariablen zeichnen.
with(preddat, lines(0:1000, exp(fit)/(1+exp(fit)), col="blue"))
Beantworten Sie schließlich Ihre Frage. Die Konfidenzintervalle können dem Diagramm hinzugefügt werden, indem die Wahrscheinlichkeit für die angepassten Werte +/- 1.96
multipliziert mit dem Standardfehler berechnet wird:
with(preddat, lines(0:1000, exp(fit+1.96*se.fit)/(1+exp(fit+1.96*se.fit)), lty=2))
with(preddat, lines(0:1000, exp(fit-1.96*se.fit)/(1+exp(fit-1.96*se.fit)), lty=2))
Das resultierende Diagramm (aus den zufällig generierten Daten) sollte ungefähr so aussehen:
Aus Gründen der Zweckmäßigkeit ist hier der gesamte Code in einem Block:
set.seed(1234)
mydat <- data.frame(
won=as.factor(sample(c(0, 1), 250, replace=TRUE)),
bid=runif(250, min=0, max=1000)
)
mod1 <- glm(won~bid, data=mydat, family=binomial(link="logit"))
plotdat <- data.frame(bid=(0:1000))
preddat <- predict(mod1, newdata=plotdat, se.fit=TRUE)
with(mydat, plot(bid, won, type="n",
ylim=c(0, 1), ylab="Probability of winning", xlab="Bid"))
with(preddat, lines(0:1000, exp(fit)/(1+exp(fit)), col="blue"))
with(preddat, lines(0:1000, exp(fit+1.96*se.fit)/(1+exp(fit+1.96*se.fit)), lty=2))
with(preddat, lines(0:1000, exp(fit-1.96*se.fit)/(1+exp(fit-1.96*se.fit)), lty=2))
(Hinweis: Dies ist eine stark bearbeitete Antwort, um sie für stats.stackexchange relevanter zu machen.)