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

Я использовал 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)

1 Ответ

0 голосов
/ 19 мая 2019

Я нашел сообщение (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"))
}
...