请考虑以下数据:
dt.m <- structure(list(id = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12), occasion = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("g1", "g2"), class = "factor"), g = c(12, 8, 22, 10, 10, 6, 8, 4, 14, 6, 2, 22, 12, 7, 24, 14, 8, 4, 5, 6, 14, 5, 5, 16)), .Names = c("id", "occasion", "g"), row.names = c(NA, -24L), class = "data.frame")
我们拟合一个简单的方差成分模型。在R中,我们有:
require(lme4)
fit.vc <- lmer( g ~ (1|id), data=dt.m )
然后我们生成一个毛毛虫图:
rr1 <- ranef(fit.vc, postVar = TRUE)
dotplot(rr1, scales = list(x = list(relation = 'free')))[["id"]]
现在我们在Stata中拟合相同的模型。首先从R写入Stata格式:
require(foreign)
write.dta(dt.m, "dt.m.dta")
在Stata
use "dt.m.dta"
xtmixed g || id:, reml variance
输出与R输出一致(均未显示),并且我们尝试生成相同的履带图:
predict u_plus_e, residuals
predict u, reffects
gen e = u_plus_e – u
predict u_se, reses
egen tag = tag(id)
sort u
gen u_rank = sum(tag)
serrbar u u_se u_rank if tag==1, scale(1.96) yline(0)
清除状态Stata使用的标准误差与R不同。实际上,Stata使用2.13,而R使用1.32。
据我所知,R中的1.32来自
> sqrt(attr(ranef(fit.vc, postVar = TRUE)[[1]], "postVar")[1, , ])
[1] 1.319977 1.319977 1.319977 1.319977 1.319977 1.319977 1.319977 1.319977 1.319977 1.319977 1.319977 1.319977
虽然我不能说我真的很了解这是怎么回事。有人可以解释吗?
我不知道Stata 2.13的来源,除非我将估计方法更改为最大似然:
xtmixed g || id:, ml variance
....然后似乎使用1.32作为标准误差,并产生与R.相同的结果。
....但是随机效应方差的估计值不再与R一致(35.04 vs 31.97)。
因此,这似乎与ML vs REML有关:如果我在两个系统中都运行REML,则模型输出是一致的,但是毛毛虫图中使用的标准误差却不一致,而如果我在Rata和ML在Stata中运行REML ,毛毛虫图一致,但模型估计不同。
谁能解释这是怎么回事?
@StasK我之前确实看到过对Pinheiro和Bates的引用,但是由于某种原因,我现在找不到它!我看过有关随机效应预测的技术说明;它使用“最大似然的标准理论”和给定的结果,即re的渐近方差矩阵是Hessian的负逆。但是说实话,这并没有真正帮助我![可能是由于我缺乏理解]
—
Robert Long
在Stata vs R中,这是否可以进行不同程度的自由度校正?我只是大声想。
—
StasK 2013年
@StasK我也考虑过这一点,但我得出的结论是-1.32 vc 2.13-差异太大。当然,这是一个很小的样本量-集群数量少,每个集群的观测值也少,因此得知造成这种现象的原因正被样本数量放大,我不会感到惊讶。
—
罗伯特·隆
[XT] xtmixed
和/或的方法和公式[XT] xtmixed postestimation
?他们确实引用了Pinheiro和Bates(2000),因此至少某些数学部分必须相同。