代码之家  ›  专栏  ›  技术社区  ›  Ben

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

  •  4
  • Ben  · 技术社区  · 6 年前

    我在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"
    

    但是在Wald测试中遇到了一个错误。如果要检测多个变量,那么这样做也很烦人。

    有没有一种更简单的方法来校准《星探》或《R》中不同行的协变量?

    1 回复  |  直到 6 年前
        1
  •  2
  •   gfgm    6 年前

    如果您使用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发现这些值重复,它会将这些估计值放在同一行上(顺便说一下,以生成latex使用 texreg(list(model1, model2)) 而不是 screenreg )。

    还值得注意的是,如果插入 NA 进入 custom.coef.names 它将默认返回到当前名称,因此如果模型中有100个其他协变量,则可以 custom.coef.names = c(NA, "x", "x", rep(NA, 100)) 而不是把它们都写出来。