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

时间:2021-04-21 15:33:32

标签: r statistics lme4 mixed-models nlme

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

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)

数据:https://drive.google.com/file/d/1cr9-KOOR_RTDN4_nHizpvKBZ0yDAKGoV/view?usp=sharing

关于随机效应(Var6)的选择和纳入效应考虑变量水平的异质性(Var7),这些都经过仔细分析,但是,我不会把整个过程放在这里,以免成为一个广泛的职位,更客观。

1 个答案:

答案 0 :(得分:2)

这是可以破解的。您需要添加一个观察级随机效应,该效应仅应用于具有较大残差方差的组(您需要提前知道!),通过 (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 感兴趣,它执行类似的基于模拟的诊断。

half-normal plot