2010-12-13 53 views
12

Tôi đang cố gắng tìm hiểu R sau khi sử dụng Stata và tôi phải nói rằng tôi thích nó. Nhưng bây giờ tôi đang gặp rắc rối. Tôi sắp thực hiện một số phép hồi quy nhiều lần với Bảng dữ liệu vì vậy tôi đang sử dụng gói plm.Heteroscedasticity lỗi tiêu chuẩn mạnh mẽ với gói PLM

Bây giờ tôi muốn có kết quả tương tự với plm trong R khi tôi sử dụng hàm lm và Stata khi tôi thực hiện hồi quy cố định mạnh mẽ và cố định của thực thể.

Giả sử tôi có tập dữ liệu bảng điều khiển với các biến số Y, ENTITY, TIME, V1.

tôi nhận được lỗi cùng một tiêu chuẩn trong R với mã này

lm.model<-lm(Y ~ V1 + factor(ENTITY), data=data) 
coeftest(lm.model, vcov.=vcovHC(lm.model, type="HC1)) 

như khi tôi thực hiện hồi quy này trong Stata

xi: reg Y V1 i.ENTITY, robust 

Nhưng khi tôi thực hiện hồi quy này với gói plm tôi nhận khác lỗi chuẩn

plm.model<-plm(Y ~ V1 , index=C("ENTITY","YEAR"), model="within", effect="individual", data=data) 
coeftest(plm.model, vcov.=vcovHC(plm.model, type="HC1)) 
  • Tôi có bỏ lỡ một số tùy chọn không?
  • Mô hình plm có sử dụng một số loại ước tính khác không và nếu có thì sao?
  • tôi một cách nào đó có thể có sai số chuẩn tương tự với plm như trong Stata với , robust
+2

đây là một cái gì đó bạn tốt hơn hỏi tại http://www.crossvalidated.com, họ sẽ có thể giúp bạn nhiều hơn. Và nó sẽ là tốt đẹp để có một số mã tái sản xuất trong khi bạn đang ở đó, cùng với kết quả mong đợi. Điều này thường xóa một vấn đề khá nhanh. –

+3

Tôi không biết stata, nhưng có vẻ như hồi quy stata của bạn là một mô hình tuyến tính gộp của Y = a0 + a1 * V1 + a2 * ENTITY + epsilon với het se mạnh mẽ, đó là những gì bạn đang làm với 'lm' , do đó kết quả phù hợp. Trong mô hình 'plm' bạn đang thực hiện hồi quy FE Y = a0 + a1 * V1 + ui + epsilon, trong đó ui là FE cho mỗi" cá nhân ", theo' chỉ mục' mà bạn đã chỉ định là ENTITY. Vì vậy, tôi nghĩ rằng kết quả của bạn stata và R phù hợp trong trường hợp đầu tiên bởi vì bạn đang làm một bảng tổng hợp với thực thể như là một var trong cả hai trường hợp. Nhưng tôi không biết stata. –

Trả lời

2

Có thể rằng mã Stata của bạn là khác với những gì bạn đang làm với plm?

plm 's 'trong' tùy chọn với các hiệu ứng 'cá nhân' có nghĩa là một mô hình có dạng:

yit = a + Xit*B + eit + ci 

plm làm là để hạ thấp hệ số để ci giảm từ phương trình.

yit_bar = Xit_bar*B + eit_bar 

Như vậy hậu tố "thanh" có nghĩa là mỗi biến có giá trị trung bình được trừ. Giá trị trung bình được tính theo thời gian và đó là lý do tại sao hiệu ứng lại dành cho cá nhân. Bạn cũng có thể có một hiệu ứng thời gian cố định mà sẽ được phổ biến cho tất cả các cá nhân trong trường hợp đó hiệu quả sẽ được thông qua thời gian là tốt (đó là không liên quan trong trường hợp này mặc dù).

Tôi không chắc lệnh "xi" nào có trong STATA, nhưng tôi nghĩ rằng nó mở rộng tương tác đúng không? Sau đó, có vẻ như với tôi rằng bạn đang cố gắng sử dụng biến giả trên mỗi ENTITY như được đánh dấu bởi @richardh.

Để mã Stata và plm của bạn khớp với nhau, bạn phải sử dụng cùng một kiểu máy.

Bạn có hai tùy chọn: (1) bạn xtset dữ liệu của bạn trong stata và sử dụng tùy chọn xtreg với công cụ sửa đổi fe hoặc (2) bạn sử dụng plm với tùy chọn gộp và một giả cho mỗi ENTITY.

Matching Stata để R:

xtset entity year 
xtreg y v1, fe robust 

Matching plm để Stata:

plm(Y ~ V1 + as.factor(ENTITY) , index=C("ENTITY","YEAR"), model="pooling", effect="individual", data=data) 

Sau đó sử dụng vcovHC với một trong những từ bổ nghĩa. Hãy chắc chắn để kiểm tra này paper có một đánh giá tốt đẹp của tất cả các cơ học đằng sau các tùy chọn "HC" và cách họ ảnh hưởng đến ma trận hiệp phương sai phương sai.

Hy vọng điều này sẽ hữu ích.

4

Theo mặc định, gói plm không sử dụng chính xác chính xác chỉnh sửa mẫu giống nhau cho dữ liệu bảng điều khiển dưới dạng Stata. Tuy nhiên, trong phiên bản 1.5 của plm (trên CRAN), bạn có một tùy chọn sẽ mô phỏng những gì Stata đang làm.

plm.model<-plm(Y ~ V1 , index=C("ENTITY","YEAR"), model="within", 
    effect="individual", data=data) 
coeftest(plm.model, vcov.=function(x) vcovHC(x, type="sss")) 

Điều này sẽ tạo cùng một nhóm theo các lỗi chuẩn theo nhóm như trong Stata (nhưng như được đề cập trong nhận xét, không có ví dụ lặp lại và kết quả bạn mong đợi sẽ khó trả lời câu hỏi hơn).

Để biết thêm thông tin về vấn đề này và một số tiêu chí chuẩn của R và Stata mạnh mẽ, hãy xem Fama-MacBeth and Cluster-Robust (by Firm and Time) Standard Errors in R.

Xem thêm:

+0

'plm' của' type = "sss" 'không sao chép điều chỉnh mẫu nhỏ của Stata chính xác vì Stata có một chặn trong mô hình FE của nó và do đó, sử dụng một số lượng khác nhau của các hệ số trong điều chỉnh. 'plm' không có đánh chặn này và, do đó, sử dụng" số lượng hệ số - 1 "so với Stata trong điều chỉnh. Đối với các mẫu nhỏ, điều này cho kết quả hơi khác nhau nhưng sẽ không được chú ý trong các mẫu lớn. – Helix123

+0

@ Helix123 Thật vậy. Tôi đã thảo luận điều này với các tác giả của 'plm' và nói chung nó không phải là rõ ràng biện minh lý thuyết cho Stata bao gồm việc đánh chặn trong các tính toán này là gì. Trong khi một intercept * có thể * được tính toán và 'plm' thực hiện nó nếu được yêu cầu (' inner_intercept() ', có thể vẫn còn trong SVN), nó có vẻ là một khái niệm nhân tạo trong bối cảnh của' inner' models. Bây giờ nó không có vẻ khôn ngoan để bao gồm một "số lượng chính xác" nhân rộng của các nhóm SE của Stata ... Điều này nói rằng, Gretl dường như để nhân rộng các tính toán * chính xác * à la Stata. – landroni

Các vấn đề liên quan