glmulti работает неопределенно долго при использовании генетического алгоритма с lme4

Я использую glmulti для усреднения модели в R. В моей модели ~ 10 переменных, что делает исчерпывающий скрининг непрактичным - поэтому мне нужно использовать генетический алгоритм (GA) (call: method = "g").

Мне нужно включить случайные эффекты, поэтому я использую glmulti в качестве оболочки для lme4. Методы для этого доступны здесьhttp://www.inside-r.org/packages/cran/glmulti/docs/glmulti и есть также PDF-файл, включенный в пакет glmulti, который рассматривается более подробно. Проблема в том, что когда glmulti указывает использовать GA в этом параметре, он работает бесконечно, даже после того, как найдена лучшая модель.

Это пример, взятый из pdf-файла, включенного в пакет glmulti:

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 и не могу понять это.

Любая помощь с этим будет высоко ценится.

Ответы на вопрос(2)

я разобрался с этим - проблема в том, что пример (выше), который я использовал для тестового запуска этого пакета, содержит только 3 переменные. Когда вы добавляете четвертый, он работает нормально:

d = runif(30)

И снова запустите, сказав, чтобы он использовал GA:

babs <- glmulti(y~a*b*c*d, level = 2, fitfunc = lmer.glmulti, random = "+(1|x)", method = "g")

Возвращает:

...

After 190 generations:
Best model: y~1
Crit= 159.374382952181
Mean crit= 163.380382861026
Improvements in best and average IC have bebingo en below the specified goals.
Algorithm is declared to have converged.
Completed.

Использование glmulti «из коробки» с GLM дает тот же результат, если вы пытаетесь использовать GA с менее чем тремя переменными. Однако на самом деле это не проблема, так как если у вас есть только три переменные, можно выполнить исчерпывающий поиск. Проблема была в примере.

 David LeBauer14 мая 2013 г., 17:40
У меня похожая проблема, и хотя «добавление еще одного термина» сработало в вашем игрушечном примере, это не общее решение. В моем случае удалениеlevel = 2 сделалglmmulti остановись, но это не значит, что это правильный ответ.
Решение Вопроса

что количество исследованных моделей устанавливается аргументомconfsetsize, Значением по умолчанию является 100.

Согласно с?glmultiэтот аргумент:

Количество моделей, которые нужно искать, то есть размер возвращаемого доверительного набора.

Решение состоит в том, чтобы установитьconfsetsize так что оно меньше или равно общему количеству моделей.

Начиная с примера из OP, который не остановился:

babs <- glmulti(y~a*b*c, level = 2, fitfunc = lmer.glmulti, 
                random = "+(1|x)", method = "g")

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.

Таким образом, установкаconfsetsize меньше или равно 64 приведет к желаемому поведению.

babs <- glmulti(y~a*b*c, level = 2, fitfunc = lmer.glmulti, 
                random = "+(1|x)", method = "g", confsetsize = 64)

Однако для небольших моделей может быть достаточно использовать исчерпывающий поиск (method = "h"):

babs <- glmulti(y~a*b*c, level = 2, fitfunc = lmer.glmulti, 
                random = "+(1|x)", method = "h")

Ваш ответ на вопрос