Delta method avec R, ou transformation des paramètres

Un petit billet aujourd’hui sur une question qui m’a été posée (et qui m’a permis de découvrir des nouvelles fonctions sous R). On suppose que l’on a un modèle économétrique de la forme

que l’on peut encore écrire

Supposons que ce soit la formulation en terme de ces derniers coefficients qui nous intéresse, et que l’on cherche un intervalle de confiance.
La Delta Method nous dit que si on dispose d’un estimateur asymptotiquement gaussien (mais c’est le cas pour la plupart des estimateurs que l’on construit en pratique), tout transformation bijective de cet estimateur reste asymptotiquement Gaussien. Bref, on va pouvoir utiliser ces résultats pour en déduire un intervalle de confiance (asymptotique) pour le nouveau paramètre. En effet, l’estimateur par moindre carrés vérifie la normalité asymptotique (sous quelques hypothèses)

ce qui donne avec les notations précédentes

Autrement dit, on peut facilement en déduire un intervalle de confiance (asymptotique). Pour cela, on a trois méthodes (au moins) avec R. Pour la suite, je vais considerer la régression sur la base de données cars (comme toujours), et on s’intéresse à l’estimation de

 

(ne me demandez pas pourquoi, il me fallait un exemple numérique, j’ai pris un truc nonlinéaire pour qu’au moins ça puisse avoir un vague intérêt).

  • En faisant un peu de calcul formel

Pour les calculs symboliques, il y a la fonction D dans le package de base,

> f <- expression(sin(cos(x + y^2)))
> ( Dfx <- D(f, "x") )
-(cos(cos(x + y^2)) * sin(x + y^2))

ce qui pourra alors être utilisé pour faire les calculs de la variance asymptotique.

> x=c(0,1,2); y=1
> eval(D.sc)
[1] -0.7216061 -0.8316919 -0.0774320

On peut également utiliser cette fonction pour faire plein de jolis dessins,

> x <-seq(-5, 5, length=100)
> fx=x^2
> Df <-D(expression(x^2), "x")
> Dfx<-eval(Df)
> plot(x, fx, type = "l", las = 1,ylim=c(-2,2))
> for (i in 1:length(x)) {
+ abline(a = fx[i] - Dfx[i] * x[i], b = Dfx[i],
+ col = rainbow(100)[i])
+ }

Mais bon, c’était juste pour rigoler un peu… On peut utiliser cette fonction pour calculer l’écart type de l’estimateur de la grandeur qui nous intéresse.

> reg1 = lm(dist~speed, data = cars)
> estmean = coef(reg1)
> estvar = summary(reg1)$cov.unscaled * summary(reg1)$sigma^2
> f = function(x,y){
+ -y/(x+y)
+ }
> X=f(estmean[1],estmean[2])
> g=expression(-y/(x+y))
> x<-as.numeric(estmean[1]); y<-as.numeric(estmean[2])
> V=eval(c(eval(D(g, "x")),eval(D(g, "y"))))
> sqrt(t(V) %*% estvar %*% V)
          [,1]
[1,] 0.1063255

Voilà pour la première méthode. Petite remarque: pour faire le calcul symbolique de la dérivée, j’utilise expression et non pas function.

  • En utilisant la fonction deltamethod de la librarie msm

Ici on commence comme avant, sauf que la phase de calcul est immédiat…

> reg2 <- lm(dist~speed, data = cars)
> estmean = coef(reg2)
> estvar = summary(reg2)$cov.unscaled * summary(reg2)$sigma^2
> deltamethod (~ -x2 / (x1 + x2), estmean, estvar) 
[1] 0.1063255

et d’ailleurs, ça peut s’appliquer pour un paramètre en dimension 2

> deltamethod (list(~ -x2 / (x1 + x2), ~ x1+x2), estmean, estvar) 
[1] 0.1063255 6.3664368

En revanche, on obtient des estimateur des écart-types, et pas de la matrice de variance-covariance des estimateurs. Autrement dit on ne peut pas en déduire l’ellipse de confiance, seulement des intervalles de confiance marginaux (en utilisant la normalité asymptotique).

  • En utilisant la fonction delta.method de librarie alr3

Pour finir, une dernière fonction. La seule chose qui change c’est la synthaxe. Mais la sortie est plus élégante,

> reg3 = lm(dist~speed, data = cars)
> delta.method(reg3, "-b1/(b1+b0)")
Functions of parameters:  expression(-b1/(b1+b0))
Estimate = 0.2881585 with se = 0.1063255

En fait, l’écart-type indiqué ici est précisément celui qui est utilisé pour écrire l’intervalle de confiance. Dans cet exemple, l’intervalle de confiance approché (car on suppose que la normalité – en théorie seulement asymptotique – est vérifiée) et estimé (car les paramètres sont inconnus et estimés) est de la forme suivant, pour un seuil de confiance à 95%

> DM=delta.method(reg3, "-b1/(b1+b0)")
Functions of parameters:  expression(-b1/(b1+b0))
Estimate = 0.2881585 with se = 0.1063255 
> DM$estimate+qt(.975,df=nrow(cars)-1)*DM$se
[1] 0.5018277
> DM$estimate+qt(.025,df=nrow(cars)-1)*DM$se
[1] 0.07448936

C’est à dire qu’on a un intervalle de confiance de la forme [0.074;0.502].

Séries temporelles versus séries individuelles

J’ai reçu un mail l’autre jour que me demandait “pourquoi ne peut-on pas utiliser directement les méthodes d’économétrie sur des séries chronologiques ?”. Au lieu de fournir une réponse théorique ou formelle, je préférerais reprendre l’exemple que j’utilisais en cours. Pour cela, je vais utiliser une série que j’utilise dans mon cours d’économétrie.

Supposons que l’on s’interroge sur une éventuellement corrélation entre le tour de poitrine et le tour de taille chez les personnes de sexe féminin. Pour faire une étude économétrique, on a à notre disposition les mensurations des demoiselles qui posent nues, tous les mois, dans Playboy, depuis 1953. Autrement dit, on fait l’erreur de prendre ces données temporelles (tous les mois depuis 1953) pour une série d’observations individuelles. Regardons dans notre échantillon (presque 660 demoiselles) le tour de poitrine  et le tour de taille.

Sur l’ensemble de la période considérée, les deux mesures semblent statistiquement indépendantes (ou alors avec une corrélation très faible). Ce qui est douteux  si on y réfléchit deux minutes. Et effectivement, si on fait l’étude par sous-période, on a effectivement une dépendance positive entre les deux grandeurs.

Et c’est quoi l’interprétation ? En fait, l’erreur dans l’analyse du premier graph vient du fait que la morphologie desdites demoiselles a beaucoup changé dans le temps. Autrement dit, la dépendance est sûrement beaucoup plus forte que ce que laisse sous-entendre le graphique ci-dessus. Regardons par exemple l’évolution du ratio entre le tour de taille et le tour de poitrine,

On note que les deux variables évoluent en sens inverse. Plus précisément, le tour de poitrine a très fortement diminué,

alors que le tour de taille a plutôt augmenté

En fait, plus généralement, beaucoup d’autres paramètres ont changé dans le temps, par exemple l’âge (ce qui peut poser la question de savoir s’il y a réellement un changement dans la corpulence dans le temps, ou c’est simplement du au fait que les demoiselles sont plus agées),

Moralité ? Il ne faut pas jeter ses vieux Playboy, on peut toujours faire des études économétriques avec….  ou alors il faut faire attention quand on étudie des variables à voir s’il n’y a pas une variable cachée derrière (ici le temps).

Sinon, une autre représentation graphique est possible, en interpolant (par une parabole) les mensurations de poitrine, tailles et hanches (et en tenant compte de la taille de la playmate). On a alors l’animation suivante

(avec en haut la taille, au milieu la taille, et en bas les hanches, afin d’avoir une représentation de la morphologie moyenne des playmates cette année là).