Перехват случайного эффекта - библиотека (лето) - PullRequest
0 голосов
/ 15 сентября 2018

Когда я запускаю эту смешанную модель, я получаю всю необходимую статистику.

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 ]

0 голосов
/ 16 сентября 2018

Ваша модель:

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 <- mmer(Yield~Env,
              random= ~ vs(ds(Env),Name),
              rcov= ~ units,
              data=example, silent = TRUE)

Первые две модели выше эквивалентны, поскольку обе модели предполагают, что нет никаких различных перехватов, тогда как последние двемодели решают одну и ту же проблему, но с двумя разными подходами, которые не совсем одинаковы;модель случайной регрессии и гетерогенной дисперсии.

Короче говоря, в sommer пока не реализована случайная регрессия, поэтому вы не можете использовать случайные перехваты в sommer, как в lme4, а вместо этого использовать гетерогенные модели дисперсии.

Приветствия,

0 голосов
/ 15 сентября 2018

Я знаю, что это не элегантное решение, но как насчет добавления перехвата к данным, чтобы вы могли легко использовать его в модели?

Что я имею в виду:

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
...