Tái tạo tùy chọn mạnh mẽ trên Stata của Stata trong R


39

Tôi đã cố gắng sao chép các kết quả của tùy chọn Stata robusttrong R. Tôi đã sử dụng rlmmẫu lệnh gói MASS và cũng là lệnh lmrobtừ gói "mạnh mẽ". Trong cả hai trường hợp, kết quả khá khác so với tùy chọn "mạnh mẽ" trong Stata. Bất cứ ai có thể xin vui lòng đề nghị một cái gì đó trong bối cảnh này?

Dưới đây là kết quả tôi thu được khi chạy tùy chọn mạnh mẽ trong Stata:

. reg yb7 buildsqb7 no_bed no_bath rain_harv swim_pl pr_terrace, robust

Linear regression                                      Number of obs =    4451
                                                       F(  6,  4444) =  101.12
                                                       Prob > F      =  0.0000
                                                       R-squared     =  0.3682
                                                       Root MSE      =   .5721

------------------------------------------------------------------------------
             |               Robust
         yb7 |      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
   buildsqb7 |   .0046285   .0026486     1.75   0.081    -.0005639     .009821
      no_bed |   .3633841   .0684804     5.31   0.000     .2291284    .4976398
     no_bath |   .0832654   .0706737     1.18   0.239    -.0552904    .2218211
   rain_harv |   .3337906   .0395113     8.45   0.000     .2563289    .4112524
     swim_pl |   .1627587   .0601765     2.70   0.007     .0447829    .2807346
  pr_terrace |   .0032754   .0178881     0.18   0.855    -.0317941    .0383449
       _cons |   13.68136   .0827174   165.40   0.000     13.51919    13.84353

Và đây là những gì tôi thu được trong R với tùy chọn lmrob:

> modelb7<-lmrob(yb7~Buildsqb7+No_Bed+Rain_Harv+Swim_Pl+Gym+Pr_Terrace, data<-bang7)
> summary(modelb7)

Call:
lmrob(formula = yb7 ~ Buildsqb7 + No_Bed + Rain_Harv + Swim_Pl + Gym + Pr_Terrace, 
    data = data <- bang7)
 \--> method = "MM"
Residuals:
      Min        1Q    Median        3Q       Max 
-51.03802  -0.12240   0.02088   0.18199   8.96699 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 12.648261   0.055078 229.641   <2e-16 ***
Buildsqb7    0.060857   0.002050  29.693   <2e-16 ***
No_Bed       0.005629   0.019797   0.284   0.7762    
Rain_Harv    0.230816   0.018290  12.620   <2e-16 ***
Swim_Pl      0.065199   0.028121   2.319   0.0205 *  
Gym          0.023024   0.014655   1.571   0.1162    
Pr_Terrace   0.015045   0.013951   1.078   0.2809    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

Robust residual standard error: 0.1678 
Multiple R-squared:  0.8062,    Adjusted R-squared:  0.8059 

3
Chào mừng bạn đến với Xác thực chéo! Tôi đã làm cho tiêu đề của bạn mô tả hơn một chút và thêm một số định dạng. Nói chung, các câu hỏi lập trình không thuộc chủ đề ở đây, nhưng tôi nghĩ câu hỏi của bạn là vì nó liên quan đến một số vấn đề thống kê. Hy vọng sẽ gặp bạn xung quanh ....
Matt Krause

3
Nó sẽ giúp ích rất nhiều nếu bạn ít nhất dán mã được sử dụng để ước tính các mô hình trong Stata và R (thậm chí tốt hơn nếu bạn cung cấp một ví dụ hoàn toàn có thể lặp lại). Khi bạn nói "kết quả khác nhau" - nếu bạn đang ước tính cùng một mô hình thì chỉ có các lỗi tiêu chuẩn sẽ khác nhau, không phải là ước tính hệ số.
Andy W

được rồi ... Đây là những kết quả tôi nhận được bằng tùy chọn mạnh mẽ trong STATA:
user56579

5
có vẻ như lmrobkhông giống như reg y x, robust. Google "lỗi tiêu chuẩn không đồng nhất R". Bạn sẽ nhận được các trang chỉ cho bạn cách sử dụng lmtestsandwichthư viện.
generic_user

3
Stata sử dụng hệ số hiệu chỉnh mẫu nhỏ là n / (nk). R thường làm một cái gì đó khác, vì vậy hãy chắc chắn rằng bạn điều chỉnh cho điều đó.
Dimitriy V. Masterov

Câu trả lời:


47

Charles gần như có câu trả lời của mình, nhưng robusttùy chọn của regresslệnh (và các lệnh ước lượng hồi quy khác) trong Stata cho phép sử dụng nhiều loại ước lượng ma trận phương sai và ước lượng tự động tương quan mạnh, cũng như coeftesthàm trong lmtestgói lần lượt phụ thuộc vào ma trận phương sai hiệp phương tương ứng được tạo bởi vcovHChàm trong sandwichgói.

Tuy nhiên, ma trận phương sai hiệp phương mặc định được sử dụng bởi hai loại này là khác nhau:
1. Ma trận hiệp phương sai mặc định được trả về bởi vcocHCcái gọi là HC3lý do được mô tả trong trang man cho vcovHC.
2. sandwichTùy chọn được Charles coeftestsử dụng sử dụng HC0ma trận phương sai hiệp phương sai mạnh mẽ.
3. Để tái tạo hành vi mặc định của Stata bằng cách sử dụng robusttùy chọn trong cuộc gọi đến regressbạn cần phải yêu cầu vcovHCsử dụng HC1ma trận phương sai hiệp phương sai mạnh mẽ.

Đọc thêm về nó ở đây .

Ví dụ sau đây thể hiện tất cả các điểm được nêu ở trên dựa trên ví dụ ở đây .

library(foreign)
library(sandwich)
library(lmtest)

dfAPI = read.dta("http://www.ats.ucla.edu/stat/stata/webbooks/reg/elemapi2.dta")
lmAPI = lm(api00 ~ acs_k3 + acs_46 + full + enroll, data= dfAPI)
summary(lmAPI)                                  # non-robust

# check that "sandwich" returns HC0
coeftest(lmAPI, vcov = sandwich)                # robust; sandwich
coeftest(lmAPI, vcov = vcovHC(lmAPI, "HC0"))    # robust; HC0 

# check that the default robust var-cov matrix is HC3
coeftest(lmAPI, vcov = vcovHC(lmAPI))           # robust; HC3 
coeftest(lmAPI, vcov = vcovHC(lmAPI, "HC3"))    # robust; HC3 (default)

# reproduce the Stata default
coeftest(lmAPI, vcov = vcovHC(lmAPI, "HC1"))    # robust; HC1 (Stata default)

Dòng mã cuối cùng ở trên tái tạo kết quả từ Stata:

use http://www.ats.ucla.edu/stat/stata/webbooks/reg/elemapi2
regress api00 acs_k3 acs_46 full enroll, robust

Liên kết đến dữ liệu đã chết. Bạn có thể vui lòng cập nhật các liên kết? Đây có phải là cùng một tệp: fac Khoa.smu.edu/tfomby/eco5350/data/Examples/elemapi2.dta ?
vasili111

Làm thế nào để tái sản xuất khoảng tin cậy?
vasili111

29

Tôi đã tìm thấy một mô tả trên trang web sau đây sao chép tùy chọn '' mạnh mẽ '' của Stata trong R.

https: // ec economtheoryblog.com/2016/08/08/robust-stiteria-errors-in-r

Làm theo các hướng dẫn, tất cả những gì bạn cần làm là tải một hàm vào phiên R của bạn và sau đó đặt tham số '' mạnh mẽ '' trong hàm tóm tắt của bạn thành TRUE.

summary(lm.object, robust=TRUE)

10

Kể từ tháng 4 năm 2018 tôi tin rằng bạn muốn estimatrgói cung cấp thay thế gần như thay thế cho lm. Một số ví dụ được lấy gần từ tài liệu:

library(estimatr)
library(car)

# HC1 robust standard errors
model <- lm_robust(GPA_year2 ~ gpa0 + ssp, data = alo_star_men,
                   se_type = "stata")
summary(model)
#> 
#> Call:
#> lm_robust(formula = GPA_year2 ~ gpa0 + ssp, data = alo_star_men, 
#>     se_type = "stata")
#> 
#> Standard error type:  HC1 
#> 
#> Coefficients:
#>             Estimate Std. Error  Pr(>|t|) CI Lower CI Upper  DF
#> (Intercept) -3.60625    1.60084 0.0258665 -6.77180  -0.4407 137
#> gpa0         0.06814    0.02024 0.0009868  0.02812   0.1082 137
#> ssp          0.31917    0.18202 0.0817589 -0.04077   0.6791 137
#> 
#> Multiple R-squared:  0.09262 ,   Adjusted R-squared:  0.07937 
#> F-statistic: 6.992 on 2 and 137 DF,  p-value: 0.001284

# HC1 cluster robust standard errors
model2 <- lm_robust(GPA_year2 ~ gpa0 + ssp, cluster = ssp,
                   data = alo_star_men, se_type = "stata")
summary(model2)
#> 
#> Call:
#> lm_robust(formula = GPA_year2 ~ gpa0 + ssp, data = alo_star_men, 
#>     clusters = ssp, se_type = "stata")
#> 
#> Standard error type:  stata 
#> 
#> Coefficients:
#>             Estimate Std. Error Pr(>|t|) CI Lower CI Upper DF
#> (Intercept) -3.60625   1.433195 0.240821 -21.8167  14.6042  1
#> gpa0         0.06814   0.018122 0.165482  -0.1621   0.2984  1
#> ssp          0.31917   0.004768 0.009509   0.2586   0.3798  1
#> 
#> Multiple R-squared:  0.09262 ,   Adjusted R-squared:  0.07937 
#> F-statistic: 6.992 on 2 and 137 DF,  p-value: 0.001284

Các cargói sau đó làm cho nó dễ dàng để thực hiện các bài kiểm tra giả thuyết omnibus cho các mô hình:

linearHypothesis(model, c("gpa0 = ssp"))
#> Linear hypothesis test
#> 
#> Hypothesis:
#> gpa0 - ssp = 0
#> 
#> Model 1: restricted model
#> Model 2: GPA_year2 ~ gpa0 + ssp
#> 
#>   Res.Df Df  Chisq Pr(>Chisq)
#> 1    138                     
#> 2    137  1 1.8859     0.1697

4

Tôi sẽ chỉnh sửa câu hỏi. Bạn đang nhầm lẫn hồi quy mạnh mẽ với lệnh mạnh mẽ của Stata. Dường như không có lợi ích để giới thiệu sự nhầm lẫn này.

Tôi nghĩ rằng có một vài cách tiếp cận. Tôi đã không nhìn vào tất cả chúng và không chắc cái nào là tốt nhất:

Gói bánh sandwich:

library(sandwich)    
coeftest(model, vcov=sandwich)

Nhưng điều này không cho tôi câu trả lời giống như tôi nhận được từ Stata vì một số lý do. Tôi chưa bao giờ cố gắng tìm hiểu tại sao - nhưng ở trên trong các bình luận có một câu trả lời được đề xuất - tôi chỉ không sử dụng gói này.

Gói rms:

Tôi thấy điều này hơi đau khi làm việc nhưng thường nhận được câu trả lời tốt với một số nỗ lực. Và nó là hữu ích nhất đối với tôi.

model = ols(a~b, x=TRUE)    
robcov(model)

Bạn có thể mã từ đầu

Xem bài đăng trên blog này ( http://thetarzan.wordpress.com/2011/05/28/heteroskedasticity-robust-and-clustered-stiteria-errors-in-r/ ). Nó trông giống như tùy chọn đau đớn nhất, nhưng rất dễ dàng và tùy chọn này thường hoạt động tốt nhất.


4
Charles là chính xác trên quan điểm chính, nhưng để làm rõ những gì được ngụ ý ở nơi khác lưu ý rằng Stata không có robustlệnh! (Có một lệnh của lập trình viên _robust, không liên quan trực tiếp ở đây.) Thay vào đó, để có được các lỗi tiêu chuẩn mạnh mẽ (Huber-Eicker-White-sandwich), cách tiếp cận hiện đại trong Stata là chỉ định vce(robust)làm tùy chọn. Cách tiếp cận cũ hơn để xác định một robusttùy chọn vẫn hoạt động. Nhìn rộng hơn, sự nhầm lẫn gây ra bởi sự khác biệt giữa hồi quy mạnh (v.v.) và SE "mạnh" là không may.
Nick Cox

Chào. Cảm ơn rất nhiều. Các mã hoạt động và nó thực sự cung cấp với kết quả mà Stata làm. Chỉ là một câu hỏi. Tôi hiểu rằng hồi quy mạnh khác với các lỗi tiêu chuẩn mạnh và hồi quy mạnh được sử dụng khi dữ liệu của bạn chứa các ngoại lệ. Nhưng nó cũng giải quyết được vấn đề không đồng nhất. Bất cứ ai có thể vui lòng cho tôi biết liệu ước tính loại MM được cung cấp bởi lệnh "lmrob" từ gói "Strongbase" có được sử dụng như một giải pháp cho vấn đề ngoại lệ và không đồng nhất simultaneuosly không?
dùng56579

@ user56579 Tôi đoán là bạn muốn hỏi một câu hỏi riêng về vấn đề này.
tchakravarty
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.