मिश्रित प्रभावों के साथ गिनती डेटा के लिए अच्छा मॉडल खोजने में परेशानी - ZINB या कुछ और?


12

मेरे पास एकान्त मधुमक्खी बहुतायत पर एक बहुत छोटा डेटा सेट है जिसका मुझे विश्लेषण करने में परेशानी हो रही है। यह डेटा की गणना है, और लगभग सभी गणना एक उपचार में हैं जिनमें से अधिकांश शून्य अन्य उपचार में हैं। बहुत उच्च मूल्यों के एक जोड़े भी हैं (छह साइटों में से प्रत्येक पर एक), इसलिए काउंट्स के वितरण में एक बहुत लंबी पूंछ है। मैं आर में काम कर रहा हूं। मैंने दो अलग-अलग पैकेजों का उपयोग किया है: lme4 और glmmADMB।

पॉइसन मिश्रित मॉडल फिट नहीं थे: जब यादृच्छिक प्रभाव फिट नहीं किए गए थे (मॉडल मॉडल), और यादृच्छिक प्रभाव (ग्लैमर मॉडल) फिट किए गए थे, तो मॉडल बहुत अधिक थे। मुझे समझ नहीं आता कि ऐसा क्यों है। नेस्टेड रैंडम प्रभावों के लिए प्रायोगिक डिज़ाइन कॉल करता है इसलिए मुझे उन्हें शामिल करने की आवश्यकता है। एक पॉइसन लॉगनॉर्मल एरर डिस्ट्रीब्यूशन ने फिट में सुधार नहीं किया। मैंने glmer.nb का उपयोग करते हुए नकारात्मक द्विपद त्रुटि वितरण की कोशिश की और इसे फिट करने के लिए नहीं मिल सका - पुनरावृत्ति सीमा तक पहुंच गया, यहां तक ​​कि जब glmerControl (tolPwrss = 1e-3) का उपयोग करके सहिष्णुता बदल गई।

क्योंकि बहुत सारे शून्य इस तथ्य के कारण होंगे कि मैंने बस मधुमक्खियों को नहीं देखा था (वे अक्सर छोटी काली चीजें हैं), मैंने अगली बार एक शून्य-फुलाया मॉडल की कोशिश की। जिप अच्छी तरह से फिट नहीं था। ZINB अब तक का सबसे अच्छा मॉडल फिट था, लेकिन मैं अभी भी मॉडल फिट से बहुत खुश नहीं हूं। मैं एक नुकसान पर हूँ कि आगे क्या करने की कोशिश की जाए। मैंने एक बाधा मॉडल की कोशिश की, लेकिन गैर-शून्य परिणामों के लिए एक काट-छाँट वितरण को फिट नहीं कर सका- मुझे लगता है कि इतने सारे शून्य नियंत्रण उपचार में हैं (त्रुटि संदेश "model.frame.default (सूत्र में त्रुटि) = s.bee ~ tmt + lu +: परिवर्तनशील लंबाई भिन्न होती है ('उपचार' के लिए पाया जाता है) ")।

इसके अलावा, मुझे लगता है कि मैंने जो इंटरेक्शन शामिल किया है वह मेरे डेटा के लिए कुछ अजीब कर रहा है क्योंकि गुणांक unrealistically छोटे हैं - हालांकि इंटरेक्शन वाला मॉडल सबसे अच्छा था जब मैंने पैकेज bbmle में AICctab का उपयोग करके मॉडल की तुलना की थी।

मैं कुछ आर स्क्रिप्ट को शामिल कर रहा हूं जो मेरे डेटा सेट को बहुत पुन: पेश करेंगे। चर इस प्रकार हैं:

d = जूलियन तिथि, df = जूलियन तिथि (कारक के रूप में), d.sq = df वर्ग (मधुमक्खियों की संख्या बढ़ जाती है, फिर गर्मियों में गिरती है), st = site, s.bee = मधुमक्खियों की गिनती, tmt - उपचार, lu = भूमि उपयोग के प्रकार, आस-पास के परिदृश्य में बाब = अर्ध प्राकृतिक आवास का प्रतिशत, बा = सीमा क्षेत्र गोल खेत।

कैसे मैं एक अच्छा मॉडल फिट (वैकल्पिक त्रुटि वितरण, विभिन्न प्रकार के मॉडल आदि) प्राप्त कर सकता हूं के रूप में कोई भी सुझाव बहुत आभार प्राप्त होगा!

धन्यवाद।

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
मुझे पता है कि यह एक बहुत पुरानी पोस्ट है और शायद अब सुपर अप्रासंगिक है, लेकिन मैं इस बात पर जोर देना चाहता हूं कि एक बहुत ही समान समस्या के साथ मेरे अनुभव पर जो मैंने हाल ही में किया है, ग्लेशियरों के अवशेषों को सामान्य रूप से वितरित करने की आवश्यकता नहीं है। इस प्रकार, सामान्यता पर एक जांच के साथ-साथ सज्जित बनाम अवशिष्ट का एक चेक वास्तव में आवश्यक नहीं है। आम तौर पर, ग्लेमर के अवशिष्ट भूखंडों का निदान करना अविश्वसनीय रूप से कठिन होता है।
१०:१५ की

जवाबों:


2

इस पोस्ट में चार साल हैं, लेकिन मैं एक टिप्पणी में fsociety ने जो कहा, उस पर चलना चाहता था। जीएलएमएम में अवशेषों का निदान सीधा नहीं है, क्योंकि मानक अवशिष्ट भूखंड गैर-सामान्यता, विषमलैंगिकता आदि दिखा सकते हैं, भले ही मॉडल सही ढंग से निर्दिष्ट किया गया हो। एक आर पैकेज है, DHARMaविशेष रूप से इस प्रकार के मॉडल के निदान के लिए उपयुक्त है।

पैकेज एक सिमुलेशन दृष्टिकोण पर आधारित है जो सामान्यीकृत रैखिक मिश्रित मॉडल से स्केल किए गए अवशेषों को उत्पन्न करने के लिए है और विभिन्न आसानी से व्याख्या करने योग्य नैदानिक ​​भूखंडों को उत्पन्न करता है। यहाँ मूल पोस्ट और पहले फिट मॉडल (m1) के डेटा के साथ एक छोटा सा उदाहरण है:

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

DHARMA अवशिष्ट प्लॉट

बाईं ओर का प्लॉट अपेक्षित वितरण से विचलन का पता लगाने के लिए स्केल किए गए अवशिष्टों का एक QQ प्लॉट दिखाता है, और दाईं ओर का प्लॉट अवशिष्ट बनाम अनुमानित मूल्यों का प्रतिनिधित्व करता है, जबकि एकरूपता (लाल रेखाएं) क्षैतिज और 0.25 पर विचलन का पता लगाने के लिए मात्रात्मक प्रतिगमन करते हैं। , 0.50 और 0.75)।

इसके अतिरिक्त, पैकेज में फैलाव और शून्य मुद्रास्फीति के बीच अन्य के लिए परीक्षण के लिए विशिष्ट कार्य भी हैं:

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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.