【问题标题】:Intercept of random effect - library(sommer)截取随机效应 - 库(sommer)
【发布时间】:2018-09-15 20:49:04
【问题描述】:

当我运行这个混合模型时,我得到了我需要的所有统计数据。

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

我该如何克服?

【问题讨论】:

    标签: r random mixed-models intercept rlang


    【解决方案1】:

    你的模特:

    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 项中的 3 个级别。 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 中使用随机截距,而是使用异构方差模型。

    干杯,

    【讨论】:

      【解决方案2】:

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

      我的意思是:

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-11
        • 1970-01-01
        • 2020-11-05
        • 2012-06-22
        • 2019-02-09
        • 1970-01-01
        • 1970-01-01
        • 2019-09-05
        相关资源
        最近更新 更多