La notation de Rogers

publicité
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
Téléchargement