Freakonometrics

To content | To menu | To search

Teaching › économétrie 1 - M1 - 09/10

Entries feed - Comments feed

Wednesday, October 28 2009

Les tests classiques en économétrie (2)

  • Le test de Student (significativité d'un coefficient)
Le test de Student (évoqué un peu ici pour les aspects historiques) vise à tester la significativité d'un coefficient (et d'un seul). Significatif veut dire qu'il est (probablement) significativement non nul. On utilise pour cela que si les erreurs sont Gaussiennes, ou si le nombre d'observations est suffisamment grand
http://perso.univ-rennes1.fr/arthur.charpentier/latex/student-1.png
(dans le premier cas, c'est une propriétés des vecteurs Gaussiens et dans le second, c'est le théorème central limite car on a vu que l'estimateur par moindres carrés coïncidait avec l'estimateur de la méthodes des moments). Comme la variance est inconnue, on remplace l'inconnue par un estimateur, et on perd un peu en précision. En fait, on peut montrer (c'est tout les travaux de William Gosset) que
 http://perso.univ-rennes1.fr/arthur.charpentier/latex/student-2.png
Le nombre de degrés de liberté (i.e. le paramètre de la loi de Student) n'est pas indiqué ici. Il est fonction du nombre de variables explicatives dans le modèle (ce qui contraint d'autant le modèle).
Dans le test de Student, on cherche à tester
http://perso.univ-rennes1.fr/arthur.charpentier/latex/student-4.png contre http://perso.univ-rennes1.fr/arthur.charpentier/latex/student-5.png
Pour cela, on pose
http://perso.univ-rennes1.fr/arthur.charpentier/latex/studient-t-1.png
La région d'acceptation du test est alors de la forme suivante
http://perso.univ-rennes1.fr/arthur.charpentier/latex/studient-t-2.png
Graphiquement, on accepte l'hypothèse H0 si T n'est pas trop loin de 0. En particulier, dans la région rouge, on rejette H0 (et le coefficient est alors significativement non nul).

> dodge<-read.table("http://perso.univ-rennes1.fr/arthur.charpentier/dodge.csv",header=TRUE,sep=",")
> REG0=lm(Fire~X_1+X_2+X_3,data=dodge)
> summary(REG0)
Coefficients:
            Estimate Std. Error t value Pr(>|t|)   
(Intercept) 22.07525    6.19447   3.564 0.000910 ***
X_1         -0.62764    5.28130  -0.119 0.905953   
X_2          0.22378    0.06161   3.632 0.000744 ***
X_3         -1.55059    0.38195  -4.060 0.000204 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Sur la sortie on note que la statistique de test pour la variable X2 vaut 3.632. On a deux méthodes pour interpréter cette statistique
  • construire la région d'acceptation du test à partir des quantiles théorique de la loi de Student (en lisant dans les tables, ou en demandant les quantiles au logiciel)
  • en calculant la p-value, ie. la probabilité qu'une loi de Student atteigne une telle valeur.
Les bornes de la région de confiance sont ici
> qt(.025,df=43)
[1] -2.016692
> qt(.975,df=43)
[1] 2.016692

Autrement dit, les deux dernières statistiques de Student ne sont pas dans cet intervalle: on rejette l'hypothèse de nullité des deux derniers coefficients. L'autre possibilité est de calculer la probabilité qu'en valeur absolue, une loi de Student dépasse la valeur absolue de la grandeur observée. Ici, ces probabilités sont
> (1-pt(abs(-0.119),df=43))*2
[1] 0.9058296
> (1-pt(abs(3.632),df=43))*2
[1] 0.0007442971

On retrouve les grandeurs données dans la dernière colonne du tableau.
  • Le test de Fisher (significativité de plusieurs coefficients)
Le test de Fisher - tel qu'il apparait sur la sortie de la régression - est un test de significativité total du modèle. Autrement dit, on cherche à tester
http://perso.univ-rennes1.fr/arthur.charpentier/latex/fisher-7.png
contre
http://perso.univ-rennes1.fr/arthur.charpentier/latex/fisher-8.png
Autrement dit, on essaye de choisir (même si je n'aime pas introduire si tôt la terminologie de choix de modèle) entre le modèle général
http://perso.univ-rennes1.fr/arthur.charpentier/latex/fisher-5.png
et la version que nous dirons contrainte,
http://perso.univ-rennes1.fr/arthur.charpentier/latex/fisher-6.png
Formellement, les paramètres n'ont rien à voir, mais je n'ai changé que le nom du bruit car le bruit devrait changer. En fait, c'est cette idée que va exploiter Fisher en se demandant si le bruit du second modèle est vraiment plus grand que le bruit du second. Autrement dit, il s'agit de faire une comparaison entre les variances de deux modèles.
Ce test est en fait un cas très particulier d'un test beaucoup plus général proposé par Fisher. De manière beaucoup plus générale, on se demande si les deux modèles suivants sont vraiment différents, entre
http://perso.univ-rennes1.fr/arthur.charpentier/latex/fisher-2.png
et sa version contrainte
http://perso.univ-rennes1.fr/arthur.charpentier/latex/fisher-1.png
On cherche alors à tester l'hypothèse
http://perso.univ-rennes1.fr/arthur.charpentier/latex/fisher-3.png
contre l'hypothèse alternative
http://perso.univ-rennes1.fr/arthur.charpentier/latex/fisher-4.png
Pour ça, on peut utiliser ce qu'a proposé Fisher, à savoir d'utiliser la somme des carrés des résidus (qui correspondent à un facteur multiplicatif près à l'estimateur de la variance du bruit), et il a posé
http://perso.univ-rennes1.fr/arthur.charpentier/latex/fisher-9.png
Je parlais tout à l'heure de choix de modèle... on notera que l'on en est pas très loin car on peut réécrire cette expression en faisant apparaître le R2 des régression, contraintes et noncontraintes.
http://perso.univ-rennes1.fr/arthur.charpentier/latex/fisher-10.png
Fisher a montré que sous l'hypothèse H0,
http://perso.univ-rennes1.fr/arthur.charpentier/latex/fisher-11.png
i.e. la loi de la statistique de Fisher est précisément une loi de Fisher.
Pour le test de Fisher global, le résultat figure dans le tableau de la régression
F-statistic: 11.34 on 3 and 43 DF,  p-value: 1.314e-05

Mais il est possible de retrouver cette grandeur en utilisant la fonction anova(),
> REG0=lm(Fire~X_1+X_2+X_3,data=dodge)
> REG0c=lm(Fire~1,data=dodge)
> anova(REG0,REG0c)
Analysis of Variance Table
Model 1: Fire ~ X_1 + X_2 + X_3
Model 2: Fire ~ 1
  Res.Df     RSS Df Sum of Sq      F    Pr(>F)   
1     43  1831.8                                 
2     46  3280.8 -3   -1449.0 11.339 1.314e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

On peut aussi faire des tests de modèles contraints. Le plus simple est d'enlever une variable explicative dans le modèle, par exemple la troisième
> REG0c=lm(Fire~X_1+X_2,data=dodge)
> anova(REG0,REG0c)
Analysis of Variance Table
Model 1: Fire ~ X_1 + X_2 + X_3
Model 2: Fire ~ X_1 + X_2
  Res.Df     RSS Df Sum of Sq      F    Pr(>F)   
1     43 1831.75                                 
2     44 2533.84 -1   -702.09 16.481 0.0002039 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

On retrouve que cette variable est significative dans le modèle (ce qui confirme la conclusion du test de Student). Pour des tests avec des contraintes plus complexes, on peut utiliser library(lmtest), ou library(AER). En particulier, on peut se demander si les coefficients associés aux variables X2 et X3 sont identiques.
> linear.hypothesis(REG0,"X_2=X_3")
Linear hypothesis test
Hypothesis:
X_2 - X_3 = 0
Model 1: Fire ~ X_1 + X_2 + X_3
Model 2: restricted model
  Res.Df     RSS Df Sum of Sq      F    Pr(>F)   
1     43 1831.75                                 
2     44 2652.77 -1   -821.01 19.273 7.245e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Ce test peut se faire de manière équivalente en faisant directement une anova,
> REG0c=lm(Fire~X_1+I(X_2+X_3),data=dodge)
> anova(REG0,REG0c)
Analysis of Variance Table
Model 1: Fire ~ X_1 + X_2 + X_3
Model 2: Fire ~ X_1 + I(X_2 + X_3)
  Res.Df     RSS Df Sum of Sq      F    Pr(>F)   
1     43 1831.75                                 
2     44 2652.77 -1   -821.01 19.273 7.245e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

ce qui donne (tout naturellement) la même chose.
  • Tests de normalités (des résidus)
Pour les tests de normalité, essentiels si l'on n'a pas beaucoup d'observations, je renvoie à un vieux billet sur le sujet, ici. Pour le code R, on pourra utiliser
> source("http://blogperso.univ-rennes1.fr/arthur.charpentier/public/R/fonctions-nortest.R")

Wednesday, October 7 2009

J'ai de la multicolinéarité... c'est grave docteur ?

Un petit billet sur la multicolinéarité (que j'avais un peu abordé ici par exemple), pour répondre à la question de savoir si c'est "grave" (je reprends la phrase d'un mail que j'ai reçu récemment).

  • Ca existe la multicolinéarité ou bien on ne voit ça qu'à la télé ?
La multincolinéarité correspond au fait que les variables explicatives sont parfois très corrélées... C'est loin d'être exceptionnel...
Par exemple (je reprends un exemple que je connais bien) en tarification des contrats d'assurance automobile, on peut avoir plusieurs informations à notre disposition, par exemple l'âge du conducteur, et l'ancienneté du permis de conduire... Ces données ne sont pas colinéaires (ou comonotone) car il existe des personnes qui passent leur permis de conduire tard, mais on se doute qu'elles sont très corrélées.... Voici un petit exemple sur de vraies données (même si on ne voit pas forcément grand chose à priori car les données sont discrètes), avec en abscisse l'ancienneté du permis et en ordonnée l'âge du conducteur

(on notera que ce sont des vraies données avec des vraies erreurs, comme des jeunes de 20 ans qui ont le permis depuis 40 ans....). Si on calcule une corrélation entre les deux, on obtient 0,90 (pour la corrélation au sens de Pearson). Bref, les deux variables sont relativement corrélées... On parlera de multicolinéarité.
  • Formulation du problème pour apporter des éléments de réponse
J'ai retraduit la question de manière un peu plus formelle....
On sait que la variable Y dépend de la variable http://perso.univ-rennes1.fr/arthur.charpentier/latex/x1.png via un modèle que l'on supposera linéaire (pour faire simple, mais ça ne change pas grand chose sur le fond). Mais dans la base, on dispose de deux variables explicatives très corrélées (voire plus) http://perso.univ-rennes1.fr/arthur.charpentier/latex/x1.png et http://perso.univ-rennes1.fr/arthur.charpentier/latex/x2.png. La question telle que je la comprends est la suivante: même si les variables sont très corrélées, est-ce que l'on est en mesure de ne garder que la bonne variable (en l'occurence http://perso.univ-rennes1.fr/arthur.charpentier/latex/x1.png). On peut simuler le modèle suivant,
http://perso.univ-rennes1.fr/arthur.charpentier/latex/xgauss.png
autrement dit j'ai deux variables explicatives Gaussiennes corrélées, et on génére
http://perso.univ-rennes1.fr/arthur.charpentier/latex/eq-1-mult.png
où http://perso.univ-rennes1.fr/arthur.charpentier/latex/eta.png est un bruit indépendant des variables explicatives, suivant une loi normale centrée et réduite.
C'est le vrai modèle. Mais on cherche à estimer un modèle de la forme
http://perso.univ-rennes1.fr/arthur.charpentier/latex/eq-2-mult.png
On peut alors voir le problème évoqué initialement sous deux angles,
  • Tester la significativité du second coefficient
En fonction de la corrélation, plus de 10,000 jeux de 200 points sont  générés, et on ajuste un modèle de régression sur les deux variables explicatives. On peut alors se demander si le second coefficient est significatif, et si la significativité est fonction de la valeur de la corrélation,
Sur la figure ci-dessous, on regarde la distribution de la p-value du test de significativité de Student sur la seconde variable (la distribution est ici estimée par noyau, avec tous les problèmes techniques que cela pose1), avec une corrélation de 0,25 (en rouge), de 0,5 (en mauve) et de 0,75 (en bleu),

De manière surprenante (en tout les cas cela m'a surpris), on voit que peu importe la corrélation entre les variables explicatives, on rejette la significativité de la seconde variable dans 95% des cas. La figure ci-dessous montre les courbes de niveaux en fonction de la corrélation, comprise entre 0 et 1. On ne voit rien car quelle que soit la corrélation, la loi sous-jacente est uniforme sur [0,1],

  • Utiliser des outils de sélection de modèle
Ce premier point est finallement assez rassurant... mais une autre quesstion pourrait être la suivante: si je compare les deux modèles suivants,
http://perso.univ-rennes1.fr/arthur.charpentier/latex/eq-3-m.png
http://perso.univ-rennes1.fr/arthur.charpentier/latex/eq-4-m.png
est-ce que je vais bien retenir le bon modèle. Plusieurs techniques sont souvent utilisées pour comparer les modèles. La plus classiques (comme j'en ai parlé ici par exemple) est l'utilisation du R2 (ou du R2 ajusté, mais comme le nombre de variables explicatives est identique ici, c'est équivalent de comparer l'un ou l'autre). Un outils plus intéressant, à mon avis est le critère d'information d'Aikaike (dit AIC).
Si l'on compare les R2 des deux modèles, on est rassuré car le R2 est presque toujours2  plus grand pour le premier (le bon) que pour le second, commen en témoigne la distribution de la différence entre les deux, sur autant de simulations que tout à l'heure, mais plus la corrélation est grande, plus la différence entre les R2 diminue....

Si l'on utilise le critère d'AIC, on notera qu'il est presque toujours plus grand avec le premier modèle. En fait si l'un des critères est majoré alors l'autre aussi (mais ccela vient sûrement du fait que tout est Gaussien ici, ce qui fait que la log-vraisemblance - et donc le critère AIC - et le R2 sont semblables)

1 les estimateurs à noyau sur des supports compacts présentent des biais multplicatifs aux bords... La valeur en 0 par exemple vaut la moitié de la vraie valeur (car quand on estime la densité par noyau, on met la moitié de la masse sur les valeurs négatives, ou par construction il ne peut y avoir d'observation, cf ici).
2 sur 10,000 simulations, je n'ai obtenu aucun cas pour lequel le R2 du second modèle excédait le R2 du premier si la corrélation était inférieur à 0,99, mais avec une corrélation de 0,999, cela pouvait survenir... Maintenant, des corrélations de cet ordre me paraissent surprenantes en pratique (au sens où les variables sont quasiment identiques)...