Я использовал glmulti
, чтобы получить модельные усредненные оценки и значения относительной важности для моих переменных, представляющих интерес.При запуске glmulti
я указал модель кандидата, для которой все переменные и взаимодействия были включены на основе априорных знаний (см. Код ниже).
После запуска модели glmutli
я изучил результаты, используя функции summary()
и weightable()
.Кажется, что с результатами, которые я не понимаю, происходит много странных вещей.
Прежде всего, когда я запускаю свою модель-кандидата с функцией lme4
glmer()
, я получаю значение AIC 2086. В выводе glmulti эта модель-кандидат (с точно такой же формулой) имеет более низкий AICзначение (2107), в результате чего оно появляется в позиции 8 из 26 в списке всех потенциальных моделей (получаемых с помощью функции weigtable ()).
Похоже, что причиной этой проблемы является то, что взаимодействие logArea: Habitat отбрасывается из модели-кандидата, несмотря на указание level=2
.Функция summary(output_new@objects[[8]])
предоставляет другую формулу (без переменной взаимодействия logArea: Habitat) по сравнению с формулой, предоставленной через weightable()
.Это объясняет, почему значение кандидата AIC модели не совпадает с полученным с помощью lme4
, но я не понимаю, почему переменные взаимодействия logArea: Habitat отсутствуют в формуле.То же самое происходит и с другими возможными моделями.Кажется, что для всех моделей с 2 или более взаимодействиями одно взаимодействие отбрасывается.
У кого-нибудь есть объяснение тому, что происходит?Любая помощь будет принята с благодарностью!
Лучший, Роберт
Примечание. Я создал подмножество своих данных (https://drive.google.com/open?id=1rc0Gkp7TPdnhW6Bw87FskL5SSNp21qxl) и упростил модель-кандидата, удалив переменные, чтобыуменьшить время работы модели (проблема остается той же)
newdat <- Data_ommited2[, c("Presabs","logBodymass", "logIsolation", "Matrix", "logArea", "Protection","Migration", "Habitat", "Guild", "Study","Species", "SpeciesStudy")]
glmer.glmulti <- function (formula, data, random, ...) {
glmer(paste(deparse(formula), random), data = data, family=binomial(link="logit"),contrasts=list(Matrix=contr.sum, Habitat=contr.treatment, Protection=contr.treatment, Guild=contr.sum),glmerControl(optimizer="bobyqa", optCtrl = list(maxfun = 100000)))
}
output_new <- glmulti(y = Presabs ~ Matrix + logArea*Protection + logArea*Habitat,
data = sampledata,
random = '+(1|Study)+(1|Species)+(1|SpeciesStudy)',
family = binomial,
method = 'h',
level=2,
marginality=TRUE,
crit = 'aic',
fitfunc = glmer.glmulti,
confsetsize = 26)
print(output_new)
summary(output_new)
weightable(output_new)