是否可以使用plm包中的plm()
估算重复测量具有嵌套结构的随机效应模型?
我知道可以使用lme4包中的lmer()
。但是,lmer()
依赖于可能性框架,我很想对plm()
这样做。
这是我的最小工作示例,受到this question的启发。首先是一些必需的包和数据,
# install.packages(c("plm", "lme4", "texreg", "mlmRev"), dependencies = TRUE)
data(egsingle, package = "mlmRev")
数据集egsingle
是一个由1721名学童组成的不平衡小组,分为60个学校,分为五个时间点。有关详细信息,请参阅?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
现在,严重依赖Robert Long's answer,这是我使用lme4包中的lmer()
估算重复测量具有嵌套结构的随机效应模型的方法,
dta$year <- as.factor(dta$year)
require(lme4)
Model.1 <- lmer(math ~ Female + size + year + (1 | schoolid /childid), dta)
# summary(Model.1)
我查看了 man 页面中的plm()
并且它有一个索引命令index
,但它只需要一个索引和时间 ,即index = c("childid", "year")
,忽略模型看起来像schoolid
,
dta$year <- as.numeric(dta$year)
library(plm)
Model.2 <- plm(math~Female+size+year, dta, index = c("childid", "year"), model="random")
# summary(Model.2)
如何使用
Model.1
中的plm()
来指定重复测量具有嵌套结构的随机效果模型,如# require(texreg) names(Model.2$coefficients) <- names(coefficients(Model.1)$schoolid) #ugly! texreg::screenreg(list(Model.1, Model.2), digits = 3) # pretty! #> ============================================================== #> Model 1 Model 2 #> -------------------------------------------------------------- #> (Intercept) -2.693 *** -2.671 *** #> (0.152) (0.085) #> Female 0.008 -0.025 #> (0.042) (0.046) #> size -0.000 -0.000 *** #> (0.000) (0.000) #> year-1.5 0.866 *** 0.878 *** #> (0.059) (0.059) #> year-0.5 1.870 *** 1.882 *** #> (0.058) (0.059) #> year0.5 2.562 *** 2.575 *** #> (0.059) (0.059) #> year1.5 3.133 *** 3.149 *** #> (0.059) (0.060) #> year2.5 3.939 *** 3.956 *** #> (0.060) (0.060) #> -------------------------------------------------------------- #> AIC 16590.715 #> BIC 16666.461 #> Log Likelihood -8284.357 #> Num. obs. 7230 7230 #> Num. groups: childid:schoolid 1721 #> Num. groups: schoolid 60 #> Var: childid:schoolid (Intercept) 0.672 #> Var: schoolid (Intercept) 0.180 #> Var: Residual 0.334 #> R^2 0.004 #> Adj. R^2 0.003 #> ============================================================== #> *** p < 0.001, ** p < 0.01, * p < 0.05
,甚至可能? 3}}包?
以下是两个模型的实际估算结果,
1. void function(int* param)
2. void function(int param[20])
3. void function(int param[])
答案 0 :(得分:0)
基于Helix123's comment我使用plm包中的plm()
为重复测量具有嵌套结构的随机效果模型编写了以下模型规范Wallace和Hussain(1969)方法,即random.method = "walhus"
,用于估计方差分量,
p_dta <- pdata.frame(dta, index = c("childid", "year", "schoolid"))
Model.3 <- plm(math ~ Female + size + year, data = p_dta, model = "random",
effect = "nested", random.method = "walhus")
在Model.3
中看到的结果与Model.1
中的估算值完全相同,正如我所料。只有截距略有不同(见下面的输出)。
我根据
?plm
中提供的Baltagi,Song和Jung(2001)的例子编写了上述内容。在Baltagi,Song和Jung(2001) - 示例中,方差分量首先使用Swamy和Arora(1972)估算,即random.method = "swar"
,其次使用Wallace和Hussain&#39 ; s(1969)。只有Nerlove(1971)变换不会使用Song和Jung(2001) - 数据收敛。而只有Wallace和Hussain(1969) - 方法可以使用egsingle
数据集收敛。对此的任何权威参考将不胜感激。我将继续努力。
names(Model.3$coefficients) <- names(coefficients(Model.1)$schoolid)
texreg::screenreg(list(Model.1, Model.3), digits = 3,
custom.model.names = c('Model 1', 'Model 3'))
#> ==============================================================
#> Model 1 Model 3
#> --------------------------------------------------------------
#> (Intercept) -2.693 *** -2.697 ***
#> (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
#> BIC 16666.461
#> Log Likelihood -8284.357
#> Num. obs. 7230 7230
#> Num. groups: childid:schoolid 1721
#> Num. groups: schoolid 60
#> Var: childid:schoolid (Intercept) 0.672
#> Var: schoolid (Intercept) 0.180
#> Var: Residual 0.334
#> R^2 0.000
#> Adj. R^2 -0.001
#> ==============================================================
#> *** p < 0.001, ** p < 0.01, * p < 0.05#>