2015-10-09 29 views
6

Tôi cố gắng đặt một số đầu ra hồi quy 2SLS được tạo thông qua ivreg từ gói AER vào tài liệu Latex bằng gói stargazer. Tôi có một vài vấn đề tuy nhiên mà tôi không thể có vẻ để giải quyết bản thân mình.
1. Tôi không thể tìm ra cách chèn chẩn đoán mô hình như được cung cấp bởi bản tóm tắt của ivreg. Cụ thể là thử nghiệm dụng cụ yếu, Wu-Hausmann và Sargan Test. Tôi muốn có chúng với các số liệu thống kê thường được báo cáo bên dưới bảng như số quan sát, R bình phương và Resid. SE. Hàm stargazer dường như không có một đối số nơi bạn có thể cung cấp một danh sách với các chẩn đoán bổ sung. Tôi đã không đưa điều này vào ví dụ của tôi bởi vì tôi thành thật không có đầu mối bắt đầu từ đâu.
2. Tôi muốn trao đổi các lỗi chuẩn thông thường với các lỗi tiêu chuẩn mạnh và cách duy nhất để thực hiện điều này mà tôi thấy là tạo ra các đối tượng có lỗi chuẩn và thêm chúng vào hàm stargazer với se = list(). Tôi đặt điều này vào ví dụ làm việc tối thiểu bên dưới. Có cách nào thanh lịch hơn để viết mã này hay có thể đánh giá lại mô hình và lưu nó với các lỗi tiêu chuẩn mạnh mẽ? Giúp đánh giá cao.R: Chẩn đoán và chẩn đoán mô hình mạnh mẽ trong bảng stargazer

library(AER) 
library(stargazer) 

y <- rnorm(100, 5, 10) 
x <- rnorm(100, 3, 15) 
z <- rnorm(100, 3, 7) 
a <- rnorm(100, 1, 7) 
b <- rnorm(100, 3, 5) 

# Fitting IV models 
fit1 <- ivreg(y ~ x + a | 
      a + z, 
      model = TRUE) 
fit2 <- ivreg(y ~ x + a | 
      a + b + z, 
      model = TRUE) 

# Here are the se's and the diagnostics i want 
summary(fit1, vcov = sandwich, diagnostics=T) 
summary(fit2, vcov = sandwich, diagnostics=T) 

# Getting robust se's, i think HC0 is the standard 
# used with "vcov=sandwich" from the above summary 
cov1  <- vcovHC(fit1, type = "HC0") 
robust1  <- sqrt(diag(cov1)) 
cov2  <- vcovHC(fit2, type = "HC0") 
robust2  <- sqrt(diag(cov1)) 

# Create latex table 
stargazer(fit1, fit2, type = "latex", se=list(robust1, robust2)) 
+0

liên quan: https://stackoverflow.com/questions/44318860/r-stargazer-manually-specify-r2-and -write-to-tex –

Trả lời

4

Dưới đây là một cách để làm những gì bạn muốn:

require(lmtest) 

rob.fit1  <- coeftest(fit1, function(x) vcovHC(x, type="HC0")) 
rob.fit2  <- coeftest(fit2, function(x) vcovHC(x, type="HC0")) 
summ.fit1 <- summary(fit1, vcov. = function(x) vcovHC(x, type="HC0"), diagnostics=T) 
summ.fit2 <- summary(fit2, vcov. = function(x) vcovHC(x, type="HC0"), diagnostics=T) 

stargazer(fit1, fit2, type = "text", 
      se = list(rob.fit1[,"Std. Error"], rob.fit2[,"Std. Error"]), 
      add.lines = list(c(rownames(summ.fit1$diagnostics)[1], 
          round(summ.fit1$diagnostics[1, "p-value"], 2), 
          round(summ.fit2$diagnostics[1, "p-value"], 2)), 
          c(rownames(summ.fit1$diagnostics)[2], 
          round(summ.fit1$diagnostics[2, "p-value"], 2), 
          round(summ.fit2$diagnostics[2, "p-value"], 2)))) 

nào sẽ mang lại:

========================================================== 
            Dependent variable:  
           ---------------------------- 
              y    
            (1)   (2)  
---------------------------------------------------------- 
x         -1.222  -0.912  
           (1.672)  (1.002) 

a         -0.240  -0.208  
           (0.301)  (0.243) 

Constant       9.662   8.450** 
           (6.912)  (4.222) 

---------------------------------------------------------- 
Weak instruments     0.45   0.56  
Wu-Hausman       0.11   0.18  
Observations      100   100  
R2        -4.414  -2.458  
Adjusted R2      -4.526  -2.529  
Residual Std. Error (df = 97)  22.075  17.641  
========================================================== 
Note:       *p<0.1; **p<0.05; ***p<0.01 

Như bạn có thể thấy, đây cho phép bằng tay bao gồm việc chẩn đoán trong các mô hình tương ứng.


Bạn có thể tự động hóa các phương pháp này bằng cách tạo ra một chức năng mà mất trong một danh sách các mô hình (ví dụ list(summ.fit1, summ.fit2)) và kết quả đầu ra các đối tượng theo yêu cầu của se hoặc add.lines đối số.

gaze.coeft <- function(x, col="Std. Error"){ 
    stopifnot(is.list(x)) 
    out <- lapply(x, function(y){ 
     y[ , col] 
    }) 
    return(out) 
} 
gaze.coeft(list(rob.fit1, rob.fit2)) 
gaze.coeft(list(rob.fit1, rob.fit2), col=2) 

cả sẽ mất trong một list của coeftest đối tượng, và mang lại vector DNhXH như mong đợi bởi se:

[[1]] 
(Intercept)   x   a 
    6.9124587 1.6716076 0.3011226 

[[2]] 
(Intercept)   x   a 
    4.2221491 1.0016012 0.2434801 

Cùng thể được thực hiện đối với chẩn đoán:

gaze.lines.ivreg.diagn <- function(x, col="p-value", row=1:3, digits=2){ 
    stopifnot(is.list(x)) 
    out <- lapply(x, function(y){ 
     stopifnot(class(y)=="summary.ivreg") 
     y$diagnostics[row, col, drop=FALSE] 
    }) 
    out <- as.list(data.frame(t(as.data.frame(out)), check.names = FALSE)) 
    for(i in 1:length(out)){ 
     out[[i]] <- c(names(out)[i], round(out[[i]], digits=digits)) 
    } 
    return(out) 
} 
gaze.lines.ivreg.diagn(list(summ.fit1, summ.fit2), row=1:2) 
gaze.lines.ivreg.diagn(list(summ.fit1, summ.fit2), col=4, row=1:2, digits=2) 

Cả cuộc gọi sẽ mang lại:

$`Weak instruments` 
[1] "Weak instruments" "0.45"    "0.56"    

$`Wu-Hausman` 
[1] "Wu-Hausman" "0.11"  "0.18"  

Bây giờ cuộc gọi stargazer() trở nên đơn giản như này, năng suất sản lượng giống hệt như trên:

stargazer(fit1, fit2, type = "text", 
     se = gaze.coeft(list(rob.fit1, rob.fit2)), 
     add.lines = gaze.lines.ivreg.diagn(list(summ.fit1, summ.fit2), row=1:2)) 
Các vấn đề liên quan