Ho un set di dati molto piccolo sull'abbondanza di api solitarie che non riesco ad analizzare. Sono i dati di conteggio e quasi tutti i conteggi si trovano in un trattamento con la maggior parte degli zero nell'altro trattamento. Ci sono anche un paio di valori molto alti (uno ciascuno in due dei sei siti), quindi la distribuzione dei conteggi ha una coda estremamente lunga. Sto lavorando in R. Ho usato due diversi pacchetti: lme4 e glmmADMB.
I modelli misti di Poisson non si adattavano: i modelli erano molto sovradispersi quando non venivano montati effetti casuali (modello glm) e scarsamente distribuiti quando venivano montati effetti casuali (modello glmer). Non capisco perché questo sia. Il design sperimentale richiede effetti casuali nidificati, quindi devo includerli. Una distribuzione degli errori lognormale di Poisson non ha migliorato l'adattamento. Ho provato a distribuire un errore binomiale negativo usando glmer.nb e non sono riuscito a adattarlo - limite di iterazione raggiunto, anche quando ho cambiato la tolleranza usando glmerControl (tolPwrss = 1e-3).
Poiché molti degli zero saranno dovuti al fatto che semplicemente non ho visto le api (spesso sono piccole cose nere), ho successivamente provato un modello a zero inflazione. Lo ZIP non si adattava bene. Finora lo ZINB è stato il miglior modello, ma non sono ancora troppo contento del modello. Sono in perdita su cosa provare dopo. Ho provato un modello di ostacolo ma non sono riuscito ad adattare una distribuzione troncata ai risultati diversi da zero: penso perché molti degli zero sono nel trattamento di controllo (il messaggio di errore era "Errore in model.frame.default (formula = s.bee ~ tmt + lu +: le lunghezze variabili differiscono (trovato per "trattamento") ").
Inoltre, penso che l'interazione che ho incluso stia facendo qualcosa di strano nei miei dati, dato che i coefficienti sono irrealisticamente piccoli - sebbene il modello contenente l'interazione fosse il migliore quando ho confrontato i modelli usando AICctab nel pacchetto bbmle.
Sto includendo alcuni script R che riprodurranno praticamente il mio set di dati. Le variabili sono le seguenti:
d = data giuliana, df = data giuliana (come fattore), d.sq = df al quadrato (il numero di api aumenta e poi cade durante l'estate), st = site, s.bee = conteggio delle api, tmt = trattamento, lu = tipo di uso del suolo, hab = percentuale di habitat semi-naturale nel paesaggio circostante, ba = area di confine intorno ai campi.
Eventuali suggerimenti su come ottenere un buon adattamento del modello (distribuzioni di errori alternativi, diversi tipi di modello, ecc.) Sarebbero stati molto grati!
Grazie.
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