Régression linéaire (analyse de régression)

Régression

La régression permet d'étudier la relation (l'association) entre deux variables ou plus. Dans une analyse de régression, une variable (YY) est prédite par au moins un prédicteur (XX). Sur le plan terminologique, on dit que YY dépend de XX ; YY est donc la variable dépendante et XX la variable indépendante.

Rôle dans le modèle Synonyme
Y Variable à prédire Variable dépendante, dependent variable, outcome, critère de jugement, variable de résultat, label, target
X Sert à prédire Y Prédicteur, predictor, feature, covariable, covariate

Supposons que nous étudiions la relation entre l'IMC (indice de masse corporelle) et la glycémie. La régression permet d'utiliser l'une des variables pour prédire la valeur de l'autre. Ici, l'IMC sert à prédire la glycémie. L'IMC est donc la variable indépendante (prédicteur) et le glucose la variable dépendante (outcome).

Nous illustrerons la régression linéaire avec des données provenant d'Indiens Pima, une population présentant un risque très élevé de diabète. Les données des Indiens Pima se trouvent dans le package mlbench. Installez mlbench, chargez le package ainsi que les données des Indiens Pima avec la commande suivante :

library(mlbench)
data(PimaIndiansDiabetes)

## Graphique de la relation entre mass et glucose
ggplot(data=PimaIndiansDiabetes,
       aes(x=mass, y=glucose, color=diabetes)) +
  geom_point() +
  geom_smooth()
Nuage de points du glucose en fonction de l'IMC (mass) selon le statut diabétique, avec une droite de régression bleue et l'ordonnée à l'origine β0 marquée en x = 0

La figure ci-dessus montre comment l'IMC (mass) est associé à la glycémie (glucose). On y voit une droite bleue qui constitue la droite de régression de mass. La relation entre mass et glucose peut être décrite par une formule simple.

Yi=b1Xi+b0+ϵiY_i = b_1 X_i + b_0 + \epsilon_i

  • b0b_0 est l'ordonnée à l'origine (intercept), c'est-à-dire le point où la droite de régression coupe l'axe des Y (voir la figure ci-dessus).
  • b1b_1 est le coefficient de mass, autrement dit la valeur de la pente de la droite de régression.
  • ϵi\epsilon_i est la différence entre la valeur de YY prédite par le modèle et la valeur observée de YY. Il s'agit donc de l'erreur du modèle (error).

En résumé, il s'agit d'un modèle qui prédit YY à l'aide d'une droite de régression dont la pente est b1b_1. L'ordonnée à l'origine (b0b_0) nous intéresse très rarement. L'erreur du modèle (ϵi\epsilon_i) est une mesure de la qualité du modèle.

L'objectif est d'obtenir une droite de régression dont la pente est ajustée de façon à représenter la relation entre XX et YY. La pente de la droite dépend de la relation entre mass et glucose. La pente de mass est également appelée coefficient de mass. Si glucose augmente lorsque mass augmente, la droite de régression aura une pente positive. Dans la figure ci-dessus, on voit que la droite a une pente positive ; le coefficient de mass est donc positif.

Notez que la relation entre XX et YY doit être linéaire pour que le modèle linéaire puisse être utilisé. Si la relation n'est pas linéaire, le modèle linéaire peut être trompeur. Voici un exemple de relation non linéaire entre XX et YY. La droite de régression calculée ne parvient pas à rendre compte de la relation entre XX et YY.

Nuage de points montrant une relation non linéaire en U entre le prédicteur X et le résultat Y, mal ajustée par une droite de régression

Poursuivons en construisant un modèle de régression linéaire dans R. On utilise pour cela la fonction lm(), disponible en base R (aucun package à installer).

modell <- lm(glucose ~ mass, data=PimaIndiansDiabetes)

summary(modell)
Call:
lm(formula = glucose ~ mass, data = PimaIndiansDiabetes)

Residuals:
     Min       1Q   Median       3Q      Max
-128.970  -20.756   -3.705   19.509   81.568

Coefficients:
            Estimate Std. Error t value             Pr(>|t|)
(Intercept)  92.2129     4.7083  19.585 < 0.0000000000000002 ***
mass          0.8965     0.1429   6.274       0.000000000589 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 31.2 on 766 degrees of freedom
Multiple R-squared:  0.04887,	Adjusted R-squared:  0.04763
F-statistic: 39.36 on 1 and 766 DF,  p-value: 0.0000000005891
Nuage de points du glucose en fonction de l'IMC (mass) selon le statut diabétique, avec une droite de régression bleue et l'ordonnée à l'origine β0 marquée en x = 0

Les résultats ci-dessus montrent ce qui suit :

  • L'ordonnée à l'origine b0b_0 vaut 92,2, ce qui signifie que la droite de régression coupe l'axe des Y en Y = 92,2, ce qui semble concorder avec l'examen graphique.
  • bBMIb_{BMI}, c'est-à-dire le coefficient de mass, vaut 0,8965. Cela signifie que si mass augmente de 1 unité, glucose augmente de 0,8965 unité.

Calcul de la droite de régression

Le calcul de la droite de régression est fondamental en analyse de régression. La méthode la plus courante est la least-squares method (en français, méthode des moindres carrés). On parle aussi de ordinary least-squares (moindres carrés ordinaires). Cette méthode produit une droite qui minimise la somme des erreurs (error). Dans la figure ci-dessous, les mêmes données que précédemment (les Indiens Pima) ont été agrandies sur l'intervalle 50 à 150 de l'axe des x et de l'axe des y afin de mieux faire comprendre ce que sont les sommes des carrés. La figure montre également une droite de régression.

Nuage de points de glucose en fonction de mass avec une droite rouge et des segments verticaux montrant la distance entre chaque point et la droite

La méthode des moindres carrés vise à obtenir une droite de régression qui minimise la somme des erreurs de toutes les observations. La figure ci-dessus montre que la distance entre la droite de régression et les points varie beaucoup. Dans l'intervalle 100 à 140 de l'axe des x, la droite est proche des points (l'erreur est faible), mais en dehors de cet intervalle elle s'en éloigne davantage (l'erreur est plus grande). La méthode des moindres carrés consiste à minimiser l'erreur cumulée (totale). La droite est inclinée dans un sens puis dans l'autre jusqu'à ce que sa pente minimise la somme de toutes les erreurs. Avant d'additionner les erreurs, on les élève au carré ; le but est que toutes les erreurs négatives (celles des points situés sous la droite) deviennent des valeurs positives. La somme de toutes les erreurs au carré est appelée RSS (Residual Sum of Squares), ou somme des carrés des résidus. La tâche du modèle linéaire est donc de trouver les valeurs de b1b_1 et b0b_0 qui minimisent la RSS. La formule de la RSS est la suivante :

RSS=(y1−B0^−B1^x1)2+(y2−B0^−B1^x2)2+…+(yn−B0^−B1^xn)2RSS = (y_1 - \hat{B_0} - \hat{B_1}x_1)^2 + (y_2 - \hat{B_0} - \hat{B_1}x_2)^2 + … + (y_n - \hat{B_0} - \hat{B_1}x_n)^2

Coefficient de détermination : R2

Pour estimer la force de la relation entre XX et YY, on peut utiliser le coefficient de détermination (coefficient of determination), également appelé R2R^2. Cette valeur va de 0 à 1. Si R2R^2 vaut 0, il n'existe aucune relation, et si R2R^2 vaut 1, la relation est parfaite, ce qui signifie que XX explique toute la variation de YY.

Hypothèses de la régression par la méthode des moindres carrés

Les hypothèses suivantes doivent être vérifiées pour pouvoir utiliser la méthode des moindres carrés :

  1. Les résidus doivent suivre une loi normale de moyenne 0. Cela peut être vérifié à l'aide d'un diagramme quantile-quantile (quantile-quantile plot). Si l'hypothèse est satisfaite, ce diagramme doit montrer une droite.
  2. Les résidus doivent avoir une variance constante. Cela peut être vérifié à l'aide d'un nuage de points (scatterplot) des résidus estimés en fonction des valeurs ajustées (fitted values). Le graphique doit montrer un nuage de points sans relation entre les valeurs.
  3. Les résidus doivent être indépendants les uns des autres. Cela pose rarement problème, sauf si une même personne, cellule, bactérie, unité, etc., figure plusieurs fois dans la population d'étude. Si une même personne figure plusieurs fois dans la population d'étude (par exemple en raison de mesures répétées de l'IMC et du glucose), les résidus de ces observations sont dépendants les uns des autres.

Les points (1) et (2) peuvent être examinés facilement dans R avec la commande suivante, qui renvoie tous les graphiques nécessaires :

plot(modell)
Residuals vs fitted : résidus représentés en fonction des valeurs ajustées (fitted values). Aucune tendance ne doit apparaître ici. Les points doivent former un nuage sans association entre les résidus et les valeurs ajustées.
Residuals vs fitted : résidus représentés en fonction des valeurs ajustées (fitted values). Aucune tendance ne doit apparaître ici. Les points doivent former un nuage sans association entre les résidus et les valeurs ajustées.
Diagramme quantile-quantile (QQ plot) : il doit montrer une droite parfaitement rectiligne, ce qui est le cas ici (même s'il existe un léger écart aux extrémités).
Diagramme quantile-quantile (QQ plot) : il doit montrer une droite parfaitement rectiligne, ce qui est le cas ici (même s'il existe un léger écart aux extrémités).
Diagramme Scale-Location : racine carrée des valeurs absolues des résidus standardisés en fonction des valeurs ajustées pour lm(glucose ~ mass)
Diagramme Residuals vs Leverage avec la distance de Cook pour lm(glucose ~ mass), où quelques observations sont numérotées

Prédiction par régression

Le modèle de régression peut servir à la prédiction. Cela signifie que nous pouvons estimer la valeur de Y pour une valeur donnée de X. Il peut par exemple être intéressant de prévoir quelle sera la valeur de glucose pour une valeur donnée de mass. Pour ce faire, nous créons maintenant un nouveau modèle avec la spécification glucose ~ ., ce qui signifie que nous modélisons glucose en fonction de toutes les autres variables. Nous utilisons ensuite predict() avec l'objet modèle (modell_2) en précisant les données sur lesquelles nous voulons tester le modèle. Ici, nous le testons sur les données mêmes qui ont servi à l'entraîner, ce qui n'est pas recommandé. Nous enregistrons la valeur prédite dans une nouvelle colonne (Predicted_Glucose) du même data frame. Enfin, nous affichons les 10 premières lignes avec les valeurs observées et les valeurs prédites.

modell_2 <- lm(glucose ~ ., data=PimaIndiansDiabetes)

PimaIndiansDiabetes$Predicted_Glucose <- predict(modell_2, newdata=PimaIndiansDiabetes)

select(PimaIndiansDiabetes, glucose, Predicted_Glucose) %>%
  slice(1:10)
        glucose     Predicted_Glucose
1	148	    134.03797
2	85	    100.53489
3	183	    130.46052
4	89	    106.04599
5	137	    145.69693
6	116	    106.94069
7	78	    128.57557
8	115	    98.26398
9	197	    181.40914
10	125	    136.97599

Régression multiple

Si nous voulons étudier comment l'IMC (mass) covarie avec le glucose (glucose) tout en tenant compte de l'âge, nous utilisons la régression multiple. La régression multiple se définit simplement comme une régression comportant au moins 2 prédicteurs. Elle obéit aux mêmes principes que la régression linéaire présentée jusqu'ici. La méthode des moindres carrés est utilisée comme d'habitude, mais dans ce cas on n'ajuste pas une droite de régression : on ajuste un plan de régression à travers les points de données. Ce plan a un aspect tridimensionnel, illustré ci-dessous avec les mêmes données. Le second prédicteur est pressure (pression artérielle).

Graphique tridimensionnel avec un plan de régression de glucose en fonction de mass et de pressure, échelle de couleurs selon la valeur du glucose

Le code du modèle de régression est le suivant :

modell_2 <- lm(glucose ~ mass + pressure, data=PimaIndiansDiabetes)
summary(modell_2)
Call:
lm(formula = glucose ~ mass + pressure, data = PimaIndiansDiabetes)

Residuals:
     Min       1Q   Median       3Q      Max
-129.725  -20.893   -3.277   19.206   80.092

Coefficients:
            Estimate Std. Error t value             Pr(>|t|)
(Intercept) 84.60294    5.48135  15.435 < 0.0000000000000002 ***
mass         0.78442    0.14834   5.288          0.000000161 ***
pressure     0.16201    0.06042   2.681              0.00749 **
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 31.08 on 765 degrees of freedom
Multiple R-squared:  0.05773,	Adjusted R-squared:  0.05526
F-statistic: 23.43 on 2 and 765 DF,  p-value: 0.0000000001326

Les coefficients s'interprètent comme suit.

  • Lorsque mass augmente de 1 unité, glucose augmente de 0,78442 unité. Cet effet est ajusté sur pressure.
  • Lorsque pressure augmente de 1 unité, glucose augmente de 0,16201 unité. Cet effet est ajusté sur mass.