web-dev-qa-db-fra.com

R: Calculer et interpréter le rapport de cotes dans la régression logistique

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, Thoughts 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:

  1. Comment interpréter le rapport de cotes?

    1. Un rapport de cotes de 2,07 implique-t-il qu'une augmentation (ou une diminution) de 0,01 de Thoughts affecte les chances de prendre (ou de ne pas prendre) le produit de 0,07 OU
    2. Cela signifie-t-il qu'à mesure que Thoughts augmente (diminue) de 0,01, les chances de prendre (ne pas prendre) le produit augmentent (diminuent) d'environ 2 unités?
  2. 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)?

12
Sudy Majd

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))

enter image description here

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:

Comment interprétez-vous les rapports de cotes?

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.

Comment convertir les rapports de cotes des pensées en une probabilité estimée de décision?

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))
33
triddle

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.

7
pat-s