Странные результаты glmulti: почему переменные взаимодействия из модели-кандидата исключены / не включены?

Я использую glmulti получить усредненные по модели оценки и значения относительной важности для моих переменных, представляющих интерес В бег glmulti Я указал модель кандидата, для которой все переменные и взаимодействия были включены на основе априорных знаний (см. Код ниже).

После запуска glmutli Модель я изучил результаты с помощью функций summary() а также weightable(), Кажется, что с результатами, которые я не понимаю, происходит много странных вещей.

Прежде всего, когда я запускаю свою модель кандидата с lme4glmer() Функция 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"))
}
Другие вопросы по тегам