Як використовувати метод дельти для стандартних помилок граничних ефектів?


20

Мене цікавить краще розуміння методу дельти для наближення стандартних помилок середніх граничних ефектів регресійної моделі, що включає термін взаємодії. Я розглянув пов'язані питання в рамках але жодне не дало того, що я шукаю.

Розглянемо такі приклади даних як мотивуючий приклад:

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

Мене цікавлять середні граничні ефекти (AME) x1та x2. Для їх обчислення я просто виконую наступне:

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

Але як я можу використовувати метод delta для обчислення стандартних помилок цих AME?

Я можу обчислити SE для цієї конкретної взаємодії вручну:

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

Але я не розумію, як використовувати метод delta.

В ідеалі я шукаю деякі вказівки щодо того, як думати про (та кодувати) метод дельти для AME будь-якої моделі довільної регресії. Наприклад, це питання дає формулу для SE для конкретного ефекту взаємодії, і цей документ від Метта Голдера надає формули для різних інтерактивних моделей, але я хочу краще зрозуміти загальну процедуру обчислення SE на AME, а не формулу для SE будь-якого конкретного AME.


2
+1 Відмінне запитання (давно натякає і мене)! Існує пост на форумі Stata: Delta Метод Стандартні помилки для середньої маргінальний ... . Що стосується SE, є приклад використання підходу до завантаження: mfxboot функція для граничних ефектів для пробітових регресій? .
Бернд Вайс

Відповіді:


16

гβб

г(б)г(β)+г(β)'(б-β)
βбβ
н(г(б)-г(β))DN(0,г(β)'Σбг(β))
бг
г(б1,б2)=б1+б2 маю на увазі(х2)
х2
[1,маю на увазі(х2)]'
б
[с11с12с12с22]

гRnumDeriv

ДОДАТОК: У цьому конкретному випадку Rкод буде:

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 

Зауважте, що для цієї проблеми завжди буде бажано отримати точний градієнт замість числового градієнта, оскільки точний градієнт матиме меншу обчислювальну помилку. Справа в тому, щог


1
Дякую за цю дуже детальну відповідь. Я думаю, що мене особливо спонукало градієнти відносно коефіцієнтів, а не оригінальні змінні. Я дуже ціную вашу допомогу!
Томас

І лише уточнююче питання. Ви використовуєте mean(x2)при розрахунку SE. Хіба це не було б лише для граничного ефекту в середньому? Моя інтуїція полягала б у тому, що для AME мені потрібно було б робити SE для кожного спостереження, а потім певним чином оцінювати їх середнє значення.
Томас

1
Це еквівалентно для лінійних АМЕ, коли ви берете середнє значення за спостереженнями, ви лише закінчуєтесь граничним ефектом в середньому. Інакше вам би довелося визначити gяк середнє значення граничних ефектів для кожної людини, і, ймовірно, використовувати числовий градієнт, я не впевнений, що прийняття SE для кожного було б абсолютно однаковим.
jayk

1
Тобто AME і ME в середньому еквівалентні для лінійних МЕ. Я не думаю, що SE є еквівалентним, оскільки форма для дисперсії є квадратичною, тому середнє значення не вийде просто. Я не маю доброї інтуїції, чому SE не можна просто скласти за спостереженнями, але я впевнений, що це правда.
jayk

2
Зауважимо, що теорема Дельта не вимагає нормальності.
Алекос Пападопулос
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.