使用lmer函数的混合效应异方差模型

3
我正在调整一个混合效应模型,由于观察到的异方差性,需要包含一个效应来适应它。因此,使用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)的纳入,这些都经过了仔细分析。然而,我不会在这里展示整个过程,以免文章过长并且更加客观。
1个回答

3
这是可以被黑客攻击的。您需要添加一个观察级别的随机效应,仅适用于具有较大残差方差的组(您需要事先知道这一点!),通过(0+dummy(Var7,"1")|obs);这会将每个观察级别的随机效应值乘以1,如果观察值在Var7的组“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 包 感兴趣,该包执行类似基于模拟的诊断。

半正态图


嗨Ben,非常感谢你的反馈。然而,当我采用你提供的模型,并尝试使用“hnp”包中的“hnp”函数绘制半正态图进行诊断分析时,出现了以下错误信息:“错误:每个分组因子的级别数必须小于观测数(问题:obs)”。这个错误的原因是什么? - user55546
1
嗯,我不知道 hnp 函数在做什么。可能它正在尝试重新运行模型,但没有通过 lmerControl 规定的要求吗? - Ben Bolker
在这种情况下,可能是的,我是否可以利用您在lmer中提供的帮助来制作这个图形?我非常喜欢您的答案,但是我需要对这个模型进行半正态图的绘制,但是为了实现这一点,该函数只能在使用lmer调整混合效应模型时才起作用。因此,我希望能够使用您的答案。 - user55546

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接