subject
、wd
、およびgroup
変数とvalue
応答変数を含むデータ フレームがあります。各被験者は 1 つのグループに割り当てられ、平日に 7 回測定されます。subject
各被験者はグループ内で完全に入れ子になっているため、入れ子になったランダム効果モデルをとgroup
で使用し、さらに に 3 つ目のランダム効果を追加したいと考えています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
た場合、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