J'ai du mal à interpréter les résultats d'une régression logistique. Ma variable de résultat est Decision
et est binaire (0 ou 1, pas prendre ou prendre un produit, respectivement).
Ma variable de prédiction est Thoughts
et est continue, peut être positive ou négative, et est arrondie à la 2ème décimale.
Je veux savoir comment la probabilité de prendre le produit change en tant que Thoughts
change.
L'équation de régression logistique est:
glm(Decision ~ Thoughts, family = binomial, data = data)
Selon ce modèle, Thought
s a un impact significatif sur la probabilité de Decision
(b = 0,72, p = 0,02). Pour déterminer le rapport de cotes de Decision
en fonction de Thoughts
:
exp(coef(results))
Rapport de cotes = 2,07.
Des questions:
Comment interpréter le rapport de cotes?
Thoughts
affecte les chances de prendre (ou de ne pas prendre) le produit de 0,07 OU Thoughts
augmente (diminue) de 0,01, les chances de prendre (ne pas prendre) le produit augmentent (diminuent) d'environ 2 unités?Comment convertir le rapport de cotes de Thoughts
en une probabilité estimée de Decision
?
Ou puis-je seulement estimer la probabilité de Decision
à un certain score de Thoughts
(c.-à-d. Calculer la probabilité estimée de prendre le produit lorsque Thoughts == 1
)?
Le coefficient renvoyé par une régression logistique en r est un logit, ou le log des cotes. Pour convertir les logits en odds ratio, vous pouvez l'exposer, comme vous l'avez fait ci-dessus. Pour convertir des logits en probabilités, vous pouvez utiliser la fonction exp(logit)/(1+exp(logit))
. Cependant, il y a certaines choses à noter sur cette procédure.
Tout d'abord, je vais utiliser des données reproductibles pour illustrer
library('MASS')
data("menarche")
m<-glm(cbind(Menarche, Total-Menarche) ~ Age, family=binomial, data=menarche)
summary(m)
Cela renvoie:
Call:
glm(formula = cbind(Menarche, Total - Menarche) ~ Age, family = binomial,
data = menarche)
Deviance Residuals:
Min 1Q Median 3Q Max
-2.0363 -0.9953 -0.4900 0.7780 1.3675
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -21.22639 0.77068 -27.54 <2e-16 ***
Age 1.63197 0.05895 27.68 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 3693.884 on 24 degrees of freedom
Residual deviance: 26.703 on 23 degrees of freedom
AIC: 114.76
Number of Fisher Scoring iterations: 4
Les coefficients affichés sont pour les logits, comme dans votre exemple. Si nous traçons ces données et ce modèle, nous voyons la fonction sigmoïde caractéristique d'un modèle logistique adapté aux données binomiales
#predict gives the predicted value in terms of logits
plot.dat <- data.frame(prob = menarche$Menarche/menarche$Total,
age = menarche$Age,
fit = predict(m, menarche))
#convert those logit values to probabilities
plot.dat$fit_prob <- exp(plot.dat$fit)/(1+exp(plot.dat$fit))
library(ggplot2)
ggplot(plot.dat, aes(x=age, y=prob)) +
geom_point() +
geom_line(aes(x=age, y=fit_prob))
Notez que le changement de probabilités n'est pas constant - la courbe augmente lentement au début, puis plus rapidement au milieu, puis se stabilise à la fin. La différence de probabilités entre 10 et 12 est bien inférieure à la différence de probabilités entre 12 et 14. Cela signifie qu'il est impossible de résumer la relation d'âge et de probabilités avec un seul chiffre sans transformer les probabilités.
Pour répondre à vos questions spécifiques:
Le rapport de cotes pour la valeur de l'interception est la cote d'un "succès" (dans vos données, il s'agit de la chance de prendre le produit) lorsque x = 0 (c'est-à-dire zéro pensée). Le rapport de cotes pour votre coefficient est l'augmentation des cotes au-dessus de cette valeur de l'ordonnée à l'origine lorsque vous ajoutez une valeur x entière (c'est-à-dire x = 1; une pensée). Utilisation des données de la ménarche:
exp(coef(m))
(Intercept) Age
6.046358e-10 5.113931e+00
Nous pourrions interpréter cela comme la probabilité que la ménarche se produise à l'âge = 0 est de 0,00000000006. Ou, fondamentalement impossible. L'exponentiation du coefficient d'âge nous indique l'augmentation attendue des probabilités de ménarche pour chaque unité d'âge. Dans ce cas, c'est juste un quintuplement. Un rapport de cotes de 1 indique aucun changement, tandis qu'un rapport de cotes de 2 indique un doublement, etc.
Votre rapport de cotes de 2,07 implique qu'une augmentation de 1 unité des `` pensées '' augmente les chances de prendre le produit par un facteur de 2,07.
Vous devez le faire pour certaines valeurs de pensées, car, comme vous pouvez le voir dans le graphique ci-dessus, le changement n'est pas constant sur la plage de valeurs x. Si vous voulez la probabilité d'une certaine valeur pour les pensées, obtenez la réponse comme suit:
exp(intercept + coef*THOUGHT_Value)/(1+(exp(intercept+coef*THOUGHT_Value))
Les probabilités et les probabilités sont deux mesures différentes, qui visent toutes deux le même objectif de mesurer la probabilité qu'un événement se produise. Ils ne doivent pas être comparés entre eux, seulement entre eux!
.
En général, les cotes sont préférées à la probabilité en ce qui concerne les ratios puisque la probabilité est limitée entre 0 et 1 tandis que les cotes sont définies de -inf à + inf.
Pour calculer facilement les rapports de cotes, y compris leurs intervalles de confiance, consultez le package oddsratio
:
library(oddsratio)
fit_glm <- glm(admit ~ gre + gpa + rank, data = data_glm, family = "binomial")
# Calculate OR for specific increment step of continuous variable
or_glm(data = data_glm, model = fit_glm,
incr = list(gre = 380, gpa = 5))
predictor oddsratio CI.low (2.5 %) CI.high (97.5 %) increment
1 gre 2.364 1.054 5.396 380
2 gpa 55.712 2.229 1511.282 5
3 rank2 0.509 0.272 0.945 Indicator variable
4 rank3 0.262 0.132 0.512 Indicator variable
5 rank4 0.212 0.091 0.471 Indicator variable
Ici, vous pouvez simplement spécifier l'incrément de vos variables continues et voir les rapports de cotes résultants. Dans cet exemple, la réponse admit
est 55 fois plus susceptible de se produire lorsque le prédicteur gpa
est augmenté de 5
.
Si vous souhaitez prédire les probabilités avec votre modèle, utilisez simplement type = response
lors de la prévision de votre modèle. Cela convertira automatiquement les cotes du journal en probabilité. Vous pouvez ensuite calculer les ratios de risque à partir des probabilités calculées. Voir ?predict.glm
pour plus de détails.