为了回答我的研究问题,我对使用 R 库 lme4 估计的多级模型中随机斜率和随机截距之间的相关性感兴趣。
我拥有的数据是:Y(学生的考试成绩)、SES(每个学生的社会经济状况)和 schoolid(每个学校的 ID)。
我正在使用以下语法来估计学校的随机截距和斜率:
library(lme4)
model3 <- lmer(Y ~ SES + (1 + SES | schoolid))
我用于此语法的参考是此 pdf:
http://www.bristol.ac.uk/cmm/learning/module-samples/5-concepts-sample.pdf
在第 19 页,描述了类似的分析。据说通过同时定义随机截距和斜率,间接指定我们希望随机截距和斜率共同变化。因此,还估计了随机斜率和随机截距之间的相关性。基本上,这正是我回答我的研究假设所需要的。
但是,当我查看结果时:
summary(model3)
我得到以下输出:
Linear mixed model fit by REML ['lmerMod']
Formula: Y ~ SES + (1 + SES | schoolid)
REML criterion at convergence: 8256.4
Scaled residuals:
Min 1Q Median 3Q Max
-3.1054 -0.6633 -0.0028 0.6810 3.5606
Random effects:
Groups Name Variance Std.Dev. Corr
schoolid (Intercept) 0.6427924 0.80174
SES 0.0009143 0.03024 1.00
Residual 0.3290902 0.57366
Number of obs: 4376, groups: schoolid, 179
Fixed effects:
Estimate Std. Error t value
(Intercept) -0.036532 0.060582 -0.603
SES 0.062491 0.009984 6.259
Correlation of Fixed Effects:
(Intr)
SES 0.226
如输出中所述,随机斜率和随机截距之间的相关性等于 1.00。我觉得这很难相信。当我调用 R 时:
VarCorr(model3)$schoolid
我得到以下输出,它给出了相关性和协方差矩阵:
(Intercept) SES
(Intercept) 0.64279243 0.0242429680
SES 0.02424297 0.0009143255
attr(,"stddev")
(Intercept) SES
0.80174337 0.03023782
attr(,"correlation")
(Intercept) SES
(Intercept) 1 1
SES 1 1
似乎斜率和截距之间的相关性被 R 设置为 1.00。当我在互联网上搜索有关多级建模的参考资料时,我没有在其他任何人的输出中看到这一点。
有谁知道这种相关性的原因是什么?是否可以将相关性设置为 1.00,否则无法识别模型?还是因为随机斜率的方差太小(0.0009)以至于无法估计相关性?
我试图模拟数据,以便为小型可重现数据集提供代码。然而,我还不能通过模拟数据重现这个输出。就我有代码而言,我将发布我的帖子并添加代码。
编辑:针对 Roman Luštrik 的评论,以下情节:
ggplot(data[1:261,], aes(x = SES, y = Y)) + geom_point() + facet_wrap(~ schoolid) +
geom_smooth(method=lm)
由于总共有 179 所学校,情节变得相当混乱,因此我将前 10 所学校包括在内只是为了使其易于阅读: