首页 > 解决方案 > 当全局模型有优化器时从 Dredge() 获取 R^2

问题描述

目标:使用原始模型中的优化器在疏浚结果中获得 R^2 边际和条件

这分支了这个问题:当指定 glmer 优化器和提供的两个解决方案时,疏通不起作用。

解决方案 1:更改 r.squaredLR.R 包代码

解决方案 2:在疏通函数中添加一个函数来调用 r.squaredGLMM 而不是 r.squaredLR

我首先尝试了解决方案 2,它在模拟数据上完美运行,但是当我在我的模型上尝试时,我得到了错误:

r.squaredGLMM(x, null = nullmodel)["delta", ] 中的错误:下标越界

然后我尝试了解决方案 1,方法是按照描述更改 r.squaredLR.R 的源代码并将其保存为 R 脚本并使用 source() 调用编辑后的“null.fit”函数,以避免永久编辑 r.squaredLR.R (我在采购编辑后的函数之前调用了 MuMIn)。然而这行不通。

返回解决方案 2 ...

我试图模拟类似于我的数据并且能够得到相同的错误(在这个全局模型中忽略了 lmercontrol 参数,但我得到了所需的错误,所以我没有尝试更正数据以需要 lmercontrol)。

#Solution 2 attempt
set.seed(101)
dd <- data.frame(x1= rnorm(1920), x2=rnorm(1920), x3=rnorm(1920), x4=rnorm(1920),
                 treatment = factor(rep(1:2, each=3)),
                 replicate = factor(rep(1:3, each=1)),
                 stage = factor(rep(1:5, each=384)),
                 country = factor(rep(1:4, each=96)),
                 plot = factor(rep(1:10, each=24)),
                 chamber = factor(rep(1:6, each=1)),
                 n = 1920)

library(lme4)
dd$y <- simulate(~ x1 + x2 + x3 + (1|plot),
                 family = binomial,
                 weights = dd$n,
                 newdata = dd,
                 newparams = list(beta = c(1,1,1,1),
                                theta = 1))[[1]]

# my real response variable 'y' has a poisson distribution, but I had difficulty figuring 
# out how to simulate a poisson distribution so I left the bionomial. 

m0 <- lmer(y~ x1 + x2 + x3 + x4 + treatment*replicate*stage + (1|chamber) + (1|country/plot),
            data=dd,
            na.action = "na.fail",
           REML = F,
            lmercontrol = glmerControl(optimizer="bobyqa"))

nullmodel <- MuMIn:::.nullFitRE(m0)
dredge(m0, m.lim = c(0,5), rank = "AIC", extra =list(R2 = function(x)     {
  r.squaredGLMM(x, null = nullmodel)["delta", ]}))

错误“下标越界”的建议原因是“放入算法的数据不是函数期望的格式”。

确实,当我删除 ["delta", ] 并获得 R21 和 R22 列时,该函数起作用,但是在不考虑 delta 列的情况下,这些值可能不正确,我不确定哪个是边际和条件 R^ 2.

如果您有任何想法,我会全力以赴!提前感谢所有帮助。

标签: roptimizationlme4mumin

解决方案


推荐阅读