Eu tenho um conjunto de dados muito pequeno sobre a abundância de abelhas solitárias que estou tendo problemas para analisar. São dados de contagem, e quase todas as contagens estão em um tratamento com a maioria dos zeros no outro tratamento. Também existem alguns valores muito altos (um em cada um dos seis locais), portanto, a distribuição das contagens tem uma cauda extremamente longa. Estou trabalhando na R. Eu usei dois pacotes diferentes: lme4 e glmmADMB.
Os modelos mistos de Poisson não se encaixavam: os modelos eram superdispersos quando efeitos aleatórios não eram ajustados (modelo glm) e subdispersos quando efeitos aleatórios eram ajustados (modelo glmer). Eu não entendo por que isso é. O design experimental exige efeitos aleatórios aninhados, por isso preciso incluí-los. Uma distribuição de erro lognormal de Poisson não melhorou o ajuste. Tentei a distribuição negativa de erros binomiais usando glmer.nb e não consegui ajustá-lo - o limite de iteração foi atingido, mesmo quando a tolerância foi alterada usando glmerControl (tolPwrss = 1e-3).
Como muitos dos zeros devem-se ao fato de eu simplesmente não ver as abelhas (geralmente são pequenas coisas negras), tentei um modelo inflado a zero. O ZIP não se encaixou bem. O ZINB foi o melhor modelo até agora, mas ainda não estou muito feliz com o modelo. Estou sem saber o que tentar em seguida. Tentei um modelo de obstáculos, mas não consegui ajustar uma distribuição truncada para resultados diferentes de zero - acho que porque muitos dos zeros estão no tratamento de controle (a mensagem de erro era "Erro no model.frame.default (formula = s.bee ~ tmt + lu +: comprimentos variáveis diferem (encontrado para 'tratamento') ”).
Além disso, acho que a interação que incluí está fazendo algo estranho aos meus dados, pois os coeficientes são irrealisticamente pequenos - embora o modelo que contém a interação tenha sido melhor quando comparamos modelos usando o AICctab no pacote bbmle.
Estou incluindo algum script R que praticamente reproduzirá meu conjunto de dados. As variáveis são as seguintes:
d = data juliana, df = data juliana (como fator), d.sq = df ao quadrado (o número de abelhas aumenta e depois cai durante o verão), st = local, s.bee = contagem de abelhas, tmt = tratamento, lu = tipo de uso da terra, hab = porcentagem de habitat semi-natural na paisagem circundante, ba = área limite dos campos redondos.
Todas as sugestões sobre como eu posso obter um bom ajuste do modelo (distribuições de erro alternativas, diferentes tipos de modelo etc.) serão muito bem recebidas!
Obrigado.
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