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

斯塔塔吸收的R当量

  •  2
  • Parseltongue  · 技术社区  · 6 年前

    我想控制一个包含100多个级别的因子变量,而无需将该控制的结果输出到汇总表。注意,我还对复制斯塔塔命令的速度感兴趣,而不仅仅是对输出进行表面上的更改。

    在Stata中,我可以这样使用“吸收”:

    use http://www.stata-press.com/data/r14/abdata.dta, clear
    . xtreg n w k i.year, fe
    
    Fixed-effects (within) regression               Number of obs     =      1,031
    Group variable: id                              Number of groups  =        140
    
    R-sq:                                           Obs per group:
         within  = 0.6277                                         min =          7
         between = 0.8473                                         avg =        7.4
         overall = 0.8346                                         max =          9
    
                                                    F(10,881)         =     148.56
    corr(u_i, Xb)  = 0.5666                         Prob > F          =     0.0000
    
    ------------------------------------------------------------------------------
               n |      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
    -------------+----------------------------------------------------------------
               w |  -.2731482   .0551503    -4.95   0.000    -.3813896   -.1649068
               k |   .5648036   .0212211    26.62   0.000     .5231537    .6064535
                 |
            year |
           1977  |  -.0347963   .0188134    -1.85   0.065    -.0717206    .0021281
           1978  |  -.0583286   .0190916    -3.06   0.002    -.0957989   -.0208583
           1979  |   -.070047   .0190414    -3.68   0.000    -.1074187   -.0326752
           1980  |  -.0889378   .0189788    -4.69   0.000    -.1261867   -.0516889
           1981  |  -.1401502   .0186309    -7.52   0.000    -.1767163   -.1035841
           1982  |  -.1603768   .0188132    -8.52   0.000    -.1973008   -.1234528
           1983  |  -.1621103   .0222902    -7.27   0.000    -.2058585   -.1183621
           1984  |  -.1258136   .0282391    -4.46   0.000    -.1812373   -.0703899
                 |
           _cons |   2.255419   .1772614    12.72   0.000     1.907515    2.603323
    -------------+----------------------------------------------------------------
         sigma_u |  .64723143
         sigma_e |  .12836859
             rho |  .96215208   (fraction of variance due to u_i)
    ------------------------------------------------------------------------------
    F test that all u_i=0: F(139, 881) = 126.32                  Prob > F = 0.0000
    

    使用“吸收”可消除固定效果

    . reghdfe n w k, absorb(id year)
    (converged in 7 iterations)
    
    HDFE Linear regression                            Number of obs   =      1,031
    Absorbing 2 HDFE groups                           F(   2,    881) =     362.67
                                                      Prob > F        =     0.0000
                                                      R-squared       =     0.9922
                                                      Adj R-squared   =     0.9908
                                                      Within R-sq.    =     0.4516
                                                      Root MSE        =     0.1284
    
    ------------------------------------------------------------------------------
               n |      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
    -------------+----------------------------------------------------------------
               w |  -.2731482   .0551503    -4.95   0.000    -.3813896   -.1649068
               k |   .5648036   .0212211    26.62   0.000     .5231537    .6064535
    -------------+----------------------------------------------------------------
        Absorbed |       F(147, 881) =    120.660   0.000             (Joint test)
    ------------------------------------------------------------------------------
    
    Absorbed degrees of freedom:
    ---------------------------------------------------------------+
     Absorbed FE |  Num. Coefs.  =   Categories  -   Redundant     |
    -------------+-------------------------------------------------|
              id |          140             140              0     |
            year |            8               9              1     |
    ---------------------------------------------------------------+
    
    3 回复  |  直到 3 年前
        1
  •  5
  •   Parseltongue    4 年前

    我能找到的最佳替代方案是lfe软件包,它实现了具有高维固定效应或/和工具变量的模型。

    可以在垂直条后指定固定效果,如下所示:

    felm(n ~ w _ k | year, df)
    

    年度系数将纳入最终规范。这种方法的问题是,它现在确实允许您预测观察结果。

    编辑:更新

    R库 estimatr 具有功能 lm_robust ,它有一个固定的\u effects参数,可以吸收FE,比我在网上找到的任何库都好。强烈推荐。

        2
  •  2
  •   Ben Bolker    6 年前

    我不知道有什么内置的方法可以做到这一点,但是 broom::tidy 再加上一点基于因子名称的过滤,即可满足您的需要:

    示例数据:

    set.seed(101)
    dd <- data.frame(y=rnorm(1000),
                     f=factor(sample(1:50,size=1000,replace=TRUE)),
                     x=rnorm(1000))
    
    m <- lm(y~f+x,data=dd)
    

    单向(取决于 grepl() ,这是基础R[我更熟悉],它是混合和匹配的范例一点)

    library(broom)
    library(dplyr)
    tidy(m) %>%
        filter(!grepl("^f[0-9]+",term))
    ##          term    estimate  std.error statistic   p.value
    ## 1 (Intercept) -0.22643955 0.18852186 -1.201131 0.2299999
    ## 2           x -0.03330846 0.03101449 -1.073964 0.2831116
    

    或者你可以用 stringr::str_detect

    library(stringr)
    tidy(m) %>%
        filter(!str_detect(term,"^f[0-9]+"))
    

    我使用的特定正则表达式基于因子的名称加上级别的名称。如果是你的话 "^year[0-9]+" ,或只是 "^year" 如果你觉得幸运的话

        3
  •  1
  •   Qingyang Lin Grovy    3 年前

    你做了两次完全不同的回归。 xtreg表示面板数据(x表示id,t表示时间)。无论平衡面板还是非平衡面板,面板数据都需要与id正交的第二维度(通常以时间的形式)。在R中,可以使用 plm 提供面板数据的汇总OLS、第一差分、内部/固定效应、随机效应、嵌套等估计器的包。

    但是,如果您的数据没有面板结构(即每个观察的唯一id时间标识符),则无法在中应用内部转换 plm公司 xtreg 。例如,重复横截面数据或集群/分层横截面数据就是这种情况。 reghdfe 对高维固定效果使用不同的算法。多个R包的目的相同,包括 lfe (felm功能), fixest (feols功能), biglm (biglm函数), estimatr (lm\U鲁棒函数)等。根据我的个人经验, 估算器 通常比其他人快。