Quand le résultat est oui/non
La régression linéaire prédit un nombre. Mais beaucoup des questions qui valent la peine d'être modélisées sont binaires : le client résilie-t-il, le patient guérit-il, le courriel est-il cliqué. Ajuster une droite à un résultat 0/1 casse immédiatement - la droite prédit allègrement des probabilités de −0,3 ou 1,4, ce qui n'a aucun sens.
La régression logistique corrige ça en modélisant la probabilité du résultat via la transformation des log-cotes (logit) : log(p / (1 − p)) = ordonnée à l'origine + pente × x. L'échelle des log-cotes couvre toute la droite réelle, donc une équation linéaire s'y ajuste naturellement - et le retour en arrière comprime chaque prédiction dans (0, 1) le long de la courbe en S familière. Le prix de l'astuce : les coefficients vivent sur l'échelle des log-cotes, et tout l'art de lire une régression logistique consiste à les retraduire en quelque chose que les humains comprennent.
Ajuster : glm() avec family = binomial
glm() (modèle linéaire généralisé) est le grand frère de lm() ; family = binomial sélectionne la régression logistique. Dans mtcars, am enregistre le type de transmission (1 = manuelle, 0 = automatique) - les voitures économes tendent-elles à être manuelles ?
Deux choses avant de lire la sortie. D'abord, family = binomial n'est pas facultatif - omets-le et glm() ajuste silencieusement des moindres carrés ordinaires. Ensuite, le résultat doit être binaire : 0/1, logique, ou un facteur à deux niveaux (R modélise la probabilité du second niveau).
Maintenant le résumé, bloc par bloc :
- Coefficients - l'Estimate de
mpgvaut environ 0,31, et c'est une pente en log-cotes : chaque mpg supplémentaire ajoute 0,31 aux log-cotes d'être manuelle. Positif signifie « augmente la probabilité », négatif signifie « la diminue » - au-delà du signe, l'intuition de personne ne fonctionne sur cette échelle, d'où l'existence de la section suivante. - z value et Pr(>|z|) - même logique que les tests t de la régression (Estimate ÷ Std. Error, puis une p-valeur pour « est-ce que ça pourrait être zéro ? »), simplement avec une approximation normale - d'où z plutôt que t. Ici p ≈ 0,011 : l'association entre le mpg et le type de transmission a peu de chances d'être du bruit.
- Null deviance et Residual deviance - la déviance est la mesure de mauvais ajustement du monde glm (plus petit = mieux). La déviance nulle (43,2 à 31 df) est le modèle réduit à la constante ; la déviance résiduelle (29,7 à 30 df) est la tienne. La chute d'environ 13,6 pour un degré de liberté de prédicteur est l'analogue glm de « le R carré a monté ».
- AIC - un score de comparaison de modèles équilibrant ajustement et complexité ; le plus bas gagne. Dénué de sens seul, utile entre modèles candidats sur les mêmes données.
Des log-cotes aux rapports de cotes : exp(coef())
L'exponentiation fait passer les coefficients de l'échelle additive des log-cotes à l'échelle multiplicative des cotes :
exp(0.307) ≈ 1.36, et voici la formulation honnête à mémoriser : « chaque mpg supplémentaire multiplie les cotes d'une transmission manuelle par environ 1,36 ». Un rapport de cotes supérieur à 1 augmente les cotes, inférieur à 1 les diminue, exactement 1 signifie aucun effet - c'est pourquoi le verdict de l'intervalle de confiance pour les rapports de cotes est « l'intervalle exclut-il 1 ? » (pas zéro ; zéro était la frontière sur l'échelle des log-cotes).
Attention au vocabulaire : les cotes ne sont pas des probabilités. Cotes = p / (1 − p), donc une probabilité de 0,75 donne des cotes de 3. Multiplier des cotes par 1,36 n'est pas la même chose que multiplier une probabilité par 1,36 - et quand le résultat est fréquent, l'écart est grand. Un rapport de cotes de 2 pour un résultat rare se comporte comme « à peu près le double du risque » ; pour un résultat à 50 %, absolument pas. Ne rapporte jamais un rapport de cotes avec le vocabulaire du rapport de risques (« 1,36 fois plus probable ») sauf si le résultat est rare.
Probabilités prédites : le piège de type = "response"
Le bug de régression logistique le plus fréquent dans la nature :
Le premier appel renvoie le type = "link" par défaut - des prédictions sur l'échelle des log-cotes, valeurs négatives comprises. Le second renvoie de vraies probabilités. Si tes « probabilités » sortent un jour négatives ou supérieures à 1, voilà pourquoi. Lance le bloc : une voiture à 15 mpg n'a pour ainsi dire aucune chance d'être manuelle, une voiture à 30 mpg est très probablement manuelle, et la courbe en S se plie au milieu.
Classification : seuil et table de confusion
Les probabilités deviennent des classes prédites en choisissant un seuil - 0,5 étant le choix par défaut - et le tableau de bord honnête est une table du prédit contre le réel :
Les cellules de la diagonale sont les décisions correctes ; les deux cellules hors diagonale sont les deux erreurs différentes (prédire manuelle pour une automatique, et l'inverse). La justesse globale à elle seule peut gravement flatter un modèle - si 95 % des clients ne résilient pas, « prédire que personne ne résilie » obtient 95 % tout en n'attrapant aucun résiliant - alors regarde toujours les deux types d'erreurs. Et 0,5 est une convention, pas une loi : quand les deux erreurs ont des coûts différents, déplace le seuil en conséquence.
Une mise en garde d'honnêteté : cette table évalue le modèle sur les données mêmes sur lesquelles il a été ajusté, ce qui le flatte. Une vraie évaluation met de côté des données que le modèle n'a jamais vues.
Plusieurs prédicteurs
Exactement comme lm() - ajoute des termes avec +, et chaque interprétation gagne la précision « les autres restant constants » :
Chaque coefficient exponentié est maintenant le multiplicateur de cotes pour une augmentation d'une unité de ce prédicteur parmi des voitures semblables sur les autres prédicteurs. La mécanique passe à l'échelle, mais les mises en garde de la régression linéaire aussi : des prédicteurs corrélés se redistribuent mutuellement leurs coefficients.
Précautions
- Séparation complète. Si un prédicteur sépare parfaitement le résultat (toute voiture au-dessus d'un certain mpg est manuelle, toute voiture en dessous est automatique), le coefficient du maximum de vraisemblance veut devenir infini. R avertit -
glm.fit: fitted probabilities numerically 0 or 1 occurred- et rapporte d'énormes coefficients avec des erreurs types absurdes. Ne publie pas ces nombres ; simplifie le modèle, obtiens plus de données, ou utilise une méthode pénalisée (les packagesbrglm2oulogistf). - Assez d'événements. La contrainte qui compte est le nombre du résultat le plus rare, pas le nombre total de lignes. Une vieille règle empirique veut de l'ordre de 10 à 15 événements par prédicteur ; les exemples à 32 voitures ici servent à enseigner la mécanique, pas de modèle pour des tailles d'échantillon publiables.
- Les rapports de cotes ne sont pas des rapports de risques quand le résultat est fréquent - traité plus haut, répété parce que les relecteurs le remarqueront même si toi non.
Ce que tu retiens
- Résultat binaire →
glm(y ~ x, data = df, family = binomial); n'oublie jamais lefamily. - Les coefficients bruts sont des log-cotes ;
exp(coef(fit))donne des rapports de cotes, et la valeur nulle de leurs intervalles est 1. - La formulation type : « chaque augmentation d'une unité de x multiplie les cotes du résultat par exp(b) ».
predict(..., type = "response")pour des probabilités - la valeur par défaut renvoie des log-cotes, la confusion numéro un.- Classe avec un seuil et juge avec une table de confusion ; la justesse seule peut mentir.
- Surveille les avertissements de séparation, compte tes événements, et n'habille pas des rapports de cotes en rapports de risques.
Prochaine étape : la mécanique derrière chaque intervalle vu jusqu'ici - les intervalles de confiance avec t.test(), confint() et prop.test().
Questions fréquentes
Comment réaliser une régression logistique en R ?
Avec glm() et family = binomial : fit <- glm(am ~ mpg, data = mtcars, family = binomial), puis summary(fit). Le résultat doit être binaire - 0/1, TRUE/FALSE, ou un facteur à deux niveaux. Oublier family = binomial ajuste silencieusement une régression linéaire ordinaire à la place.
Comment interpréter les coefficients d'un glm en R ?
Les coefficients bruts sont sur l'échelle des log-cotes, dans laquelle personne ne raisonne. Exponentie-les - exp(coef(fit)) - pour obtenir des rapports de cotes : une valeur de 1,36 pour un prédicteur signifie que chaque augmentation d'une unité multiplie les cotes du résultat par environ 1,36. Les valeurs supérieures à 1 augmentent les cotes, inférieures à 1 les diminuent, exactement 1 signifie aucun effet.
Comment obtenir des probabilités prédites d'un glm en R ?
Utilise predict(fit, newdata, type = "response"). C'est le piège numéro un : le type = "link" par défaut renvoie des log-cotes, pas des probabilités - donc si tes « probabilités » sont négatives ou supérieures à 1, tu as oublié type = "response".
Quelle est la différence entre cotes et probabilité ?
La probabilité, ce sont les succès sur l'ensemble des essais ; les cotes, ce sont les succès sur les échecs. Une probabilité de 0,75 correspond à des cotes de 3 (trois succès par échec). Les rapports de cotes de la régression logistique multiplient des cotes, pas des probabilités - et quand le résultat est fréquent, un rapport de cotes peut être bien plus grand que le rapport de risques correspondant, alors ne présente pas l'un pour l'autre.