ओवर-छितरी हुई पॉइसन परिणामों के लिए मैं एक बहुस्तरीय मॉडल कैसे फिट करूं?


32

मैं एक बहुस्तरीय GLMM को आर का उपयोग करके एक पॉइसन वितरण (अति-फैलाव के साथ) फिट करना चाहता हूं फिलहाल मैं lme4 का उपयोग कर रहा हूं लेकिन मैंने देखा कि हाल ही में quasipoissonपरिवार को हटा दिया गया था।

मैंने कहीं और देखा है कि आप एक स्तर प्रति अवलोकन के साथ एक यादृच्छिक अवरोधन जोड़कर द्विपद वितरण के लिए योज्य-फैलाव को मॉडल कर सकते हैं। क्या यह पॉसों के वितरण पर भी लागू होता है?

इसे करने का कोई बेहतर तरीका है? क्या अन्य पैकेज हैं जो आप सुझाएंगे?

जवाबों:


22

आप मल्टीलेवल GLMM को कई तरीकों से R का उपयोग करके पॉइसन वितरण (अधिक फैलाव के साथ) में फिट कर सकते हैं। कुछ Rसंकुल हैं: lme4, MCMCglmm, arm, आदि एक अच्छा संदर्भ को देखने के लिए है Gelman और हिल (2007)

rjagsमें पैकेज का उपयोग करके ऐसा करने का एक उदाहरण दूंगा R। यह Rऔर JAGS(जैसे OpenBUGSया WinBUGS) के बीच एक इंटरफेस है ।

के लिए लॉग इन θ मैं j = β 0 + β 1 टी आर एक टी एम एन टी मैं + δ मैं j δ मैं j ~ एन ( 0 , σ 2 ϵ ) i = 1 I ,

nijPoisson(θij)
logθij=β0+β1 Treatmenti+δij
δijN(0,σϵ2)
i=1I,j=1J
Treatmenti=0 or 1,,J1 if the ith observation belongs to treatment group 1, or, 2,,J

δijrate modelsJAGS

data{
        for (i in 1:I){         
            ncount[i,1] <- obsTrt1[i]
            ncount[i,2] <- obsTrt2[i]
                ## notice I have only 2 treatments and I individuals 
    }                               
}

model{
    for (i in 1:I){ 
        nCount[i, 1] ~ dpois( means[i, 1] )
        nCount[i, 2] ~ dpois( means[i, 2] )

        log( means[i, 1] ) <- mu + b * trt1[i] + disp[i, 1]
        log( means[i, 2] ) <- mu + b * trt2[i] + disp[i, 2]

        disp[i, 1] ~ dnorm( 0, tau)
        disp[i, 2] ~ dnorm( 0, tau)

    }

    mu  ~ dnorm( 0, 0.001)
    b   ~ dnorm(0, 0.001)
    tau ~ dgamma( 0.001, 0.001)
}

यहाँ है Rउपयोग लागू करने के लिए यह कोड (कहते हैं कि यह नाम है: overdisp.bug)

dataFixedEffect <- list("I"       = 10,
                        "obsTrt1" = obsTrt1 , #vector of n_i1
                        "obsTrt2" = obsTrt2,  #vector of n_i2
                        "trt1"    = trt1,     #vector of 0
                        "trt2"    = trt2,     #vector of 1
                       )

initFixedEffect <- list(mu = 0.0 , b = 0.0, tau = 0.01)

simFixedEffect <- jags.model(file     = "overdisp.bug",
                             data     = dataFixedEffect,
                             inits    = initFixedEffect,
                             n.chains = 4,
                             n.adapt  = 1000)

sampleFixedEffect <- coda.samples(model          = simFixedEffect,
                                  variable.names = c("mu", "b", "means"),
                                  n.iter         = 1000)

meansTrt1 <- as.matrix(sampleFixedEffect[ , 2:11])
meansTrt2 <- as.matrix(sampleFixedEffect[ , 12:21])

आप अपने मापदंडों के पोस्टएयर के साथ खेल सकते हैं और मॉडलिंग को और अधिक सटीक बनाने के लिए और अधिक मापदंडों का परिचय दे सकते हैं ( हम ऐसा सोचना पसंद करते हैं )। मूल रूप से, आप विचार प्राप्त करते हैं।

उपयोग करने के बारे में अधिक जानकारी के लिए rjagsऔर JAGS, कृपया जॉन मायल्स व्हाइट का पेज देखें


धन्यवाद!! मैंने केवल हाल ही में बायेसियन विश्लेषण में देखना शुरू किया और मुझे अभी भी इसे समझ पाना थोड़ा मुश्किल है। मुझे लगता है कि यह इसके बारे में थोड़ा और जानने का अवसर है।
जॉर्ज माइकलाइड्स

1
गामा फैलाव क्यों नहीं?
पैट्रिक मैककैन

2
@ पैट्रिक आप निश्चित रूप से ऐसा कर सकते हैं। लेकिन जब से मैं इस मतलब का लॉग ले रहा हूं कि मैं सामान्य विवाद प्रभाव पसंद करता हूं। एक लॉग सामान्य वितरण गामा वितरण के समान वितरण वितरण के लिए एक और तरीका है। HTH।
सनकूल्सू

20

अतिप्रवाह के लिए खाते में lme4 पैकेज को छोड़ने की आवश्यकता नहीं है; बस अवलोकन संख्या के लिए एक यादृच्छिक प्रभाव शामिल करें। उल्लिखित BUGS / JAGS समाधान संभवतः आपके लिए ओवरकिल हैं, और यदि वे नहीं हैं, तो आपके पास तुलना के लिए lme4 परिणाम फिट करने के लिए आसान होना चाहिए।

data$obs_effect<-1:nrow(data)
overdisp.fit<-lmer(y~1+obs_effect+x+(1|obs_effect)+(1+x|subject_id),data=data,family=poisson)

इस पर यहां चर्चा की गई है: http://article.gmane.org/gmane.comp.lang.r.lme4.devel/4727 अनौपचारिक रूप से और अकादमिक रूप से एलस्टन एट अल। (2001)


क्या होगा यदि किसी मॉडल में दो नाममात्र चर, एक निरंतर चर (सभी निश्चित प्रभाव के रूप में) और 3-क्रम इंटरैक्शन के साथ एक समूहन चर (यादृच्छिक प्रभाव) और, इसके अलावा, मापा विषयों की संख्या टिप्पणियों या रिकॉर्ड की संख्या के बराबर है। डाटासेट? मुझे इसे मॉडल में कैसे कवर करना चाहिए?
लादिस्लाव नाओ

7

मुझे लगता है कि glmmADMB पैकेज वास्तव में आप क्या देख रहे हैं।

install.packages ("glmmADMB", repos = "http://r-forge.r-project.org")

लेकिन एक बायसीयन बिंदु में आप MCMCglmm पैकेज या BUGS / JAGS सॉफ़्टवेयर का उपयोग कर सकते हैं , वे बहुत लचीले होते हैं और आप इस तरह के मॉडल को फिट कर सकते हैं। (और वाक्य रचना R एक के करीब है)

EDIT @randel को धन्यवाद

यदि आप glmmADMBऔर R2admbपैकेज को स्थापित करना चाहते हैं तो यह करना बेहतर है:

install.packages("glmmADMB", repos="http://glmmadmb.r-forge.r-project.org/repos"‌​)   
install.packages("R2admb")

मेरा मानना ​​है कि वर्तमान में पैकेज को install.packages("glmmADMB",repos="http://glmmadmb.r-forge.r-project.org/repos")प्लस के माध्यम से स्थापित किया जाना चाहिए install.packages('R2admb')
रैंडेल

5

अब तक के अच्छे सुझाव। यहाँ एक और है। आप पैकेज के rhierNegbinRwफ़ंक्शन का उपयोग करके एक पदानुक्रमित नकारात्मक द्विपद प्रतिगमन मॉडल फिट कर सकते हैं bayesm

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