我通常在广义最小二乘框架内进行估算,Wooldridge&#39> Introductory (2013)调用,个人索引的纵向数据的随机效应和固定效应模型以及时间维度
我一直在使用来自plm软件包的plm()
中的可行性GLS 估算来估算随机效应模型 - 一些统计数据表明混合模型。 plm()
函数采用index
参数,其中我指示个人和时间索引。但是,我现在面对的是一些数据,其中每个人在每个时间点都有几个度量,即群体结构。
我发现可以使用lme4包中的lmer()
来设置这样的模型,但是我对行话的差异以及可能性框架感到有点困惑,我想知道是否正确指定了模型。我担心因为我不熟悉框架和这个术语而我可以忽略更多实质性的内容。
我可以使用plm()
复制我常用的lmer()
模型,但我不确定如何添加分组。我试着在下面说明我的问题。
我发现一些数据看起来有点像我的数据来说明我的情况。首先是一些需要的包,
install.packages(c("mlmRev", "plm", "lme4", "stargazer"), dependencies = TRUE)
然后是数据
data(egsingle, package = "mlmRev")
egsingle
是一个由1721名学童组成的不平衡小组,分为60个学校,分为五个时间点。这些数据最初与HLM软件包一起发布(Bryk,Raudenbush和Congdon,1996),但可以在mlmrev包中找到,有关详细信息,请参阅? mlmRev::egsingle
一些轻量级数据管理
dta <- egsingle
dta$Female <- with(dta, ifelse(female == 'Female', 1, 0))
以下是数据的摘录
dta[118:127,c('schoolid','childid','math','year','size','Female')]
#> schoolid childid math year size Female
#> 118 2040 289970511 -1.830 -1.5 502 1
#> 119 2040 289970511 -1.185 -0.5 502 1
#> 120 2040 289970511 0.852 0.5 502 1
#> 121 2040 289970511 0.573 1.5 502 1
#> 122 2040 289970511 1.736 2.5 502 1
#> 123 2040 292772811 -3.144 -1.5 502 0
#> 124 2040 292772811 -2.097 -0.5 502 0
#> 125 2040 292772811 -0.316 0.5 502 0
#> 126 2040 293550291 -2.097 -1.5 502 0
#> 127 2040 293550291 -1.314 -0.5 502 0
以下是我如何设置随机效果模型而schoolid
使用plm()
,
library(plm)
reg.re.plm <- plm(math~Female+size+year, dta, index = c("childid", "year"), model="random")
# summary(reg.re.plm)
我可以像这样重现这些结果lme4
require(lme4)
dta$year <- as.factor(dta$year)
reg.re.lmer <- lmer(math~Female+size+year+(1|childid), dta)
# summary(reg.re.lmer)
现在,从阅读chapter 2 in Bates (2010) “lme4: Mixed-effects modeling
with R”开始,我相信我这就是我将如何具体化模型,包括集群级别schoolid
,
reg.re.lmer.in.school <- lmer(math~Female+size+year+(1|childid)+(1|schoolid), dta)
# summary(reg.re.lmer.in.school)
然而,当我看到结果时,我并不太确信我实际上已经正确指定了它(见下文)。
在我的实际数据中,重复的测量是在个人内部,但我认为我可以使用这些数据作为例子。我很感激有关如何进行的任何建议。也许引用一个带有符号/术语的工作示例,与Wooldridge(2013)中使用的内容相差不远。而且,我如何向后工作并编写reg.re.lmer.in.school
模型的规范?
# library(stargazer)
stargazer::stargazer(reg.re.plm, reg.re.lmer, reg.re.lmer.in.school, type="text")
#> =====================================================================
#> Dependent variable:
#> -------------------------------------------------
#> math
#> panel linear
#> linear mixed-effects
#> (1) (2) (3)
#> ---------------------------------------------------------------------
#> Female -0.025 -0.025 0.008
#> (0.046) (0.047) (0.042)
#>
#> size -0.0004*** -0.0004*** -0.0003
#> (0.0001) (0.0001) (0.0002)
#>
#> year-1.5 0.878*** 0.876*** 0.866***
#> (0.059) (0.059) (0.059)
#>
#> year-0.5 1.882*** 1.880*** 1.870***
#> (0.059) (0.058) (0.058)
#>
#> year0.5 2.575*** 2.574*** 2.562***
#> (0.059) (0.059) (0.059)
#>
#> year1.5 3.149*** 3.147*** 3.133***
#> (0.060) (0.059) (0.059)
#>
#> year2.5 3.956*** 3.954*** 3.939***
#> (0.060) (0.060) (0.060)
#>
#> Constant -2.671*** -2.669*** -2.693***
#> (0.085) (0.086) (0.152)
#>
#> ---------------------------------------------------------------------
#> Observations 7,230 7,230 7,230
#> R2 0.735
#> Adjusted R2 0.735
#> Log Likelihood -8,417.815 -8,284.357
#> Akaike Inf. Crit. 16,855.630 16,590.720
#> Bayesian Inf. Crit. 16,924.490 16,666.460
#> F Statistic 2,865.391*** (df = 7; 7222)
#> =====================================================================
#> Note: *p<0.1; **p<0.05; ***p<0.01
答案 0 :(得分:0)
在研究Robert Long's great answer on stats.stackexchange后,我发现模型的正确规范是嵌套设计,即(1| schoolid /childid)
。但是,由于数据的编码方式(在childid
内无法schoolid
),交叉设计或规范,即我上面使用的(1|childid)+(1|schoolid)
,产生相同的结果。< / p>
以下是使用与上述相同的数据的说明,
data(egsingle, package = "mlmRev")
dta <- egsingle
dta$Female <- with(dta, ifelse(female == 'Female', 1, 0))
require(lme4)
dta$year <- as.factor(dta$year)
重新运行交叉设计模型reg.re.lmer.in.school
,以进行比较
reg.re.lmer.in.school <- lmer(math~Female+size+year+(1|childid)+(1|schoolid), dta)
这里是嵌套结构
reg.re.lmer.nested <- lmer(math~Female+size+year+(1| schoolid /childid), dta)
最后使用惊人的texreg包来比较两个模型,
# install.packages(c("texreg"), dependencies = TRUE)
# require(texreg)
texreg::screenreg(list(reg.re.lmer.in.school, reg.re.lmer.nested), digits = 3)
#> ===============================================================
#> Model 1 Model 2
#> ---------------------------------------------------------------
#> (Intercept) -2.693 *** -2.693 ***
#> (0.152) (0.152)
#> Female 0.008 0.008
#> (0.042) (0.042)
#> size -0.000 -0.000
#> (0.000) (0.000)
#> year-1.5 0.866 *** 0.866 ***
#> (0.059) (0.059)
#> year-0.5 1.870 *** 1.870 ***
#> (0.058) (0.058)
#> year0.5 2.562 *** 2.562 ***
#> (0.059) (0.059)
#> year1.5 3.133 *** 3.133 ***
#> (0.059) (0.059)
#> year2.5 3.939 *** 3.939 ***
#> (0.060) (0.060)
#> ---------------------------------------------------------------
#> AIC 16590.715 16590.715
#> BIC 16666.461 16666.461
#> Log Likelihood -8284.357 -8284.357
#> Num. obs. 7230 7230
#> Num. groups: childid 1721
#> Num. groups: schoolid 60 60
#> Var: childid (Intercept) 0.672
#> Var: schoolid (Intercept) 0.180 0.180
#> Var: Residual 0.334 0.334
#> Num. groups: childid:schoolid 1721
#> Var: childid:schoolid (Intercept) 0.672
#> ===============================================================
#> *** p < 0.001, ** p < 0.01, * p < 0.05