FELM + Stargazer - Выровнять оценки инструментальных переменных с OLS - PullRequest
0 голосов
/ 04 мая 2018

У меня есть объект felm в R, который я пытаюсь составить таблицу, сравнивающую оценки коэффициентов из оценки OLS и оценки IV. Приведенный ниже код создает таблицу с двумя оценками коэффициентов x и `x (fit)` в отдельных строках.

library(lfe)
library(stargazer)
n<-1000

u1<-rnorm(n)
u2<-rnorm(n)
z=3+0.5*rnorm(n)

x=0.5*z+u1
y=2*x+u2

df<-data.frame(y=y,x=x,z=z)

model1<-felm(y~x,data=df)
model2<-felm(y~1|0|(x~z),data=df)

stargazer(model1, model2, df)

===========================================================
                                   Dependent variable:     
                               ----------------------------
                                            y              
                                    (1)            (2)     
-----------------------------------------------------------
x                                 2.003***                 
                                  (0.031)                  

`x(fit)`                                        1.795***   
                                                 (0.149)   

Constant                           -0.041         0.274    
                                  (0.057)        (0.227)   

-----------------------------------------------------------
Observations                       1,000          1,000    
R2                                 0.804          0.796    
Adjusted R2                        0.804          0.795    
Residual Std. Error (df = 998)     1.005          1.027    
===========================================================
Note:                           *p<0.1; **p<0.05; ***p<0.01

Я бы хотел иметь таблицу, подобную следующей:

===========================================================
                                   Dependent variable:     
                               ----------------------------
                                            y              
                                    (1)            (2)     
-----------------------------------------------------------
x                                 2.003***        1.795***         
                                  (0.031)        (0.149)                                            

Constant                           -0.041         0.274    
                                  (0.057)        (0.227)   

-----------------------------------------------------------
Observations                       1,000          1,000    
R2                                 0.804          0.796    
Adjusted R2                        0.804          0.795    
Residual Std. Error (df = 998)     1.005          1.027    
===========================================================
Note:                           *p<0.1; **p<0.05; ***p<0.01

Я пытался сделать

rownames(model2$coefficients)[rownames(model2$coefficients=="`x(fit)`"]<-"x"

но в тесте Вальда возникла ошибка. Это также раздражает, если у меня есть несколько переменных, для которых я работаю.

Существует ли более простой способ выравнивания ковариат из разных строк в Stargazer или R в более широком смысле?

1 Ответ

0 голосов
/ 04 мая 2018

Если вы используете texreg вместо stargazer, это довольно просто:

library(lfe)
library(texreg)

n<-1000

u1<-rnorm(n)
u2<-rnorm(n)
z=3+0.5*rnorm(n)

x=0.5*z+u1
y=2*x+u2

df<-data.frame(y=y,x=x,z=z)

model1<-felm(y~x,data=df)
model2<-felm(y~1|0|(x~z),data=df)

screenreg(list(model1, model2), 
          custom.coef.names = c("(Intercept)", "x", "x"))
#> 
#> ===============================================
#>                        Model 1      Model 2    
#> -----------------------------------------------
#> (Intercept)               0.05         0.11    
#>                          (0.05)       (0.13)   
#> x                         1.98 ***     1.93 ***
#>                          (0.03)       (0.09)   
#> -----------------------------------------------
#> Num. obs.              1000         1000       
#> R^2 (full model)          0.82         0.81    
#> R^2 (proj model)          0.82         0.81    
#> Adj. R^2 (full model)     0.81         0.81    
#> Adj. R^2 (proj model)     0.81         0.81    
#> ===============================================
#> *** p < 0.001, ** p < 0.01, * p < 0.05

Как вы можете видеть, это работает, указав вектор меток коэффициентов, и если texreg обнаружит, что эти значения дублированы, он поместит эти оценки в одну строку (между прочим, для генерирования латекса используйте texreg(list(model1, model2)) вместо screenreg).

Также стоит отметить, что если вы вставите NA в custom.coef.names, то по умолчанию вернется к текущему имени, поэтому, если у вас есть 100 других ковариат в модели, вы можете сделать custom.coef.names = c(NA, "x", "x", rep(NA, 100)) вместо того, чтобы выписать их все .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...