Làm thế nào để sử dụng phương pháp delta cho các lỗi tiêu chuẩn của hiệu ứng cận biên?


20

Tôi quan tâm đến việc hiểu rõ hơn về phương pháp delta để tính gần đúng các lỗi tiêu chuẩn của các hiệu ứng cận biên trung bình của mô hình hồi quy bao gồm một thuật ngữ tương tác. Tôi đã xem xét các câu hỏi liên quan theo nhưng không có câu hỏi nào cung cấp đúng những gì tôi đang tìm kiếm.

Xem xét dữ liệu ví dụ sau đây làm ví dụ tạo động lực:

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

Tôi quan tâm đến các hiệu ứng cận biên trung bình (AMEs) x1x2. Để tính toán những điều này, tôi chỉ cần làm như sau:

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

Nhưng làm cách nào để sử dụng phương thức delta để tính toán các lỗi tiêu chuẩn của các AME này?

Tôi có thể tính SE cho tương tác cụ thể này bằng tay:

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

Nhưng tôi không hiểu cách sử dụng phương pháp delta.

Lý tưởng nhất là tôi đang tìm kiếm một số hướng dẫn về cách nghĩ về (và mã) phương thức delta cho AME của bất kỳ mô hình hồi quy tùy ý nào. Ví dụ: câu hỏi này cung cấp công thức cho SE cho hiệu ứng tương tác cụ thể và tài liệu này từ Matt Golder cung cấp công thức cho nhiều mô hình tương tác, nhưng tôi muốn hiểu rõ hơn về quy trình chung để tính SEs của AME thay vì công thức cho SE của bất kỳ AME cụ thể.


2
+1 Câu hỏi tuyệt vời (cũng đã cằn nhằn tôi trong một thời gian dài)! Có một bài đăng trên diễn đàn Stata: Lỗi Delta Phương pháp tiêu chuẩn cho trung bình biên ... . Trên SE, có một ví dụ sử dụng phương pháp bootstrap: hàm mfxboot cho các hiệu ứng cận biên cho hồi quy probit? .
Bernd Weiss

Câu trả lời:


16

Phương thức delta chỉ đơn giản nói rằng nếu bạn có thể biểu diễn một biến phụ trợ, bạn có thể biểu diễn dưới dạng hàm của các biến ngẫu nhiên được phân phối bình thường, biến phụ trợ đó được phân phối bình thường với phương sai tương ứng với mức độ phụ trợ thay đổi so với các biến thông thường (EDIT: như Alecos Papadopoulos đã chỉ ra, phương pháp delta có thể được nói một cách tổng quát hơn sao cho nó không đòi hỏi sự bình thường tiệm cận). Cách dễ nhất để nghĩ về điều này là một bản mở rộng Taylor, trong đó thuật ngữ đầu tiên của hàm là giá trị trung bình và phương sai xuất phát từ các điều khoản thứ hai. Cụ thể, nếu là một hàm của tham số βb là một phù hợp, phân phối bình thường ước lượng cho tham số đó: g (gβb Kể từ khi β là một hằng số, và b là một ước lượng phù hợp cho β , sau đó chúng tôi có thể nói:

g(b)g(β)+g(β)'(b-β)
βbβ Trong trường hợp này, b là OLS của bạn ước tính, và g là AME. Bạn có thể viết AME cụ thể này là: g ( b 1 , b 2 ) = b 1 + b 2  mean ( x 2 ) nếu bạn lấy độ dốc của hàm này (hãy nhớ, một hàm của cáchệ số 2
n(g(b)-g(β))DN(0,g(β)'Σbg(β))
bg
g(b1,b2)= =b1+b2 nghĩa là(x2)
không phải của x2), nó sẽ là: và phương sai-hiệp phương sai ma trận cho b có thể là: [ s 11 s 12 s 12 s 22 ] Cắm này vào công thức đúng và làm một số ma trận đại số mang đến cho bạn sự biểu hiện tương tự như bạn muốn.
[1,nghĩa là(x2)]'
b
[S11S12S12S22]

Nói chung nếu bạn muốn làm điều này, bạn có thể mã hóa rõ ràng bất cứ điều gì g bạn muốn vào Rnhư một chức năng của tất cả các hệ số của bạn và sau đó sử dụng numDerivđể chăm gradient số (nếu không bạn sẽ phải sử dụng máy tính đại số) của hàm đối với với thông số của bạn, tại các thông số bạn ước tính. Sau đó, bạn chỉ cần lấy ma trận phương sai hiệp phương sai và gradient số này và cắm nó vào công thức và voila! Phương pháp Delta.

ĐỊA CHỈ: Trong trường hợp cụ thể này, Rmã sẽ là:

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 

Lưu ý rằng sẽ luôn luôn có được độ dốc chính xác thay vì độ dốc số cho vấn đề này, vì độ dốc chính xác sẽ có ít lỗi tính toán hơn. Thực tế là là tuyến tính loại bỏ vấn đề này và đối với các hàm phức tạp hơn, độ dốc chính xác có thể không phải lúc nào cũng có sẵn.g


1
Cảm ơn câu trả lời rất chi tiết này. Tôi nghĩ rằng điều đặc biệt khiến tôi vấp ngã là độ dốc đối với các hệ số thay vì các biến ban đầu. Tôi thực sự đánh giá cao sự giúp đỡ của bạn!
Thomas

Và chỉ là một câu hỏi làm rõ. Bạn sử dụng mean(x2)khi tính SE. Điều đó sẽ không chỉ cho hiệu ứng cận biên ở mức trung bình chứ? Trực giác của tôi sẽ là đối với các AME, tôi sẽ phải SE cho mỗi lần quan sát và sau đó trung bình trên chúng theo một cách nào đó.
Thomas

1
Nó tương đương với các AME tuyến tính, khi bạn lấy trung bình trên các quan sát mà bạn vừa đạt được với hiệu ứng cận biên ở mức trung bình. Nếu không, bạn thực sự sẽ phải xác định glà trung bình của các hiệu ứng cận biên cho mỗi cá nhân và có thể sử dụng gradient số, tôi không chắc chắn rằng lấy SE cho mỗi hiệu ứng sẽ hoàn toàn giống nhau.
jayk

1
Đó là AME và ME có nghĩa là tương đương với ME tuyến tính. SE sẽ không nghĩ là tương đương vì hình thức của phương sai là bậc hai, vì vậy nghĩa là sẽ không xuất hiện. Tôi không có trực giác tốt về lý do tại sao SE không thể được thêm vào qua các quan sát, nhưng tôi khá chắc chắn đó là sự thật.
jayk

2
Lưu ý rằng Định lý Delta không yêu cầu tính quy tắc.
Alecos Papadopoulos
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.