我的数据框包含subject
,wd
和group
变量以及value
响应变量。每个受试者被分配到一个组,并且在每个工作日进行7次测量。因为每个主题都完全嵌套在一个组中,所以我想使用带有subject
和group
的嵌套随机效果模型,以及为wd
添加第三个随机效果。目前,我正在使用它:
model = lmer(value ~ 1+ (1|wd) + (1|group) + (1|subject),
data = dframe, REML = 0)
我找到了基于page 40 of this guide的代码。我使用了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
, 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
答案 0 :(得分:0)
我猜你想要小组作为一个固定的效果,因为只有几个等级。此外,在主题内的工作日的嵌套感觉不需要,因为每个主题/工作日组合仅有一个观察。如果是这样,你应该需要的只是
lmer(value ~ group + (1|subject), data = dframe)
不清楚工作日是否真正嵌套在主题中;如果所有科目都是相同的工作日,那么其他一些东西可能更合适。对于stats.stackexchange.com而言,这是一个更好的问题。
如果你确实想要嵌套它们,那么这样的东西可能有效。
lmer(value ~ (1|group/subject/wd), data = dframe)