UNIVERSITÉ PARIS OUEST NANTERRE LA DÉFENSE U.F.R. SJAP Master Droit-Éco Année universitaire 2013 – 2014 Cours de M. Desgraupes Cours de Statistiques et Économétrie Notation de Rogers-Wilkinson 1 Formule y ∼ x1 + x2 + . . . 3 2 Fonction des variables avec la lettre I 3 3 Formule y ∼ a 3.1 Variables fictives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Cas de plusieurs facteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 5 6 4 Formule y ∼ a + x 7 5 Formule y ∼ a : x 8 6 Formule y ∼ a ∗ x 9 7 Formule y ∼ a ∗ b 10 8 Formule y ∼ a/x 11 9 Formule y ∼ (a + b)2 12 10 Compléments 13 Ce document est une présentation des divers aspects de la notation de Rogers et Wilkinson utilisée pour exprimer des formules de modèles linéaires. C’est la notation utilisée par la fonction lm de R. Pour illustrer cette notation par des exemples, on utilise, dans ce document, le jeu de données appelé CPS1985, disponible dans le package AER de R : il comporte des données recueillies aux USA lors d’un recensement effectué en 1985 (May 1985 Current Population Survey). Il est étudié dans : Berndt, E.R. (1991), The Practice of Econometrics, New York, Addison-Wesley. En supposant que ce package est installé, on charge les données de la manière suivante : > library(AER) > data(CPS1985) > attach(CPS1985) Il s’agit d’un dataframe comportant 11 variables : > names(CPS1985) [1] "wage" [5] "ethnicity" [9] "sector" "education" "region" "union" "experience" "age" "gender" "occupation" "married" 1 0.06 0.00 Density Histogram of wage 0 10 20 30 40 wage 0.4 0.0 Density Histogram of log(wage) 0 1 2 3 log(wage) F IGURE 1 – Graphique histWage. Il y a 534 observations et les 11 variables sont toutes de type numérique ou facteur comme on peut le voir avec la fonction str : > str(CPS1985) 'data.frame': $ wage : $ education : $ experience: $ age : $ ethnicity : $ region : $ gender : $ occupation: $ sector : $ union : $ married : NULL 534 obs. of 11 variables: num 5.1 4.95 6.67 4 7.5 ... num 8 9 12 12 12 13 10 12 16 12 ... num 21 42 1 4 17 9 27 9 11 9 ... num 35 57 19 22 35 28 43 27 33 27 ... Factor w/ 3 levels "cauc","hispanic",..: 2 1 1 1 1 1 1 1 1 1 ... Factor w/ 2 levels "south","other": 2 2 2 2 2 2 1 2 2 2 ... Factor w/ 2 levels "male","female": 2 2 1 1 1 1 1 1 1 1 ... Factor w/ 6 levels "worker","technical",..: 1 1 1 1 1 1 1 1 1 1 ... Factor w/ 3 levels "manufacturing",..: 1 1 1 3 3 3 3 3 1 3 ... Factor w/ 2 levels "no","yes": 1 1 1 1 1 2 1 1 1 1 ... Factor w/ 2 levels "no","yes": 2 2 1 1 2 1 1 1 2 1 ... > layout(1:2) > hist(wage,20, prob=T) 2 > hist(log(wage),20, prob=T) > lines(density(log(wage))) > layout(1) Le graphe représenté sur la figure 1 suggère qu’on obtient une répartition plus proche d’une distribution normale si on travaille avec le logarithme de la variable wage (salaire). La notation de Rogers-Wilkinson est utilisée pour spécifier des formules décrivant le type de modèle recherché. Cette notation a été introduite dans un article de 1973 : G. N. Wilkinson et C. E. Rogers, Symbolic description of factorial models for analysis of variance, Applied Statistics, 22, p. 392–399. On a déjà rencontré des exemples du type Y ∼ X ou Y ∼ X1 + X2 + . . . qui correspondent au modèle ordinaire de régression linéaire univariée ou multivariée entre variables numériques. Le signe +, comme on l’a déjà vu, a une signification particulière dans cette notation. Il existe d’autres symboles qui permettent de décrire des situations variées. D’autre part, la régression ne se limite pas seulement aux variables numériques et peut être étendue aux variables qualitatives, c’est-à-dire aux facteurs. Dans les sections qui suivent, les lettres x, y, etc. désignent des variables numériques, les lettres a, b, etc. désignent des variables de type factor. 1 Formule y ∼ x1 + x2 + . . . C’est la notation du modèle linéaire multivarié qui calcule une relation de la forme : y = β0 + β1 x 1 + β2 x 2 + · · · + ε et conduit à l’estimation de coefficients de régressions β̂i . On obtient un terme β̂0 (ordonnée à l’origine ou intercept) et un coefficient β̂i pour chaque variable explicative xi . Par exemple, cherchons à expliquer le log du salaire au moyen de l’éducation et de l’expérience : > reg <- lm(log(wage) ~ education + experience) > summary(reg) Call: lm(formula = log(wage) ~ education + experience) Residuals: Min 1Q -2.03371 -0.33057 Median 0.04223 3Q 0.31897 Max 1.83976 Coefficients: Estimate Std. Error t value (Intercept) 0.594169 0.124428 4.775 education 0.096414 0.008310 11.603 experience 0.011774 0.001756 6.707 --Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 Pr(>|t|) 2.33e-06 *** < 2e-16 *** 5.10e-11 *** ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 0.4695 on 531 degrees of freedom 3 Multiple R-squared: 0.2115, Adjusted R-squared: F-statistic: 71.21 on 2 and 531 DF, p-value: < 2.2e-16 2 0.2085 Fonction des variables avec la lettre I Très souvent on obtient de meilleurs résultats en introduisant le carré de l’expérience : on ne peut pas l’écrire simplement experience^2 car cela a une autre signification dans la notation de Rogers-Wilkinson (voir plus loin). Pour exprimer une fonction à appliquer à une variable, la notation introduit la lettre I (i majuscule). On écrira donc le modèle comme ceci : > reg <- lm(log(wage) ~ education + experience + I(experience^2)) > summary(reg) Call: lm(formula = log(wage) ~ education + experience + I(experience^2)) Residuals: Min 1Q -2.12709 -0.31543 Median 0.00671 3Q 0.31170 Max 1.98418 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 0.5203218 0.1236163 4.209 3.01e-05 *** education 0.0897561 0.0083205 10.787 < 2e-16 *** experience 0.0349403 0.0056492 6.185 1.24e-09 *** I(experience^2) -0.0005362 0.0001245 -4.307 1.97e-05 *** --Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 0.4619 on 530 degrees of freedom Multiple R-squared: 0.2382, Adjusted R-squared: 0.2339 F-statistic: 55.23 on 3 and 530 DF, p-value: < 2.2e-16 Le coefficient de détermination ajusté Ra2 est meilleur. 3 Formule y ∼ a Lorsqu’on explique une variable y au moyen d’un facteur, le modèle linéaire ajuste les valeurs sur l’espérance dans chaque niveau du facteur. Ces valeurs sont des constantes et le terme β0 sert en fait à décrire l’espérance pour le premier niveau du facteur : tous les niveaux suivants sont calculés par référence à ce premier niveau. Par exemple : > reg <- lm(log(wage) ~ gender) > summary(reg) Call: lm(formula = log(wage) ~ gender) Residuals: 4 Min 1Q -2.16529 -0.37589 Median 0.00662 3Q 0.36855 Max 1.86145 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 2.16529 0.03032 71.411 < 2e-16 *** genderfemale -0.23125 0.04477 -5.166 3.39e-07 *** --Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 0.5155 on 532 degrees of freedom Multiple R-squared: 0.04776, Adjusted R-squared: 0.04597 F-statistic: 26.69 on 1 and 532 DF, p-value: 3.39e-07 > coefs <- coef(reg) Ici l’intercept 2.16529 est la moyenne des log des salaires dans la catégorie male tandis que le coefficient -0.23125 représente la différence du salaire de la catégorie female par rapport à la valeur précédente : le log des salaires des femmes en espérance est donc calculé comme 2.16529+ −0.23125 = 1.93404. On retrouve ces résultats avec la fonction by : > by(log(wage),gender,mean) gender: male [1] 2.165286 --------------------------------------------gender: female [1] 1.934037 Le niveau de référence est, par défaut, le premier niveau du facteur : > levels(gender) [1] "male" "female" Les facteurs peuvent avoir plus de deux niveaux. On peut, par exemple, effectuer une régression par rapport aux facteurs sector (3 niveaux) ou occupation (6 niveaux). Exercice : le faire et expliquer les résultats ! 3.1 Variables fictives Le modèle adopté pour des variables de type factor pourrait s’écrire : y = β0 + δ 2 x 2 + δ 3 x 3 + · · · + δ l x l + ε où l est le nombre de niveaux du facteur et où les coefficients δ2 sont des différences (des deltas) avec le premier coefficient β0 (intercept). R réalise cela en introduisant des variables fictives xi (dites dummy variables en anglais) où i varie de 2 à l. Il construit une matrice B servant de matrice de design pour le modèle. On peut la visualiser au moyen de la fonction model.matrix : model.matrix(log(wage) ~ gender) 5 > head(model.matrix(log(wage) ~ gender)) 1 2 3 4 5 6 (Intercept) genderfemale 1 1 1 1 1 0 1 0 1 0 1 0 La première colonne est faite exclusivement de 1 puisque c’est celle de l’intercept. À cette matrice B, R applique une matrice C dite de contraste qui décrit les liens entre les coefficients. Dans tout ce document, on utilise un type de contraste appelé contraste de traitement (en anglais treatment contrast) : c’est le codage selon lequel les coefficients sont calculés par différence avec le terme de référence. C’est ce contraste qui est utilisé par défaut par R, il n’y a donc rien de particulier à faire pour le spécifier. Mais il existe d’autres types de contrastes : helmert, polynômial, somme. Voir le document Codage par contraste (http ://bdesgraupes.pagespersoorange.fr/UPX/Master1/codageContrastes.pdf ). On a vu qu’on peut supprimer l’intercept des modèles linéaires en ajoutant explicitement “-1” dans la formule. Sans intercept, la matrice de design deviendrait : model.matrix(log(wage) ~ gender - 1) > head(model.matrix(log(wage) ~ gender - 1)) 1 2 3 4 5 6 gendermale genderfemale 0 1 0 1 1 0 1 0 1 0 1 0 3.2 Cas de plusieurs facteurs Faisons une régression en utilisant simultanément les facteurs gender et married. > reg <- lm(log(wage) ~ gender + married) Call: lm(formula = log(wage) ~ gender + married) Coefficients: (Intercept) genderfemale 2.0655 -0.2329 marriedyes 0.1534 On obtient cette fois 3 coefficients. Chaque facteur a deux niveaux : male ou female pour gender et no ou yes pour married. L’intercept représente l’espérance du (log du) salaire pour les hommes non mariés. On obtient les valeurs pour les autres classes en ajoutant les coefficients appelés genderfemale et marriedyes. En ajoutant genderfemale on obtient le coefficient pour la catégorie des femmes non mariées. En ajoutant marriedyes, on obtient le coefficient pour la catégorie des hommes mariés. En ajoutant genderfemale et marriedyes, on obtient le coefficient pour la catégorie des femmes mariées. 6 > coefs[1] (Intercept) 2.065497 > coefs[1]+coefs[2] (Intercept) 1.832607 > coefs[1]+coefs[3] (Intercept) 2.218895 > coefs[1]+coefs[2]+coefs[3] (Intercept) 1.986005 On peut vérifier que la matrice de design, dans ce cas, a 3 colonnes : model.matrix(log(wage) ~ gender+married) > head(model.matrix(log(wage) ~ gender+married)) 1 2 3 4 5 6 4 (Intercept) genderfemale marriedyes 1 1 1 1 1 1 1 0 0 1 0 0 1 0 1 1 0 0 Formule y ∼ a + x On peut mêler variables explicatives de type numérique et de type facteur. Par exemple : > reg <- lm(log(wage) ~ gender + education) > summary(reg) Call: lm(formula = log(wage) ~ gender + education) Residuals: Min 1Q -2.08737 -0.35123 Median 0.03087 3Q 0.33134 Max 1.78649 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 1.165192 0.106130 10.979 <2e-16 *** genderfemale -0.232067 0.041254 -5.625 3e-08 *** 7 education 0.076848 0.007867 9.768 <2e-16 *** --Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 0.475 on 531 degrees of freedom Multiple R-squared: 0.1928, Adjusted R-squared: 0.1898 F-statistic: 63.42 on 2 and 531 DF, p-value: < 2.2e-16 Ce modèle fournit donc une pente identique pour la variable education et des intercepts différents selon le niveau du facteur gender. Voyons maintenant le comportement de R selon qu’on demande un terme β0 (intercept) ou pas. On supprime l’intercept en ajoutant explicitement “-1” dans la formule et on compare les deux modèles suivants : > reg <- lm(log(wage) ~ gender + education) Call: lm(formula = log(wage) ~ gender + education) Coefficients: (Intercept) genderfemale 1.16519 -0.23207 education 0.07685 > regnointcpt <- lm(log(wage) ~ -1 + gender + education) Call: lm(formula = log(wage) ~ -1 + gender + education) Coefficients: gendermale genderfemale 1.16519 0.93313 education 0.07685 Dans le deuxième cas, on trouve la même valeur pour le terme constant (1.16519) mais il s’agit en fait de β1 dans un modèle y = β1 x 1 + β2 x 2 + ε où x1 et x2 sont les variables fictives correspondant aux deux niveaux du facteur gender. Le deuxième terme (genderfemale=0.93313) est le véritable coefficient β2 de x2 (c’est-à-dire le log du salaire moyen pour le niveau female) et non la différence δ2 de salaire moyen entre les hommes et les femmes. Bien sûr 1.16519 − 0.23207 = 0.93313, i-e β2 = β0 + δ2 . 5 Formule y ∼ a : x Le symbole deux-points (:) représente le modèle avec interactions sur les pentes. Il fournit un intercept identique mais des pentes différentes pour la variable x selon le niveau du facteur. Par exemple : > reg <- lm(log(wage) ~ gender : education) > summary(reg) 8 Call: lm(formula = log(wage) ~ gender:education) Residuals: Min 1Q -2.0701 -0.3654 Median 0.0379 3Q 0.3318 Max 1.7832 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 1.072192 0.104996 10.212 < 2e-16 gendermale:education 0.083162 0.008003 10.391 < 2e-16 genderfemale:education 0.067153 0.008124 8.266 1.12e-15 (Intercept) *** gendermale:education *** genderfemale:education *** --Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 0.4773 on 531 degrees of freedom Multiple R-squared: 0.185, Adjusted R-squared: 0.1819 F-statistic: 60.27 on 2 and 531 DF, p-value: < 2.2e-16 L’intercept vaut 1.07219. Le coefficient de la variable education vaut 0.08316 pour la catégorie male, et 0.06715 pour la catégorie female. Ce modèle peut aussi être noté y ∼ x%in%a. 6 Formule y ∼ a ∗ x Le symbole astérisque (*) représente le modèle avec interactions sur tous les coefficients. Il fournit à la fois des pentes (coefficients de x) et des intercepts différents selon les niveaux du facteur. Par exemple : > reg <- lm(log(wage) ~ gender * education) > summary(reg) Call: lm(formula = log(wage) ~ gender * education) Residuals: Min 1Q -2.09971 -0.36313 Median 0.03421 3Q 0.33156 Max 1.76830 Coefficients: (Intercept) genderfemale education Estimate Std. Error t value Pr(>|t|) 1.32352 0.13422 9.861 < 2e-16 -0.63315 0.21303 -2.972 0.00309 0.06468 0.01009 6.411 3.19e-10 9 genderfemale:education 0.03080 0.01605 1.919 0.05554 (Intercept) *** genderfemale ** education *** genderfemale:education . --Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 0.4738 on 530 degrees of freedom Multiple R-squared: 0.1984, Adjusted R-squared: 0.1938 F-statistic: 43.72 on 3 and 530 DF, p-value: < 2.2e-16 L’intercept vaut 1.32352 pour la catégorie male, et 1.32352 + −0.63315 = 0.69037 pour la catégorie female. Le coefficient de la variable education vaut 0.06468 pour la catégorie male, et 0.06468 + 0.0308 = 0.09548 pour la catégorie female. Ce modèle peut aussi être noté y ∼ a + x + a : x. 7 Formule y ∼ a ∗ b On peut aussi appliquer la notation précédente avec deux facteurs, sous la forme y ∼ a ∗ b. Par exemple : > reg <- lm(log(wage) ~ gender * married) > summary(reg) Call: lm(formula = log(wage) ~ gender * married) Residuals: Min 1Q Median -2.26651 -0.36743 -0.01038 3Q 0.35380 Max 1.85503 Coefficients: Estimate Std. Error t value (Intercept) 1.97687 0.05037 39.243 genderfemale -0.03641 0.07500 -0.486 marriedyes 0.28964 0.06246 4.637 genderfemale:marriedyes -0.29934 0.09258 -3.233 Pr(>|t|) (Intercept) < 2e-16 *** genderfemale 0.6275 marriedyes 4.45e-06 *** genderfemale:marriedyes 0.0013 ** --Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 0.5063 on 530 degrees of freedom Multiple R-squared: 0.08493, Adjusted R-squared: 0.07975 F-statistic: 16.4 on 3 and 530 DF, p-value: 3.336e-10 10 Les coefficients sont : > coefs <- round(coef(reg), 5) (Intercept) genderfemale 1.97687 -0.03641 marriedyes genderfemale:marriedyes 0.28964 -0.29934 Cette formule tient réellement compte des interactions entre les deux facteurs. Les valeurs des coefficients obtenus fournissent les moyennes des (log des) salaires moyens lorsqu’on croise les deux facteurs, comme on peut le vérifier directement en utilisant la fonction tapply : > tbl <- tapply(log(wage),list(married,gender),mean) male female no 1.976870 1.940455 yes 2.266509 1.930749 Les valeurs de cette table (en lisant en ligne) correspondent respectivement à : > coefs[1] (Intercept) 1.97687 > coefs[1]+coefs[2] (Intercept) 1.94046 > coefs[1]+coefs[3] (Intercept) 2.26651 > coefs[1]+coefs[2]+coefs[3]+coefs[4] (Intercept) 1.93076 8 Formule y ∼ a/x Ce modèle peut aussi être noté y ∼ a + x%in%a. Il prend en compte les différents niveaux du facteur en opérant une régression pour chaque niveau séparément. Il fournit donc des pentes pour chaque sous-catégorie plutôt que des différences avec le niveau de référence. Par exemple : > reg <- lm(log(wage) ~ gender / education) > summary(reg) 11 Call: lm(formula = log(wage) ~ gender/education) Residuals: Min 1Q -2.09971 -0.36313 Median 0.03421 3Q 0.33156 Max 1.76830 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 1.32352 0.13422 9.861 < 2e-16 genderfemale -0.63315 0.21303 -2.972 0.00309 gendermale:education 0.06468 0.01009 6.411 3.19e-10 genderfemale:education 0.09549 0.01249 7.647 9.77e-14 (Intercept) *** genderfemale ** gendermale:education *** genderfemale:education *** --Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 0.4738 on 530 degrees of freedom Multiple R-squared: 0.1984, Adjusted R-squared: 0.1938 F-statistic: 43.72 on 3 and 530 DF, p-value: < 2.2e-16 Le terme 0.09549 est le coefficient de la variable education pour la catégorie female. 9 Formule y ∼ (a + b)2 Cette notation est synonyme de y ∼ a + b + a ∗ b ou simplement y ∼ a ∗ b. Elle est plus intéressante si on l’utilise avec trois facteurs : y ∼ (a + b + c)2 est synonyme de y ∼ a + b + c + a ∗ b + b ∗ c + a ∗ c ce qui exclut l’interaction a : b : c. On pourrait l’écrire a ∗ b ∗ c − a : b : c. On peut s’en rendre compte en comparant les deux modèles suivants (le facteur union indique si les personnes sont syndiquées ou pas) : reg1 <- lm(log(wage) ~ (gender + married + union)^2) reg2 <- lm(log(wage) ~ gender * married * union) On obtient : > reg1 Call: lm(formula = log(wage) ~ (gender + married + union)^2) Coefficients: (Intercept) 1.94693 marriedyes 0.26808 genderfemale -0.04063 unionyes 0.21598 12 genderfemale:marriedyes -0.27105 marriedyes:unionyes -0.03669 genderfemale:unionyes 0.06748 > reg2 Call: lm(formula = log(wage) ~ gender * married * union) Coefficients: (Intercept) 1.94126 genderfemale -0.02819 marriedyes 0.27744 unionyes 0.25690 genderfemale:marriedyes -0.29060 genderfemale:unionyes -0.02957 marriedyes:unionyes -0.09044 genderfemale:marriedyes:unionyes 0.14072 10 Compléments Exercice : en mélangeant les divers aspects de la notation de Rogers-Wilkinson, on peut étudier des modèles plus complexes en faisant intervenir plusieurs variables explicatives numériques et plusieurs facteurs à la fois. Voici quelques suggestions : lm(log(wage) ~ education + experience + I(experience^2)) lm(log(wage) ~ gender + education + experience + I(experience^2)) lm(log(wage) ~ gender + married + education + experience + I(experience^2)) lm(log(wage) ~ gender*married + education + experience + I(experience^2)) lm(log(wage) ~ gender + union + education + experience + I(experience^2)) lm(log(wage) ~ gender + union + ethnicity + education + experience + I(experience^2)) lm(log(wage) ~ gender + union + ethnicity + education * experience + I(experience^2)) 13 Références [1] E. R. Berndt. The Practice of Econometrics. Addison-Wesley, New York, 1991. [2] G. N. Wilkinson and C. E. Rogers. Symbolic description of factorial models for analysis of variance. Applied Statistics, 22 :392–399, 1973. 14