2.2 Problème de colinéarité
Supposons, par exemple, que l’on s’intéresse aux inégalités de genre sur le marché du travail. Pour ce faire, il est tentant de considèrer le sexe à l’état-civil, et l’on peut songer à définir une variable Xf qui vaut 1 si le sexe déclaré à l’état-civil est féminin et 0 sinon, et Xm qui vaut 1 si le sexe déclaré à l’état-civil est masculin, et 0 sinon. Dans la plupart des cas, dans les fichiers administratifs Xf et Xm délimitent deux catégories (i) mutuellement exclusives et (ii) qui recouvrent tous les cas possibles. On pourrait alors penser à estimer la régression du salaire Y sur ces variables, c’est-à-dire à chercher le triplet (α,βf,βm) tel quel : {Y=α+βfXf+βmXm+ϵE[ϵ]=0Pour tout i dans {f,m},C(Xi,ϵ)=0
Le problème est qu’en réalité, ce triplet n’est pas identifié, c’est-à-dire que le problème n’a pas de solution unique. En effet, si on note ˉwm le salaire moyen des hommes, et ˉwf le salaire moyen des femmes, alors les triplets (α,βf,βm):=(0,ˉwf,ˉwm) et (α,βf,βm):=(wf,0,ˉwm−ˉwf) sont deux solutions possibles du problème.
Le problème vient en fait de ce que les variables Xf et Xm délimitent des catégories mutuellement exclusives et qui couvrent la totalité des cas. Cela entraîne en particulier que Xf+Xm=1. Ainsi, il est possible d’écrire Xf comme une combinaison linéaire de la variable aléatoire constante égale à 1 et de Xm : Xf=1−Xm. On dit souvent que ces variables sont colinéaires. Cette colinéarité implique que la matrice de variance-covariance du couple (Xf,Xm) n’est pas inversible (voir 1.4.2). De ce fait, on enfreint la condition à laquelle le problème des moindres carrés ordinaires admet une solution unique.
Le fragment de code suivant met en évidence ce problème à partir des données du Current Population Survey.
library(AER,
quietly=TRUE)
library(data.table,
quietly=TRUE)
#On charge dans un premier temps les données du CPS 1985
data("CPS1985")
<-data.table(CPS1985)
CPS
#On crée deux variables dichotomiques indiquant le sexe déclaré dans
#l'enquête
CPS[,c("female",
"male"):=list(as.numeric(gender=="female"),
as.numeric(gender=="male"))]
#On estime le salaire moyen des femmes et le salaire moyen des hommes
<-CPS[,
mean_wageslist(mean_wage=mean(wage)),
=c("gender")]
by
#On crée les résidus et les valeurs prédites pour les deux choix de paramètres
# proposés
$residu_model1<-
CPS$wage-
CPS=="female"]$mean_wage*CPS$female-
mean_wages[gender=="male"]$mean_wage*CPS$male
mean_wages[gender$residu_model2<-
CPS$wage-
CPS=="female"]$mean_wage-
mean_wages[gender=="male"]$mean_wage-
(mean_wages[gender=="female"]$mean_wage)*
mean_wages[gender$male
CPS
$valpred_model1<-
CPS=="female"]$mean_wage*CPS$female+
mean_wages[gender=="male"]$mean_wage*
mean_wages[gender$male
CPS$valpred_model2<-
CPS=="female"]$mean_wage+
mean_wages[gender=="male"]$mean_wage-
(mean_wages[gender=="female"]$mean_wage)*
mean_wages[gender$male
CPS
#On peut vérifier que les deux résidus vérifient bien les hypothèses
#Nullité en moyenne
all.equal(mean(CPS$residu_model1),
0)
## [1] TRUE
all.equal(mean(CPS$residu_model2),
0)
## [1] TRUE
#Corrélation nulle avec les variables indépendantes
all.equal(cov(CPS$residu_model1,
$male),
CPS0)
## [1] TRUE
all.equal(cov(CPS$residu_model1,
$female),
CPS0)
## [1] TRUE
all.equal(cov(CPS$residu_model2,
$male),
CPS0)
## [1] TRUE
all.equal(cov(CPS$residu_model2,
$female),
CPS0)
## [1] TRUE
#En fait ces deux résidus sont identiques
all.equal(CPS$residu_model1,
$residu_model2) CPS
## [1] TRUE
# ou, ce qui revient au même, les valeurs prédites sont les mêmes
all.equal(CPS$valpred_model1,
$valpred_model2) CPS
## [1] TRUE
#On peut voir que la matrice de variance-covariance des deux variables n'est pas
# inversible
cov(CPS[,c("male",
"female")])
## male female
## male 0.2487685 -0.2487685
## female -0.2487685 0.2487685
L’exemple précédent vient rappeler le rôle important que joue l’hypothèse selon laquelle la matrice de variance-covariance est inversible. Cette hypothèse est parfois appelée condition de rang. Comme on l’a vu, cette hypothèse est vérifiée si et seulement si les composantes de X et la variable aléatoire constante égale à 1 sont linéairement indépendantes. En d’autres termes, la matrice de variance-covariance est inversible si et seulement s’il est impossible d’écrire une des composantes de X comme la somme d’une constante et d’une combinaison linéaire de toutes les autres composantes.
Pour le dire simplement, le problème lorsque la condition de rang n’est pas respectée, c’est-à-dire lorsque l’on peut écrire une des composantes Xd de X comme une fonction affine des autres composantes, est qu’il n’est plus possible de faire la différence entre les variations de Y associées aux variations de Xd et celles qui sont associées aux variations des autres composantes de Xd. On parle alors de colinéarité, et on dit parfois que les paramètres ne sont pas identifiés (au sens où il n’y a pas unicité des solutions). La lectrice ou le lecteur intéressé par une preuve plus formelle du fait que lorsque la condition de rang n’est pas respectée, le problème des moindres carrés ordinaires admet de multiples solutions se reportera à l’Annexe A.3.
Comme on l’a vu dans l’exemple initial, un cas de colinéarité très courant en pratique est lié aux variables indicatrices dichotomiques, c’est-à-dire aux variables qui prennent la valeur 1 pour un certain sous-ensemble de la population d’intérêt7, et 0 sinon.
De façon générale, si la population d’intérêt peut être découpée en d sous-ensembles non-vides disjoints, avec les variables indicatrices X1 à Xd, alors ∑di=1Xi=1. Cette égalité signifie simplement que tous les éléments de l’ensemble de départ appartiennent à exactement un de ces sous-ensembles. Elle implique donc que ces variables indicatrices et la variable aléatoire constante ne sont pas linéairement indépendantes, et les paramètres du modèle qui décompose la variable dépendante Y sous la forme Y=α+∑di=1βiXi+ϵ, avec les hypothèses usuelles n’est pas identifié.
Remarque
Les solutions au problème de colinéarité impliquent d’imposer des contraintes supplémentaires sur les paramètres du modèle. En particulier, il est courant d’imposer la nullité de certains coefficients, que cela soit le terme constant ou sur les variables du modèle. En pratique, cette contrainte est équivalente à l’omission d’une variable. Dans le cas des variables indicatrices, cette omission équivaut au choix du groupe de référence.
Par exemple, en revenant à l’équation de salaire et à la variable de sexe à l’état-civil, on pourrait considérer les modèles Y=βfXf+βmXm+ϵ, ou bien Y=α+βfXf+ϵ, ou encore Y=α+βmXm+ϵ. L’interprétation des coefficients sera en revanche très différente selon le choix de modèle estimé. Ainsi, dans le premier cas, chacun des deux coefficients βm et βf correspond au salaire moyen pour un sexe. Dans le second cas, le terme constant α correspond au salaire moyen des hommes, et le terme βf à la différence algébrique entre le salaire moyen des femmes et le salaire moyen des hommes. Dans le dernier cas, le terme constant α correspond au salaire moyen des femmes, et le terme βf à la différence algébrique entre le salaire moyen des hommes et le salaire moyen des femmes. Le choix du niveau de référence est en général anodin du point de vue des propriétés statistiques des estimateurs ; en revanche, ce choix doit être guidé par une bonne compréhension de la question empirique qu’il s’agit d’étudier.
Le fragment de code suivant illustre la discussion précédente sur le cas de la régression linéaire du salaire sur les variables indicatrices de sexe dans le cas des données du Current Population Survey.
library(AER,
quietly=TRUE)
library(data.table,
quietly=TRUE)
#On charge dans un premier temps les données du CPS 1985
data("CPS1985")
<-data.table(CPS1985)
CPS
#On crée deux variables dichotomiques indiquant le sexe déclaré dans
#l'enquête
CPS[,c("female",
"male"):=list(as.numeric(gender=="female"),
as.numeric(gender=="male"))]
#On régresse d'abord le salaire sur les deux indicatrices de sexe
<-lm(wage~female + male,
main_regdata=CPS)
main_reg
##
## Call:
## lm(formula = wage ~ female + male, data = CPS)
##
## Coefficients:
## (Intercept) female male
## 9.995 -2.116 NA
#On régresse le salaire sur les deux indicatrices de sexe sans constante
<-lm(wage~female + male - 1,
noconstant_regdata=CPS)
noconstant_reg
##
## Call:
## lm(formula = wage ~ female + male - 1, data = CPS)
##
## Coefficients:
## female male
## 7.879 9.995
#On compare les résultats aux salaires moyens par sexe
all.equal(as.numeric(noconstant_reg$coefficients["female"]),
mean(CPS[female==1]$wage))
## [1] TRUE
all.equal(as.numeric(noconstant_reg$coefficients["male"]),
mean(CPS[male==1]$wage))
## [1] TRUE
#On régresse le salaire sur la constante et l'indicatrice d'être un homme
<-lm(wage~male,
omitfemale_regdata=CPS)
omitfemale_reg
##
## Call:
## lm(formula = wage ~ male, data = CPS)
##
## Coefficients:
## (Intercept) male
## 7.879 2.116
#On compare les résultats aux salaires moyens par sexe
all.equal(as.numeric(omitfemale_reg$coefficients["(Intercept)"]),
mean(CPS[female==1]$wage))
## [1] TRUE
all.equal(as.numeric(omitfemale_reg$coefficients["male"]),
mean(CPS[male==1]$wage)-mean(CPS[female==1]$wage))
## [1] TRUE
La suite de ce texte fait référence régulièrement de cette façon au découpage d’une population en plusieurs sous-ensembles, faisant référence plus ou moins implicitement au cas où l’expérience aléatoire sur laquelle toutes les variables aléatoires sont définies correspond au tirage d’un individu dans une population. Les résultats mis en avant sont cependant bien plus généraux que cette situation courante en sciences sociales, et en particulier valent dans de nombreux cas où il est difficile de qualifier de population, et a fortiori de population humaines, l’ensemble sur lequel sont définies ces variables aléatoires. Il peut s’agir par exemple d’un ensemble de dates, d’ouvrages, d’objets etc. sans changer le contenu de tout ce qui suit.↩︎