目标:在原始模型中使用优化程序获得R ^ 2边际和条件挖泥结果
这从以下问题出发:dredge doesnt work when specifying glmer optimizer和提供的两个解决方案。
解决方案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。
如果您有任何想法,我会全力以赴!预先感谢您的所有帮助。