Comment utiliser la méthode delta pour les erreurs standard des effets marginaux?

20

Je souhaite mieux comprendre la méthode delta pour l'approximation des erreurs-types des effets marginaux moyens d'un modèle de régression qui inclut un terme d'interaction. J'ai examiné des questions connexes sous la mais aucune n'a fourni exactement ce que je cherchais.

Considérez les données d'exemple suivantes comme un exemple de motivation:

set.seed(1)
x1 <- rnorm(100)
x2 <- rbinom(100,1,.5)
y <- x1 + x2 + x1*x2 + rnorm(100)
m <- lm(y ~ x1*x2)

Je m'intéresse aux effets marginaux moyens (TEA) de x1et x2. Pour les calculer, je fais simplement ce qui suit:

cf <- summary(m)$coef
me_x1 <- cf['x1',1] + cf['x1:x2',1]*x2 # MEs of x1 given x2
me_x2 <- cf['x2',1] + cf['x1:x2',1]*x1 # MEs of x2 given x1
mean(me_x1) # AME of x1
mean(me_x2) # AME of x2

Mais comment utiliser la méthode delta pour calculer les erreurs standard de ces AME?

Je peux calculer la SE pour cette interaction particulière à la main:

v <- vcov(m)
sqrt(v['x1','x1'] + (mean(x2)^2)*v['x1:x2','x1:x2'] + 2*mean(x2)*v['x1','x1:x2'])

Mais je ne comprends pas comment utiliser la méthode delta.

Idéalement, je cherche des conseils sur la façon de penser (et de coder) la méthode delta pour les AME de tout modèle de régression arbitraire. Par exemple, cette question fournit une formule pour le SE pour un effet d'interaction particulier et ce document de Matt Golder fournit des formules pour une variété de modèles interactifs, mais je veux mieux comprendre la procédure générale pour calculer les SE des AME plutôt que la formule pour le SE d'un TEA particulier.

Thomas
la source
2
+1 Grande question (ça me harcèle depuis longtemps aussi)! Il y a un post sur le forum Stata: Delta méthode standard pour les erreurs marginal moyen ... . Sur SE, il existe un exemple utilisant une approche bootstrap: fonction mfxboot pour les effets marginaux pour les régressions probit? .
Bernd Weiss

Réponses:

16

La méthode delta dit simplement que si vous pouvez représenter une variable auxiliaire, vous pouvez représenter en fonction de variables aléatoires normalement distribuées, cette variable auxiliaire est approximativement normalement distribuée avec une variance correspondant à la variation de l'auxiliaire par rapport aux variables normales (EDIT: comme l'a souligné Alecos Papadopoulos, la méthode delta peut être énoncée de manière plus générale de sorte qu'elle ne nécessite pas de normalité asymptotique). La façon la plus simple d'envisager cela est une expansion de Taylor, où le premier terme d'une fonction est la moyenne, et la variance vient des termes du second ordre. Plus précisément, si est une fonction du paramètre β et b est un estimateur cohérent et normalement distribué pour ce paramètre: g (gβb Puisque β est une constante, et b est un estimateur cohérent pour β , on peut alors dire:

g(b)g(β)+g(β)(b-β)
βbβ Dans ce cas, b est votre estimation de l'OLS et g est l'AME. Vous pouvez écrire cet AME spécifique comme: g ( b 1 , b 2 ) = b 1 + b 2  moyenne ( x 2 ) si vous avez pris le gradient de cette fonction (rappelez-vous, une fonction descoefficientsnon de x
n(g(b)-g(β))N(0,g(β)Σbg(β))
bg
g(b1,b2)=b1+b2 signifier(X2)
), ce serait: [ 1 ,X2 et la matrice de variance-covariance pour b pourrait être: [ s 11 s 12 s 12 s 22 ] Le fait de le brancher à la formule de variance et de faire une algèbre matricielle vous donne la même expression que vous vouliez.
[1,signifier(X2)]
b
[s11s12s12s22]

gRnumDeriv

ADDENDA: Dans ce cas spécifique, le Rcode serait:

v <- vcov(m)

# Define function of coefficients. Note all coefficients are included so it 
# will match dimensions of regression coefficients, this could be done more 
# elegantly in principle
g <- function(b){
    return(b[2] + b[4] * mean(x2))
}

require(numDeriv) # Load numerical derivative package

grad_g <-  jacobian(g, m$coef) # Jacobian gives dimensions, otherwise same as
                               # gradient 

sqrt(grad_g%*% v %*% t(grad_g)) # Should be exactly the same 

g

jayk
la source
1
Merci pour cette réponse très détaillée. Je pense que ce qui m'a particulièrement fait trébucher, ce sont les gradients par rapport aux coefficients plutôt qu'aux variables d'origine. J'apprécie vraiment votre aide!
Thomas
Et juste une question de clarification. Vous utilisez mean(x2)lors du calcul de la SE. Ne serait-ce pas uniquement pour l'effet marginal à la moyenne? Mon intuition serait que pour les TEA, je devrais effectuer une SE pour chaque observation, puis faire une moyenne entre eux d'une manière ou d'une autre.
Thomas
1
C'est équivalent pour les TEA linéaires, lorsque vous prenez la moyenne des observations, vous vous retrouvez avec l'effet marginal à la moyenne. Sinon, il faudrait vraiment définir gcomme la moyenne des effets marginaux pour chaque individu, et probablement utiliser le gradient numérique, je ne suis pas sûr que prendre la SE pour chacun serait tout à fait la même chose.
jayk
1
C'est-à-dire que AME et ME à la moyenne sont équivalents pour les ME linéaires. Le SE ne sera pas, je pense, équivalent car la forme de la variance est quadratique, donc la moyenne ne ressortira pas simplement. Je n'ai pas une bonne intuition pour savoir pourquoi le SE ne peut pas simplement être additionné par rapport aux observations, mais je suis presque sûr que c'est vrai.
jayk
2
Notez que le théorème Delta ne nécessite pas de normalité.
Alecos Papadopoulos