Come utilizzare il metodo delta per errori standard di effetti marginali?


20

Sono interessato a comprendere meglio il metodo delta per l'approssimazione degli errori standard degli effetti marginali medi di un modello di regressione che include un termine di interazione. Ho esaminato le domande correlate sotto il ma nessuno ha fornito esattamente quello che sto cercando.

Considera i seguenti dati di esempio come esempio motivante:

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

Sono interessato agli effetti marginali medi (AME) di x1e x2. Per calcolare questi, faccio semplicemente quanto segue:

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

Ma come posso usare il metodo delta per calcolare gli errori standard di questi AME?

Posso calcolare manualmente la SE per questa particolare interazione:

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

Ma non capisco come usare il metodo delta.

Idealmente, sto cercando una guida su come pensare (e codificare) il metodo delta per gli AME di qualsiasi modello di regressione arbitraria. Ad esempio, questa domanda fornisce una formula per la SE per un particolare effetto di interazione e questo documento di Matt Golder fornisce formule per una varietà di modelli interattivi, ma voglio capire meglio la procedura generale per il calcolo delle SE di AME piuttosto che la formula per la SE di un particolare AME.


2
+1 Ottima domanda (mi ha assillato anche per molto tempo)! C'è un post sul forum Stata: Errori Delta metodo standard per la media marginale ... . Su SE, c'è un esempio che utilizza un approccio bootstrap: funzione mfxboot per effetti marginali per regressioni probit? .
Bernd Weiss,

Risposte:


16

Il metodo delta dice semplicemente che se puoi rappresentare una variabile ausiliaria puoi rappresentare come una funzione di variabili casuali normalmente distribuite, quella variabile ausiliaria è approssimativamente normalmente distribuita con varianza corrispondente a quanto varia l'ausiliare rispetto alle variabili normali (EDIT: come sottolineato da Alecos Papadopoulos il metodo delta può essere affermato più in generale in modo tale da non richiedere la normalità asintotica). Il modo più semplice di pensare a questo è come un'espansione di Taylor, in cui il primo termine di una funzione è la media e la varianza deriva dai termini del secondo ordine. In particolare, se è una funzione del parametro β e b è una costante, stimatore distribuzione normale per quel parametro: g (gβB Poiché β è una costante e b è uno stimatore coerente per β , possiamo quindi dire:

g(B)g(β)+g(β)'(B-β)
βBβ In questo caso, b è la tua stima OLS e g è l'AME. Puoi scrivere questo AME specifico come: g ( b 1 , b 2 ) = b 1 + b 2  media ( x 2 ) se hai preso il gradiente di questa funzione (ricorda, una funzione deicoefficientinon di x
n(g(B)-g(β))DN(0,g(β)'ΣBg(β))
Bg
g(B1,B2)=B1+B2 significare(X2)
X2), sarebbe: e la matrice varianza-covarianza per b potrebbe essere: [ s 11 s 12 s 12 s 22 ] Collegare questo nella formula della varianza e fare una matrice di algebra ti dà la stessa espressione che volevi.
[1,significare(X2)]'
B
[S11S12S12S22]

In generale, se si vuole fare questo, si può in modo esplicito codice di qualunque si vuole in in funzione di tutti i coefficienti e quindi l'uso gRnumDeriv per prendere il gradiente numerica (in caso contrario si avrebbe dovuto all'uso del computer algebra) della funzione rispetto a i tuoi parametri, ai parametri che hai stimato. Quindi prendi semplicemente la matrice varianza-covarianza e questo gradiente numerico e inseriscilo nella formula e voilà! Metodo delta.

ADDENDUM: in questo caso specifico il Rcodice sarebbe:

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


1
Grazie per questa risposta molto dettagliata. Penso che ciò che mi ha fatto innescare in particolare siano i gradienti rispetto ai coefficienti piuttosto che le variabili originali. Apprezzo molto il vostro aiuto!
Thomas,

E solo una domanda chiarificatrice. Si utilizza mean(x2)per il calcolo della SE. Non sarebbe solo per l'effetto marginale nella media? La mia intuizione sarebbe che per gli AME, avrei dovuto SE per ogni osservazione e poi in media attraverso di loro in qualche modo.
Thomas,

1
È equivalente per AME lineari, quando si prende la media sulle osservazioni si finisce con l'effetto marginale alla media. Altrimenti dovresti davvero definire gla media degli effetti marginali per ogni individuo, e probabilmente usare il gradiente numerico, non sono sicuro che prendere il SE per ciascuno sarebbe lo stesso.
Jay

1
Cioè AME e ME in media sono equivalenti per ME lineari. La SE non credo sia equivalente perché la forma per la varianza è quadratica, quindi la media non verrà semplicemente visualizzata. Non ho una buona intuizione sul perché l'ES non possa essere semplicemente sommato alle osservazioni, ma sono abbastanza sicuro che sia vero.
Jay

2
Si noti che il teorema Delta non richiede la normalità.
Alecos Papadopoulos,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.