我将使用 Verbal Aggression 数据集来处理一个示例,很大程度上借鉴了这篇论文:https ://www.jstatsoft.org/article/view/v039i12
library(lme4)
VA.dat <- VerbAgg[, c("Gender", "r2", "id")]
VA.dat <- VA.dat[order(VA.dat$id), ] # sort data by person id
我准备数据以回归对性别的二元反应,并允许性别效应因人而异:
VA.dat$M <- (VA.dat$Gender == "M") + 0
VA.dat$F <- (VA.dat$Gender == "F") + 0
VA.dat$rbin <- (VA.dat$r2 == "Y") + 0
查看数据框以确认性别是人级别:
table(aggregate(M ~ id, VA.dat, mean)$M)
#
# 0 1
# 243 73
男性指标的平均值为 1 或 0,因此性别值在id
.
回归:
summary(fit <- lmer(rbin ~ F + (0 + M + F || id), VA.dat))
# Random effects:
# Groups Name Variance Std.Dev.
# id M 0.04164 0.2041
# id.1 F 0.04903 0.2214
# Residual 0.20202 0.4495
# Number of obs: 7584, groups: id, 316
#
# Fixed effects:
# Estimate Std. Error t value
# (Intercept) 0.51370 0.02619 19.617
# F -0.04885 0.03037 -1.609
我有一个代表男性和女性差异的截距。请注意在随机效应规范中使用||
before 。id
它阻止了性别斜率的相关性,并强制对随机斜率进行更简单的解释。使用 a |
,每个 id 在男性和女性斜坡上都有一个值,这可能会让人难以处理。
平均而言,男性的反应高于女性的反应。然而,女性受访者的随机截距方差略大于男性受访者的随机截距方差。
查看随机斜率:
head(ranef(fit)$id)
# M F
# 1 -0.1153768 0.000000000
# 2 -0.3926609 0.000000000
# 3 0.0000000 -0.041122748
# 4 0.0000000 0.101123911
# 5 0.0000000 -0.041122748
# 6 0.0000000 -0.005561083
前两个人是男性,对他们的性别影响比整体性别影响更负面,0.514−0.115;0.514−0.393. 接下来的四个人是女性,前两个的性别效应是:0.514−0.049−0.041;0.514−0.049+0.101.
很明显,不需要分组因素内的可变性来允许变量的影响因人而异。造成混淆的原因是较旧的模型公式将 1 级数据集和 2 级数据集中的数据分开。使用 lme4 和更新的模型公式,不需要这样的公式。道格拉斯·贝茨在这里介绍了详细信息:https ://cran.r-project.org/web/packages/lme4/vignettes/Theory.pdf