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 logistiqueglm() 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)
         4          5          7          9         14         15 
0.02711452 0.89756363 0.03763559 0.85210016 0.79074609 0.71308818 

Les quatre hypothèses

  1. Réponse binaire — la réponse comporte exactement deux classes (ici pos/neg). ✔ par construction.
  2. Linéarité du logit — chaque prédicteur continu est linéairement lié au log-odds de la réponse.
  3. Aucune valeur influente — aucun point extrême ne déforme l’ajustement.
  4. 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 R
num <- 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")

A grid of scatter plots, one per clinical predictor, of the predictor value against the logit of diabetes probability, each with a blue loess curve; most are roughly linear while age and pedigree bend.

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

A Cook's distance plot for the logistic model with the three largest values labelled; all values are small, indicating no influential observations.

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

A scatter plot of standardized residuals by observation index, coloured by diabetes status, with all points within plus or minus 3, indicating no outliers.

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

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

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

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

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.

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

  1. Exécutez-le. Dans la cellule en direct, vérifiez les VIF. Des prédicteurs sont-ils multicolinéaires (VIF > 5) ?
  2. 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 ?

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.

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.

Leçons connexes

Cette page vous a-t-elle été utile ?

Prouvez que vous savez le faire. Maîtrisez toute la série Régression en R — suivez votre parcours, construisez des projets et obtenez un certificat.

Commencer gratuitement →

Passez à Pro — Prova illimité sur vos propres données et un certificat vérifiable qui atteste la compétence.

dès 15 $/mois facturé annuellement

Passer à Pro →

✓ Vous êtes Pro — continuez. The runtime is the judge.

Recevez les nouvelles leçons R & Python par e-mail

Pratique, reproductible, sans spam. Désinscription à tout moment.

Double opt-in. Nous ne partageons jamais votre e-mail.

Partager cette pageXLinkedInRedditHN
Note

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.

Réutilisation

Citation

BibTeX
@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}
}
Veuillez citer ce travail comme suit :
“Hypothèses et diagnostics de la régression logistique avec R.” 2026. June 23. https://www.datanovia.com/learn/biostatistics/regression/logistic-regression-assumptions-and-diagnostics-in-r.