Régression logistique en R : modéliser une issue binaire

Prédisez une issue oui/non avec glm(family = binomial), interprétez les coefficients comme des odds ratios, lisez le log-odds, et obtenez la courbe de probabilité — la méthode pratique, axée sur l’interprétation

Apprenez la régression logistique en R — modélisez une issue binaire (oui/non) avec glm(family = binomial). Ajustez des modèles simples et multiples, interprétez les coefficients comme des odds ratios avec intervalles de confiance, comprenez le log-odds/logit, prédisez des probabilités de classe, et lisez la courbe de probabilité en S. Axé sur l’interprétation.

Date de publication

23 juin 2026

Modifié

7 juillet 2026

AstucePoints clés
  • La régression logistique modélise une issue binaire (oui/non, 0/1, malade/sain) — elle prédit la probabilité de la classe « 1 », pas la classe directement.
  • Ajustez-la avec glm(y ~ x, family = binomial) — un modèle linéaire généralisé sur le log-odds (logit) de l’issue.
  • Un coefficient est la variation du log-odds par unité du prédicteur ; exp(coef) est l’odds ratio — l’effet interprétable (OR > 1 augmente les cotes, OR < 1 les diminue).
  • Prédisez les probabilités avec predict(model, newdata, type = "response") ; la courbe en S transforme le prédicteur linéaire en une probabilité comprise entre 0 et 1.
  • C’est la perspective inférentielle — déterminer quels prédicteurs comptent et dans quelle mesure. (La précision de classification, la validation croisée et la sélection de variables relèvent du pilier Machine Learning.)

Introduction

La régression linéaire modélise une issue numérique — mais beaucoup d’issues sont binaires : un patient est diabétique ou non, un client se désabonne ou non, un prêt fait défaut ou non. La régression logistique gère exactement cela : c’est un modèle linéaire généralisé (GLM) qui prédit la probabilité de la classe « oui » et vous permet d’interpréter chaque prédicteur comme un odds ratio.

Le scénario : à partir de mesures cliniques, modéliser la probabilité d’un test de diabète positif — et lire quels facteurs augmentent les cotes, et dans quelle mesure.

Les données : mesures cliniques

Nous utilisons le jeu de données PimaIndiansDiabetes2 du package mlbench — des variables cliniques (glucose, IMC, âge, …) et une issue diabetes binaire (pos/neg). Nous supprimons les lignes incomplètes :

data("PimaIndiansDiabetes2", package = "mlbench")
diabetes_data <- na.omit(PimaIndiansDiabetes2)

head(diabetes_data, 4)
  pregnant glucose pressure triceps insulin mass pedigree age diabetes
4        1      89       66      23      94 28.1    0.167  21      neg
5        0     137       40      35     168 43.1    2.288  33      pos
7        3      78       50      32      88 31.0    0.248  26      pos
9        2     197       70      45     543 30.5    0.158  53      pos

Régression logistique simple

Modélisez la probabilité de diabète à partir du glucose plasmatique seul. glm() avec family = binomial ajuste le modèle logistique :

data("PimaIndiansDiabetes2", package = "mlbench")
diabetes_data <- na.omit(PimaIndiansDiabetes2)

model <- glm(diabetes ~ glucose, data = diabetes_data, family = binomial)
summary(model)$coef
               Estimate  Std. Error   z value     Pr(>|z|)
(Intercept) -6.09552139 0.629787038 -9.678703 3.713993e-22
glucose      0.04242099 0.004760623  8.910805 5.066328e-19

L’ordonnée à l’origine est de −6.10 et le coefficient de glucose est de 0.042 — positif, donc un glucose plus élevé signifie une probabilité de diabète plus élevée. Mais le coefficient est sur l’échelle du log-odds, qui n’est pas directement interprétable. C’est ce que l’odds ratio corrige.

Interpréter avec les odds ratios

exp(coefficient) est l’odds ratio — la variation multiplicative des cotes de l’issue par augmentation d’une unité du prédicteur. C’est le nombre que vous rapportez :

data("PimaIndiansDiabetes2", package = "mlbench")
diabetes_data <- na.omit(PimaIndiansDiabetes2)
model <- glm(diabetes ~ glucose, data = diabetes_data, family = binomial)

exp(cbind(OR = coef(model), confint(model)))   # odds ratio + 95% CI
                     OR        2.5 %      97.5 %
(Intercept) 0.002252935 0.0006194309 0.007358113
glucose     1.043333616 1.0340267589 1.053554337

L’odds ratio du glucose est de 1.04 (l’IC à 95 % exclut 1) — chaque augmentation de 1 unité de glucose multiplie les cotes de diabète par 1.04 (une hausse de 4 % des cotes par unité). Sur une hausse de 50 unités de glucose, cela se compose en \(1.04^{50} \approx 7\text{–}8\)× les cotes.

La courbe de probabilité

La régression logistique transforme le prédicteur linéaire à travers une courbe en S en une probabilité comprise entre 0 et 1 — la forme logistique caractéristique :

library(ggpubr)

data("PimaIndiansDiabetes2", package = "mlbench")
diabetes_data <- na.omit(PimaIndiansDiabetes2)
diabetes_data$prob <- ifelse(diabetes_data$diabetes == "pos", 1, 0)

ggscatter(diabetes_data, x = "glucose", y = "prob", color = "grey50",
          alpha = 0.2, xlab = "Plasma glucose concentration",
          ylab = "Probability of diabetes (pos)") +
  geom_smooth(method = "glm", method.args = list(family = "binomial"),
              color = "#3a86d4", fill = "grey70")

An S-shaped logistic regression curve showing the probability of being diabetes-positive rising with plasma glucose concentration, plotted over the observed outcomes coded as 0 and 1.

La courbe est proche de 0 pour un glucose faible, monte fortement en son milieu, et sature près de 1 — une probabilité reste toujours dans [0, 1], contrairement à une droite.

Régression logistique multiple

Ajoutez tous les prédicteurs cliniques avec ~ ., puis lisez les odds ratios. broom::tidy() avec exponentiate = TRUE donne le tableau des OR avec intervalles de confiance et p-values en une seule étape :

library(broom)

data("PimaIndiansDiabetes2", package = "mlbench")
diabetes_data <- na.omit(PimaIndiansDiabetes2)

model <- glm(diabetes ~ ., data = diabetes_data, family = binomial)
tidy(model, exponentiate = TRUE, conf.int = TRUE)
# A tibble: 9 × 7
  term         estimate std.error statistic  p.value   conf.low conf.high
  <chr>           <dbl>     <dbl>     <dbl>    <dbl>      <dbl>     <dbl>
1 (Intercept) 0.0000436   1.22       -8.25  1.64e-16 0.00000355  0.000426
2 pregnant    1.09        0.0554      1.48  1.38e- 1 0.974       1.21    
3 glucose     1.04        0.00577     6.64  3.24e-11 1.03        1.05    
4 pressure    0.999       0.0118     -0.120 9.04e- 1 0.976       1.02    
5 triceps     1.01        0.0171      0.657 5.11e- 1 0.978       1.05    
6 insulin     0.999       0.00131    -0.632 5.28e- 1 0.997       1.00    
7 mass        1.07        0.0273      2.58  9.89e- 3 1.02        1.13    
8 pedigree    3.13        0.427       2.67  7.60e- 3 1.38        7.37    
9 age         1.03        0.0184      1.85  6.47e- 2 0.999       1.07    

Lisez-le comme des odds ratios, en maintenant les autres prédicteurs constants :

  • glucose (OR ≈ 1.04, p < 0.001), mass/IMC (OR ≈ 1.07, p = 0.01) et pedigree (OR ≈ 3.13, p = 0.008) sont significatifs — chacun augmente les cotes de diabète. Un OR de pedigree (antécédents familiaux) de 3.1 signifie qu’une augmentation d’une unité triple les cotes.
  • pregnant, pressure, triceps, insulin et age ne sont pas significatifs ici (leurs IC incluent OR = 1) — aucun effet indépendant clair une fois les autres pris en compte.
Note

Odds ratio, pas probabilité. L’exp() d’un coefficient est un odds ratio (effet multiplicatif sur les cotes), et non une variation de probabilité. OR > 1 augmente les cotes, OR < 1 les diminue, OR = 1 signifie aucun effet — et un IC qui inclut 1 signifie non significatif.

Prédire des probabilités

Utilisez predict(..., type = "response") pour obtenir des probabilités pour de nouveaux individus (sans type, predict renvoie le log-odds) :

data("PimaIndiansDiabetes2", package = "mlbench")
diabetes_data <- na.omit(PimaIndiansDiabetes2)
model <- glm(diabetes ~ glucose, data = diabetes_data, family = binomial)

newdata <- data.frame(glucose = c(90, 150, 200))
predict(model, newdata, type = "response")
         1          2          3 
0.09299244 0.56651015 0.91595970 

Un glucose de 90 donne une probabilité de diabète faible ; 200 en donne une élevée. À quelle classe la probabilité se réfère-t-elle ? Vérifiez le codage indicateur — R modélise la probabilité du niveau codé 1 :

data("PimaIndiansDiabetes2", package = "mlbench")
diabetes_data <- na.omit(PimaIndiansDiabetes2)

contrasts(diabetes_data$diabetes)     # 'pos' is coded 1 -> the modelled probability
    pos
neg   0
pos   1

Rapport

Une régression logistique a modélisé la probabilité d’un test de diabète positif à partir de prédicteurs cliniques. Le glucose (OR = 1.04 par unité, IC à 95 % 1.03–1.05, p < 0.001), l’IMC (OR = 1.07, p = 0.01) et le pedigree de diabète (OR = 3.13, IC à 95 % 1.38–7.37, p = 0.008) étaient des prédicteurs positifs significatifs du diabète, en ajustant pour les autres variables.

La régression logistique modélise le log-odds (logit) de l’issue comme linéaire en les prédicteurs : \(\log\!\dfrac{p}{1-p} = \beta_0 + \beta_1 x_1 + \dots + \beta_k x_k\), où \(p = P(y = 1 \mid x)\). En résolvant pour \(p\), on obtient la courbe en S \(p = \dfrac{1}{1 + e^{-(\beta_0 + \beta_1 x_1 + \dots)}}\), qui se situe toujours dans \((0, 1)\). Comme le modèle est linéaire en log-odds, \(e^{\beta_j}\) est l’odds ratio — le facteur par lequel les cotes se multiplient par unité de \(x_j\). Les coefficients sont estimés par maximum de vraisemblance, et la significativité utilise un z-test (Pr(>|z|)) plutôt que le t-test de la régression linéaire.

Essayez en direct

Ajustez un prédicteur différent — l’IMC (mass) prédit-il le diabète ? Lisez son odds ratio. Le bac à sable démarre au premier Run.

🟢 Avec un agent IA

Demandez à Prova « ajuste une régression logistique sur mon issue binaire, interprète les odds ratios, et dis-moi quels prédicteurs comptent » — elle répond avec du code que vous pouvez exécuter sur vos propres données et vous guide à travers la sortie. The runtime is the judge. Ask Prova →

Problèmes courants

Vous avez interprété un coefficient comme une variation de probabilité. Un coefficient logistique est sur l’échelle du log-odds ; exp(coef) est un odds ratio, pas une différence de probabilité. Le même odds ratio déplace la probabilité différemment selon la valeur de base.

Vos prédictions ressemblent à de grands nombres positifs/négatifs, pas à des valeurs entre 0 et 1. Vous avez oublié type = "response". Un predict() simple sur un glm renvoie le log-odds (le prédicteur linéaire) ; ajoutez type = "response" pour les probabilités.

Vous n’êtes pas sûr de la classe à laquelle se rapporte la probabilité. La régression logistique modélise la probabilité du niveau codé en indicateur 1. Vérifiez avec contrasts(data$outcome) — le niveau portant le 1 est celui qui est prédit.

Questions fréquentes

Utilisez glm(y ~ x, family = binomial) avec une issue binaire y. Résumez avec summary(model), obtenez les effets interprétables avec exp(coef(model)) (odds ratios), et prédisez les probabilités avec predict(model, newdata, type = "response").

Un coefficient est la variation du log-odds par unité du prédicteur — pas directement parlant. Prenez exp(coefficient) pour obtenir l’odds ratio : OR > 1 signifie que le prédicteur augmente les cotes de l’issue, OR < 1 les diminue, OR = 1 signifie aucun effet. Un OR de 1.04 signifie une hausse de 4 % des cotes par unité.

La régression linéaire prédit une issue numérique avec une droite non bornée ; la régression logistique prédit la probabilité d’une issue binaire à travers une courbe en S bornée dans [0, 1]. La régression logistique modélise le log-odds (logit) et est ajustée par maximum de vraisemblance avec un z-test, et non par moindres carrés avec un t-test.

Utilisez predict(model, newdata, type = "response") — le type = "response" est essentiel, sinon vous obtenez le log-odds au lieu des probabilités. Le résultat est la probabilité du niveau d’issue codé 1 (vérifiez avec contrasts()).

Testez vos connaissances

  1. Exécutez-le. Dans la cellule interactive, ajustez diabetes ~ age et lisez l’odds ratio. L’âge est-il un prédicteur significatif à lui seul ?
  2. Conceptuel. Un prédicteur a un odds ratio de 0.8 avec un IC à 95 % de [0.65, 0.98]. Augmente-t-il ou diminue-t-il les cotes de l’issue, et est-il significatif ?

Remplissez le blanc avec age. Regardez si l’intervalle de confiance de l’odds ratio inclut 1. Pour la question 2, rappelez-vous que OR < 1 diminue les cotes, et la significativité dépend de si l’IC franchit 1.

À lui seul, age a un odds ratio supérieur à 1 (plus âgé → cotes de diabète plus élevées) et est généralement significatif dans le modèle simple — bien que dans le modèle multiple il ait perdu sa significativité une fois glucose/IMC inclus. Pour la question 2 : un OR de 0.8 diminue les cotes (une réduction de 20 % par unité), et comme l’IC [0.65, 0.98] n’inclut pas 1, il est statistiquement significatif.

AstuceQuel modèle, quand ?

Conclusion

Vous savez maintenant exécuter une régression logistique en R : ajuster une issue binaire avec glm(family = binomial), interpréter les coefficients comme des odds ratios avec intervalles de confiance (l’effet qui veut vraiment dire quelque chose), lire la courbe de probabilité en S, et prédire les probabilités de classe avec type = "response". C’est l’outil de référence pour les issues oui/non — et la base axée sur l’interprétation avant tout travail de classification prédictive.

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 = {Régression logistique en R : modéliser une issue binaire},
  date = {2026-06-23},
  url = {https://www.datanovia.com/learn/biostatistics/regression/logistic-regression-in-r},
  langid = {fr}
}
Veuillez citer ce travail comme suit :
“Régression logistique en R : modéliser une issue binaire.” 2026. June 23. https://www.datanovia.com/learn/biostatistics/regression/logistic-regression-in-r.