Перехват случайного эффекта - библиотека (лето)
Когда я запускаю эту смешанную модель, я получаю всю необходимую статистику.
library(sommer)
data(example)
#Model without intercept - OK
ans1 <- mmer2(Yield~Env,
random= ~ Name + Env:Name,
rcov= ~ units,
data=example, silent = TRUE)
summary(ans1)
ans1$u.hat #Random effects
Однако, если я попытаюсь получить перехват случайных эффектов, как в библиотеке R lme4
Я получаю сообщение об ошибке:
Error in dimnames(x) <- dn :
length of 'dimnames' [2] not equal to array extent
#Model with intercept
ans2 <- mmer2(Yield~Env,
random= ~ 1+Name + Env:Name,
rcov= ~ units,
data=example, silent = TRUE)
summary(ans2)
ans2$u.hat #Random effects
Как я могу преодолеть это?
2 ответа
Ваша модель:
ans1 <- mmer2(Yield~Env,
random= ~ Name + Env:Name,
rcov= ~ units,
data=example, silent = TRUE)
эквивалентно:
ans1.lmer <- lmer(Yield~Env + (1|Name) + (1|Env:Name),
data=example)
используя lme4. Обратите внимание, что lme4 использует нотацию (x|y), чтобы указать, например, существуют ли, например, различные перехваты (термин x) для каждого уровня второго члена (термин y), который является моделью случайной регрессии. Если вы укажете:
ans2.lmer <- lmer(Yield~Env + (Env|Name),
data=example)
Вы получаете три компонента дисперсии, по одному для каждого из 3 уровней в термине Env. Эквивалентом в sommer является не случайная регрессия, а гетерогенная модель дисперсии, использующая функциональность diag():
ans2 <- mmer2(Yield~Env,
random= ~ diag(Env):Name,
rcov= ~ units,
data=example, silent = TRUE)
## or in sommer >=3.7
ans2 <- mmer2(Yield~Env,
random= ~ vs(ds(Env),Name),
rcov= ~ units,
data=example, silent = TRUE)
Первые две модели, приведенные выше, эквивалентны, поскольку обе модели предполагают, что нет различных перехватов, тогда как последние две модели решают одну и ту же проблему, но с двумя разными подходами, которые не совсем одинаковы; случайная регрессия в сравнении с моделью гетерогенной дисперсии.
Короче говоря, в Sommer пока не реализована случайная регрессия, поэтому вы не можете использовать случайные перехваты в Sommer, как в Ime4, но вместо этого использовать гетерогенные модели дисперсии.
Ура,
Я знаю, что это не элегантное решение, но как насчет добавления перехвата к данным, чтобы вы могли легко использовать его в модели?
Я имею в виду:
example <- cbind(example, inter=1)
ans2 <- mmer2(Yield~Env,
random= ~ Name + Env:Name + inter, #here inter are 1's
rcov= ~ units,
data=example, silent = TRUE)
summary(ans2)
ans2$u.hat