Freakonometrics

To content | To menu | To search

Tag - régression

Entries feed - Comments feed

Wednesday, November 7 2012

Examen ACT6420 sur les modèles de régression

L'examen intra avait lieu ce matin. L'examen est en ligne ici, avec les annexes, en ligne . Des éléments de correction seront mis en ligne très bientôt.

Thursday, October 25 2012

Régression sur des variables orthogonales

Hier, on a évoqué en cours le théorème de Frisch-Waugh (évoqué sur ce blog il y a quelques mois). Derrière, il y a l'estimation de modèles sur des sous-ensembles de valeurs. Formellement, on a un modèle de la forme

http://latex.codecogs.com/gif.latex?Y=\boldsymbol{X}\boldsymbol{\beta}+\varepsilon=\boldsymbol{X}_1\boldsymbol{\beta}_1+\boldsymbol{X}_2\boldsymbol{\beta}_2+\varepsilon

Les équations normales sont ici (cf transparents du cours, ou équations écrites au tableau) http://latex.codecogs.com/gif.latex?\boldsymbol{X}%27\boldsymbol{X}\widehat{\boldsymbol{\beta}}=\boldsymbol{X}%27Y, que l'on peut écrire sous la forme d'un système,

http://latex.codecogs.com/gif.latex?\left\{\begin{array}{l}\boldsymbol{X}_1%27\boldsymbol{X}_1%20\widehat{\boldsymbol{\beta}}_1+\boldsymbol{X}_1%27\boldsymbol{X}_2%20\widehat{\boldsymbol{\beta}}_2=\boldsymbol{X}_1%27Y%20\\%20\boldsymbol{X}_2%27\boldsymbol{X}_1%20\widehat{\boldsymbol{\beta}}_1+\boldsymbol{X}_2%27\boldsymbol{X}_2%20\widehat{\boldsymbol{\beta}}_2=\boldsymbol{X}_2%27Y%20%20\end{array}\right.

Le point intéressant est que si les variables dans le premier ensemble et les variables dans le second sont orthogonales, i.e. http://latex.codecogs.com/gif.latex?\boldsymbol{X}_1%27\boldsymbol{X}_2%20=\boldsymbol{0} et http://latex.codecogs.com/gif.latex?\boldsymbol{X}_2%27\boldsymbol{X}_1%20=\boldsymbol{0}, alors les termes diagonaux du système disparaissent, et on retrouve les équations normales des régressions simples, i.e.

http://latex.codecogs.com/gif.latex?\left\{\begin{array}{l}\boldsymbol{X}_1%27\boldsymbol{X}_1%20\widehat{\boldsymbol{\beta}}_1=\boldsymbol{X}_1%27Y%20\\%20\boldsymbol{X}_2%27\boldsymbol{X}_2%20\widehat{\boldsymbol{\beta}}_2=\boldsymbol{X}_2%27Y%20%20\end{array}\right.

On a ici une conséquence du théorème de Frisch-Waugh: si les variables sont orthogonales, les estimateurs dans la régression multiple coïncident avec ceux obtenus avec des régressions simples.

Afin de mieux clarifier ce point, écrivons ce qui se passerait avec seulement deux variables. On va associer la constante à la première, i.e.

http://latex.codecogs.com/gif.latex?Y=\boldsymbol{X}\boldsymbol{\beta}+\varepsilon=(1%20\%20\boldsymbol{X}_1)\begin{pmatrix}\boldsymbol{\beta}_0%20\\%20\boldsymbol{\beta}_1\end{pmatrix}+\boldsymbol{X}_2\boldsymbol{\beta}_2+\varepsilon

Dans ce cas, les équations normales sont

http://latex.codecogs.com/gif.latex?\left\{\begin{array}{l}\begin{pmatrix}1%20\\%20\boldsymbol{X}%27_1\end{pmatrix}(1%20\%20\boldsymbol{X}_1)\begin{pmatrix}\widehat{\boldsymbol{\beta}}_0%20\\%20\widehat{\boldsymbol{\beta}}_1\end{pmatrix}+\begin{pmatrix}1%20\\%20\boldsymbol{X}%27_1\end{pmatrix}\boldsymbol{X}_2%20\widehat{\boldsymbol{\beta}}_2=\begin{pmatrix}1%20\\%20\boldsymbol{X}%27_1\end{pmatrix}Y%20\\%20\boldsymbol{X}_2%27(1\%20\boldsymbol{X}_1)%20\begin{pmatrix}\widehat{\boldsymbol{\beta}}_0%20\\%20\widehat{\boldsymbol{\beta}}_1\end{pmatrix}+\boldsymbol{X}_2%27\boldsymbol{X}_2%20\widehat{\boldsymbol{\beta}}_2=\boldsymbol{X}_2%27Y%20%20\end{array}\right.

Bref, il faut que http://latex.codecogs.com/gif.latex?\boldsymbol%20X_1 et http://latex.codecogs.com/gif.latex?\boldsymbol%20X_2 soient orthogonales pour que le terme sur la seconde diagonale disparaisse. C'est ce qu'on retrouve dans la plupart des livres d'économétrie, il suffit de chercher le théorème de Frisch-Waugh dans l'index (même si le théorème de Frisch-Waugh va beaucoup plus loin puisqu'il explique quels ajustement faire pour lier les estimateurs dans une régression simple, et dans le cas multiple).

Mais est-ce un résultat purement théorique ou peut-on l'invoquer dans un cas pratique ? Autrement dit, si deux variables semblent orthogonales, que se passent-il numériquement ? Si je simule des variables explicatives indépendantes, les estimateurs coïncident-ils (comme le suggère la théorie) ?

Considérons un modèle linéaire avec deux variables explicative que l'on supposera indépendantes, mais ayant toutes deux un impact sur la variable explicative. Le plus simple est de considérer un triple de variables telles que

http://latex.codecogs.com/gif.latex?\boldsymbol{Z}=\begin{pmatrix}%20Y%20\\%20X_1\\X_2\end{pmatrix}\sim\mathcal{N}\left(\begin{pmatrix}%20\mu_Y%20\\%20\mu_{X_1}\\\mu_{X_2}\end{pmatrix},\begin{pmatrix}%201%20&%20\star%20&%20\star%20\\%20\star%20&%201&0\\\star&0&1\end{pmatrix}\right)

http://latex.codecogs.com/gif.latex?\star désigne des valeurs non nulles. Par exemple,

> set.seed(1)
> n=100
> S=matrix(c(1,.4,.3,.4,1,0,.3,0,1),3,3)
> S
[,1] [,2] [,3]
[1,]  1.0  0.4  0.3
[2,]  0.4  1.0  0.0
[3,]  0.3  0.0  1.0
> M=c(1,3,6)
> Z=rmnorm(n,M,varcov=S)
> Y=Z[,1]; X1=Z[,2]; X2=Z[,3]
> base=data.frame(Y,X1,X2)
> cor(base)
Y          X1          X2
Y  1.0000000  0.37796580  0.27859381
X1 0.3779658  1.00000000 -0.05060539
X2 0.2785938 -0.05060539  1.00000000
On a simulé ici deux variables indépendantes, mais toutes deux corrélées avec la variable d'intérêt. On notera que numériquement
http://latex.codecogs.com/gif.latex?\frac{1}{n}\sum_{i=1}^n%20X_{1,i}X_{2,i}%20\neq%20\frac{1}{n}\sum_{i=1}^n%20X_{1,i}\cdot\frac{1}{n}\sum_{i=1}^n%20X_{2,i}

(autrement dit, en moyenne, on simulera des données indépendantes, mais dans ce cas précis, les données ne sont pas rigoureusement orthogonales). 
> sum(X1*X2)/n
[1] 18.20194
> sum(X1)*sum(X2)/n^2
[1] 18.25097
Mais un test rapide nous pousse à accepter l'hypothèse d'indépendance entre les deux variables (sans trop d'hésitations).
> cor.test(X1,X2)
 
Pearsons product-moment correlation
 
data:  X1 and X2
t = -0.5016, df = 98, p-value = 0.6171
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
-0.2445923  0.1472766
sample estimates:
cor
-0.05060539 
Si on regarde maintenant la régression,
> R=lm(Y~X1+X2,data=base)
> summary(R)
 
Call:
lm(formula = Y ~ X1 + X2, data = base)
 
Residuals:
Min       1Q   Median       3Q      Max
-1.87885 -0.57656  0.07957  0.52719  1.77407
 
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept)  4.71180    0.28246  16.682  < 2e-16 ***
X1           0.37232    0.08441   4.411 2.66e-05 ***
X2           0.25975    0.07755   3.350  0.00115 **
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1
 
Residual standard error: 0.7954 on 97 degrees of freedom
Multiple R-squared: 0.2317,	Adjusted R-squared: 0.2159
F-statistic: 14.63 on 2 and 97 DF,  p-value: 2.803e-06 
Quel est le lien avec les régressions simples, sur chacune des variables ? Si on régresse sur la première, on obtient
> R1=lm(Y~X1,data=base)
> summary(R1)
 
Call:
lm(formula = Y ~ X1, data = base)
 
Residuals:
Min       1Q   Median       3Q      Max
-1.78973 -0.54060  0.04036  0.44138  1.94389
 
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept)  5.03165    0.27934  18.013  < 2e-16 ***
X1           0.35802    0.08859   4.041 0.000106 ***
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1
 
Residual standard error: 0.8358 on 98 degrees of freedom
Multiple R-squared: 0.1429,	Adjusted R-squared: 0.1341
F-statistic: 16.33 on 1 and 98 DF,  p-value: 0.0001058 
et si on régresse sur la seconde
> R2=lm(Y~X2,data=base)
> summary(R2)
 
Call:
lm(formula = Y ~ X2, data = base)
 
Residuals:
Min      1Q  Median      3Q     Max
-1.8652 -0.5507  0.1104  0.6109  2.1435
 
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept)  5.85053    0.12495  46.824  < 2e-16 ***
X2           0.24244    0.08443   2.872  0.00501 **
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1
 
Residual standard error: 0.867 on 98 degrees of freedom
Multiple R-squared: 0.07761,	Adjusted R-squared: 0.0682
F-statistic: 8.246 on 1 and 98 DF,  p-value: 0.005005 
Si les données ne sont pas rigoureusement orthogonales, alors http://latex.codecogs.com/gif.latex?\widehat{\beta}_1 dans le modèle multiple est légèrement différent de http://latex.codecogs.com/gif.latex?\widehat{\beta}_1 obtenu dans le modèle simple. Si on regarde la distribution de nos estimateurs (n'oublions pas qu'il y a une marge d'erreur), ils sont proches, ou au moins statistiquement proches (avec à gauche la distribution de http://latex.codecogs.com/gif.latex?\widehat{\beta}_1 et à droite celle de http://latex.codecogs.com/gif.latex?\widehat{\beta}_2)

Si on génère 100 bases de données avec ce modèle (avec 500 observations à chaque fois) on obtient les estimateurs suivants (à gauche les http://latex.codecogs.com/gif.latex?\widehat{\beta}_1 et à droite les http://latex.codecogs.com/gif.latex?\widehat{\beta}_2, avec en abscisse le modèle multiple et en ordonnées, le modèle simple).

(la valeur centrale étant la vraie valeur, utilisée pour les simulations). On pourrait se demander si les valeurs éloignées du barycentre (ou de cette première bissectrice) correspondent à des cas où l’hypothèse d'indépendance entre les deux variables est rejetée ? On peut mettre des couleurs différentes en fonction de la http://latex.codecogs.com/gif.latex?p-value: plus la http://latex.codecogs.com/gif.latex?p-value est faible (rejet de l'hypothèse d'indépendance) plus la couleur sera vive (et rouge), et plus la http://latex.codecogs.com/gif.latex?p-value est forte (acceptation de l'hypothèse d'indépendance) plus la couleur sera terne (et jaune, voire blanche),
sur 1,000 simulations, on obtient

Le code est ici
> set.seed(1)
> library(mnormt)
> S=matrix(c(1,.4,.3,.4,1,0,.3,0,1),3,3)
> BX1=BX2=matrix(NA,1000,2)
> P=rep(NA,1000)
> for(s in 1:1000){
+   n=500
+   Z=rmnorm(n,c(6,3,1),varcov=S)
+   Y=Z[,1]; X1=Z[,2]; X2=Z[,3]
+   base=data.frame(Y,X1,X2)
+   R=lm(Y~X1+X2,data=base)
+   BX1[s,1]=coefficients(R)[2]
+   BX2[s,1]=coefficients(R)[3]
+   BX1[s,2]=coefficients(lm(Y~X1,data=base))[2]
+   BX2[s,2]=coefficients(lm(Y~X2,data=base))[2]
+   P[s]=cor.test(X1,X2)$p.value
+ }
> COL=(heat.colors(100))
> plot(BX1[,1],BX1[,2],pch=19,cex=.6,col=COL[trunc(100*P)])
> abline(a=0,b=1,lty=2)
Autrement dit le fait que l'estimation dans le modèle multiple et les modèles simples diffèrent beaucoup n'a rien a voir avec la http://latex.codecogs.com/gif.latex?p-value d'un test d'indépendance entre les deux variables... étonnant non ? En revanche, si on rajoute une observation pour rendre le modèle parfaitement non-corrélé, par exemple,
> difference=sum(X1*X2)*(n+1)/sum(X1)-sum(X2)
> X1=c(X1,0)
> X2=c(X2,difference)
> n=n+1
> sum(X1*X2)/n
[1] 18.02172
> sum(X1)*sum(X2)/n^2
[1] 18.02172
On retrouve ici une corrélation parfaitement nulle,
> Y=c(Y,0)
>  base=data.frame(Y,X1,X2)
>  cor(base)
Y            X1            X2
Y  1.0000000  3.946091e-01  2.923412e-01
X1 0.3946091  1.000000e+00 -4.817519e-16
X2 0.2923412 -4.817519e-16  1.000000e+00
Si on regarde maintenant la régression multiple
>  R=lm(Y~X1+X2,data=base)
>  coefficients(R)
(Intercept)          X1          X2
-1.5028358   0.3589776   0.2531358
et les deux régressions simples,
>  R1=lm(Y~X1,data=base)
>  coefficients(R1)
(Intercept)          X1
0.02847362  0.35897764
>  R2=lm(Y~X2,data=base)
>  coefficients(R2)
(Intercept)          X2
-0.4334011   0.2531358
on obtient exactement les mêmes coefficient.
Moralité ? l'hypothèse d'orthogonalité entre les variables explicatives n'est pas à prendre à la légère: il faut une orthogonalité stricte pour que numériquement, la régression multiple soit équivalente aux régressions simples (comme le prédit la théorie). Mais de manière un peu surprenante, si on est très proche de l'indépendance, les valeurs numériques des estimateurs peut différer. Et ce, parfois de manière non négligeable, même si statistiquement, on valide l'hypothèse d'orthogonalité entre les variables explicatives.

Wednesday, October 3 2012

Modèles de régression, premier cours

Le premier cours aura lieu tout à l'heure, le plan de cours est en ligne. Compte tenu du nombre d'étudiants inscrits, je vais utiliser des transparents, plutôt que de continuer à faire cours au tableau. La première série de transparents est en ligne,

Mais compte tenu des délais (et de la rentrée un peu intense), je n'aurais pas eu le temps d'imprimer les transparents pour le cours. Désolé...

Tuesday, February 21 2012

Examen intra, modèles de régression

L'examen intra comportera deux exercices proches de ceux faits en démonstration, et une analyse de sorties de régression. Cette dernière partie portera sur la base suivante (ou peut être une extraction de cette base)

> examen=read.table(
+ "http://freakonometrics.blog.free.fr/public/
data/basket-exam-v2.csv"
, + header=TRUE,sep=";") > tail(examen) EQUIPE halfdiff winner 9917 MARYLAND -1 0 9918 RHODE ISLAND -15 1 9919 ROBERT MORRIS 4 1 9920 NORTH CAROLINA-ASHEVILLE 11 1 9921 BROWN -2 1 9922 MOUNT ST. MARYS 1 0 totalpointsdiff secondhalfpoints 9917 -10 26 9918 1 44 9919 6 43 9920 19 39 9921 6 48 9922 -9 26 nodiff_pts_1000_left hometeam halfwinner 9917 9 1 0 9918 18 1 0 9919 17 1 1 9920 20 1 1 9921 16 1 0 9922 13 1 1 halflooser secondhalfpointsother 9917 1 35 9918 1 28 9919 0 41 9920 0 31 9921 1 40 9922 0 36

qui contient des matchs de baskets universitaires.

  • EQUIPE le nom de l'équipe qui sert de référence
  • HALFDIFF le nombre de points de différence à la mi-temps (négatif signifie que l'EQUIPE perdait)
  • WINNER vaut 1 si l'équipe a gagné le match, 0 sinon,
  • TOTALPOINTSDIFF le nombre de points de différence à la fin du match
  • SECONDHALFPOINTS est le nombre de points marqués par l'EQUIPE pendant la seconde mi-temps
  • NODIFF_PTS_1000-LEFT la différence de points entre les équipes 10 minutes avant la fin du match (au milieu de la seconde période)
  • HOMETEAM vaut 0 si l'équipe joue à l'extérieur, 1 si elle joue à domicile
  • HALFWINNER vaut 1 si l'EQUIPE gagnait (supérieur ou nul) à la mi-temps
  • HALFLOOSER vaut 1 si l'EQUIPE perdait (inférieur ou nul) à la mi-temps
  • SECONDHALFPOINTSOTHER est le nombre de points marqués par l'adversaire au cours de la seconde mi-temps

Monday, February 6 2012

Qualité d'une régression

La semaine passée, on avait commencé à travailler sur les incendies dans les différents quartiers de Chicago,

> chicago=read.table(
+ "http://freakonometrics.free.fr/chicago.txt",
+ header=TRUE,sep=";")
+ Y=chicago$Fire
+ X1=chicago$X_1
+ X2=chicago$X_2
+ X3=chicago$X_3
+ base=data.frame(Y,X1,X2,X3)
+ reg123=lm(Y~.,data=base)
+ summary(reg123)
 
Call:
lm(formula = Y ~ ., data = base)
 
Residuals:
Min     1Q Median     3Q    Max
-9.737 -4.565 -1.479  3.751 16.079
 
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 22.07525    6.19447   3.564 0.000910 ***
X1          -0.62764    5.28130  -0.119 0.905953
X2           0.22378    0.06161   3.632 0.000744 ***
X3          -1.55059    0.38195  -4.060 0.000204 ***
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1
 
Residual standard error: 6.527 on 43 degrees of freedom
Multiple R-squared: 0.4417,	Adjusted R-squared: 0.4027
F-statistic: 11.34 on 3 and 43 DF,  p-value: 1.314e-05
 
+ reg23=lm(Y~X2+X3,data=base)
> summary(reg23)
 
Call:
lm(formula = Y ~ X2 + X3, data = base)
 
Residuals:
Min     1Q Median     3Q    Max
-9.789 -4.644 -1.472  3.743 15.983
 
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 21.49646    3.78470   5.680 9.95e-07 ***
X2           0.22129    0.05731   3.862 0.000366 ***
X3          -1.52477    0.31059  -4.909 1.30e-05 ***
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1
 
Residual standard error: 6.453 on 44 degrees of freedom
Multiple R-squared: 0.4415,	Adjusted R-squared: 0.4161
F-statistic: 17.39 on 2 and 44 DF,  p-value: 2.721e-06 

Comme seules deux variables semblent représentatives, on pourrait être tenté de visualiser la régression,

> library(scatterplot3d)
> s3d=scatterplot3d(X2,X3,Y,type="h")

On peut ensuite représenter le plan de régression,

> s3d$plane3d(reg23)

Sur la figure ci-dessous, on peut visualiser les observations, et leur projection sur le plan de régression (le trait étant le résidu)

L'interprétation des signes des paramètres se fait sur la figure suivante: on fixe une des variables (c'est la notion de "toutes choses étant égales par ailleurs") on regarde ce que donnerait une hausse ou une baisse de l'autre.

On peut visualiser l'évolution des résidus en fonction de la valeur prédite, i.e. http://freakonometrics.blog.free.fr/public/perso5/diag12.gif en fonction de http://freakonometrics.blog.free.fr/public/perso5/diag11.gif,
> plot(reg23,which=1)
> E =residuals(reg23)
> Yp=predict(reg23)
> points(Yp,E,col="blue")

On peut alors faire un test (graphique) de normalité des résidus, en représentant http://freakonometrics.blog.free.fr/public/perso5/diag20.gif (correspondant au http://freakonometrics.blog.free.fr/public/perso5/diag19.gifème résidus) versus http://freakonometrics.blog.free.fr/public/perso5/diag18.gif. Si les résidus étaient gaussiens, les points devraient être alignés suivant la première bissectrice,
> plot(reg23,which=2)
> s=sd(E)
> Es=sort(E/s)
> n=nrow(base)
> Qtheorique=qnorm((1:n-.5)/(n))
> points(Qtheorique,Es,col="blue")

Pour aller plus loin dans les diagnostics, rappelons que si on considère la matrice de projection http://freakonometrics.blog.free.fr/public/perso5/diag01.gif, alors les résidus empiriques http://freakonometrics.blog.free.fr/public/perso5/diag02.gif peuvent s'obtenir par la relation

http://freakonometrics.blog.free.fr/public/perso5/diag03.gif

de telle sorte que http://freakonometrics.blog.free.fr/public/perso5/diag04.gif. On notera alors

http://freakonometrics.blog.free.fr/public/perso5/diag05.gif

les résidus standardisés. Il est souvent plus pertinent de travailler sur ces résidus, car ils sont centrés (mais c'était aussi le cas des autres) et réduits. On peut ainsi visualiser les résidus standardisés en fonction des prédictions,
> plot(reg23,which=3)
> s=summary(reg23)$sigma
> X=matrix(c(rep(1,n),X2,X3),n,3)
> H=X%*%solve(t(X)%*%X)%*%t(X)
> T=E/s/sqrt(1-diag(H))
> points(Yp,sqrt(abs(T)),col="blue")

Parmi les autres informations pertinentes, il y a la distance de Cook,

http://freakonometrics.blog.free.fr/public/perso5/diag13.gif

(on parle de distance de Cook car il s'agit d'une distance entre http://freakonometrics.blog.free.fr/public/perso5/diag14.gif et http://freakonometrics.blog.free.fr/public/perso5/diag15.gif, correspondant à l'estimation du paramètre en enlevant la http://freakonometrics.blog.free.fr/public/perso5/diag19.gifème observation),

> plot(reg23,which=4)
> C=diag(H)/(1-diag(H))*T^2/3
> points(1:n,C,col="blue")

On peut ensuite continuer les graphiques,

> plot(reg23,which=5)
> points(diag(H),T,col="blue")

ou encore
> plot(reg23,which=6)
> points(diag(H)/(1-diag(H)),C,col="blue")

Thursday, February 2 2012

un mot (rapide) sur le R2 et la sélection de modèle

J'évoquais tout à l'heure dans un rapide billet l'utilisation du http://freakonometrics.blog.free.fr/public/perso5/R2.gif dans une régression sans constante. On va donc évoquer ici uniquement le cas où une constante est prise en compte dans la régression pour parler de la sélection de modèle, et plus particulièrement le http://freakonometrics.blog.free.fr/public/perso5/r2ajuste.gif, souvent appelé http://freakonometrics.blog.free.fr/public/perso5/R2.gif-ajusté. La sélection de modèle sera l'objet du prochain cours. Classiquement, on défini le coefficient d'ajustement comme

http://freakonometrics.blog.free.fr/public/perso5/olssc13.gif

Dans une régression avec une constante, le résidus empiriques sont centrés, et on peut interpréter les termes comme des variances, d'où l'écriture souvent utilisée

http://freakonometrics.blog.free.fr/public/perso5/olssc10.gif

(qui présente l'avantage d'offrir une interprétation simple au coefficient).  En utilisant la formule de décomposition de la variance, c'est à dire le théorème de Pythagore,

http://freakonometrics.blog.free.fr/public/perso5/olssc12.gif

on peut réécrire ce coefficient

http://freakonometrics.blog.free.fr/public/perso5/olssc15.gif

ou encore

http://freakonometrics.blog.free.fr/public/perso5/olssc50.gif

(qui correspond presque à la formule calculée sous R). On en déduit de manière assez simple que l'on aura toujours http://freakonometrics.blog.free.fr/public/perso5/olssc11.gif. Une autre propriété, dès lors que l'on a une constante dans le modèle est que le http://freakonometrics.blog.free.fr/public/perso5/R2.gif peut être relié à la corrélation (au sens de Pearson) entre la prédiction et l'observation,

http://freakonometrics.blog.free.fr/public/perso5/olssc16.gif

C'est d'ailleurs sous cette forme qu'a été introduit, historiquement, ce coefficient (on peut renvoyer aux travaux de Karl Pearson, ou Udny Yule sur le sujet, lors des travaux sur l'hérédité à la fin du XIXème siècle). Mais ce coefficient, s'il pourrait être utilisé comme mesure de la qualité de l'ajustement, ne peut être utilisé pour faire de la sélection de modèle. En effet, en rajoutant des variables, quelles qu'elles soient, améliorera toujours le modèle. C'est ce que l'on arrive à faire ci-dessous en rajoutant juste du bruit dans la régression

> summary(lm(dist~speed,data=cars))
 
Call:
lm(formula = dist ~ speed, data = cars)
 
Residuals:
Min      1Q  Median      3Q     Max
-29.069  -9.525  -2.272   9.215  43.201
 
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -17.5791     6.7584  -2.601   0.0123 *
speed         3.9324     0.4155   9.464 1.49e-12 ***
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1
 
Residual standard error: 15.38 on 48 degrees of freedom
Multiple R-squared: 0.6511,	Adjusted R-squared: 0.6438
F-statistic: 89.57 on 1 and 48 DF,  p-value: 1.49e-12
 
> set.seed(1)
> cars$bruit=rnorm(nrow(cars))
> summary(lm(dist~speed+bruit,data=cars))
 
Call:
lm(formula = dist ~ speed + bruit, data = cars)
 
Residuals:
Min      1Q  Median      3Q     Max
-31.869  -9.412  -3.049   7.410  43.769
 
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept)  -17.905      6.757  -2.650   0.0109 *
speed          3.935      0.415   9.482 1.73e-12 ***
bruit          2.788      2.639   1.056   0.2963
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1
 
Residual standard error: 15.36 on 47 degrees of freedom
Multiple R-squared: 0.6592,	Adjusted R-squared: 0.6447
F-statistic: 45.45 on 2 and 47 DF,  p-value: 1.034e-11
 
> set.seed(1)
> cars$bruit=matrix(rnorm(20*nrow(cars)),nrow(cars),20)
> summary(lm(dist~.,data=cars))
 
Call:
lm(formula = dist ~ ., data = cars)
 
Residuals:
Min      1Q  Median      3Q     Max
-30.147  -5.883  -2.070   7.354  32.096
 
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -23.8799     8.4775  -2.817  0.00879 **
speed         4.3870     0.5740   7.643 2.52e-08 ***
bruit1       -1.7487     4.1122  -0.425  0.67391
bruit2       -2.7356     3.0890  -0.886  0.38338
bruit3        4.2464     3.5200   1.206  0.23778
bruit4       -4.5160     3.2715  -1.380  0.17838
...
bruit19       1.5769     2.6615   0.592  0.55828
bruit20       1.5107     2.7799   0.543  0.59113
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1
 
Residual standard error: 15.87 on 28 degrees of freedom
Multiple R-squared: 0.7834,	Adjusted R-squared: 0.621
F-statistic: 4.822 on 21 and 28 DF,  p-value: 7.557e-05 

Plus on rajoute des variables, plus on augmente le http://freakonometrics.blog.free.fr/public/perso5/R2.gif. Un ajustement a été proposé afin de viser un principe de parcimonie. L'ajustement en question peut se retrouver dans Fisher (1924),

même si beaucoup de monde semble l'attribuer à Theil (1961). L'idée derrière est que l'association faite entre les variances et les sommes des carrés est rapide, et peut-être fallacieuse, en pratique. En effet, on utilisait comme estimateurs des variances

http://freakonometrics.blog.free.fr/public/perso5/olssc17.gif

et 

http://freakonometrics.blog.free.fr/public/perso5/olssc18.gif

Or ces estimateurs sont des estimateurs biaisés des variances. Il serait plus judicieux de considérer

http://freakonometrics.blog.free.fr/public/perso5/olssc22.gif

et

http://freakonometrics.blog.free.fr/public/perso5/olssc20.gif

Ceci pousse à poser

http://freakonometrics.blog.free.fr/public/perso5/olssc26.gif

qui est effectivement le coefficient de détermination ajusté. On peut noter que comme on régresse toujours sur quelque chose (au pire une variable), alors http://freakonometrics.blog.free.fr/public/perso5/olssc27.gif (on peut avoir égalité si on a un modèle parfait). On notera aussi qui si l’ajustement est trop mauvais, en particulier

http://freakonometrics.blog.free.fr/public/perso5/olssc28.gif

alors http://freakonometrics.blog.free.fr/public/perso5/r2ajuste.gif est négatif. Le http://freakonometrics.blog.free.fr/public/perso5/r2ajuste.gif est populaire car il permet de pénaliser le http://freakonometrics.blog.free.fr/public/perso5/R2.gif, en prenant en compte la complexité du modèle (ici le nombre de variables explicatives). Pour qu'un modèle soit meilleur avec une variable en plus, il faut que la variable que l'on rajoute apporte vraiment quelque chose. Pour comprendre plus concrètement ce qui se passe, considérons la régression sur http://freakonometrics.blog.free.fr/public/perso5/olssc31.gif et celle sur http://freakonometrics.blog.free.fr/public/perso5/olssc32.gif. On notera http://freakonometrics.blog.free.fr/public/perso5/olssc.gif et http://freakonometrics.blog.free.fr/public/perso5/olssc33.gif les http://freakonometrics.blog.free.fr/public/perso5/r2ajuste.gif associés. Pesaran (1974) a noté qu'il existait une relation simple entre  http://freakonometrics.blog.free.fr/public/perso5/olssc.gif et http://freakonometrics.blog.free.fr/public/perso5/olssc33.gif

http://freakonometrics.blog.free.fr/public/perso5/olssc36.gif

  oùhttp://freakonometrics.blog.free.fr/public/perso5/ols37.gif est l'estimateur du coefficient ajouté dans la régression la plus complète, et http://freakonometrics.blog.free.fr/public/perso5/olssc51.gif la statistique de Student du test de significativité. Autrement dit, http://freakonometrics.blog.free.fr/public/perso5/olssc38.gif si et seulement si la nouvelle variable n'est pas suffisamment significative, en l’occurrence http://freakonometrics.blog.free.fr/public/perso5/olssc39.gif.
Mais ce n'est pas le coefficient http://freakonometrics.blog.free.fr/public/perso5/r2ajuste.gif (même avec l'ajustement) qui est le plus utilisé pour faire de la sélection de modèle, comme nous le verrons en cours la semaine prochaine (mais une pénalisation de la vraisemblance). A suivre donc...

Monday, January 30 2012

calculs des sorties de régression

Avec un peu de calcul matriciel (et en utilisant les fonctions de répartition des lois usuelles) on peut calculer à la main toute les grandeurs obtenues lorsque l'on fait une régression linéaire. Utilisons la base de donnée avec le poids d'une personne (qui sera notre variable d'intérêt, et que l'on essayera d'inférer), la taille et le sexe de la personne,

> TP = read.table(
"http://freakonometrics.free.fr/taillepoids.txt",
header=TRUE,sep=";") > tail(TP) indice sexe poids1 taille1 poids2 taille2 195 195 F 62 164 61 161 196 196 M 74 175 71 175 197 197 M 83 180 80 180 198 198 M 81 175 NA NA 199 199 M 90 181 91 178 200 200 M 79 177 81 178 > Y=TP$poids1 > X1=TP$sexe > X2=TP$taille1 > base=data.frame(Y,X1,X2) > tail(base) Y X1 X2 195 62 F 164 196 74 M 175 197 83 M 180 198 81 M 175 199 90 M 181 200 79 M 177

La régression linéaire donne ici

> regression=lm(Y~X1+X2)
> summary(regression)
 
Call:
lm(formula = Y ~ X1 + X2)
 
Residuals:
Min      1Q  Median      3Q     Max
-24.718  -7.159  -1.472   5.487  74.726
 
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 109.11420   14.20513   7.681 7.22e-13 ***
X1M          22.49801    2.08690  10.781  < 2e-16 ***
X2           -0.31298    0.08649  -3.619 0.000376 ***
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1
 
Residual standard error: 11.81 on 197 degrees of freedom
Multiple R-squared: 0.3937,	Adjusted R-squared: 0.3875
F-statistic: 63.95 on 2 and 197 DF,  p-value: < 2.2e-16

On peut commencer par (re)calculer les estimateurs par moindres carrés ordinaires, en notant que de la variable associée au sexe, seul le sexe masculin a été retenu ici.

> n=length(Y)
> X=matrix(c(rep(1,n),(X1=="M")*1,X2),n,3)
> X[1:5,]
[,1] [,2] [,3]
[1,]    1    1  182
[2,]    1    0  161
[3,]    1    0  161
[4,]    1    1  177
[5,]    1    0  157
> (beta=solve(t(X)%*%X)%*%t(X)%*%Y)
[,1]
[1,] 109.1141967
[2,]  22.4980107
[3,]  -0.3129827
> summary(regression)$coefficients
Estimate  Std. Error   t value     Pr(>|t|)
(Intercept) 109.1141967 14.20512536  7.681326 7.222037e-13
X1M          22.4980107  2.08690147 10.780581 1.347214e-21
X2           -0.3129827  0.08648531 -3.618912 3.760466e-04

On retrouve ici est estimation indiquée. Notons que si la modalité de référence était le sexe féminin, nous aurions,

> Xbis=matrix(c(rep(1,n),(X1=="F")*1,X2),n,3)
> Xbis[1:5,]
[,1] [,2] [,3]
[1,]    1    0  182
[2,]    1    1  161
[3,]    1    1  161
[4,]    1    0  177
[5,]    1    1  157
> solve(t(Xbis)%*% Xbis)%*%t(Xbis)%*%Y
[,1]
[1,] 131.6122073
[2,] -22.4980107
[3,]  -0.3129827

Si on compare les deux constantes, entre ces deux modèles, on retrouve la valeur du coefficient associé au sexe de l'individu,

> (solve(t(X)%*%X)%*%t(X)%*%Y)[1]-
+ (solve(t(Xbis)%*% Xbis)%*%t(Xbis)%*%Y)[1]
[1] -22.49801
> (solve(t(X)%*%X)%*%t(X)%*%Y)[2]
[1] 22.49801

Continuons un peu... L'estimateur de la volatilité des résidus est ici

> residus=Y-X%*%beta
> t(residus)%*%residus
[,1]
[1,] 27493.32
> sum(residus^2)
[1] 27493.32
>
> (sigma=sqrt(sum(residus^2)/(n-ncol(X))))
[1] 11.81355
> summary(regression)$sigma
[1] 11.81355

On peut utiliser cette grandeur pour estimer la matrice de variance-covariance de notre estimateur,

> (varbeta=sigma^2*solve(t(X)%*%X))
[,1]       [,2]         [,3]
[1,] 201.785586 16.2312631 -1.224735573
[2,]  16.231263  4.3551577 -0.106737634
[3,]  -1.224736 -0.1067376  0.007479709
> vcov(regression)
(Intercept)        X1M           X2
(Intercept)  201.785586 16.2312631 -1.224735573
X1M           16.231263  4.3551577 -0.106737634
X2            -1.224736 -0.1067376  0.007479709

Le terme diagonal est celui qui est utilisé pour calculer l'écart-type des estimateurs de chacun des coefficients.

> (sigbeta=sqrt(diag(varbeta)))
[1] 14.20512536  2.08690147  0.08648531
> summary(regression)$coefficients
Estimate  Std. Error   t value     Pr(>|t|)
(Intercept) 109.1141967 14.20512536  7.681326 7.222037e-13
X1M          22.4980107  2.08690147 10.780581 1.347214e-21
X2           -0.3129827  0.08648531 -3.618912 3.760466e-04

En faisant une hypothèse de normalité des résidus (ou en supposant le nombre d'observations grand, i.e. suffisamment grand pour invoquer des théorèmes asymptotiques), on peut faire un test de significativité des variables explicatives,

> (beta/sigbeta)
[,1]
[1,]  7.681326
[2,] 10.780581
[3,] -3.618912
> 2*(1-pt(abs(beta/sigbeta),df=n-ncol(X)))
[,1]
[1,] 7.220891e-13
[2,] 0.000000e+00
[3,] 3.760466e-04

avec respectivement la statistique de Student, et la p-value associé au test de nullité. Pour juger de la qualité de l'ajustement, on peut calculer

> (R2=cor(Y,X%*%beta)^2)
[,1]
[1,] 0.3936724
> summary(regression)$r.squared
[1] 0.3936724
>
> (R2a=1-(n-1)/(n-(ncol(X)))*(1-R2))
[,1]
[1,] 0.3875168
> summary(regression)$adj.r.squared
[1] 0.3875168

et enfin, le test de significativité global (de Fisher) donne ici

> (F=R2/(ncol(X)-1)/((1-R2)/(n-ncol(X))))
[,1]
[1,] 63.95343
> summary(regression)$fstatistic
value     numdf     dendf
63.95343   2.00000 197.00000
> 1-pf(F,(ncol(X)-1),(n-ncol(X)))
[,1]
[1,]    0

Bref, avec un peu de calcul, on peut retrouver toutes les valeurs données sous R. Une fois les calculs compris, on pourra passer à la géométrie, et à l'interprétation...

Wednesday, January 18 2012

de la normalité des estimateurs dans une régression

Cette semaine en cours, on a évoqué la normalité des estimateurs dans une régression linéaire. En supposant la normalité des résidus, on a vu en cours que http://freakonometrics.blog.free.fr/public/perso5/ols-002.gif était un estimateur Gaussien. En particulier, chacun des estimateurs est alors Gaussien, au sens où http://freakonometrics.blog.free.fr/public/perso5/ols--0003.gif, ce qui peut se visualiser sur le graphique suivant (la constante est en abscisse, et la pente en ordonnée), avec un intervalle de confiance à 95%,

En fait, la variance étant inconnue (mais pouvant être estimée), si on remplace la variance des résidus par leur estimateur, la loi de l'estimateur est une loi de Student. De même pour l'estimateur de la pente de la droite de régression, http://freakonometrics.blog.free.fr/public/perso5/ols---ooo4.gif

Le fait que le couple soit également Gaussien fait que l'on peut construire non plus un intervalle de confiance (on n'est plus en dimension 1) mais une ellipse de confiance. On retient une forme elliptique car c'est la plus petite région dans laquelle on se trouvera avec une probabilité de 95% (comme discuté dans un vieux billet).

Mais pour mieux comprendre cette notion d'ellipse de confiance, le plus simple est d'avoir recours à du rééchantillonnage dans la base de données. En effet, comme on ne dispose que d'un jeu de données, on a un estimateur. Et la discussion sur la loi de notre estimateur est purement théorique. Pour visualiser la loi de notre estimateur, il faudrait des centaines, voire des milliers de bases similaires. Que l'on n'a pas. La solution est alors de tirer au hasard des points de notre échantillon (avec remise), i.e. de faire du bootstrap,

set.seed(1)
COEF=matrix(NA,10000,2)
for(s in 1:nrow(COEF)){
I=sample(1:nrow(cars),nrow(cars),replace=TRUE)
COEF[s,]=lm(dist~speed,data=cars[I,])$coefficients
}

Si on regarde ce qui se passe, tirage après tirage, on génère un paquet d'échantillon, et pour chaque échantillon, on ajuste une droite de régression.

http://freakonometrics.blog.free.fr/public/perso5/BOOOT.gif

Les distributions - sur tous ces échantillons - de la constante et de la pente semblent effectivement Gaussiennes,

hist(COEF[,1],col="light blue",prob=TRUE)
u=seq(min(COEF[,1]),max(COEF[,1]),length=500)
v=dnorm(u,mean(COEF[,1]),sd(COEF[,1]))
lines(u,v,lwd=3,col="red")
hist(COEF[,2],col="light blue",prob=TRUE)
u=seq(min(COEF[,2]),max(COEF[,2]),length=500)
v=dnorm(u,mean(COEF[,2]),sd(COEF[,2]))
lines(u,v,lwd=3,col="red")

pour la distribution de l'estimateur de la pente, alors que pour l'estimateur de la constante, on a la distribution suivante,

Si on regarde maintenant la loi jointe,

on retrouve une forme elliptique pour le nuage des points (et une forte corrélation négative entre les deux estimateurs). Mais si on creuse un peu

library(ellipse)
reg=lm(dist~speed,data=cars)
e=ellipse(reg)
plot(e,type="l",lwd=2)
polygon(e,col="light blue")
points(COEF,cex=.5)
l'ellipse ne coïncide pas (tout à fait) avec celle obtenu théoriquement. Ce qui laisse à penser que l'hypothèse de normalité des résidus est peut-être à revoir..,

Friday, January 13 2012

ACT6420 Méthodes de prévision, introduction à R

Cet après midi, j'assurerais la démonstration, en salle informatique à 14h30, PK S1 590, au sous sol (salle L). On fera une introduction à R, afin de présenter les rudiments du langage. Je mets en ligne quelques lignes de code,

> X=cars$speed
> Y=cars$dist
> n=length(X)
> (mx=mean(X))
[1] 15.4
> sum(X)/n
[1] 15.4
> s=0
> for(i in 1:n){s=s+X[i]}
> print(s/n)
[1] 15.4
>
> my=mean(Y)
> (sx=sd(X))
[1] 5.287644
> sqrt(sum((X-mx)^2)/(n-1))
[1] 5.287644
> sy=sd(Y)
> (r=cor(X,Y))
[1] 0.8068949
> sum((X-mx)*(Y-my))/((n-1)*sx*sy)
[1] 0.8068949
>
> X<=15
[1]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
[9]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
[17]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
[25]  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE
[33] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[41] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[49] FALSE FALSE
> sum(X<=15)
[1] 26
> X[X<=15]
[1]  4  4  7  7  8  9 10 10 10 11 11 12 12 12 12 13 13
[18] 13 13 14 14 14 14 15 15 15
> mean(Y[X<=15])
[1] 27.5
> mean(Y[X>15])
[1] 59.75
>
> (b1=r*sy/sx)
[1] 3.932409
> (b0=my-b1*mx)
[1] -17.57909
On peut aussi faire quelques graphiques afin de visualiser la régression,
> plot(X,Y)
> plot(X,Y,xlab="Vitesse de la voiture",
+ ylab="Distance de freinage",pch=4,
+ xlim=c(0,30),axes=FALSE)
> axis(1);axis(2)
> abline(a=b0,b=b1,col="red",lty=2)
> Yh=b0+b1*X
> points(X,Yh,pch=19,col="blue")

Si on continue à créer et manipuler des objets (qui seront utiles pour analyser la régression),
> (SCT=sum((Y-my)^2))
[1] 32538.98
> (SCR=sum((Y-Yh)^2))
[1] 11353.52
> (SCE=sum((Yh-my)^2))
[1] 21185.46
> SCR+SCE
[1] 32538.98
>
> (s=sqrt(sum((Y-Yh)^2)/(n-2)))
[1] 15.37959
>
> (sb1=s/(sx*sqrt(n-1)))
[1] 0.4155128
> t=(b1-0)/sb1
> 2*(1-pt(t,df=n-2))
[1] 1.489919e-12
>
> lm(Y~X)
 
Call:
lm(formula = Y ~ X)
 
Coefficients:
(Intercept)            X
-17.579        3.932
 
> regression=lm(dist~speed,data=cars)
> names(regression)
[1] "coefficients"  "residuals"     "effects"
[4] "rank"          "fitted.values" "assign"
[7] "qr"            "df.residual"   "xlevels"
[10] "call"          "terms"         "model"
> regression$coefficient
(Intercept)       speed
-17.579095    3.932409
> summary(regression)
 
Call:
lm(formula = dist ~ speed, data = cars)
 
Residuals:
Min      1Q  Median      3Q     Max
-29.069  -9.525  -2.272   9.215  43.201
 
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -17.5791     6.7584  -2.601   0.0123 *
speed         3.9324     0.4155   9.464 1.49e-12 ***
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1
 
Residual standard error: 15.38 on 48 degrees of freedom
Multiple R-squared: 0.6511,	Adjusted R-squared: 0.6438
F-statistic: 89.57 on 1 and 48 DF,  p-value: 1.49e-12
 
> summary(regression)$sigma
[1] 15.37959
On approfondira ces codes cet après midi.

Monday, October 10 2011

ACT2040, régression binomiale et arbres

Mardi, avant de parler de la régression poissonienne, on va revenir un peu sur les modèles binomiaux, et présenter les arbres de régression. Pour la théorie, je peux renvoyer vers des notes de cours sur internet (ici, , ou encore) mais je présenterais les grandes idées au tableau. Pour le code, c'est assez facile
> sinistre=read.table("http://freakonometrics.free.fr/sinistreACT2040.txt",
+ header=TRUE,sep=";")
> sinistres=sinistre[sinistre$garantie=="1RC",]
> contrat=read.table("http://freakonometrics.free.fr/contractACT2040.txt",
+ header=TRUE,sep=";")
> T=table(sinistres$nocontrat)
> T1=as.numeric(names(T))
> T2=as.numeric(T)
> nombre1 = data.frame(nocontrat=T1,nbre=T2)
> I = contrat$nocontrat%in%T1
> T1= contrat$nocontrat[I==FALSE]
> nombre2 = data.frame(nocontrat=T1,nbre=0)
> nombre=rbind(nombre1,nombre2)
> base = merge(contrat,nombre)
> Y = base$nbre>0
> X1 = base$ageconducteur
> library(tree)
> arbre=tree(Y~X1,split="gini")
> plot(arbre)
> text(arbre,cex=.8)

Pour élaguer, il y a plusieurs méthodes, mais le plus simple est de demander de constituer des classes avec suffisamment de monde dedans,
> arbre=tree(Y~X1,split="gini", mincut = 5000)
> plot(arbre)
> text(arbre,cex=.8)

On peut bien sûr rajouter plusieurs variables (qualitatives comme quantitatives),
> age=base$ageconducteur
> car=base$agevehicule
> region=base$zone
> arbre=tree(Y~age+car+region,split="gini", mincut = 2600)
> plot(arbre)
> text(arbre,cex=.8)

Pour mieux comprendre la mise en œuvre pratique, et l'algorithme itératif qui se cache derrière, on peut utiliser le code suivant, calculant la distance du chi-deux, l'entropie, ou le critère de Gini
> u=sort(unique(base$ageconducteur))
> base$Y = base$nbre>0
> gini=entropie=chideux=rep(NA,length(u))
> for(i in 2:(length(u))){
+ I=base$ageconducteur<(u[i]-.5)
+ ft1=sum(base$Y[I==TRUE])/nrow(base)
+ ff1=sum(base$Y[I==FALSE])/nrow(base)
+ ft0=sum(1-base$Y[I==TRUE])/nrow(base)
+ ff0=sum(1-base$Y[I==FALSE])/nrow(base)
+ M=matrix(c(ft0,ff0,ft1,ff1),2,2)
+ ft=ft0+ft1
+ f0=ft0+ff0
+ Mind=matrix(c(ft*f0,f0*(1-ft),(1-f0)*ft,(1-f0)*(1-ft)),2,2)
+ Q=sum(nrow(B)*(M-Mind)^2/Mind)
+ entropie[i] = -((ft1+ft0)*(ft1/(ft1+ft0)*log(ft1/(ft1+ft0))+
+ ft0/(ft1+ft0)*log(ft0/(ft1+ft0))) +
+ (ff1+ff0)*(ff1/(ff1+ff0)*log(ff1/(ff1+ff0))+
+ ff0/(ff1+ff0)*log(ff0/(ff1+ff0)))
+ )
+
+ gini[i] = -((ft1+ft0)*(ft1/(ft1+ft0)*(1-ft1/(ft1+ft0))+
+ ft0/(ft1+ft0)*(1-ft0/(ft1+ft0))) +
+ (ff1+ff0)*(ff1/(ff1+ff0)*(1-ff1/(ff1+ff0))+
+ ff0/(ff1+ff0)*(1-ff0/(ff1+ff0))))
+
+ chideux[i] = Q
+ }
> plot(u-.5,entropie,type="b",pch=19,col="blue",
+ ylab="Entropie ou déviance",xlab="Age du conducteur")
> n=which.min(entropie)
> points(u[n]-.5,entropie[n],pch=19,col="red",cex=1.5)
Pour rappel, les trois critères sont données par les relations suivantes. Pour le critère du chi-deux,
http://perso.univ-rennes1.fr/arthur.charpentier/latex/arbre-comp-01.png
où, classiquement
http://perso.univ-rennes1.fr/arthur.charpentier/latex/arbre-comp-02.png
pour le découpage en deux classes, puis
http://perso.univ-rennes1.fr/arthur.charpentier/latex/arbre-comp-05.png
pour le découpage en trois classes, etc. Pour l'entropie,
http://perso.univ-rennes1.fr/arthur.charpentier/latex/arbre-comp-03.png
avec deux classes, ou, si on a trois classes,
http://perso.univ-rennes1.fr/arthur.charpentier/latex/arbre-comp-06.png
Enfin le critère de Gini,
L'image “http://perso.univ-rennes1.fr/arthur.charpentier/latex/arbre-comp-04.png” ne peut être affichée car elle contient des erreurs.
avec deux classes, ou avec trois,

http://perso.univ-rennes1.fr/arthur.charpentier/latex/arbre-comp-07.png

Tuesday, October 19 2010

On a toujours besoin de petits poids (chez soi)

Après avoir mis en ligne le billet d'hier sur les manifestants, j'ai passé la journée à me demander "pourquoi ai-je mis des poids tenant compte d'un effet taille dans ma régression" ?. Sur le moment ça me semblait très naturel, et plus la journée avançait, plus je me mettais à douter...

Bon, pour rappel quand on fait une régression classique, sans poids, et sans constante car on veut un coefficient de proportionnalité, par "moindres carrés", on résout

ce qui donne

La dernière écriture montre que l'on fait une moyenne pondérée des pentes pour chacune des observations... Graphiquement, ça donne

les traits pointillés permettent de montrer ou se trouve le point moyen, avec la moyenne sur toutes les villes pour les syndicats et pour la police, pour les deux dates. Les flèches indiquent les pentes moyennes, c'est à dire le nombre total de manifestants en France selon les syndicats divisé par le nombre total de manifestants en France selon la police. Bref, la droite de régression "classique" n'a pas pour pente le ratio moyen...

Une alternative usuelle est d'introduire des poids, et on cherche à résoudre

dont la solution a la forme

Hier j'avais proposé de prendre des poids correspondant à la taille de la ville (pour intégrer un effet médiatique - les médias ne parlant parfois que des nombres de manifestants dans les très grosses villes), mais on pourrait proposer, sans le même genre d'idée que de prendre (et qui est représenté ci-dessous)

Toutefois, l'idée la plus pertinente aurait dû être http://freakonometrics.blog.free.fr/public/perso/wls08.png ce qui donne comme estimateur par moindres carrés pondérés

http://freakonometrics.blog.free.fr/public/perso/wls09.png

c'est à dire le ratio moyen national... Bref, on est colinéaire avec nos vecteurs tracés depuis le début

Autrement dit, il aurait été plus malin ici d'attribuer des petits poids aux grosses villes pour avoir un coefficient interprétable....

Mais au débat du débat (probablement légitime) sur le choix de la régression, ce qui est troublant c'est que plus les poids donnés aux grosses villes sont importants, plus la pente est importante... autrement dit, on modèle quadratique pourrait être plus adapté, ou au moins quelque chose de non linéaire, et de strictement croissant. Sur le graphique suivant, on voit l'estimation par moindres carrées locaux, et par splines,

ce qui pourrait nous conforter dans l'idée que "les grandes villes ont des plus grands trottoirs"(ramené à la taille de la chaussée !), ce qui peut surprendre un peu.. Si on regarde l'estimation des pentes obtenues par ces deux méthodes, on a, pour les régressions locales

(avec en trait horizontal en pointillés les pentes des flèches, i.e. les taux observés nationalement), et par splines

On retrouve l'idée que dans les petites villes, le comptage est plus précis (des deux côtés) avec un facteur de 2 et 3 pour les deux manifestations respectivement. En mars dernier, on avait ensuite un facteur croissant passant de 2 à 4 en fonction de la taille de la manifestation. Et pour la dernière manifestation en revanche, c'est un peu n'importe quoi (si je peux me permettre).

Bref, pour revenir au point qui m'intéressait au départ, on note qu'il ne semble pas y avoir de méthode scientifique permettant de passer du nombre estimé par la police à celui proposé par les syndicats, car sinon il y aurait une relative stabilité entre les manifestations... stabilité que l'on n'a pas (quelle que soit le type de régression considéré...).

Monday, October 18 2010

Qui a eu l'idée d'élargir les trottoirs en France ?

J'étais tombé l'autre jour sur un joli dessin expliquant pourquoi les policiers et les syndicats n'estimaient jamais le même nombre de manifestants, avec une explication scientifique, et vaguement rationnelle, ici.

C'est  effectivement joli... et on retrouve un rapport de 3 dont pas mal de monde semble parler, sauf que si c'était vrai, le rapport entre les estimations de la police et des syndicats devrait être stable d'une manifestation à l'autre, non ?
Si on compare le 19 mars dernier (ici) et le 16 octobre (), on arrive aux chiffres suivants,

Les traits pointillés sont la droite de régression. La courbe en trait plein et la régression (passant par l'origine car on cherche un rapport de proportionnalité) en prenant en compte un effet taille, i.e. en introduisant des poids différents dans ma régression. J'ai pris la taille des villes, autrement dit, plus la ville est grosse, plus je donne un poids important au rapport... L'idée étant d'intégrer un effet médiatique, même si la pente n'est plus le ratio moyen...  Avec cette dernière méthode, j'obtiens des pentes de 4,06 pour mars, et 6,12 pour octobre... ce qui est à un peu différents des rapports nationaux mentionnés sur le site du monde, i.e. (3 millions selon les syndicats et 1,2 selon la police, en mars, contre  2,5 millions contre 825 milliers l'autre jour). Notons qu'on peut vérifier rapidement que ce n'est pas un problème statistique, les valeurs sont sensiblement différentes, si l'on compare les distributions des estimateurs..

Bref, quelque chose semble avoir changé entre ces deux dates.... la taille des trottoirs ?

Thursday, June 3 2010

Qu'est ce que la modélisation économétrique (3) ?

Compte tenu du nombre de billets qui agitent la blogosphère en ce moment, je me suis senti obligé de reprendre la plume pour poursuivre le billet précédant (ici). Initialement, le but était de montrer aux élèves comment mener une étude économétrique et de répondre à une question simple (en l'occurence "la taille d'un classe a-t-elle un impact positif ou négatif sur les résultats scolaires ? "). Malheureusement, j'ai été rattrapé par l'actualité. Le premier billet montrait qu'en faisant un modèle de régression simple, l'effet semblait positif: plus la taille est grande, meilleure est la moyenne. Dans le second billet, nous avions noté que cet effet pouvait cacher quelquechose, comme des conditions socioéconomiques. Essayons donc d'aller un peu plus loin....

  • Régression multiple
En faisant une estimation par moindres carrés sur les deux variables, on obtient
>  summary(lm(avgverb~tipuach+classize,data=base0))
Coefficients:
            Estimate Std. Error t value Pr(>|t|)   
(Intercept) 80.26363    0.74472 107.777   <2e-16 ***
tipuach     -0.34994    0.01077 -32.486   <2e-16 ***
classize    -0.03146    0.02221  -1.416    0.157   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

L'impact de l'indice socio-économique est clairement négatif, et si l'effet taille a un impact négatif, ce dernier n'est pas significatif. Il va falloir essayer d'aller un peu plus loin....
  • Approche nonlinéaire
On peut ragarder rapidement ce qu'aurait donné une régression nonlinéaire
> library(mgcv)
> reg=gam(
avgverb~s(tipuach,classize),data=base0)
> reg=gam(avgmath~s(tipuach,classize),data=base0)
soit visuellement, les prédictions suivantes pour l'épreuve de lecture

et la surface ci-dessous pour l'épreuve de maths,

Bref, l'effet ne parait pas forcément simple, même si l'on intuite une évolution croissante. Mais depuis le début, nous omettons un point important sur la base de Joshua Angrist et Victor Lavy: dans ces écoles israëliennes, la règle de Maimonides est supposer s'appliquer... et jusqu'à présent je n'en ai jamais parlé !
  • Prise en compte de la règle de Maimonides
Compte tenu de la règle de Maimonides, la taille des classes en fonction de la taille de l'école n'est pas du tout linéaire, comme le montre la figure ci-dessous,
http://blogperso.univ-rennes1.fr/arthur.charpentier/public/perso2/.ecole-stats-1_m.jpg

En fait, si on défini le nombre théorique d'élèves dans les classes, avec cette méthode (ce que j'avais détaillé dans la section 3 ici), on obtient des résultats qui pourrait ressemblerà ce que nous avions observé sur le nombre réel d'élèves dans les classes,
>  reg=lm(avgverb~func1,data=base0)
>  summary(reg)
Coefficients:
            Estimate Std. Error t value Pr(>|t|)   
(Intercept) 70.62076    0.88004   80.25  < 2e-16 ***
func1        0.12159    0.02789    4.36 1.37e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
On retrouve un effet positif (significatif) qui se visualise sur le graphique ci-dessous,

et surtout, le modèle devient particulièrement intéressant si on régresse sur cette effectif théorique et le "percent disadantaged" (PD, décrit dans le précédant billet, )
>  reg=lm(avgverb~func1+tipuach,data=base0)
>  summary(reg)
Coefficients:
            Estimate Std. Error t value Pr(>|t|)   
(Intercept) 82.91057    0.78669 105.392  < 2e-16 ***
func1       -0.11160    0.02321  -4.809 1.63e-06 ***
tipuach     -0.35943    0.01050 -34.229  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
où cette fois l'impact de la taille de la classe est clairement significatif, et négatif: à charactéristiques socio-économique identiques, si la taille des classes suivait la règle de Maimonides, la taille de la classe aurait un impact négatif sur les résultats scolaires....
Une solution est d'utiliser une régression par variables instrumentales où l'instrument permet précisément de prendre en compte cette discontinuité. L'idée est ici qu'il existe une variable L'image “http://blogperso.univ-rennes1.fr/arthur.charpentier/public/perso3/maimo-02.png” ne peut être affichée car elle contient des erreurs. telle que
L'image “http://blogperso.univ-rennes1.fr/arthur.charpentier/public/perso3/maimo-01.png” ne peut être affichée car elle contient des erreurs.
On voit alors apparaître naturellement l'idée d'utiliser les variables instrumentales pour corriger d'un éventuel biais lors de l'estimation des coefficients lors de la régression (comme cela est développé dans le chapitre 25.7 du microeconometrics de Colin Cameron et Pravin Trivedi). Et c'est précisément ce qui survient dans nos écoles compte tenu de la règle de Maimonides, On utilise la variable que nous avions définie comme le nombre théorique d'élèves dans la classe !
Damned, l'étude n'est donc toujours pas finie, il va falloir creuser encore davantage (surtout qu'il reste un paquet de variables dans cette base)... mais pour les impatients, la conclusion à laquelle arrivent Joshua Angrist et Victor Lavy est résumé dans le tableau ci-dessous,

Friday, October 30 2009

Qu'est-ce que la modéliation (économétrique, ou statistique) (1)

http://blogperso.univ-rennes1.fr/arthur.charpentier/public/perso2/lunette.PNGAu vu des questions qui m'ont été posées en cours d'économétrie, j'ai décidé de faire un petit billet afin d'expliciter ce que j'ai pu raconter dans les premiers slides de remise à niveau de probabilité et de statistiques, en Master 1, où j'essayais de faire le lien entre le modèle probabiliste et l'analyse statistique, à partir du schéma (forcément simpliste) suivant

http://blogperso.univ-rennes1.fr/arthur.charpentier/public/perso2/.formel-modelisation-slides_m.jpg
Pour mieux comprendre ce qu'est la modélisation, inspirons nous du papier de Joshua Angrist et Victor Lavy, "using Maimonides' rule to estimate the effect the effect of class size on scholastic achivement" (publié que le QJE en 1999, en ligne ici ou pour des transparents).
  • Partie 1: la problématique
La question que l'on se pose est simplement "quel est l'impact de la taille d'une classe sur les résultats scolaires ? ".
Beaucoup de monde (je pense aux parents ou aux enseignants, pas forcément aux ministres) pense que cet impact est réel, et négatif, à savoir que plus la taille et grande, moins bon sont les résultats, et inversement. Empiriquement, certaines études ont toutefois trouvé un effet positif, car les meilleurs élèves sont parfois regroupés dans les classes les plus chargées.
Bref, on souhaite répondre à cette question en faisant une étude empirique. La taille de la classe est une donnée facile à utiliser et à quantifier (encore que... le nombre sera celui au début du printemps), mais les résultats désignent une notion plus floue. Heureusement, certains pays diposent d'un test national (même s'il est parfois biaisé car les crédits des écoles étant liés à ces tests, certaines écoles semblent reforcer le bachotage).
  • Partie 2: les données (et le contexte)
Les données mises à disposition par Joshua Angrist et Victor Lavy sont celles d'écoles publiques en Israël, où deux tests ont été mis en oeuvre: un test national en fin d'étude (en mathématiques et en lecture) pour les élèves de CM1 et CM2 (4th et 5th grade) en 1991, et un test national en 1992 pour les élèves de CE2 (3rd grade). Nous n'avons pas des données individuelles (élève par élève) mais par classe. Afin de corriger d'éventuels effets exogènes (car on se doute que les résutats ne sont pas uniquement liés à la taille des classes), les auteurs utilisent des mesures de l'environnement social de l'école.
Voilà un peu pour les données, qui se trouvent ici et là. Sur le contexte, une information importante: l'étude se fait sur les écoles publiques israéliennes, où l'on croit dur comme fer à un effet négatif. En effet, depuis 1969, ces écoles appliquent (strictement) une règle talmudique énoncée par le rabin Maionide (alias Moshe ben Maimon, הרב משה בן מיימון, ou أبو عمران موسى بن ميمون بن عبد الله القرطبي الإسرائيلي ou Moussa ibn Maimoun ibn Abdallah al-Kourtoubi al-Israili dans la version arabe, plutôt connu pour ses réflexions en médecine ou en santé publique) au 12ème siècle, à savoir "dès qu'il y a plus de vingt cinq élèves dans une classe, il faut un assistant; dès qu'il y a plus de quarante élèves, il faut deux professeurs". 
Une fois formulée la question, et une fois à notre disposition un jeu de données pour faire une étude, on peut mettre en oeuvre un test économétrique (ou statistique).
  • Partie 3: la formalisation du problème
On commencer par formaliser le problème. On note
http://perso.univ-rennes1.fr/arthur.charpentier/latex/model-latex-1.png
le nombre d'élèves dans la classe i au printemps (ce qui sera noté comme la taille de la classe). On retiendra une indexation http://perso.univ-rennes1.fr/arthur.charpentier/latex/model-latex-2.png par école (school) et par classe (class). On note aussi
http://perso.univ-rennes1.fr/arthur.charpentier/latex/model-latex-3.png
la note moyenne obtenue dans la classe lors des tests nationaux. On a aussi ces variables explicatives
http://perso.univ-rennes1.fr/arthur.charpentier/latex/model-latex-4.png
http://perso.univ-rennes1.fr/arthur.charpentier/latex/model-latex-X1.png désigne le nombre d'élèves dans l'école pour chacun des niveaux, http://perso.univ-rennes1.fr/arthur.charpentier/latex/model-latex-X1.png un identifiant pour la ville, http://perso.univ-rennes1.fr/arthur.charpentier/latex/model-latex-X1.png une variable indiquant le niveau socio-économique des élèves, et http://perso.univ-rennes1.fr/arthur.charpentier/latex/model-latex-X1.png un identifiant éthnique (juif ou arabe) et religieux (associé aux écoles). On notera que, compte tenu que compte tenu de la règle de Maionide,
http://perso.univ-rennes1.fr/arthur.charpentier/latex/model-latex-5.png           (1)
où la fonction http://perso.univ-rennes1.fr/arthur.charpentier/latex/model-latex-10.png désigne la partie entière. 
  • Partie 4: l'étude économétrique, les moindres carrés
L'étude économétrique est une phase d'estimation des paramètres du modèle formel. Mais auparavant, il est toujours intéressant (car instructif) de faire un peu de statistiques descriptives, en regardant quelques graphiques.
On peut déjà se demander si la règle de Maionide est effectivement mise en oeuvre dans les établissements scolaires, c'est à dire regarder si l'équation (1) est valide,
http://blogperso.univ-rennes1.fr/arthur.charpentier/public/perso2/.ecole-stats-1_m.jpg
Sur ce graphique, la courbe en trait pointillé correspond à la loi théorique, c'est à dire la partie de droite dans l'équation (1), et le trait plein correspond à la version empirique, c'est à dire la partie de gauche. Dans un second temps, regardons sur le même type de graphique comment évolue la note moyenne dans la classe (avec toujours en pointillé le nombre théorique d'élèves dans la casse).
http://blogperso.univ-rennes1.fr/arthur.charpentier/public/perso2/.ecole-stats-2_m.jpg
On note ici que les résultats aux tests sont générallement plus élevé dans les classes avec plus d'élèves dans l'école. Il faut aussi noter que les très grosses écoles sont plutôt dans des grandes villes riches, alors que les petites écoles sont des "development town" beaucoup plus pauvres (et à l'extérieur des villes). 
Bref, on voudrait pouvoir comprendre un peu mieux ce qui se passe... Pour cela , on (ou plutôt les auteurs) spécifie un modèle économétrique sous la forme  suivante
http://perso.univ-rennes1.fr/arthur.charpentier/latex/model-latex-7.png
Autrement dit dans le premier terme http://perso.univ-rennes1.fr/arthur.charpentier/latex/model-latex-8.png on va mettre tout ce qui, dans les aspects socio-économiques - pourrait expliquer les résultats aux tests. Le terme du milieu http://perso.univ-rennes1.fr/arthur.charpentier/latex/model-latex-9.png correspond à ce qui nous intéresse, à savoir l'impact de la taille des classes les tests. Enfin, le terme de droite http://perso.univ-rennes1.fr/arthur.charpentier/latex/model-latex-10.png correspond à une moyenne (par classe, mais aussi par école, afin de corriger d'un éventuel effet "très bonne école") mais aussi un bruit car, par définition d'un modèle, la modélisation est forcément imparfaite: il y aura toujours des effets que l'on ne pourra pas expliquer avec un modèle simple (car on cherche un modèle simple, ou plutôt parcimonieux, comme je l'évoquai ici).
Encore une fois, un modèle économétrique mesure une corrélation (éventuelle) entre des variables explicatives et la variable que l'on essaye d'expliquer, mais l'interprétation causale est fallacieuse (je reviendrais sur ce point dans un billet prochainement).
Mais dans un premier temps, on peut s'intéresser à une interprétation par moindres carrés du modèle, voire une simplification du modèle, où l'on régresse uniquement les notes sur la taille de la classe. Bon, on a accès aux données (ici pour une version csv, ou pour l'ensemble des données).Contentons nous déjà d'un niveau (4e), et regardons respectivement en lecture et en mathématique l'impact de la taille de la classe. On commence par un petit nettoyage de la base de données,
> base5=read.table("http://perso.univ-rennes1.fr/arthur.charpentier/Final4.csv",sep=";",header=TRUE)
> base=base5
> base$avgverb=base$avgverb-(base$avgverb>100)*100
> base$avgmath=base$avgmath-(base$avgmath>100)*100
> base$func1= base$c_size/(trunc((base$c_size-1)/40)+1)
> base$func2= base$cohsize/(trunc(base$cohsize/40)+1)
> base$verbsize[base$avgverb==NA]=0
> base$verbsize[base$passverb==NA]=0
> base$mathsize[base$avgmath==NA]=0
> base$mathsize[base$passmath==NA]=0
> base0=base[(base$classize>1)&(base$classize<45)&(base$c_size>5)&(base$c_leom==1)&(base$c_pik<3),]

Enuiste, on peut tenter de faire une régression
> reg=lm(avgverb~classize,data=base0)
> summary(reg)
Coefficients:
            Estimate Std. Error t value Pr(>|t|)   
(Intercept) 67.76309    0.78686  86.118   <2e-16 ***
classize     0.22119    0.02568   8.614   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 7.55 on 2016 degrees of freedom
  (5 observations deleted due to missingness)
Multiple R-squared: 0.0355,     Adjusted R-squared: 0.03502
F-statistic: 74.21 on 1 and 2016 DF,  p-value: < 2.2e-16

On note effectivement que la taille de la classe a un effet sur le nombre d'élèves, et que cet effet est croissant. On peut visualiser ça graphiquement
> taille=seq(5,45,by=.1)
> note=predict(reg,newdata=data.frame(classize=taille),interval="confidence")
> plot(base0$classize,base0$avgverb,cex=.6)
> lines(taille,note[,2],lty=2,col="red")

On peut aussi faire une régression locale pour détecter d'éventuelles nonlinéairités,
> regL=loess(avgverb~classize,data=base0,span=.5)
> note=predict(regL,newdata=data.frame(classize=taille),interval="confidence")
> plot(base0$classize,base0$avgverb,cex=.6)
> lines(taille,note,col="blue")

Si on regarde pour la note en maths, on a un effet assez proche,
> reg=lm(avgmath~classize,data=base0)
> summary(reg)
Coefficients:
            Estimate Std. Error t value Pr(>|t|)   
(Intercept) 57.36364    0.98724   58.10   <2e-16 ***
classize     0.33055    0.03222   10.26   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 9.472 on 2016 degrees of freedom
  (5 observations deleted due to missingness)
Multiple R-squared: 0.04963,    Adjusted R-squared: 0.04916
F-statistic: 105.3 on 1 and 2016 DF,  p-value: < 2.2e-16

Mais on se doute que quelque chose ne va pas, et que ce que l'on mesure ici doit être lié à autre chose.... et il faudra aller plus loin (ce qui fera l'objet d'un autre billet).

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)...