Ok, j'ai une régression logistique et j'ai utilisé la predict()
fonction pour développer une courbe de probabilité basée sur mes estimations.
## LOGIT MODEL:
library(car)
mod1 = glm(factor(won) ~ as.numeric(bid), data=mydat, family=binomial(link="logit"))
## PROBABILITY CURVE:
all.x <- expand.grid(won=unique(won), bid=unique(bid))
y.hat.new <- predict(mod1, newdata=all.x, type="response")
plot(bid<-000:1000,predict(mod1,newdata=data.frame(bid<-c(000:1000)),type="response"), lwd=5, col="blue", type="l")
C'est très bien, mais je suis curieux de tracer les intervalles de confiance pour les probabilités. J'ai essayé plot.ci()
mais je n'ai pas eu de chance. Quelqu'un peut-il m'indiquer quelques façons d'y parvenir, de préférence avec le car
package ou la base R.
r
logistic
confidence-interval
ATMathew
la source
la source
Réponses:
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.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:Pour convertir les cotes enregistrées en probabilités, nous pouvons traduire ce qui précède en
Vous pouvez utiliser ces informations pour configurer le tracé. Tout d'abord, vous avez besoin d'une plage de la variable de prédiction:
Ensuite, en utilisant
predict
, vous pouvez obtenir des prédictions basées sur votre modèleNotez que les valeurs ajustées peuvent également être obtenues via
En spécifiant
se.fit=TRUE
, vous obtenez également l'erreur standard associée à chaque valeur ajustée. Le résultatdata.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 entrantpreddat$residual.scale
dansR
). Si vous souhaitez voir un exemple de ce que vous avez calculé jusqu'à présent, vous pouvez taperhead(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:
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.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: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:
(Remarque: il s'agit d'une réponse fortement modifiée dans le but de la rendre plus pertinente pour stats.stackexchange.)
la source
se.fit
définie la variable ?predict(..., se.fit=TRUE)
.Voici une modification de la solution de @ smillig. J'utilise des outils tidyverse ici, et j'utilise également la
linkinv
fonction qui fait partie de l'objet modèle GLMmod1
. De cette façon, vous n'avez pas à inverser manuellement la fonction logistique, et cette approche fonctionnera quel que soit le GLM spécifique auquel vous correspondez.la source