[英]How do I get properly accounted for nested random effects with lme4?
我有一个数据框架,其中包含subject
, wd
和group
变量,以及一个value
响应变量。 每个主题被分配到一组,并在每个工作日进行7次测量。 因为每个主题都完全嵌套在一个组中,所以我想对subject
和group
使用嵌套的随机效果模型,并为wd
添加第三个随机效果。 目前,我正在这样做:
model = lmer(value ~ 1+ (1|wd) + (1|group) + (1|subject),
data = dframe, REML = 0)
我在本指南的第40页上找到了基于此的代码。 我已经使用了REML = TRUE
和REML = 0
。 但是,当我使用VarCorr(model)$variances
,我得到
Groups Name Std.Dev.
subject (Intercept) 94.9534363
wd (Intercept) 42.5931401
group (Intercept) 0.0015608
Residual 0.9589836
该组方差与我用来生成数据的代码冲突,该代码的组均值为36.9、28.78和-15.269。 当我查看“残差”以预测随机效果(使用ranef
)与真正的随机效果时,我得到的残差与其所在的组具有非常高的相关性(如果我对residuals ~ group
ranef
建模,则R平方值为超过0.9)。
如何正确拟合R中的嵌套随机效应模型? 我更喜欢使用lme4,但是任何软件包都足够。
这是我用来生成数据的代码:
library(dplyr)
generate_data <- function(n = 10, g = 3, seed = 1, mean.overall = 300,
sigma.g = 50, sigma.wd = 50,
sigma.subject = 100, sigma. = 30) {
set.seed(seed)
means.wd = rnorm(7) * sigma.wd
means.g = rnorm(g) * sigma.g
means.subject = rnorm(n*g) * sigma.subject
dframe = data.frame(subject = rep(1:(g*n), each = 7),
wd = rep(1:7, g*n),
group = rep(1:g, each = (7*n)))
dframe = mutate(dframe,
value = mean.overall + means.wd[wd] +
means.subject[subject] + means.g[group] + rnorm(7*g*n),
subject = factor(subject, levels = 1:(n*g)),
wd = factor(wd),
group = factor(group, levels = 1:g))
dframe$value = round(pmax(5,dframe$value))
truefx = list(wd = means.wd, group = means.g,
subject = means.subject)
list(data = dframe, effects = truefx)
}
dframe = generate_data()$data
我猜您希望分组作为固定效果,因为只有几个级别。 同样,不需要在工作日内嵌套工作日,因为每个主题/工作日组合只有一个观测值。 如果是这样,您所需要做的就是
lmer(value ~ group + (1|subject), data = dframe)
尚不清楚工作日是否真正地嵌套在主题中。 如果所有科目都在相同的工作日内进行,则其他方法可能更合适。 对于stats.stackexchange.com,这是一个更好的问题。
如果您确实确实想嵌套这些,那么可能会发生类似的事情。
lmer(value ~ (1|group/subject/wd), data = dframe)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.