한계 효과의 표준 오차에 델타 방법을 사용하는 방법은 무엇입니까?


20

교호 작용 항을 포함하는 회귀 모형의 평균 한계 효과의 표준 오차를 근사화하기위한 델타 방법을 더 잘 이해하고 싶습니다. 에서 관련 질문을 살펴 보았지만 원하는 것을 찾지 못했습니다.

동기 부여 예제로 다음 예제 데이터를 고려하십시오.

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

x1및 의 평균 한계 효과 (AME)에 관심이 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

그러나 델타 방법을 사용하여 이러한 AME의 표준 오차를 어떻게 계산합니까?

이 특정 상호 작용에 대한 SE를 손으로 계산할 수 있습니다.

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

그러나 델타 방법을 사용하는 방법을 이해하지 못합니다.

이상적으로는 임의의 회귀 모델의 AME에 대한 델타 방법을 생각하고 코딩하는 방법에 대한 지침을 찾고 있습니다. 예를 들어, 이 질문 은 특정 교호 작용 효과에 대한 SE 공식을 제공 하고 Matt Golder의이 문서 는 다양한 대화식 모델에 대한 공식을 제공하지만, 특정 AME의 SE.


2
+1 좋은 질문입니다 (오래 오랫동안 잔소리가 계속되고 있습니다)! Stata 포럼 에 평균 한계에 대한 델타 방법 표준 오류에 대한 게시물이 있습니다 ... . SE에는 부트 스트랩 접근법을 사용하는 예가 있습니다 : 프로 빗 회귀의 한계 효과에 대한 mfxboot 함수? .
Bernd Weiss

답변:


16

델타 방법은 보조 변수를 표현할 수 있다면 정규 분포 확률 변수의 함수로 표현할 수 있다고 말합니다. 보조 변수는 보조 변수가 정규 변수와 관련하여 보조가 얼마나 많이 변하는 지에 따라 대략적으로 분산됩니다. Alecos Papadopoulos에 의해 지적 된 바와 같이, 델타 방법은 점근 적 정상 성을 요구하지 않도록보다 일반적으로 언급 될 수있다). 이것을 생각하는 가장 쉬운 방법은 함수의 첫 번째 항이 평균이고 분산은 두 번째 차수 항에서 오는 Taylor 확장입니다. 특히, 가 모수 β 의 함수 이고 b 가 해당 모수에 대해 일관되고 정규 분포 된 추정량 인 경우 : g (β 때문에 β는 상수이고, b를 위한 일관된 추정기 인 β , 우리는 다음 말할 수

()(β)+(β)'(β)
ββ 이 경우 b 는 OLS 추정치이고 g 는 AME입니다. 이 특정 AME를 다음과 같이 쓸 수 있습니다 : g ( b 1 , b 2 ) = b 1 + b 2  평균 ( x 2 ) 2 ) :
(()(β))(0,(β)'Σ(β))
(1,2)=1+2 평균(엑스2)
이 함수의 기울기 (기억의 함수했다 경우 계수를 아닌 엑스2 및 분산 공분산 행렬 B는 결과 : [ (S) 11 개 (S) 12 (S) 12 개 (S)
[1,평균(엑스2)]'
[에스11에스12에스12에스22]
이것을 분산 수식에 연결하고 일부 행렬 대수를 수행하면 원하는식이됩니다.

일반적으로이 작업을 수행하려는 경우 g를 명시 적으로 코딩 할 수 있습니다.R모든 계수의 함수 로 한 다음 함수에 대한 함수의 numDeriv숫자 기울기 (그렇지 않으면 컴퓨터 대수를 사용해야 함)를 사용하는 데 사용할 수 있습니다 추정 한 매개 변수에서 그런 다음 단순히 분산-공분산 행렬과이 숫자 형 그래디언트를 취하여 수식과 짜잔에 꽂습니다! 델타 방법.

부록 :이 특정한 경우 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
선형 AME와 동일합니다. 관측치에 대한 평균을 취하면 평균에 한계 효과가 생깁니다. 그렇지 않으면 당신은 실제로 g각 개인에 대한 한계 효과의 평균 으로 정의 하고 아마도 수치 기울기를 사용해야 할 것입니다. 각각에 대해 SE를 취하는 것이 상당히 동일하다는 것을 확신하지 못합니다.
jayk

1
즉, 평균에서 AME와 ME는 선형 ME와 동일합니다. 분산의 형태가 2 차이 기 때문에 SE는 동등하지 않다고 생각하기 때문에 평균이 튀어 나오지 않습니다. 왜 SE가 관측치에 추가 될 수 없는지에 대한 직관이 충분하지 않지만 이것이 사실이라고 확신합니다.
jayk

2
델타 정리에는 정규성이 필요하지 않습니다.
Alecos Papadopoulos
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.