Странные результаты glmulti: почему переменные взаимодействия из модели-кандидата исключены / не включены?
Я использую glmulti
получить усредненные по модели оценки и значения относительной важности для моих переменных, представляющих интерес В бег glmulti
Я указал модель кандидата, для которой все переменные и взаимодействия были включены на основе априорных знаний (см. Код ниже).
После запуска glmutli
Модель я изучил результаты с помощью функций summary()
а также weightable()
, Кажется, что с результатами, которые я не понимаю, происходит много странных вещей.
Прежде всего, когда я запускаю свою модель кандидата с lme4
glmer()
Функция I получает значение 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)
1 ответ
Я нашел сообщение ( https://stats.stackexchange.com/questions/341356/glmulti-package-in-r-reporting-incorrect-aicc-values) кого-то, кто столкнулся с той же проблемой, и кажется, что проблема была вызвана по этой строке кода:
glmer.glmulti <- function (formula, data, random, ...) {
glmer(paste(deparse(formula), random), data = data, family=binomial(link="logit"))
}
Изменяя эту часть кода на следующую, проблема была решена:
glmer.glmulti<-function(formula,data,random,...) {
newf <- formula
newf[[3]] <- substitute(f+r,
list(f=newf[[3]],
r=reformulate(random)[[2]]))
glmer(newf,data=data,
family=binomial(link="logit"))
}