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



我在R中有一个felm对象,我正在尝试制作一个表格,比较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"

但在沃尔德测试中遇到了错误。如果我有多个正在检测的变量,这样做也很烦人。

有没有更简单的方法可以更广泛地对齐观星者或R中不同行的协变量?

如果你使用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))而不是将它们全部写出来。

相关内容

  • 没有找到相关文章

最新更新