首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >随机效果库的截距(Sommer)

随机效果库的截距(Sommer)
EN

Stack Overflow用户
提问于 2018-09-16 04:49:04
回答 2查看 145关注 0票数 0

当我运行这个混合模型时,我获得了所需的所有统计信息。

代码语言:javascript
代码运行次数:0
运行
复制
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中,我会得到如下错误:

代码语言:javascript
代码运行次数:0
运行
复制
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

我该如何克服这个问题呢?

EN

回答 2

Stack Overflow用户

发布于 2018-09-17 03:19:54

您的模型:

代码语言:javascript
代码运行次数:0
运行
复制
ans1 <- mmer2(Yield~Env,
              random= ~ Name + Env:Name,
              rcov= ~ units,
              data=example, silent = TRUE)

等同于:

代码语言:javascript
代码运行次数:0
运行
复制
ans1.lmer <- lmer(Yield~Env + (1|Name) + (1|Env:Name),
              data=example)

使用lme4。请注意,lme4使用符号(x|y)来指定,例如,对于第二项(y项)的每个级别,是否存在不同的截距(x项),这是一个随机回归模型。如果指定:

代码语言:javascript
代码运行次数:0
运行
复制
ans2.lmer <- lmer(Yield~Env + (Env|Name),
              data=example)

您将获得三个方差分量,每个分量对应于Env术语中的三个级别。sommer中的等价物不是随机回归,而是使用diag()功能的异类方差模型:

代码语言:javascript
代码运行次数:0
运行
复制
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还没有实现随机回归,所以您不能像在lme4中那样在sommer中使用随机截获,而是使用异构方差模型。

干杯,

票数 2
EN

Stack Overflow用户

发布于 2018-09-16 04:58:57

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

我的意思是:

代码语言:javascript
代码运行次数: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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52348752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档