Tho*_*mas 9 r lme4 genetic-algorithm
我正在使用glmulti进行R中的模型平均.我的模型中有大约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)")
Run Code Online (Sandbox Code Playgroud)
这很好用.问题是当我告诉它使用遗传算法时:
babs <- glmulti(y~a*b*c, level = 2, fitfunc = lmer.glmulti, random = "+(1|x)", method = "g")
Run Code Online (Sandbox Code Playgroud)
它只是无限期地运行而且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.
Run Code Online (Sandbox Code Playgroud)
我尝试过使用告诉glmulti何时停止的调用(deltaB = 0,deltaM = 0.01,conseq = 6),但似乎没有任何效果.我认为问题必须在于设置函数(?).这可能是非常明显的事情,但我是R的新手,我无法解决这个问题.
任何有关这方面的帮助将非常感激.
我收到了包维护者的解决方案.问题是探索的模型数量由参数设定confsetsize.默认值为100.
根据?glmulti,这个论点是:
要查找的模型数量,即返回置信度集的大小.
解决方案是设置confsetsize为小于或等于模型总数.
从未停止的OP示例开始:
babs <- glmulti(y~a*b*c, level = 2, fitfunc = lmer.glmulti,
random = "+(1|x)", method = "g")
Run Code Online (Sandbox Code Playgroud)
glmulti 将确定使用的候选模型的总数 method = "d"
babs <- glmulti(y~a*b*c, level = 2, fitfunc = lmer.glmulti,
random = "+(1|x)", method = "d")
Initialization...
TASK: Diagnostic of candidate set.
Sample size: 30
0 factor(s).
3 covariate(s).
...
Your candidate set contains 64 models.
Run Code Online (Sandbox Code Playgroud)
因此,设置confsetsize为小于或等于64将导致期望的行为.
babs <- glmulti(y~a*b*c, level = 2, fitfunc = lmer.glmulti,
random = "+(1|x)", method = "g", confsetsize = 64)
Run Code Online (Sandbox Code Playgroud)
但是,对于小型模型,使用穷举搜索(method ="h")可能就足够了:
babs <- glmulti(y~a*b*c, level = 2, fitfunc = lmer.glmulti,
random = "+(1|x)", method = "h")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2805 次 |
| 最近记录: |