Diagnostics de régression OLS
Les diagnostics OLS permettent de vérifier si les hypothèses du
modèle linéaire sont satisfaites. Nous les appliquons au jeu de données
swiss (package datasets), qui
recense des indicateurs socioéconomiques pour 47 provinces francophones
suisses en 1888.
Packages pertinents: datasets,
car, lmtest, sandwich
1. Le jeu de données et le modèle
1.1 Aperçu des données
data(swiss)
head(swiss)
## Fertility Agriculture Examination Education Catholic
## Courtelary 80.2 17.0 15 12 9.96
## Delemont 83.1 45.1 6 9 84.84
## Franches-Mnt 92.5 39.7 5 5 93.40
## Moutier 85.8 36.5 12 7 33.77
## Neuveville 76.9 43.5 17 15 5.16
## Porrentruy 76.1 35.3 9 7 90.57
## Infant.Mortality
## Courtelary 22.2
## Delemont 22.2
## Franches-Mnt 20.2
## Moutier 20.3
## Neuveville 20.6
## Porrentruy 26.6
Le jeu de données contient 47 observations et 6 variables:
Fertility: taux standardisé de fécondité (variable dépendante)Agriculture: % d’hommes travaillant dans l’agricultureEducation: % de recrues militaires ayant dépassé l’école primaireCatholic: % de catholiques (vs. protestants)
Modèle estimé
Nous estimons l’effet de l’agriculture, de l’éducation et de la religion sur la fécondité:
\[\widehat{\text{Fertility}}_i = \hat{\beta}_0 + \hat{\beta}_1\,\text{Agriculture}_i + \hat{\beta}_2\,\text{Education}_i + \hat{\beta}_3\,\text{Catholic}_i + \varepsilon_i\]
Ce modèle est pertinent car il reflète une question classique en démographie historique: quels facteurs structurels expliquent les différences de fécondité entre cantons suisses à la fin du XIXe siècle?
1.2 Estimation du modèle
mod <- lm(Fertility ~ Agriculture + Education + Catholic, data = swiss)
summary(mod)
##
## Call:
## lm(formula = Fertility ~ Agriculture + Education + Catholic,
## data = swiss)
##
## Residuals:
## Min 1Q Median 3Q Max
## -15.178 -6.548 1.379 5.822 14.840
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 86.22502 4.73472 18.211 < 2e-16 ***
## Agriculture -0.20304 0.07115 -2.854 0.00662 **
## Education -1.07215 0.15580 -6.881 1.91e-08 ***
## Catholic 0.14520 0.03015 4.817 1.84e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 7.728 on 43 degrees of freedom
## Multiple R-squared: 0.6423, Adjusted R-squared: 0.6173
## F-statistic: 25.73 on 3 and 43 DF, p-value: 1.089e-09
Exercice
Estimez le modèle et interprétez chaque coefficient ainsi que le \(R^2\) dans le contexte de cette étude.
Interprétation des coefficients :
- \(\hat{\beta}_0 = 86.23\) : fécondité prédite pour une province avec 0% d’agriculture, 0% d’éducation supérieure et 0% de catholiques. Peu interprétable substantivement, mais ancre le modèle.
- \(\hat{\beta}_1 = -0.203\) (Agriculture, \(p = 0.007\)) : chaque point de pourcentage supplémentaire d’hommes dans l’agriculture est associé en moyenne à une baisse de 0.20 point de fécondité, toutes choses égales. Ce résultat peut paraître contre-intuitif, mais s’explique par le fait que les cantons plus agricoles en 1888 tendaient aussi à être protestants et moins éduqués. Une fois que l’on contrôle pour l’éducation et la religion, l’agriculture révèle un effet négatif résiduel.
- \(\hat{\beta}_2 = -1.072\) (Education, \(p < 0.001\)) : chaque point de pourcentage supplémentaire d’éducation supérieure est associé à une baisse de 1.07 points de fécondité. C’est le prédicteur le plus fort du modèle.
- \(\hat{\beta}_3 = 0.145\) (Catholic, \(p < 0.001\)) : chaque point de pourcentage supplémentaire de catholiques est associé à une hausse de 0.15 point de fécondité, toutes choses égales.
Le modèle explique 64% de la variance (\(R^2 = 0.642\)), ce qui est substantiel, surtout pour des données agrégées historiques.
2. Données inhabituelles: leviers, résidus, influence
2.1 La matrice chapeau et les leviers
Le levier \(h_{ii}\) mesure l’influence potentielle d’une observation sur les coefficients — basé uniquement sur sa position dans l’espace des prédicteurs \(\mathbf{X}\), indépendamment de \(y_i\).
\[\mathbf{H} = \mathbf{X}(\mathbf{X}'\mathbf{X})^{-1}\mathbf{X}', \quad h_{ii} = \mathbf{x}_i'(\mathbf{X}'\mathbf{X})^{-1}\mathbf{x}_i\]
Seuil empirique: \(h_{ii} > 2(k+1)/n\)
n <- nrow(swiss)
k <- 3 # Agriculture, Education, Catholic
seuil_levier <- 2 * (k + 1) / n
round(seuil_levier, 3)
## [1] 0.17
hat_vals <- hatvalues(mod)
hat_vals
## Courtelary Delemont Franches-Mnt Moutier Neuveville Porrentruy
## 0.09508174 0.06608974 0.12663318 0.05522591 0.04101996 0.12561333
## Broye Glane Gruyere Sarine Veveyse Aigle
## 0.05813563 0.06178212 0.07532280 0.06677811 0.06530904 0.06289975
## Aubonne Avenches Cossonay Echallens Grandson Lausanne
## 0.07406457 0.06460185 0.07639677 0.05968830 0.06133548 0.09395597
## La Vallee Lavaux Morges Moudon Nyone Orbe
## 0.07675957 0.09978790 0.05484826 0.05879560 0.03284225 0.04848798
## Oron Payerne Paysd'enhaut Rolle Vevey Yverdon
## 0.08570120 0.04914880 0.06662873 0.05398449 0.04684066 0.04094843
## Conthey Entremont Herens Martigwy Monthey St Maurice
## 0.08950952 0.09179174 0.09923514 0.07504439 0.07416766 0.07686721
## Sierre Sion Boudry La Chauxdfnd Le Locle Neuchatel
## 0.08639200 0.06679670 0.03904427 0.15527423 0.09035896 0.12652423
## Val de Ruz ValdeTravers V. De Geneve Rive Droite Rive Gauche
## 0.05757509 0.12781384 0.45439561 0.13589989 0.10860138
leviers_eleves <- which(hat_vals > seuil_levier)
round(sort(hat_vals[leviers_eleves], decreasing = TRUE), 3)
## V. De Geneve
## 0.454
Interprétation: Avec \(n = 47\) et \(k+1 = 4\), le seuil est \(2 \times 4/47 \approx 0.17\). Une seule province dépasse ce seuil: V. De Geneve (\(h_{ii} = 0.454\)). Genève est radicalement atypique dans l’espace des prédicteurs — très peu d’agriculture, éducation élevée, quasi-aucun catholique. Son profil est si éloigné de la moyenne des prédicteurs qu’elle détient à elle seule un pouvoir potentiel considérable sur les coefficients. Cela dit, le levier ne mesure que le potentiel d’influence — la distance de Cook déterminera si ce potentiel est réellement exercé.
2.2 Distance de Cook et graphique d’influence
La distance de Cook mesure l’influence réelle en combinant levier et résidu:
\[D_i = \frac{r_i^2}{k+1}\left(\frac{h_{ii}}{1-h_{ii}}\right)\]
Seuil: \(D_i > 4/n\)
influencePlot(mod,
main = "Graphique d'influence — swiss",
sub = "Taille des cercles proportionnelle à la distance de Cook")
## StudRes Hat CookD
## Neuveville 2.03100984 0.04101996 0.0411227119
## La Chauxdfnd -1.30151919 0.15527423 0.0766076148
## Neuchatel 1.94289778 0.12652423 0.1284116005
## V. De Geneve -0.05288177 0.45439561 0.0005960716
## Rive Gauche -2.16798412 0.10860138 0.1318152674
cook_vals <- cooks.distance(mod)
seuil_cook <- 4 / n
round(seuil_cook, 3)
## [1] 0.085
obs_influentes <- which(cook_vals > seuil_cook)
print(round(sort(cook_vals[obs_influentes], decreasing = TRUE), 4))
## Rive Gauche Neuchatel
## 0.1318 0.1284
Interprétation: Avec un seuil de \(4/47 \approx 0.085\), deux provinces dépassent le seuil:
- Rive Gauche (\(D_i = 0.132\)): résidu studentisé de \(-2.17\) (le modèle sur-prédit fortement sa fécondité) combiné à un levier de 0.109. C’est l’observation la plus influente du jeu de données.
- Neuchatel (\(D_i = 0.128\)): résidu de \(+1.94\) (sous-prédit) et levier de 0.127. Les deux provinces exercent une traction mesurable sur les coefficients.
Le cas de V. De Geneve illustre parfaitement que levier \(\neq\) influence: malgré son levier extrême (\(h_{ii} = 0.454\), le plus élevé de loin), son \(D_i\) est quasi-nul (\(0.0006\)) car son résidu studentisé est de seulement \(-0.053\) — le modèle prédit parfaitement sa fécondité. Un fort levier sans résidu ne déplace pas les coefficients.
2.3 Résidus studentisés et test de Bonferroni
Les résidus studentisés externes (jackknife) permettent de comparer les résidus sur une échelle commune, en réestimant \(\hat{\sigma}\) sans l’observation \(i\) à chaque fois:
\[r_i^* = \frac{e_i}{\hat{\sigma}_{(-i)}\sqrt{1-h_{ii}}}\]
Le test de Bonferroni teste formellement si le plus grand \(|r_i^*|\) constitue une valeur aberrante, en corrigeant pour les \(n\) comparaisons multiples:
outlierTest(mod)
## No Studentized residuals with Bonferroni p < 0.05
## Largest |rstudent|:
## rstudent unadjusted p-value Bonferroni p
## Rive Gauche -2.167984 0.035875 NA
rstud <- rstudent(mod)
print(round(sort(abs(rstud), decreasing = TRUE)[1:5], 3))
## Rive Gauche Neuveville Glane Neuchatel Sierre
## 2.168 2.031 1.990 1.943 1.646
Interprétation: Rive Gauche a le
plus grand résidu en valeur absolue (\(r^* =
-2.168\)) et une \(p\)-valeur
brute de \(0.036\) —
ce qui est inférieur à 0.05 et pourrait, à première vue, signaler une
valeur aberrante. Cependant, il s’agit d’une \(p\)-valeur non-corrigée,
calculée comme si on ne testait qu’une seule observation. Or, on teste
simultanément les \(n = 47\) résidus.
La correction de Bonferroni multiplie cette \(p\)-valeur par \(n\): \(0.036
\times 47 = 1.69\). Puisqu’une probabilité ne peut dépasser 1, R
affiche NA — c’est sa façon d’indiquer que la \(p\)-valeur ajustée est techniquement \(> 1\), donc certainement non
significative. Le message
No Studentized residuals with Bonferroni p < 0.05
confirme qu’aucune valeur aberrante n’est formellement
identifiée. Les provinces de Neuveville (\(r^* = 2.031\)), Glane
(\(r^* = 1.990\)) et
Neuchatel (\(r^* =
1.943\)) ont aussi des résidus relativement élevés. Ce sont des
provinces difficiles à prédire par le modèle, non des erreurs de
mesure.
3. Non-linéarité
3.1 Graphiques CPR (Component + Residual Plots)
Les CPR plots tracent, pour chaque prédicteur \(x_j\), la quantité \(\hat{\beta}_j x_{ij} + e_i\) — c’est-à-dire \(y_i\) moins la contribution de toutes les autres variables. Si la courbe loess (rouge) suit la droite de régression (bleue), la relation est linéaire.
crPlots(mod,
col.lines = c("blue", "#de1d5b"),
main = "CPR plots — swiss")
Interprétation:
- Agriculture: la courbe loess présente une légère inflexion aux valeurs intermédiaires, mais reste proche de la droite. Pas de non-linéarité flagrante.
- Education: la courbe loess suit de très près la droite de régression. Relation linéaire bien spécifiée.
- Catholic: déviation modeste.
3.2 Graphiques AVP (Added Variable Plots)
Les AVP montrent l’effet net et partiel de chaque prédicteur après contrôle pour toutes les autres variables. La pente de la droite est exactement \(\hat{\beta}_j\).
avPlots(mod,
col.lines = "#de1d5b",
main = "AVP — swiss")
Interprétation:
- Education: pente fortement négative (\(\hat{\beta}_2 = -1.072\)), nuage de points bien aligné. L’effet de l’éducation est la relation la plus robuste du modèle.
- Catholic: pente positive bien définie (\(\hat{\beta}_3 = 0.145\)), avec les provinces très catholiques (>90%) qui ancrent la droite à droite.
- Agriculture: pente négative modeste (\(\hat{\beta}_1 = -0.203\)) — l’effet est réel mais moins marqué que pour les deux autres prédicteurs.
3.3 Test RESET de Ramsey
Le test RESET ajoute \(\hat{y}^2\) et \(\hat{y}^3\) comme régresseurs supplémentaires et teste si leurs coefficients sont conjointement nuls:
\[H_0: \text{la spécification linéaire est correcte (les termes non-linéaires n'améliorent pas le modèle)}\]
resettest(mod, power = 2:3, type = "fitted")
##
## RESET test
##
## data: mod
## RESET = 0.055965, df1 = 2, df2 = 41, p-value = 0.9456
Interprétation: \(F(2, 41) = 0.056\), \(p = 0.946\) — on ne rejette clairement pas \(H_0\). Malgré les légères déviations visuelles dans les CPR plots (notamment pour Agriculture et Catholic aux extrêmes), elles ne sont pas suffisamment importantes pour invalider la spécification linéaire. Les termes \(\hat{y}^2\) et \(\hat{y}^3\) n’ajoutent rien au modèle.
Exercice 1
À des fins strictement pédagogiques, explorons si ajouter
I(Agriculture^2) améliore le modèle. Réestimez-le avec ce
terme quadratique et relancez le test RESET. Les résultats
changent-ils?
# Votre code ici
mod2 <- lm(Fertility ~ Agriculture + I(Agriculture^2) + Education + Catholic,
data = swiss)
summary(mod2)
##
## Call:
## lm(formula = Fertility ~ Agriculture + I(Agriculture^2) + Education +
## Catholic, data = swiss)
##
## Residuals:
## Min 1Q Median 3Q Max
## -16.266 -5.624 1.450 4.988 13.873
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 81.168342 6.811567 11.916 4.66e-15 ***
## Agriculture 0.024091 0.231306 0.104 0.918
## I(Agriculture^2) -0.002344 0.002272 -1.032 0.308
## Education -1.028327 0.161372 -6.372 1.16e-07 ***
## Catholic 0.151721 0.030779 4.929 1.34e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 7.722 on 42 degrees of freedom
## Multiple R-squared: 0.6511, Adjusted R-squared: 0.6179
## F-statistic: 19.59 on 4 and 42 DF, p-value: 3.658e-09
resettest(mod2, power = 2:3, type = "fitted")
##
## RESET test
##
## data: mod2
## RESET = 0.30219, df1 = 2, df2 = 40, p-value = 0.7409
Le terme I(Agriculture^2) n’est pas significatif (\(p = 0.308\)) et le RESET reste
non-significatif après son ajout (\(p =
0.741\)). Les coefficients d’Education et Catholic restent
quasi-identiques. Cela confirme que la spécification linéaire d’origine
est adéquate. Il n’y avait pas de non-linéarité à corriger.
4. Hétéroscédasticité
4.1 Graphique Scale-Location
Le graphique Scale-Location trace \(\sqrt{|r_i|}\) en fonction de \(\hat{y}_i\). Une courbe loess horizontale indique une variance constante des résidus (homoscédasticité).
plot(mod, which = 3,
col = "#de1d5b",
main = "Scale-Location — swiss")
Interprétation: La courbe loess est relativement plate, sans tendance systématique à la hausse ou à la baisse. Il n’y a pas d’évidence visuelle d’hétéroscédasticité. La dispersion des résidus semble constante sur l’ensemble de la plage des valeurs ajustées.
4.2 Test de Breusch-Pagan
Le test de Breusch-Pagan régresse \(e_i^2\) sur les prédicteurs et teste si les variances résiduelles dépendent de \(\mathbf{x}_i\):
\[H_0: \text{Var}(\varepsilon_i \mid \mathbf{x}_i) = \sigma^2 \quad \forall i \quad \text{(homoscédasticité)}\]
Sous \(H_0\), \(BP \sim \chi^2(k)\) avec \(k = 3\) degrés de liberté.
bptest(mod)
##
## studentized Breusch-Pagan test
##
## data: mod
## BP = 2.7503, df = 3, p-value = 0.4317
Interprétation: \(\chi^2(3) = 2.750\), \(p = 0.432\) — on ne rejette pas \(H_0\). Il n’y a aucune évidence statistique d’hétéroscédasticité. Les erreurs-types OLS classiques sont valides pour l’inférence dans ce modèle.
5. Non-normalité des erreurs
Avec \(n = 47\), l’hypothèse de normalité des résidus est importante pour la validité des tests \(t\) en petit échantillon.
5.1 Graphique Q-Q
plot(mod, which = 2,
col = "#de1d5b",
main = "Q-Q plot des résidus studentisés — swiss")
Interprétation: Les points suivent bien la diagonale sur la majeure partie de la distribution. Les légères déviations aux extrêmes (Rive Gauche en queue inférieure et Neuveville en queue supérieure) correspondent aux observations à résidus élevés identifiées en section 2, mais restent dans des limites acceptables. Il n’y a pas de déviation en S (asymétrie) ni de valeurs extrêmes très lourdes.
5.2 Test de Shapiro-Wilk
\[H_0: \text{les résidus sont normalement distribués}\]
shapiro.test(residuals(mod))
##
## Shapiro-Wilk normality test
##
## data: residuals(mod)
## W = 0.97153, p-value = 0.3027
Interprétation: \(W = 0.972\), \(p = 0.303\). On ne rejette pas \(H_0\). Les résidus sont tout à fait compatibles avec une distribution normale. L’hypothèse est satisfaite, ce qui valide les tests \(t\) et les intervalles de confiance malgré le petit \(n = 47\).
Exercice 2
Retirez l’observation Rive Gauche (la plus influente selon Cook’s D) et réestimez le modèle. Comparez les coefficients avant et après retrait. Les conclusions changent-elles substantiellement? Est-il justifié de la retirer?
# Votre code ici
swiss_sans <- swiss[rownames(swiss) != "Rive Gauche", ]
mod_sans <- lm(Fertility ~ Agriculture + Education + Catholic,
data = swiss_sans)
round(coef(mod), 3)
## (Intercept) Agriculture Education Catholic
## 86.225 -0.203 -1.072 0.145
round(coef(mod_sans), 3)
## (Intercept) Agriculture Education Catholic
## 85.544 -0.204 -0.997 0.152
shapiro.test(residuals(mod_sans))
##
## Shapiro-Wilk normality test
##
## data: residuals(mod_sans)
## W = 0.9611, p-value = 0.1265
Les coefficients bougent très peu. La normalité reste non-rejetée (\(p = 0.1265\)). Rive Gauche ne devrait pas être retirée: bien qu’influente au sens de Cook, elle représente une province réelle avec des caractéristiques légitimes (non une erreur de saisie, on le présume), et son retrait ne modifie pas substantiellement les résultats.
Bilan
Le modèle Fertility ~ Agriculture + Education + Catholic
passe l’ensemble des diagnostics sans problème majeur:
- Données inhabituelles: V. De Geneve a le levier le plus élevé (\(h = 0.454\)) mais un résidu quasi-nul. Elle n’influence pas les coefficients. Rive Gauche et Neuchatel ont les \(D_i\) les plus élevés, mais restent sous le seuil d’influence sévère. Aucune valeur aberrante formelle (Bonferroni).
- Non-linéarité: RESET \(p = 0.946\): spécification linéaire adéquate, confirmée par les CPR plots.
- Hétéroscédasticité: BP \(p = 0.432\): erreurs-types OLS valides.
- Normalité: Shapiro-Wilk \(p = 0.303\): hypothèse satisfaite malgré le petit \(n\).
Les trois coefficients sont robustes et substantivement interprétables: l’éducation réduit fortement la fécondité (\(\hat{\beta}_2 = -1.072\)), la religion catholique l’augmente (\(\hat{\beta}_3 = 0.145\)), et l’agriculture la réduit modestement (\(\hat{\beta}_1 = -0.203\)).