目标:使用原始模型中的优化器在疏浚结果中获得 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.
如果您有任何想法,我会全力以赴!提前感谢所有帮助。