У меня есть очень маленький набор данных о численности одиночной пчелы, который мне трудно анализировать. Это данные подсчета, и почти все подсчеты находятся в одной обработке, а большинство нулей в другой обработке. Есть также пара очень высоких значений (по одному на двух из шести сайтов), поэтому распределение подсчетов имеет очень длинный хвост. Я работаю в R. Я использовал два разных пакета: lme4 и glmmADMB.
Смешанные по Пуассону модели не подходили: модели были сильно перегружены, когда случайные эффекты не были подогнаны (модель glm), и недостаточно рассредоточены, когда были подобраны случайные эффекты (модель блеска). Я не понимаю, почему это так. Дизайн эксперимента требует вложенных случайных эффектов, поэтому мне нужно включить их. Распределение логарифмических ошибок Пуассона не улучшило соответствие. Я попытался использовать отрицательное распределение биномиальных ошибок с помощью glmer.nb и не смог его подогнать - достигнут предел итерации, даже когда изменили допуск с помощью glmerControl (tolPwrss = 1e-3).
Поскольку большая часть нулей будет связана с тем, что я просто не видел пчел (они часто являются крошечными черными вещами), я затем попробовал модель с нулевым надуванием. ZIP не подходит. До сих пор ZINB был лучшей моделью, но я все еще не очень доволен этой моделью. Я в растерянности относительно того, что попробовать дальше. Я попробовал модель с препятствиями, но не смог подогнать усеченное распределение к ненулевым результатам - я думаю, потому что очень много нулей находятся в контрольной обработке (сообщение об ошибке было «Ошибка в model.frame.default (Formula = s.bee ~ tmt + lu +: переменные длины различаются (найдено для «обработки») »).
Кроме того, я думаю, что взаимодействие, которое я включил, делает что-то странное с моими данными, поскольку коэффициенты нереально малы - хотя модель, содержащая взаимодействие, была лучшей, когда я сравнивал модели с использованием AICctab в пакете bbmle.
Я включил некоторые R-сценарии, которые в значительной степени воспроизведут мой набор данных. Переменные следующие:
d = юлианская дата, df = юлианская дата (как фактор), d.sq = df в квадрате (число пчел увеличивается, а затем падает в течение лета), st = место, s.bee = количество пчел, tmt = лечение, lu = тип землепользования, hab = процентное содержание полуприродной среды обитания в окружающем ландшафте, ba = пограничная зона вокруг полей.
Любые предложения о том, как мне найти подходящую модель (альтернативные распределения ошибок, различные типы моделей и т. Д.), Будут очень благодарны!
Спасибо.
d <- c(80, 80, 121, 121, 180, 180, 86, 86, 116, 116, 144, 144, 74, 74, 143, 143, 163, 163, 71, 71,106, 106, 135, 135, 162, 162, 185, 185, 83, 83, 111, 111, 133, 133, 175, 175, 85, 85, 112, 112,137, 137, 168, 168, 186, 186, 64, 64, 95, 95, 127, 127, 156, 156, 175, 175, 91, 91, 119, 119,120, 120, 148, 148, 56, 56)
df <- as.factor(d)
d.sq <- d^2
st <- factor(rep(c("A", "B", "C", "D", "E", "F"), c(6,12,18,10,14,6)))
s.bee <- c(1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,4,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,3,0,0,0,0,5,0,0,2,0,50,0,10,0,4,0,47,3)
tmt <- factor(c("AF","C","C","AF","AF","C","AF","C","AF","C","C","AF","AF","C","AF","C","AF","C","AF","C",
"C","AF","AF","C","AF","C","C","AF","AF","C","AF","C","AF","C","AF","C","AF","C","AF","C",
"C","AF","AF","C","AF","C","AF","C","AF","C","C","AF","C","AF","C","AF","AF","C","AF","C",
"AF","C","AF","C","AF","C"))
lu <- factor(rep(c("p","a","p","a","p"), c(6,12,28,14,6)))
hab <- rep(c(13,14,13,14,3,4,3,4,3,4,3,4,3,4,15,35,37,35,37,35,37,35,37,0,2,1,2,1,2,1),
c(1,2,2,1,1,1,1,2,2,1,1,1,1,1,18,1,1,1,2,2,1,1,1,14,1,1,1,1,1,1))
ba <- c(480,6520,6520,480,480,6520,855,1603,855,1603,1603,855,855,12526,855,5100,855,5100,2670,7679,7679,2670,
2670,7679,2670,7679,7679,2670,2670,7679,2670,7679,2670,7679,2670,7679,1595,3000,1595,3000,3000,1595,1595,3000,1595
,3000,4860,5460,4860,5460,5460,4860,5460,4860,5460,4860,4840,5460,4840,5460,3000,1410,3000,1410,3000,1410)
data <- data.frame(st,df,d.sq,tmt,lu,hab,ba,s.bee)
with(data, table(s.bee, tmt) )
# below is a much abbreviated summary of attempted models:
library(MASS)
library(lme4)
library(glmmADMB)
library(coefplot2)
###
### POISSON MIXED MODEL
m1 <- glmer(s.bee ~ tmt + lu + hab + (1|st/df), family=poisson)
summary(m1)
resdev<-sum(resid(m1)^2)
mdf<-length(fixef(m1))
rdf<-nrow(data)-mdf
resdev/rdf
# 0.2439303
# underdispersed. ???
###
### NEGATIVE BINOMIAL MIXED MODEL
m2 <- glmer.nb(s.bee ~ tmt + lu + hab + d.sq + (1|st/df))
# iteration limit reached. Can't make a model work.
###
### ZERO-INFLATED POISSON MIXED MODEL
fit_zipoiss <- glmmadmb(s.bee~tmt + lu + hab + ba + d.sq +
tmt:lu +
(1|st/df), data=data,
zeroInflation=TRUE,
family="poisson")
# has to have lots of variables to fit
# anyway Poisson is not a good fit
###
### ZERO-INFLATED NEGATIVE BINOMIAL MIXED MODELS
## BEST FITTING MODEL SO FAR:
fit_zinb <- glmmadmb(s.bee~tmt + lu + hab +
tmt:lu +
(1|st/df),data=data,
zeroInflation=TRUE,
family="nbinom")
summary(fit_zinb)
# coefficients are tiny, something odd going on with the interaction term
# but this was best model in AICctab comparison
# model check plots
qqnorm(resid(fit_zinb))
qqline(resid(fit_zinb))
coefplot2(fit_zinb)
resid_zinb <- resid(fit_zinb , type = "pearson")
hist(resid_zinb)
fitted_zinb <- fitted (fit_zinb)
plot(resid_zinb ~ fitted_zinb)
## MODEL WITHOUT INTERACTION TERM - the coefficients are more realistic:
fit_zinb2 <- glmmadmb(s.bee~tmt + lu + hab +
(1|st/df),data=data,
zeroInflation=TRUE,
family="nbinom")
# model check plots
qqnorm(resid(fit_zinb2))
qqline(resid(fit_zinb2))
coefplot2(fit_zinb2)
resid_zinb2 <- resid(fit_zinb2 , type = "pearson")
hist(resid_zinb2)
fitted_zinb2 <- fitted (fit_zinb2)
plot(resid_zinb2 ~ fitted_zinb2)
# ZINB models are best so far
# but I'm not happy with the model check plots
Ответы:
Этот пост имеет четыре года, но я хотел бы следить за тем, что fsociety сказал в комментарии. Диагностика остатков в GLMM не является простой, поскольку стандартные графики остатков могут показывать ненормальность, гетероскедастичность и т. Д., Даже если модель задана правильно. Существует пакет R
DHARMa
, специально предназначенный для диагностики таких моделей.Пакет основан на имитационном подходе для генерации масштабированных остатков из согласованных обобщенных линейных смешанных моделей и генерирует различные легко интерпретируемые диагностические графики. Вот небольшой пример с данными из исходного поста и первой подобранной модели (m1):
График слева показывает график QQ масштабированных невязок для обнаружения отклонений от ожидаемого распределения, а график справа представляет остатки по сравнению с прогнозируемыми значениями при выполнении квантильной регрессии для выявления отклонений от однородности (красные линии должны быть горизонтальными и иметь 0,25 0,50 и 0,75).
Кроме того, в пакете также есть специальные функции для тестирования избыточной / недостаточной дисперсии и нулевой инфляции, среди прочего:
источник