2 La régression linéaire multiple
Exercice 1 (Question de cours) A, A, B, B, B, C.
Exercice 2 (Covariance de
Exercice 3 (Théorème de Gauss Markov) Nous devons montrer que, parmi tous les estimateurs linéaires sans biais, l’estimateur de MC est celui qui a la plus petite variance. La linéarité de
Exercice 4 (Représentation des variables) Nous représentons les données dans
Dans le premier modèle, nous projetons
Considérons
Exercice 5 (Modèles emboîtés) Nous obtenons
En conclusion, lorsque les modèles sont emboîtés
Exercice 6 La matrice
Exercice 7 (Changement d’échelle des variables explicatives) Nous avons l’estimation sur le modèle avec les variables originales qui minimise
Nous avons l’estimation sur le modèle avec les variables prémultipliées par
en posant en dernière ligne
Exercice 8 (Différence entre régression multiple et régressions simples)
Calculons l’estimateur des MCO noté traditionnellement
avec la matrice qui possède ici deux colonnes (notées ici et ) et lignes. On a donc Son déterminant est et son inverse est Ensuite est simplement le vecteur colonne de coordonnées et . En rassemblant le tout nous avons Si (les deux vecteurs sont orthogonaux) alors cette écriture se simplifie enCalculons l’estimateur des MCO noté traditionnellement
avec la matrice qui possède ici une colonne (notée ici ) et lignes. On a donc Passons maintenant à la matrice qui possède ici une colonne (notée ici ) et lignes. On a doncEn général les coefficients des régressions simples ne sont pas ceux obtenus par régression multiple sauf si les variables sont orthogonales.
Nous avons ici les résidus de la première régression qui sont
La deuxième régression (sur les résidus) donne le coefficient La régression séquentielle donne des coefficients différents des régressions univariées ou bivariées sauf si les variables sont orthogonales. \end{enumerate}
Exercice 9 (TP : différence entre régression multiple et régressions simples)
Simulons 2 variables explicatives avec GNU-R pour
individus selon selon deux loi uniforme :<- 100 n set.seed(4321) # pour fixer les simulations <- runif(n) X1 <- runif(n) X2
Ensuite simulons
selon le modèle avec<- 0.5 sigma set.seed(321) # pour fixer les simulations <- 2 -3*X1 + 4*X2 + rnorm(n, sd=sigma) Y <- cbind.data.frame(Y,X1,X2) don head(don)
Y X1 X2 1 4.213477 0.33477802 0.5913398 2 1.602748 0.90913948 0.6715464 3 2.958646 0.41152969 0.5830570 4 3.215113 0.04384097 0.3516151 5 3.367004 0.76350011 0.9298713 6 3.555247 0.75043889 0.9181180
Le graphique est obtenu avec
::plot3d(X1,X2,Y) rgl
On observe grâce au code ci-dessus que les points sont répartis autour d’un plan (d’équation
).Effectuons la régression multiple et stockons
dansYhat
:<- lm(Y~1+X1+X2, data=don)) (regmult
Call: lm(formula = Y ~ 1 + X1 + X2, data = don) Coefficients: (Intercept) X1 X2 2.080 -2.972 3.827
Nous sommes assez proches des coefficients recherchés (2, -3 et 4)
Effectuons les régression simples
<- lm(Y~1+X1, data=don)) (regX1
Call: lm(formula = Y ~ 1 + X1, data = don) Coefficients: (Intercept) X1 3.803 -2.441
Nous voyons que le paramètre ne correspond pas à celui de
dans la régression multiple.<- lm(Y~1+X2, data=don)) (regX2
Call: lm(formula = Y ~ 1 + X2, data = don) Coefficients: (Intercept) X2 0.7221 3.4424
Nous voyons que le paramètre ne correspond pas à celui de
dans la régression multiple.Enchainons après la régression simple sur
la régression des résidus (ce que n’a pas réussi à modéliser) sur :<- residuals(regX1) residX1 <- cbind(don, residX1) don <- lm(residX1~1+X2, data=don) regX2residX1 regX2residX1
Call: lm(formula = residX1 ~ 1 + X2, data = don) Coefficients: (Intercept) X2 -1.965 3.758
Là encore le coefficient sur
ne correspond pas à celui de dans la régression multiple. :La prévision est différentepredict(regX2residX1) + predict(regX1))[1:5] (
1 2 3 4 5 3.242781 2.142450 3.024335 3.051894 3.468733
Changeons l’ordre
<- residuals(regX2) residX2 <- cbind(don, residX2) don <- lm(residX2~1+X1, data=don) regX1residX2 regX1residX2
Call: lm(formula = residX2 ~ 1 + X1, data = don) Coefficients: (Intercept) X1 1.531 -2.918
On a là encore des différences
predict(regX1residX2) + predict(regX2))[1:5] (
1 2 3 4 5 3.311895 1.911850 3.059400 3.335703 3.226125
Envisageons la covariance empirique
cov(X1,X2)
[1] 0.01050429
et leur produit scalaire
sum(X1*X2)
[1] 28.47696
Les deux variables sont loin d’être orthogonales. Centrons les
<- X1 - mean(X1) X1c <- X2 - mean(X2) X2c sum(X1c*X2c)
[1] 1.039925
Refaisons les régressions: la multiple
<- cbind.data.frame(Y,X1c,X2c) donc <- lm(Y~1+X1c+X2c, data=donc)) (regmultc
Call: lm(formula = Y ~ 1 + X1c + X2c, data = donc) Coefficients: (Intercept) X1c X2c 2.522 -2.972 3.827
Nous retrouvons que seul la constante change puis l’enchainement
<- lm(Y~1+X1c, data=donc)) (regX1c
Call: lm(formula = Y ~ 1 + X1c, data = donc) Coefficients: (Intercept) X1c 2.522 -2.441
Ici les variables
et étant centrées elles sont orthogonales à la constante. Nous avons donc Le modèle précédent nous donne grâce à l’orthogonalité ci-dessus . Le modèle complet donne de son côté . Nous retrouvons donc le coefficient constant qui est la coordonnée sur de dans les deux cas.Enchainons sur la régression sur résidus
<- residuals(regX1c) residX1c <- cbind(donc, residX1c) donc <- lm(residX1c~1+X2c, data=don)) (regX2residX1c
Call: lm(formula = residX1c ~ 1 + X2c, data = don) Coefficients: (Intercept) X2c 1.669e-16 3.758e+00
Puisque le vecteur est
et que on a la projection des résidus sur qui vaut Cette dernière somme de projection est dans qui est un sous-espace orthogonal à , d’où le coefficient 0 pour la constante.Pour les prévisions rien ne change :
predict(regmultc)[1:5]
1 2 3 4 5 3.348336 1.948483 3.088559 3.295485 3.369866
Exercice 10 (TP : régression multiple et code R)
<- read.table("../donnees/ozone_complet.txt",sep=";",header=TRUE) ozone <- names(ozone) nomvar
<- paste(nomvar[-1],collapse = "+")) (ch
[1] "T6+T9+T12+T15+T18+Ne6+Ne9+Ne12+Ne15+Ne18+Vdir6+Vvit6+Vdir9+Vvit9+Vdir12+Vvit12+Vdir15+Vvit15+Vdir18+Vvit18+Vx+maxO3v"
<- paste("maxO3~",ch,sep="")) (ch2
[1] "maxO3~T6+T9+T12+T15+T18+Ne6+Ne9+Ne12+Ne15+Ne18+Vdir6+Vvit6+Vdir9+Vvit9+Vdir12+Vvit12+Vdir15+Vvit15+Vdir18+Vvit18+Vx+maxO3v"
<- formula(ch2) form lm(form,data=ozone)
Call: lm(formula = form, data = ozone) Coefficients: (Intercept) T6 T9 T12 T15 T18 31.628418 -1.937194 0.121834 1.522143 0.609047 0.091871 Ne6 Ne9 Ne12 Ne15 Ne18 Vdir6 0.091969 -0.692891 -0.941925 -0.033847 -0.107068 -0.001344 Vvit6 Vdir9 Vvit9 Vdir12 Vvit12 Vdir15 1.586427 -0.009728 -1.163728 -0.007144 0.182232 -0.003468 Vvit15 Vdir18 Vvit18 Vx maxO3v 0.246885 0.006251 0.560660 0.255474 0.465541
Exercice 11 (Régression orthogonale) Les vecteurs étant orthogonaux, nous avons
Exercice 12 (Centrage, centrage-réduction et coefficient constant)
Comme la dernière colonne de
, notée vaut sa moyenne empirique vaut et la variable centrée issue de est donc .Nous avons le modèle sur variable centrée
En identifiant cela donne Si l’on utilise des variables centrées dans le modèle de régression, on ne met pas de colonne (pas de coefficient constant - intercept). Les coefficients du modèle sur les variables originales sont égaux à ceux sur les variables centrées et le coefficient constant est donné par la formule (équation 1).Maintenant les variables explicatives sont centrées et réduites :
En identifiant cela donne Nous obtenons ici que les coefficients du modèle sur les variables originales sont égaux à ceux sur les variables centrées-réduites divisés par l’écart-type empirique des variables explicatives. Plus la variable explicative est dispersée, plus son coefficient sera réduit par rapport à . Le coefficient constant est donné par la formule ci-dessus.La variable à expliquer
est elle aussi centrée-réduite~: En identifiant cela donne L’écart-type empirique de entre en jeu et nous constatons que les résidus du modèle “centré-réduit” sont égaux à ceux initiaux divisés par l’écart-type empirique de .Simulons 3 variables explicatives avec GNU-R pour
individus selon une loi uniforme et équirépartie sur :<- 100 n set.seed(1234) # pour fixer les simulations <- runif(n) X1 <- seq(1, 10, length=100) X2 <- rep(1,n) X3 <- cbind(X1, X2, X3) X head(X)
X1 X2 X3 [1,] 0.1137034 1.000000 1 [2,] 0.6222994 1.090909 1 [3,] 0.6092747 1.181818 1 [4,] 0.6233794 1.272727 1 [5,] 0.8609154 1.363636 1 [6,] 0.6403106 1.454545 1
Simulons maintenant
selon le modèle en fixant par exemple et<- c(1, 0.1, -4) beta <- 0.1 sigma set.seed(12345) # pour fixer les simulations <- X%*%beta + rnorm(n, sd=sigma) Y 1:5] Y[
[1] -3.727744 -3.197663 -3.283474 -3.294698 -2.942132
Centrons les variables avec
<- scale(Y, scale = FALSE) Ytilde 1:5] Ytilde[
[1] -0.73976069 -0.20968007 -0.29549076 -0.30671453 0.04585078
<- scale(X, scale = FALSE) Xtilde head(Xtilde)
X1 X2 X3 [1,] -0.3237939 -4.500000 0 [2,] 0.1848021 -4.409091 0 [3,] 0.1717775 -4.318182 0 [4,] 0.1858822 -4.227273 0 [5,] 0.4234181 -4.136364 0 [6,] 0.2028133 -4.045455 0
Et éliminons la dernière colonne de
<- Xtilde[, -3] Xtilde
Effectuons les deux régressions en constituant deux data-frames. Nous n’ajoutons pas la constante dans les modèles (
-1
) car elle est déjà dans la dernière colonne de pour le premier modèle et on ne la souhaite pas pour le second.<- cbind.data.frame(Y,X) don <- cbind.data.frame(Ytilde,Xtilde) dontilde names(dontilde) <- c("Ytilde", "X1tilde", "X2tilde") <- lm(Y~-1+X1+X2+X3, data=don) mod <- lm(Ytilde~-1+X1tilde+X2tilde, data=dontilde) modtilde
On retrouve bien que les coefficients des variables centrées ou non sont identiques
coef(mod)
X1 X2 X3 1.0225207 0.1030809 -4.0022782
et que l’intercept est simplement est bien celui donné dans la formule (équation 1)
mean(don$Y)- sum( coef(modtilde)*colMeans(X[,1:2]))
[1] -4.002278
Centrons et réduisons les variables explicatives (les 2 premières colonnes de
)<- scale(X[, 1:2], scale = TRUE) Xtilde head(Xtilde)
X1 X2 [1,] -1.1617874 -1.706220 [2,] 0.6630787 -1.671751 [3,] 0.6163456 -1.637282 [4,] 0.6669539 -1.602813 [5,] 1.5192439 -1.568344 [6,] 0.7277037 -1.533875
Reconstuisons le data-frame qui a changé et le modèle correspondant
<- cbind.data.frame(Ytilde,Xtilde) dontilde names(dontilde) <- c("Ytilde", "X1tilde", "X2tilde") <- lm(Ytilde~-1+X1tilde+X2tilde, data=dontilde) modtilde
Retrouvons les coefficients de départ pour les variables explicatives et pour la constante
mean(don$Y)- sum( coef(modtilde)/apply(X[,-3], 2, sd) * colMeans(X[,1:2]) )
[1] -4.002278
Centrons et réduisons les variables explicatives et la variable à expliquer
<- scale(Y, scale = TRUE) Ytilde 1:5] Ytilde[
[1] -1.8943177 -0.5369313 -0.7566682 -0.7854091 0.1174109
Reconstuisons le data frame qui a changé et le modèle correspondant
<- cbind.data.frame(Ytilde, Xtilde) dontilde names(dontilde) <- c("Ytilde", "X1tilde", "X2tilde") <- lm(Ytilde~-1+X1tilde+X2tilde, data=dontilde) modtilde
Retrouvons les coefficients de départ pour les variables explicatives
coef(modtilde)/apply(X[,-3],2,sd)*sd(Y)
X1tilde X2tilde 1.0225207 0.1030809
et pour la constante
mean(don$Y)- sum( coef(modtilde)/apply(X[,-3], 2, sd) * sd(Y)*colMeans(X[, 1:2]) )
[1] -4.002278
Exercice 13 (Moindres carrés contraints)
L’estimateur des MC vaut
Calculons maintenant l’estimateur contraint. Nous pouvons procéder de deux manières différentes.
La première consiste à écrire le lagrangien
Les conditions de Lagrange permettent d’obtenir un minimum Multiplions à gauche la première égalité par , nous obtenons Nous obtenons alors pour Remplaçons ensuite d’où nous calculons La fonction à minimiser est une fonction convexe sur un ensemble convexe (contraintes linéaires), le minimum est donc unique.Une autre façon de procéder consiste à utiliser les projecteurs. Supposons pour commencer que
, la contrainte vaut donc . Calculons analytiquement le projecteur orthogonal sur . Rappelons que , nous avons de plus Nous avons donc que , , c’est-à-dire que , l’espace engendré par les colonnes de , est orthogonal à l’espace engendré par , . Nous avons donc que . Comme , . En résumé, nous avons Afin de montrer que les colonnes de engendrent , il faut démontrer que la dimension des deux sous-espaces est égale. Or le rang de vaut ( est de rang , est de rang et est de rang ) donc la dimension de vaut . De plus, nous avons vu que et donc, en passant aux dimensions des sous-espaces, nous en déduisons que . Nous venons de démontrer que Le projecteur orthogonal sur s’écrit Nous avons alors Cela donne Si maintenant , nous avons alors un sous-espace affine défini par dans lequel nous cherchons une solution qui minimise les moindres carrés. Un sous-espace affine peut être défini de manière équivalente par un point particulier tel que et le sous-espace vectoriel associé . Les points du sous-espace affine sont alors . La solution qui minimise les moindres carrés, notée , est élément de ce sous-espace affine et est définie par où Nous savons que donc donc une solution particulière est . La solution qui minimise les moindres carrés sous la contrainte est alorsCalculons l’EQM de
qui vaut selon la formule classique: avec (sous l’hypothèse que est généré par le modèle de régression) et .Pour l’EQM de
qui vaut selon la formule classique: calculons d’abord en utilisant l’équation (équation 2): puisque est sans biais. Si nous supposons que le modèle satisfait la contrainte ( ) alors là encore le biais est nul.Calculons maintemant la variance:
Intéressons nous à la seconde partie . Comme est déterministe ainsi que et on a en posant pour alléger (matrice symétrique) La troisième partie est Ce qui donne au final L’écart entre les 2 variances est donc de qui est une matrice de la forme donc semi-définie positive.