Suite à une discussion au téléphone l'autre jour avec Elsa, j'ai voulu rajouter un petit billet - un peu technique - sur la multicolinéarité. Ou comment interpréter le signe (et la valeur) d'un coefficient dans une régression multiple.

  • Interpréter une régression avec des variables explicatives corrélées
Assez souvent en économétrie, les variables explicatives peuvent être corrélées. Ce qui peut introduire des erreurs d'interprétation. Considérons le petit modèle suivant, où l'on dispose de deux variables explicatives.
> library(mnormt)
> set.seed(1)
> Z=rmnorm(200,c(0,0),matrix(c(1,-.8,-.8,1),2,2))
> Y=1+2*Z[,1]+.5*Z[,2]+rnorm(200)
Si l'on se contente d'analyses univariées, on notera que semble décroitre avec .
> summary(lm(Y~Z[,2]))
Call:
lm(formula = Y ~ Z[, 2])
Coefficients:
            Estimate Std. Error t value Pr(>|t|)   
(Intercept)   1.0229     0.1132   9.038   <2e-16 ***
Z[, 2]       -1.0717     0.1171  -9.155   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 1.6 on 198 degrees of freedom
Multiple R-squared: 0.2974,     Adjusted R-squared: 0.2938
F-statistic: 83.81 on 1 and 198 DF,  p-value: < 2.2e-16

Pourtant, si l'on contrôle à l'aide la  variable , on s'aperçoit que l'impact de sur va plutôt dans l'autre sens, avec un signe positif, et significativement positif,
> summary(lm(Y~Z[,1]+Z[,2]))
Call:
lm(formula = Y ~ Z[, 1] + Z[, 2])
Coefficients:
            Estimate Std. Error t value Pr(>|t|)   
(Intercept)  0.95647    0.07597  12.591  < 2e-16 ***
Z[, 1]       2.04287    0.13082  15.615  < 2e-16 ***
Z[, 2]       0.45621    0.12541   3.638 0.000351 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 1.073 on 197 degrees of freedom
Multiple R-squared: 0.686,      Adjusted R-squared: 0.6828
F-statistic: 215.2 on 2 and 197 DF,  p-value: < 2.2e-16

Graphiquement, on a le modele suivant

autrement dit, croit fortement avec , mais a fixé, on note que est croissante avec . L'intuition derrière est qu'il faut regarder l'impact de sur pour des individus qui se ressemblent - ou identique - c'est à dire avec des valeurs de  proches. Si l'on considère le sous-échantillon des petites valeurs de , on obtient
> I=Z[,1]<(-1)
> plot(Z[,2],Y,xlab="",ylab="")
> abline(lm(Y[I]~Z[I,2]),col="red",lwd=2)

alors que pour les grandes valeurs de ,

Bref, l'impact négatif semble ici positif. En considérant un échantillon plus grand (en simulant 2000 valeurs au lieu de 200), on obtient des choses ressemblant à ça,

  • Interprétation sur le problème des tailles des classes
Si l'on revient au sujet de l'impact de la taille de la classe (dans les écoles) sur les résultats scolaires, on pourrait être dans la même configuration. Sans variable de contrôle, la taille de la classe impact de manière positive les résultats scolaires: plus la classe est nombreuse, meilleures sont les résultats. Or comme le notaient Angrist et Lavy (ici), la taille de la classe est très corrélée à des variables socio-économiques. Si l'on arrive à trouver de bonnes variables de contrôle, on peut parfaitement obtenir un impact négatif, comme dans l'exemple simulé ci-dessus...