ฉันจะพอดีกับโมเดลหลายระดับสำหรับผลลัพธ์ปัวส์ซองที่กระจายอยู่ทั่วได้อย่างไร


32

ฉันต้องการติดตั้ง GLMM หลายระดับพร้อมการกระจายแบบปัวซอง (ด้วยการกระจายตัวมากเกินไป) โดยใช้ R ในขณะนี้ฉันกำลังใช้lme4แต่ฉันสังเกตเห็นว่าเมื่อเร็ว ๆ นี้quasipoissonครอบครัวถูกลบออก

ฉันเคยเห็นที่อื่นว่าคุณสามารถสร้างแบบจำลองการกระจายตัวเกินสำหรับการแจกแจงทวินามโดยการเพิ่มการสกัดกั้นแบบสุ่มด้วยระดับหนึ่งต่อการสังเกต สิ่งนี้ใช้ได้กับการแจกแจงแบบปัวซองด้วยหรือไม่

มีวิธีที่ดีกว่าที่จะทำหรือไม่ มีแพ็คเกจอื่น ๆ ที่คุณอยากแนะนำอีกไหม?

คำตอบ:


22

คุณสามารถใส่ GLMM หลายระดับด้วยการแจกแจงแบบปัวซอง (ด้วยการกระจายตัวมากเกินไป) โดยใช้ R ได้หลายวิธี ไม่กี่Rแพคเกจ: lme4, MCMCglmm, armฯลฯ อ้างอิงที่ดีที่จะเห็นคือGelman และฮิลล์ (2007)

ผมจะยกตัวอย่างของการทำเช่นนี้โดยใช้แพคเกจในrjags Rมันเป็นอินเตอร์เฟซระหว่างRและJAGS(เช่นOpenBUGSหรือWinBUGS)

เข้าสู่ระบบθ ฉันJ = β 0 + β 1 T R อีตันเมตรที่ e n t ฉัน + δ ฉันเจ δ ฉันJ ~ N ( 0 , σ 2 ε ) ฉัน= 1 ... ฉัน,

nijPoisson(θij)
logθij=β0+β1 Treatmenti+δij
δijN(0,σϵ2)
T R อีตันเมตรที่ e n tฉัน = 0  หรือ  1 , ... , J - 1  ถ้า  ฉันทีเอช  สังเกตอยู่ในกลุ่มการรักษา  1 หรือ  2 , ... , J
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โปรดดูหน้าของ John Myles White


ขอบคุณ !! ฉันเพิ่งเริ่มดูการวิเคราะห์แบบเบส์และฉันยังพบว่ามันยากที่จะเข้าใจ ฉันเดาว่านี่เป็นโอกาสที่จะได้เรียนรู้เพิ่มเติมเกี่ยวกับมัน
George Michaelides

1
ทำไมไม่กระจายแกมม่า
Patrick McCann

2
@ แพทริคคุณสามารถทำได้อย่างแน่นอน แต่เนื่องจากฉันจดบันทึกค่าเฉลี่ยฉันจึงชอบเอฟเฟกต์การแสดงผลปกติ บันทึกการแจกแจงแบบปกติเป็นอีกวิธีหนึ่งในการสร้างแบบจำลองการแจกแจงแบบเดียวกับการแจกแจงแบบแกมม่า HTH
suncoolsu

20

ไม่จำเป็นต้องออกจากแพคเกจ lme4 เพื่อบัญชีสำหรับ overdispersion; เพียงรวมผลแบบสุ่มสำหรับหมายเลขการสังเกต โซลูชันของ 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อย่างไม่เป็นทางการและเชิงวิชาการโดยElston et al (2001)


จะเกิดอะไรขึ้นถ้าแบบจำลองประกอบด้วยตัวแปรสองค่าคือตัวแปรต่อเนื่องหนึ่งตัว (ทั้งหมดเป็นเอฟเฟกต์คงที่) และหนึ่งตัวแปรการจัดกลุ่ม (เอฟเฟกต์แบบสุ่ม) ที่มีการโต้ตอบลำดับที่ 3 และยิ่งกว่านั้น ชุด? ฉันจะอธิบายสิ่งนี้ในโมเดลได้อย่างไร
Ladislav Naďo

7

ฉันคิดว่าแพ็คเกจ glmmADMB เป็นสิ่งที่คุณต้องการอย่างแน่นอน

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

แต่ในมุมมองแบบเบย์คุณสามารถใช้แพ็คเกจMCMCglmmหรือBUGS / JAGSซอฟต์แวร์พวกเขามีความยืดหยุ่นมากและคุณสามารถใส่รุ่นนี้ได้ (และไวยากรณ์อยู่ใกล้กับ R หนึ่ง)

แก้ไขขอบคุณ @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')
Randel

5

คำแนะนำที่ดีจนถึงตอนนี้ นี่คืออีกหนึ่ง คุณสามารถใส่แบบจำลองการถดถอยแบบทวินามลบเชิงลำดับชั้นได้โดยใช้rhierNegbinRwฟังก์ชั่นของbayesmแพ็คเกจ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.