我在 R 中使用 glmulti 进行模型平均。我的模型中有大约 10 个变量,使得详尽的筛选不切实际 - 因此我需要使用遗传算法 (GA)(调用:method = "g")。
我需要包含随机效果,所以我使用 glmulti 作为 lme4 的包装器。此处提供了执行此操作的方法http://www.inside-r.org/packages/cran/glmulti/docs/glmulti并且 glmulti 包中还包含一个 pdf,其中包含更详细的信息。问题是当告诉 glmulti 在此设置中使用 GA 时,它会无限期地运行,即使在找到最佳模型之后也是如此。
这是从 glmulti 包中包含的 pdf 中获取的示例:
library(lme4)
library(glmulti)
# create a function for glmulti to act as a wrapper for lmer:
lmer.glmulti <- function (formula, data, random = "", ...) {
lmer(paste(deparse(formula), random), data = data, REML=F, ...)
}
# set some random variables:
y = runif(30,0,10) # mock dependent variable
a = runif(30) # dummy covariate
b = runif(30) # another dummy covariate
c = runif(30) # an another one
x = as.factor(round(runif(30),1))# dummy grouping factor
# run exhaustive screening with lmer:
bab <- glmulti(y~a*b*c, level = 2, fitfunc = lmer.glmulti, random = "+(1|x)")
这工作正常。问题是当我告诉它使用遗传算法时:
babs <- glmulti(y~a*b*c, level = 2, fitfunc = lmer.glmulti, random = "+(1|x)", method = "g")
它只是无限期地运行,AIC 不会改变:
...
After 19550 generations:
Best model: y~1
Crit= 161.038899734164
Mean crit= 164.13629335762
Change in best IC: 0 / Change in mean IC: 0
After 19560 generations:
Best model: y~1
Crit= 161.038899734164
Mean crit= 164.13629335762
Change in best IC: 0 / Change in mean IC: 0
After 19570 generations:
Best model: y~1
Crit= 161.038899734164
Mean crit= 164.13629335762
... etc.
我尝试使用告诉 glmulti 何时停止的调用(deltaB = 0,deltaM = 0.01,conseq = 6),但似乎没有任何效果。我认为问题必须在于设置功能(?)。这可能是非常明显的事情,但是我是 R 新手,我无法解决。
对此的任何帮助将不胜感激。