Получите model.avg для возврата топ-модели, когда размер подмножества = 1

Я биолог, изучаю ассоциации местообитаний многих видов птиц. Таким образом, у меня есть список глобальных моделей для каждого вида, и я использовал земснаряд для каждого из них. Теперь я хочу использовать model.avg, чтобы получить усредненные коэффициенты для лучших моделей (delta ‹2).

Однако для некоторых видов существует только одна высшая модель - следующая лучшая модель имеет дельту> 2. Меня это устраивает, но это означает, что model.avg выдает ошибку. Я хотел бы, чтобы он просто возвращал коэффициенты этой одной топ-модели (точно так же, как mean(5) возвращает 5).

Я мог бы использовать предложение if, чтобы найти такие виды и рассматривать их по отдельности, но тогда результат, скажем, get.models, сильно отличается от результата model.avg, и поэтому я должен продолжать обращаться с ними по-разному, прямо на пути, через который грязный фафф.

Есть ли простой способ получить model.avg (или вывод, похожий на model.avg) для работы с одной топовой моделью?


person Tim K    schedule 29.09.2017    source источник


Ответы (2)


Мое решение:

tmp <- get.models(x, subset = delta < 2)
  if (length(tmp)==1){
    tmp2 <- c(tmp, tmp)
    mod.avg.results <- model.avg(tmp2)
  }  else {mod.avg.results <- model.avg(x, subset = delta < 2)}

(это в llply, поэтому x - это model.selection объект каждого вида)

person Tim K    schedule 29.09.2017

Используйте coefTable или coef в качестве общего интерфейса для компонентной и усредненной моделей. Например:

coefTable(if(nrow(x) == 1) 
     get.models(x, 1)[[1]] 
     else model.avg(x))

где x - ваша "model.selection" таблица.

person Kamil Bartoń    schedule 02.10.2017