我可以使用lme4在面板数据上指定随机和固定效果模型吗?

我正在r中重做Wooldridge(2013,p.494-5)中的示例14.4。感谢this sitethis blog post我已经在plm包中做到了,但是我很好奇我是否可以在lme4包中做到这一点?

这是我在plm包中所做的事情。对于任何有关如何使用lme4执行相同操作的指针,将不胜感激。首先,所需的软件包和数据加载,

# install.packages(c("wooldridge", "plm", "stargazer"), dependencies = TRUE)
library(wooldridge)
data(wagepan)


其次,我使用plm包估算了示例14.4(Wooldridge 2013)中估算的三个模型,

library(plm)
Pooled.ols <- plm(lwage ~ educ + black + hisp + exper+I(exper^2)+ married + union +
                  factor(year), data = wagepan, index=c("nr","year") , model="pooling")

random.effects <- plm(lwage ~ educ + black + hisp + exper + I(exper^2) + married + union +
                      factor(year), data = wagepan, index = c("nr","year") , model = "random")

fixed.effects <- plm(lwage ~ I(exper^2) + married + union + factor(year),
                     data = wagepan, index = c("nr","year"), model="within")


第三,我使用stargazer输出结果以模拟Wooldridge(2013)中的表14.2,

stargazer::stargazer(Pooled.ols,random.effects,fixed.effects, type="text",
           column.labels=c("OLS (pooled)","Random Effects","Fixed Effects"),
          dep.var.labels = c("log(wage)"), keep.stat=c("n"),
          keep=c("edu","bla","his","exp","marr","union"), align = TRUE, digits = 4)
#> ======================================================
#>                         Dependent variable:
#>              -----------------------------------------
#>                              log(wage)
#>              OLS (pooled) Random Effects Fixed Effects
#>                  (1)           (2)            (3)
#> ------------------------------------------------------
#> educ          0.0913***     0.0919***
#>                (0.0052)      (0.0107)
#>
#> black         -0.1392***    -0.1394***
#>                (0.0236)      (0.0477)
#>
#> hisp            0.0160        0.0217
#>                (0.0208)      (0.0426)
#>
#> exper         0.0672***     0.1058***
#>                (0.0137)      (0.0154)
#>
#> I(exper2)     -0.0024***    -0.0047***    -0.0052***
#>                (0.0008)      (0.0007)      (0.0007)
#>
#> married       0.1083***     0.0640***      0.0467**
#>                (0.0157)      (0.0168)      (0.0183)
#>
#> union         0.1825***     0.1061***      0.0800***
#>                (0.0172)      (0.0179)      (0.0193)
#>
#> ------------------------------------------------------
#> Observations    4,360         4,360          4,360
#> ======================================================
#> Note:                      *p<0.1; **p<0.05; ***p<0.01


lme4中有同样简单的方法吗?我应该坚持plm吗?为什么/为什么不呢?

最佳答案

除了估计方法的差异外,似乎确实主要是一个问题
词汇和语法

# install.packages(c("wooldridge", "plm", "stargazer", "lme4"), dependencies = TRUE)
library(wooldridge)
library(plm)
#> Le chargement a nécessité le package : Formula
library(lme4)
#> Le chargement a nécessité le package : Matrix
data(wagepan)


第一个示例是一个简单的线性模型,忽略了组nr
使用lme4不能做到这一点,因为没有“随机效应”(在lme4意义上)。
这就是Gelman&Hill所谓的完整合并方法。

Pooled.ols <- plm(lwage ~ educ + black + hisp + exper+I(exper^2)+ married +
                      union + factor(year), data = wagepan,
                  index=c("nr","year"), model="pooling")

Pooled.ols.lm <- lm(lwage ~ educ + black + hisp + exper+I(exper^2)+ married + union +
                      factor(year), data = wagepan)


您的第二个示例似乎等效于nr的随机截距混合模型
作为随机效应(但所有预测变量的斜率是固定的)。
这就是Gelman&Hill所谓的部分合并方法。

random.effects <- plm(lwage ~ educ + black + hisp + exper + I(exper^2) + married +
                          union + factor(year), data = wagepan,
                      index = c("nr","year") , model = "random")

random.effects.lme4 <- lmer(lwage ~ educ + black + hisp + exper + I(exper^2) + married +
                                union + factor(year) + (1|nr), data = wagepan)


您的第三个示例似乎与nr是固定效果并且您
为每个组计算不同的nr截距。
再说一遍:您不能使用lme4这样做,因为没有“随机效应”(在lme4意义上)。
这就是Gelman&Hill所谓的“无池”方法。

fixed.effects <- plm(lwage ~ I(exper^2) + married + union + factor(year),
                     data = wagepan, index = c("nr","year"), model="within")

wagepan$nr <- factor(wagepan$nr)
fixed.effects.lm <- lm(lwage ~  I(exper^2) + married + union + factor(year) + nr,
                     data = wagepan)


比较结果:

stargazer::stargazer(Pooled.ols, Pooled.ols.lm,
                     random.effects, random.effects.lme4 ,
                     fixed.effects, fixed.effects.lm,
                     type="text",
                     column.labels=c("OLS (pooled)", "lm no pool.",
                                     "Random Effects", "lme4 partial pool.",
                                     "Fixed Effects", "lm compl. pool."),
                     dep.var.labels = c("log(wage)"),
                     keep.stat=c("n"),
                     keep=c("edu","bla","his","exp","marr","union"),
                     align = TRUE, digits = 4)
#>
#> =====================================================================================================
#>                                                Dependent variable:
#>              ----------------------------------------------------------------------------------------
#>                                                     log(wage)
#>                 panel         OLS         panel            linear           panel           OLS
#>                 linear                    linear       mixed-effects       linear
#>              OLS (pooled) lm no pool. Random Effects lme4 partial pool. Fixed Effects lm compl. pool.
#>                  (1)          (2)          (3)              (4)              (5)            (6)
#> -----------------------------------------------------------------------------------------------------
#> educ          0.0913***    0.0913***    0.0919***        0.0919***
#>                (0.0052)    (0.0052)      (0.0107)         (0.0108)
#>
#> black         -0.1392***  -0.1392***    -0.1394***       -0.1394***
#>                (0.0236)    (0.0236)      (0.0477)         (0.0485)
#>
#> hisp            0.0160      0.0160        0.0217           0.0218
#>                (0.0208)    (0.0208)      (0.0426)         (0.0433)
#>
#> exper         0.0672***    0.0672***    0.1058***        0.1060***
#>                (0.0137)    (0.0137)      (0.0154)         (0.0155)
#>
#> I(exper2)     -0.0024***  -0.0024***    -0.0047***       -0.0047***      -0.0052***     -0.0052***
#>                (0.0008)    (0.0008)      (0.0007)         (0.0007)        (0.0007)       (0.0007)
#>
#> married       0.1083***    0.1083***    0.0640***        0.0635***        0.0467**       0.0467**
#>                (0.0157)    (0.0157)      (0.0168)         (0.0168)        (0.0183)       (0.0183)
#>
#> union         0.1825***    0.1825***    0.1061***        0.1053***        0.0800***      0.0800***
#>                (0.0172)    (0.0172)      (0.0179)         (0.0179)        (0.0193)       (0.0193)
#>
#> -----------------------------------------------------------------------------------------------------
#> Observations    4,360        4,360        4,360            4,360            4,360          4,360
#> =====================================================================================================
#> Note:                                                                     *p<0.1; **p<0.05; ***p<0.01


Gelman A,Hill J(2007)使用回归和多层次/层次模型进行数据分析。剑桥大学出版社
(一本非常非常好的书!)

reprex package(v0.2.0)于2018-03-08创建。

08-19 23:37