glmer - прогнозирование с использованием биномиальных данных (данные подсчета cbind)

Я пытаюсь предсказать значения с течением времени (дни по оси x) для модели glmer, которая была запущена на моих биномиальных данных. Total Alive и Total Dead - это данные подсчета. Это моя модель и соответствующие шаги ниже.

full.model.dredge<-glmer(cbind(Total.Alive,Total.Dead)~(CO2.Treatment+Lime.Treatment+Day)^3+(Day|Container)+(1|index),
                         data=Survival.data,family="binomial")

Мы учли чрезмерную дисперсию, как вы можете видеть в коде (1: индекс).

Затем мы используем команду dredge для определения наиболее подходящих моделей с основными эффектами (CO2.Treatment, Lime.Treatment, Day) и их соответствующими взаимодействиями.

dredge.models<-dredge(full.model.dredge,trace=FALSE,rank="AICc")

Затем сделал для них переменную рабочего пространства

my.dredge.models<-get.models(dredge.models)

Затем мы провели усреднение модели, чтобы усреднить коэффициенты для наиболее подходящих моделей.

silly<-model.avg(my.dredge.models,subset=delta<10)

Но теперь я хочу создать график с Total Alive по оси Y и днями по оси X и соответствующей линией в зависимости от выходных данных модели. Я понимаю, что это сложно, потому что модель объединила Total.Alive и Total.Dead (см. cbind(Total.Alive,Total.Dead) в модели.

Когда я пытаюсь запустить команду прогнозирования, я получаю сообщение об ошибке

# 9: In UseMethod("predict") :
#   no applicable method for 'predict' applied to an object of class "mer"

person user3250522    schedule 29.01.2014    source источник


Ответы (1)


Большая часть вашей проблемы заключается в том, что вы используете версию lme4 до 1.0, в которой не реализован метод predict. (Обновить было бы проще всего, но я считаю, что если вы не можете по какой-то причине, есть рецепт на http://glmm.wikidot.com/faq для выполнения прогнозов вручную путем извлечения матрицы плана с фиксированным эффектом и коэффициентов ...) На самом деле нет проблем с прогнозами, которые предсказывают логарифмические шансы (по умолчанию ) или вероятность (если type="response"); если вы хотите предсказать числа, вам нужно будет соответственно умножить на N.

Вы не дали ни одного, но вот воспроизводимый (хотя и несколько тривиальный) пример с использованием встроенного набора данных cbpp (я получаю несколько предупреждающих сообщений - no non-missing arguments to max; returning -Inf, но я думаю, что это может быть связано с тем, что есть только один нетривиальный параметр фиксированного эффекта в модели?)

library(lme4)
packageVersion("lme4")  ## 1.1.4, but this should work as long as >1.0.0
library(MuMIn)

Для дальнейшего использования (с ggplot) удобно добавить переменную для пропорции:

cbpp <- transform(cbpp,prop=incidence/size)

Подходит для модели (вы также можете использовать glmer(prop~..., weights=size, ...))

gm0 <- glmer(cbind(incidence, size - incidence) ~ period+(1|herd),
           family = binomial, data = cbpp)
dredge.models<-dredge(gm0,trace=FALSE,rank="AICc")
my.dredge.models<-get.models(dredge.models)
silly<-model.avg(my.dredge.models,subset=delta<10)

Прогноз действительно работает:

predict(silly,type="response")

Создание сюжета:

library(ggplot2)
theme_set(theme_bw())  ## cosmetic
g0 <- ggplot(cbpp,aes(period,prop))+
    geom_point(alpha=0.5,aes(size=size))

Настройте фрейм предсказания:

predframe <- data.frame(period=levels(cbpp$period))

Прогноз на уровне популяции (ReForm=NA - это может быть REForm=NA в lme4 `1.0.5):

predframe$prop <- predict(gm0,newdata=predframe,type="response",ReForm=NA)

Добавьте его на график:

g0 + geom_point(data=predframe,colour="red")+
    geom_line(data=predframe,colour="red",aes(group=1))

введите описание изображения здесь

person Ben Bolker    schedule 29.01.2014