Le code que vous avez utilisé estime un modèle de régression logistique à l'aide de la glm
fonction. Vous n'avez pas inclus de données, je vais donc en inventer.
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"))
Un modèle de régression logistique modélise la relation entre une variable de réponse binaire et, dans ce cas, un prédicteur continu. Le résultat est une probabilité transformée par logit en tant que relation linéaire avec le prédicteur. Dans votre cas, le résultat est une réponse binaire correspondant à gagner ou à ne pas gagner au jeu et il est prédit par la valeur du pari. Les coefficients de mod1
sont donnés en cotes enregistrées (difficiles à interpréter), selon:
logit ( p ) = log( p( 1 - p )) = β0+ β1X1
Pour convertir les cotes enregistrées en probabilités, nous pouvons traduire ce qui précède en
p = exp( β0+ β1X1)( 1 + exp( β0+ β1X1) )
Vous pouvez utiliser ces informations pour configurer le tracé. Tout d'abord, vous avez besoin d'une plage de la variable de prédiction:
plotdat <- data.frame(bid=(0:1000))
Ensuite, en utilisant predict
, vous pouvez obtenir des prédictions basées sur votre modèle
preddat <- predict(mod1, newdata=plotdat, se.fit=TRUE)
Notez que les valeurs ajustées peuvent également être obtenues via
mod1$fitted
En spécifiant se.fit=TRUE
, vous obtenez également l'erreur standard associée à chaque valeur ajustée. Le résultat data.frame
est une matrice avec les composantes suivantes: les prédictions ajustées ( fit
), les erreurs-types estimées ( se.fit
) et un scalaire donnant la racine carrée de la dispersion utilisée pour calculer les erreurs-types ( residual.scale
). Dans le cas d'un logit binomial, la valeur sera 1 (que vous pouvez voir en entrant preddat$residual.scale
dans R
). Si vous souhaitez voir un exemple de ce que vous avez calculé jusqu'à présent, vous pouvez taper head(data.frame(preddat))
.
L'étape suivante consiste à configurer le tracé. J'aime d'abord créer une zone de traçage vierge avec les paramètres:
with(mydat, plot(bid, won, type="n",
ylim=c(0, 1), ylab="Probability of winning", xlab="Bid"))
Vous pouvez maintenant voir où il est important de savoir comment calculer les probabilités ajustées. Vous pouvez tracer la ligne correspondant aux probabilités ajustées en suivant la deuxième formule ci-dessus. À l'aide de, preddat data.frame
vous pouvez convertir les valeurs ajustées en probabilités et les utiliser pour tracer une ligne par rapport aux valeurs de votre variable prédictive.
with(preddat, lines(0:1000, exp(fit)/(1+exp(fit)), col="blue"))
Enfin, répondez à votre question, les intervalles de confiance peuvent être ajoutés au graphique en calculant la probabilité des valeurs ajustées +/- 1.96
multipliée par l'erreur standard:
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))
Le tracé résultant (à partir des données générées aléatoirement) devrait ressembler à ceci:
Par souci d'opportunité, voici tout le code en un seul morceau:
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))
(Remarque: il s'agit d'une réponse fortement modifiée dans le but de la rendre plus pertinente pour stats.stackexchange.)