Karma efektli sayım verileri için iyi bir model bulmakta sorun - ZINB veya başka bir şey?


12

Yalnız arı bolluğu ile ilgili çok küçük bir veri setim var, analiz etmekte zorlanıyorum. Sayım verileri ve neredeyse tüm sayımlar bir tedavide, diğer tedavide sıfırların çoğu ile. Ayrıca çok yüksek birkaç değer vardır (altı alanın ikisinde birer tane), bu nedenle sayımların dağılımı son derece uzun bir kuyruğa sahiptir. R'de çalışıyorum. İki farklı paket kullandım: lme4 ve glmmADMB.

Poisson karışık modeller uymuyordu: rasgele efektler takılmadığında modeller çok fazla dağılmıştı (glm modeli) ve rasgele efektler takıldığında modeller azaldı (glmer modeli). Bunun neden olduğunu anlamıyorum. Deneysel tasarım iç içe rastgele efektler gerektirir, bu yüzden onları dahil etmeliyim. Poisson lognormal hata dağılımı uyumu iyileştirmedi. Glmer.nb kullanarak negatif binom hata dağıtımını denedim ve sığdıramadım - glmerControl (tolPwrss = 1e-3) kullanarak toleransı değiştirdiğinde bile yineleme sınırına ulaşıldı.

Sıfırların çoğu, sadece arıları görmediğimden (genellikle küçük siyah şeyler olduklarından) kaynaklanacağından, daha sonra sıfır şişirilmiş bir model denedim. ZIP iyi uymadı. ZINB şimdiye kadarki en iyi model uyumuydu, ancak hala model uyumundan çok memnun değilim. Daha sonra ne denemek için bir kayıp var. Bir engel modelini denedim ama sıfır olmayan sonuçlara kesilmiş bir dağıtım sığdıramadı. s.bee ~ tmt + lu +: değişken uzunluklar farklıdır ('tedavi' için bulunur) ”).

Buna ek olarak, dahil ettiğim etkileşimin, katsayılar gerçekçi olmayan küçük olduğu için verilerim için garip bir şey yaptığını düşünüyorum - ancak bbmle paketinde AICctab kullanan modelleri karşılaştırdığımda etkileşimi içeren model en iyisiydi.

Ben hemen hemen benim veri kümesini yeniden bazı R komut dosyası dahil. Değişkenler aşağıdaki gibidir:

d = Jülyen tarihi, df = Jülyen tarihi (faktör olarak), d.sq = df kare (arılar yaz aylarında artar, sonra artar), st = yer, s.bee = arı sayısı, tmt = tedavi, lu = arazi kullanımı tipi, hab = çevre peyzajdaki yarı doğal habitatın yüzdesi, ba = sınır alanı yuvarlak alanları.

İyi bir model uyumu (alternatif hata dağılımları, farklı model türleri vb.) Nasıl elde edebileceğime dair herhangi bir öneri çok minnetle alınır!

Teşekkür ederim.

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

2
Bunun çok eski bir yazı olduğunu ve muhtemelen çok önemsiz olduğunu biliyorum, ancak son zamanlarda yaşadığım çok benzer bir problemle yaşadığım deneyimde, glmers kalıntılarının normal olarak dağıtılmasına gerek olmadığını vurgulamak istiyorum. Bu nedenle, normallik kontrolünün yanı sıra takılmış ve artıkların kontrol edilmesi gerçekten gerekli değildir. Genel olarak, tortuların parsel parsellerini teşhis etmek inanılmaz derecede zordur.
fsociety

Yanıtlar:


2

Bu yazının dört yılı var, ancak fsociety'nin bir yorumda söylediklerini takip etmek istedim. GLMM'lerde artıkların teşhisi basit değildir, çünkü standart artık grafikler model doğru bir şekilde belirtilmiş olsa bile normallik, heteroseladastisite vb. Gösterebilir. DHARMaBu tip modellerin teşhisi için özellikle uygun bir R paketi vardır .

Paket, monte edilmiş genelleştirilmiş doğrusal karışık modellerden ölçekli artıklar üretmek için bir simülasyon yaklaşımına dayanır ve kolayca yorumlanabilen farklı teşhis grafikleri üretir. Orijinal yazıdan ve ilk takılan modelden (m1) verilerle küçük bir örnek:

library(DHARMa)
sim_residuals <- simulateResiduals(m1, 1000)
plotSimulatedResiduals(sim_residuals)

DHARMa kalıntıları grafiği

Soldaki grafik, beklenen dağılımdan sapmaları tespit etmek için ölçekli kalıntıların QQ grafiğini gösterir ve sağdaki grafik, homojenlikten sapmaları tespit etmek için kantil regresyon gerçekleştirirken kalıntıları tahmin edilen değerlere karşı gösterir (kırmızı çizgiler yatay ve 0,25'te olmalıdır) 0,50 ve 0,75).

Ek olarak, paketin diğerlerinin yanı sıra aşırı / düşük dağılım ve sıfır enflasyon testi için belirli işlevleri vardır:

testOverdispersionParametric(m1)

Chisq test for overdispersion in GLMMs

data:  poisson
dispersion = 0.18926, pearSS = 11.35600, rdf = 60.00000, p-value = 1
alternative hypothesis: true dispersion greater 1

testZeroInflation(sim_residuals)

DHARMa zero-inflation test via comparison to expected zeros with 
simulation under H0 = fitted model


data:  sim_residuals
ratioObsExp = 0.98894, p-value = 0.502
alternative hypothesis: more
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.