Hypothèses et diagnostics de la régression logistique avec R
Après avoir ajusté un modèle logistique, vérifiez-le : la réponse binaire, la linéarité du logit, les points influents (distance de Cook) et la multicolinéarité (VIF) — chacun avec sa solution en cas de violation
Vérifiez les hypothèses d’une régression logistique avec R : une réponse binaire, une relation linéaire entre chaque prédicteur continu et le logit, l’absence d’observations influentes et l’absence de multicolinéarité. Examinez les nuages de points de linéarité du logit, la distance de Cook et les résidus standardisés, ainsi que le VIF — avec la solution pour chaque violation. Exécutez le tout en direct.
Date de publication
23 juin 2026
Modifié
7 juillet 2026
AstucePoints clés
Une régression logistique repose sur quatre hypothèses — vérifiez-les avant de faire confiance au modèle.
Réponse binaire : la réponse doit comporter exactement deux classes.
Linéarité du logit : chaque prédicteur continu doit être linéairement lié au log-odds de la réponse — vérifiez avec un nuage de points prédicteur/logit + loess.
Aucun point influent : dépistez avec la distance de Cook et les résidus standardisés (|valeur| > 3 est une valeur aberrante possible).
Aucune multicolinéarité : les prédicteurs ne doivent pas être fortement corrélés entre eux — vérifiez avec car::vif() (> 5 est problématique).
Chaque violation a une solution : transformer/spliner un prédicteur non linéaire, examiner un point influent, retirer un prédicteur colinéaire.
Introduction
Ajuster une régression logistique vous donne des odds ratios et des p-values — mais ceux-ci ne sont fiables que si les hypothèses du modèle tiennent. La régression logistique a sa propre liste de diagnostics, liée mais différente de celle de la régression linéaire.
Cette leçon parcourt les quatre hypothèses, comment vérifier chacune avec R, et — la partie pratique — quoi faire lorsqu’une d’elles n’est pas respectée.
Le modèle à vérifier
Nous réutilisons le modèle de diabète de la leçon sur la régression logistique — glm() sur les prédicteurs cliniques — et récupérons ses probabilités prédites :
data("PimaIndiansDiabetes2", package ="mlbench")diabetes_data <-na.omit(PimaIndiansDiabetes2)model <-glm(diabetes ~ ., data = diabetes_data, family = binomial)probabilities <-predict(model, type ="response")head(probabilities)
Réponse binaire — la réponse comporte exactement deux classes (ici pos/neg). ✔ par construction.
Linéarité du logit — chaque prédicteur continu est linéairement lié au log-odds de la réponse.
Aucune valeur influente — aucun point extrême ne déforme l’ajustement.
Aucune multicolinéarité — les prédicteurs ne sont pas fortement corrélés entre eux.
L’hypothèse 1 est automatique ; les trois suivantes demandent une vérification.
Linéarité du logit
La régression logistique suppose que chaque prédicteur continu est linéaire par rapport au logit (log-odds), et non à la probabilité. Calculez le logit à partir des probabilités prédites et tracez chaque prédicteur en fonction de celui-ci, avec un lisseur loess. Nous remettons en forme longue avec base R (sans tidyverse) :
library(ggpubr)data("PimaIndiansDiabetes2", package ="mlbench")diabetes_data <-na.omit(PimaIndiansDiabetes2)model <-glm(diabetes ~ ., data = diabetes_data, family = binomial)probabilities <-predict(model, type ="response")# numeric predictors + the logit, reshaped long with base Rnum <- diabetes_data[sapply(diabetes_data, is.numeric)]logit <-log(probabilities / (1- probabilities))long <-data.frame(logit =rep(logit, ncol(num)),predictor =rep(names(num), each =nrow(num)),value =unlist(num))ggscatter(long, x ="logit", y ="value", size =0.5, alpha =0.4,add ="loess", add.params =list(color ="#3a86d4")) +facet_wrap(~ predictor, scales ="free_y")
Lisez chaque panneau : une courbe loess à peu près droite signifie que le prédicteur est linéaire dans le logit. Ici glucose, mass, pregnant, pressure, triceps semblent linéaires, tandis que age et pedigree s’incurvent — ils peuvent nécessiter une transformation.
Astuce
Verdict ici : la plupart des prédicteurs sont linéaires dans le logit ; age et pedigree ne le sont pas. Si un prédicteur est non linéaire, la solution est un terme non linéaire — transformez-le par log, ajoutez un polynôme (poly(x, 2)), ou utilisez une spline — puis revérifiez le panneau.
Valeurs influentes
Les points extrêmes peuvent déformer l’ajustement. Dépistez avec la distance de Cook — plot(model, which = 4) étiquette les plus grandes :
data("PimaIndiansDiabetes2", package ="mlbench")diabetes_data <-na.omit(PimaIndiansDiabetes2)model <-glm(diabetes ~ ., data = diabetes_data, family = binomial)plot(model, which =4, id.n =3)
Une grande distance de Cook ne fait que signaler un point — il n’est influent que si son résidu standardisé est lui aussi extrême (|valeur| > 3). Tracez les résidus standardisés par indice, colorés selon la réponse :
library(ggpubr)data("PimaIndiansDiabetes2", package ="mlbench")diabetes_data <-na.omit(PimaIndiansDiabetes2)model <-glm(diabetes ~ ., data = diabetes_data, family = binomial)resid.df <-data.frame(index =seq_len(nrow(diabetes_data)),std_resid =rstandard(model),diabetes = diabetes_data$diabetes)ggscatter(resid.df, x ="index", y ="std_resid", color ="diabetes",palette ="jco", size =1, alpha =0.6,ylab ="Standardized residual") +geom_hline(yintercept =c(-3, 3), linetype ="dashed")
Astuce
Verdict ici : le plus grand résidu standardisé est ~2.8 — aucun ne dépasse ±3, donc il n’y a pas de valeurs aberrantes influentes. Si un point dépassait 3, les options sont : l’examiner (erreur de données ?), retirer l’enregistrement, transformer le prédicteur, ou utiliser une méthode robuste.
Multicolinéarité
Des prédicteurs fortement corrélés rendent les coefficients logistiques instables — c’est la même vérification du VIF que pour la régression linéaire. car::vif() ; tout ce qui dépasse 5 est problématique :
library(car)data("PimaIndiansDiabetes2", package ="mlbench")diabetes_data <-na.omit(PimaIndiansDiabetes2)model <-glm(diabetes ~ ., data = diabetes_data, family = binomial)sort(vif(model), decreasing =TRUE)
age pregnant mass triceps insulin glucose pressure pedigree
1.974053 1.892387 1.832416 1.638865 1.384038 1.378937 1.191287 1.031715
Astuce
Verdict ici : chaque VIF est bien en dessous de 5 (le plus grand est ≈ 2) — aucune multicolinéarité. Si l’un dépassait 5, retirez le prédicteur redondant (voir multicolinéarité & VIF).
Synthèse du diagnostic
Hypothèse
Vérification
Bon signe
Solution si violée
Réponse binaire
la réponse
exactement deux classes
utiliser plutôt des modèles multinomiaux/ordinaux
Linéarité du logit
prédicteur/logit + loess
loess droite
transformer / polynôme / spline le prédicteur
Aucun point influent
distance de Cook + résidu std.
|résidu std.| < 3
examiner / retirer / transformer
Aucune multicolinéarité
car::vif()
VIF < 5
retirer le prédicteur redondant
Rapport
Les hypothèses de la régression logistique ont été vérifiées. La plupart des prédicteurs continus étaient linéaires dans le logit (age et pedigree montraient de légers écarts) ; aucune observation ne dépassait un résidu standardisé de 3 (aucune valeur aberrante influente) ; et tous les facteurs d’inflation de la variance étaient inférieurs à 2 (aucune multicolinéarité).
NoteLes mathématiques (optionnel)
Le logit de la probabilité ajustée est \(\text{logit}(p) = \log\!\dfrac{p}{1-p}\), dont le modèle suppose qu’il est linéaire dans chaque prédicteur continu — c’est pourquoi vous tracez les prédicteurs en fonction du logit, et non de la probabilité. Le résidu standardisé (de Pearson) remet à l’échelle chaque résidu brut par son erreur standard afin que les extrêmes soient comparables ; la distance de Cook combine la taille du résidu et l’effet de levier pour mesurer l’influence de chaque point sur l’ajustement (même idée que pour la régression linéaire, adaptée au GLM). Le VIF est inchangé par rapport à la régression linéaire — il se calcule sur la matrice de conception des prédicteurs.
Essayez en direct
Revérifiez le VIF après avoir retiré un prédicteur, ou inspectez la linéarité du logit pour une seule variable. Le bac à sable démarre au premier Run.
🟢 Avec un agent IA
Demandez à Prova« vérifie les hypothèses de ma régression logistique et dis-moi laquelle est violée et comment la corriger » — elle inspecte la linéarité du logit, l’influence et le VIF, et répond avec du code que vous pouvez exécuter sur votre propre modèle. The runtime is the judge.Ask Prova →
Problèmes courants
Vous avez vérifié la linéarité par rapport à la probabilité, et non au logit. La régression logistique suppose la linéarité dans le log-odds — tracez chaque prédicteur continu en fonction du logit, et non de la probabilité brute ou de la réponse 0/1.
Vous avez traité un point étiqueté par la distance de Cook comme une valeur aberrante automatique.plot(model, which = 4) étiquette les plus grandes valeurs, mais un point n’est influent que si son résidu standardisé est lui aussi extrême (|valeur| > 3). Vérifiez les deux.
Vous avez oublié que les prédicteurs catégoriels n’ont pas besoin de la vérification de linéarité. L’hypothèse de linéarité du logit s’applique uniquement aux prédicteurs continus ; les facteurs sont codés en variables indicatrices et en sont exemptés.
Questions fréquentes
NoteQuelles sont les hypothèses de la régression logistique ?
Quatre : une réponse binaire ; une relation linéaire entre chaque prédicteur continu et le logit (log-odds) de la réponse ; pas de valeurs aberrantes influentes ; et aucune multicolinéarité entre les prédicteurs. (La régression logistique ne suppose pas la normalité ni l’homoscédasticité des résidus, contrairement à la régression linéaire.)
NoteComment vérifier l’hypothèse de linéarité en régression logistique ?
Calculez le logit des probabilités ajustées (log(p/(1-p))) et tracez chaque prédicteur continu en fonction de celui-ci avec un lisseur loess. Une courbe loess à peu près droite signifie que le prédicteur est linéaire dans le logit ; un net incurvement signifie que vous devriez le transformer (log, polynôme ou spline).
NoteComment trouver les observations influentes dans une régression logistique ?
Utilisez plot(model, which = 4) pour la distance de Cook afin de signaler les plus grandes valeurs, puis vérifiez les résidus standardisés (rstandard(model)) — un point n’est une valeur aberrante influente probable que si son résidu standardisé en valeur absolue dépasse 3. Une grande distance de Cook seule ne suffit pas.
NoteLa régression logistique suppose-t-elle la normalité des résidus ?
Non. Contrairement à la régression linéaire, la régression logistique ne suppose pas des résidus distribués normalement ni une variance constante. Ses hypothèses sont une réponse binaire, la linéarité du logit, l’absence de points influents et l’absence de multicolinéarité.
Testez vos connaissances
ImportantPratique
Exécutez-le. Dans la cellule en direct, vérifiez les VIF. Des prédicteurs sont-ils multicolinéaires (VIF > 5) ?
Conceptuel. La courbe loess d’un prédicteur continu en fonction du logit est fortement en forme de U. Que vous indique cela, et quelle est une solution ?
NoteIndice
Comparez chaque VIF au seuil empirique de 5. Pour la question 2, rappelez-vous que l’hypothèse de linéarité concerne le logit, et qu’une relation incurvée la rompt.
NoteSolution
Tous les VIF sont inférieurs à 2, donc il n’y a aucune multicolinéarité dont se soucier. Pour la question 2 : une courbe loess en forme de U signifie que le prédicteur n’est pas linéaire dans le logit — l’hypothèse de linéarité est violée. Une solution est d’ajouter un terme quadratique (poly(x, 2)) ou une spline, qui permet au modèle de s’incurver avec la relation ; puis retracez pour confirmer que la courbe se redresse.
Conclusion
Vous savez maintenant diagnostiquer une régression logistique avec R : confirmer la réponse binaire, vérifier la linéarité du logit pour chaque prédicteur continu, dépister les points influents avec la distance de Cook et les résidus standardisés, et tester la multicolinéarité avec le VIF — en appliquant la bonne solution à toute violation. Un modèle logistique vérifié est un modèle dont vous pouvez rapporter les odds ratios en toute confiance.
Chaque résultat de cette page a été produit par le code montré, exécuté au moment du build contre un environnement R figé — modifiez n’importe quel bloc et faites Run pour le reproduire vous-même.
@online{2026,
author = {},
title = {Hypothèses et diagnostics de la régression logistique avec R},
date = {2026-06-23},
url = {https://www.datanovia.com/learn/biostatistics/regression/logistic-regression-assumptions-and-diagnostics-in-r},
langid = {fr}
}