【问题标题】:plm or lme4 for Random and Fixed Effects model on Panel Dataplm 或 lme4 用于面板数据上的随机和固定效应模型
【发布时间】:2018-08-08 12:53:09
【问题描述】:

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

我正在重做来自 的 Wooldridge (2013, p. 494-5) 的示例 14.4。感谢this sitethis blog post 我已经设法在 包中做到这一点,但我很好奇我是否可以在 包中做同样的事情?

这是我在 包中所做的。将不胜感激任何关于我如何使用 做同样事情的指示。首先,需要的包和数据的加载,

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

其次,我使用 包估计了示例 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")

第三,我使用 输出结果以模拟 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

中是否有同样简单的方法可以做到这一点?我应该坚持吗?为什么/为什么不?

【问题讨论】:

  • 这不是更适合Cross Validated吗?
  • @Jaap,感谢您的评论。我认为它主要是程序员的问题,而不是真正的统计/交叉验证问题。但是,如果您认为是否属于 CV,我很乐意将其移动。
  • 请注意,lme4 大约是最大可能的框架,所以它不会是“相同的”:plm 的小插图 ch。 7 与 pkg nlme 有一些比较,类似于 lme4,您应该可以从那里获取它。
  • @Helix123,感谢您的评论。我会调查的。

标签: lme4 r plm lme4 plm lme4 plm stargazer lme4 plm r lme4 panel-data plm


【解决方案1】:

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

# 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 年 3 月 8 日创建。

【讨论】:

  • 一个真正优秀的答案。非常感谢。您是否知道 Gelman 和 Hill (2007) 是否涵盖了估计方法的差异?再次感谢!
  • 格尔曼和山丘覆盖(受限)最大似然和 MCMC/贝叶斯方法。但我认为它们没有涵盖plm 包中讨论的方法
  • 很好的答案。我有一个简单的问题,合并 OLS、RE 或 FE 模型(任何一个)是否算作严格的“纵向”分析,或者您是否需要将 IV 与时间交互,如 educ*year?提前致谢。
  • “严格纵向”应该定义(不同的人含义可能不同)。在混合模型(部分池化)中,您通常会区分随机截距模型和随机斜率模型。在像lmer(lwage ~ year + (1+year|nr), data = wagepan) 这样的随机斜率模型中,您为每个nr 计算不同的lwage~year 斜率,然后计算一种(加权)平均全局(元参数)斜率。
猜你喜欢
  • 2020-03-18
  • 2015-04-06
  • 2015-09-26
  • 2013-04-04
  • 2014-10-21
  • 2021-06-29
  • 2014-07-24
  • 1970-01-01
  • 2022-01-02
相关资源
最近更新 更多