FELM + Stargazer - 将工具变量估计与OLS对齐

时间:2018-05-04 16:01:22

标签: r regression stargazer

我在R中有一个felm对象,我正在尝试制作一个比较OLS估计和IV估计的系数估计的表。下面的代码生成一个表,其中包含两个系数估计值x和单独行中的“x(拟合)”。

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"

但在Wald测试中遇到错误。如果我有多个我正在检测的变量,这也很烦人。

是否有更简单的方法可以更广泛地对齐Stargazer或R中不同行的协变量?

1 个答案:

答案 0 :(得分:2)

如果你使用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))而不是{{1} })。

另外值得注意的是,如果您将screenreg插入NA,它将默认返回当前名称,因此如果您在模型中有100个其他协变量,则可以执行custom.coef.names而不是全部写出来。