{"word_count": 739, "character_count": 6969}
Depuis quelques jours, je mets en ligne des billets sur la régression sur des variables corrélés, en commençant par du deuxième effet kiss-cool suivi d'un court billet sur des régressions en cascade. Oui, depuis le premier, mon collègue Olivier ne cesse de demander des compléments. Alors ce soir, on va faire des dessins...On a ici 3 vecteurs, [latex]\color{red}{\vec{x_1}}[/latex], [latex]\color{green}{\vec{x_2}}[/latex] et [latex]\color{blue}{\vec{y}}[/latex]. Pour rappel, la longueur de mes vecteurs, c'est la variance de la variable associée, [latex]\|{\color{red}{\vec{x_1}}}\|=\text{Var}({\color{red}{x_1}})[/latex]. Et commençons par supposer que les variables [latex]\color{red}{x_1}[/latex] et [latex]\color{green}{x_2}[/latex] sont indépendantes (ou plus simplement non-corrélées) soit [latex]{\color{red}{\vec{x_1}}}\perp\color{green}{\vec{x_2}}[/latex]. C'est le dessin ci-dessous,La régression linéaire multiple est ici équivalente aux régressions simples, comme on en parlait dans les billets précédant. Géométriquement, on voit que les coordonnées de la projection de [latex]\color{blue}{\vec{y}}[/latex] sur l'espace engendré par [latex]\color{red}{\vec{x_1}}[/latex] et [latex]\color{green}{\vec{x_2}}[/latex] (c'est à dire le plan [latex](x,y)[/latex]) correpond au point noir. C'est la régression multiple. Les deux régressions simples sont obtenus en projetant respectivement sur sur l'espace engendré par [latex]\color{red}{\vec{x_1}}[/latex] (c'est à dire la droite [latex](x)[/latex]) et sur [latex]\color{green}{\vec{x_2}}[/latex] (c'est à dire la droite [latex](y)[/latex]).Supposons maintenant que [latex]\color{red}{\vec{x_1}}[/latex] et [latex]\color{green}{\vec{x_2}}[/latex] ne sont plus orthogonaux. Plus précisément, on va garder [latex]\color{red}{\vec{x_1}}[/latex] et [latex]\color{blue}{\vec{y}}[/latex] inchangés, et on va changer , [latex]\color{green}{\vec{x_2}}[/latex], tout en gardant la norme [latex]\|\color{green}{\vec{x_2}}\|[/latex] inchangée. C'est ce qu'on a sur le schéma ci-dessousOn avait vu qu'on ne pouvait plus faire deux régressions indépendantes, mais qu'on pouvait garder la première, et en faire ensuite une seconde, mais en faisant un peu attention. Pour la première régression, on va projeter [latex]\color{blue}{\vec{y}}[/latex] sur [latex]\color{red}{\vec{x_1}}[/latex] et ca c'est facile, rien n'a changé,Pour la seconde étape, rappelons qu'on doit projeter à la fois [latex]\color{blue}{\vec{y}}[/latex] et [latex]\color{green}{\vec{x_2}}[/latex] sur l'orthogonal de [latex]\color{red}{\vec{x_1}}[/latex], c'est à dire ici le plan [latex](y,z)[/latex], en rouge ci-dessous(je renvois au précédant billet pour les formules algébriques). On obtient alors les projections suivantes, qu'on pourrait noter [latex]\Pi_{\color{red}{x_1^{\perp}}}\color{blue}{\vec{y}}[/latex] et [latex]\Pi_{\color{red}{x_1^{\perp}}}\color{green}{\vec{x_2}}[/latex]On le voit, si on regarde sur le mur du fond, en rouge, la projection de [latex]\Pi_{\color{red}{x_1^{\perp}}}\color{blue}{\vec{y}}[/latex] sur [latex]\Pi_{\color{red}{x_1^{\perp}}}\color{green}{\vec{x_2}}[/latex] est un peu plus grande, autrement dit, le coefficient de la régression simple sera un peu plus grand. En fait, si on veut faire des calculs, on voit que le sinus de l'angle [latex]\langle\color{red}{\vec{x_1}},\color{green}{\vec{x_2}}\rangle[/latex] va intervenir ici... Plus l'angle [latex]\langle\color{red}{\vec{x_1}},\color{green}{\vec{x_2}}\rangle[/latex] sera petit, plus les variables seront corrélées, et plus la correction sera importante. Graphiquement, la correction dont je parle, c'est le petit segment, à gauche sur le dessinMais simulons quelques données pour visualiser tout ça...library(mnormt)n=10000r=0set.seed(1)Z=cbind(rnorm(n)*sqrt(2),rnorm(n)*sqrt(3))df=data.frame(y=Z[,1]+Z[,2]+rnorm(n)*sqrt(3),x1=Z[,1],x2=Z[,2])On simule ici des variables explicatives indépendamment. Et on peut vérifier que les distances sont bien celles de notre dessinvar(df$x1)[1] 2.049731var(df$x2)[1] 2.810419var(df$y)[1] 8.066665et en plus, les variables sont quasiment orthogonalescor(df$x1,df$x2)[1] 0.004845078Si on fait la régression multiplereg=lm(y~0+x1+x2,data=df)summary(reg)Coefficients:   Estimate Std. Error t value Pr(|t|)    x1  0.99904    0.01219   81.94   2e-16 ***x2  1.00090    0.01017   98.40   2e-16 ***On a des coefficients qui sont identiques (à très peu de choses près, mais le soucis vient du fait que j'ai enlevé la constante du modèle pour coller au mieux avec mon dessin)reg1=lm(y~0+x1,data=df)summary(reg1)Coefficients:   Estimate Std. Error t value Pr(|t|)    x1  1.00489    0.01711   58.75   2e-16 ***et pour la seconde régression aussireg2=lm(y~0+x2,data=df)summary(reg2)Coefficients:   Estimate Std. Error t value Pr(|t|)    x2  1.00496    0.01315   76.42   2e-16 ***On a déjà parlé de ce résultat longuement (je renvoie au précédant billet, des régressions en cascade). Regardons maintenant ce qui se passe si on garde nos observations [latex]\color{blue}{y_i}[/latex], [latex]\color{red}{x_{1,i}}[/latex] mais que maintenant, la variable [latex]\color{red}{x_{2,i}}[/latex] se retrouve corrélée avec [latex]\color{red}{x_{1,i}}[/latex] , disons avec une corrélation de l'ordre de 0.4r=.4df$x2=r*df$x1+sqrt(1-r^2)*df$x2cor(df$x1,df$x2)[1] 0.3461496Faire la régression multiple  donne icireg=lm(y~0+x1+x2,data=df)summary(reg)Coefficients:   Estimate Std. Error t value Pr(|t|)    x1   0.5622     0.0130   43.26   2e-16 ***x2   1.0921     0.0111   98.40   2e-16 ***ce qui est différent des régressions simples, comme la premièrereg1=lm(y~0+x1,data=df)summary(reg1)Coefficients:   Estimate Std. Error t value Pr(|t|)    x1  1.00489    0.01711   58.75   2e-16 ***Ce que nous dit le théorème de Frisch-Waugh, c'est qu'on peut faire des régressions en cascades: on peut garder cette première régression, mais pour la seconde, on va régresser les projections sur l'orthogonal à [latex]\color{red}{\vec{x_1}}[/latex] (le mur en rouge au fond dans notre dessin). Ici, on obtientreg2bis=lm(residuals(lm(y~x1,data=df))~residuals(lm(x2~x1,data=df)))summary(reg2bis)Coefficients:           Estimate Std. Error t value Pr(|t|)      residuals(2) 1.0921     0.0111    98.4   2e-16 ***qui donne effectivement un coefficient de régression un peu supérieur à celui que nous avions auparavant, comme nous l'observions sur le dessin. En fait on peut remarquer que la différence relative s'obtient très facilement avec la corrélation1/sqrt(1-r^2)[1] 1.091089et pour rappel, d'un point de vue géométrique, la corrélation est un cosinus d'un angle, [latex]r=\cos(\langle\color{red}{\vec{x_1}},\color{green}{\vec{x_2}}\rangle)[/latex]. Autrement dit [latex]\sqrt{1-r^2}=\sin(\langle\color{red}{\vec{x_1}},\color{green}{\vec{x_2}}\rangle)[/latex], c'est à dire que la correction est directement liée au sinus de l'angle [latex]\langle\color{red}{\vec{x_1}},\color{green}{\vec{x_2}}\rangle[/latex], comme mentionné auparavant... amusant, non?