拦截随机效应-图书馆(夏季)

时间:2018-09-15 20:49:04

标签: r random mixed-models intercept rlang

运行此混合模型时,我会获得所需的所有统计信息。

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 :(得分: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)来指定第二项(y项)的每个级别是否存在例如不同的截距(x项),后者是随机回归模型。如果您指定:

ans2.lmer <- lmer(Yield~Env + (Env|Name),
              data=example)

您将获得三个方差成分,在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)

上面的前2个模型是等效的,因为两个模型都假定没有不同的截距,而后两个模型则解决相同的问题,但是使用的两种方法并不完全相同;随机回归与异质方差模型。

简而言之,sommer还没有实现随机回归,因此您不能像lme4一样在sommer中使用随机截距,而是使用异构方差模型。

干杯

答案 1 :(得分:0)

我知道这不是一个很好的解决方案,但是如何将拦截添加到数据中,以便您可以轻松地在模型中使用它?

我的意思是:

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