通过 lmer 函数的混合效应的异方差模型

Heterocesdastic model of mixed effects via lmer function

我正在调整一个混合效应模型,由于观察到的异方差性,有必要包括一个效应来适应它。因此,利用nlme包的lme函数,就很容易解决了,看下面的代码:

library(nlme)
library(lme4)
Model1 <- lme(log(Var1)~log(Var2)+log(Var3)+
                     (Var4)+(Var5),
                    random = ~1|Var6, Data1, method="REML",
                   weights = varIdent(form=~1|Var7))
#Var6: It is a factor with several levels.
#Var7: It is a Dummy variable.

但是,我需要使用 lme4 包重新调整上述模型,即使用 lmer 函数。众所周知,许多材料表明 lme4 中存在一些局限性,例如异方差建模。促使我重新调整此模型的事实是,我有兴趣使用一个特定的包,在混合模型的情况下,它仅在通过 lmer 函数调整它们时才接受。我该如何解决这种情况?下面是使用 lmer 函数调整的模型的一个很好的部分,但是,这个模型没有考虑对观察到的异方差性建模的影响。

Model2 <- lmer(log(Var1)~log(Var2)+log(Var3)+
                          (Var4)+(Var5)+(1|Var6),
                    Data1, REML=T)

关于随机效应(Var6)的选择和考虑变量水平异质性的效应(Var7)的加入,已经仔细分析过了,但是我不会把整个过程放在这里所以以免成为广泛的 post 而成为更多 objective .

这是可以破解的。您需要添加一个仅应用于具有 较大 残差方差的组的观察级随机效应(您需要提前知道这一点!),via (0+dummy(Var7,"1")|obs);如果观察在 Var7 的“1”组中,则每个观察级随机效应值乘以 1,否则为 0。您还需要使用 lmerControl() 来覆盖 lmer 所做的一些检查,以确保您没有添加多余的随机效果。

Data1$obs <- factor(seq(nrow(Data1)))
Model2 <- lmer(log(Var1)~log(Var2)+log(Var3)+
                   (Var4)+(Var5) + (1|Var6) +
                   (0+dummy(Var7,"1")|obs),
               Data1, REML=TRUE,
               control=lmerControl(check.nobs.vs.nlev="ignore",
                                   check.nobs.vs.nRE="ignore"))

all.equal(REMLcrit(Model2), c(-2*logLik(Model1))) ## TRUE
all.equal(fixef(Model1), fixef(Model2), tolerance=1e-7)

如果您想将此模型与 hnp 一起使用,您需要解决 hnp 未正确传递 lmerControl 选项这一事实。

library(hnp)
d <- function(obj) resid(obj, type="pearson")
s <- function(n, obj) simulate(obj)[[1]]
f <- function(y.) refit(Model2, y.)

hnp(Model2, newclass=TRUE, diagfun=d, simfun=s, fitfun=f)

您可能还对 DHARMa package 感兴趣,它执行类似的基于模拟的诊断。