Làm thế nào để tôi phù hợp với một mô hình đa cấp cho các kết quả phân tán quá mức?


32

Tôi muốn điều chỉnh GLMM đa cấp với phân phối Poisson (với độ phân tán quá mức) bằng R. Hiện tại tôi đang sử dụng lme4 nhưng tôi nhận thấy gần đây quasipoissongia đình đã bị xóa.

Tôi đã thấy ở nơi khác rằng bạn có thể mô hình phân tán quá mức phụ gia cho các phân phối nhị thức bằng cách thêm một lần chặn ngẫu nhiên với một cấp độ cho mỗi lần quan sát. Điều này có áp dụng cho phân phối poisson không?

Có cách nào tốt hơn để làm điều đó? Có những gói khác mà bạn muốn giới thiệu?

Câu trả lời:


22

Bạn có thể điều chỉnh GLMM đa cấp với phân phối Poisson (với độ phân tán quá mức) bằng R theo nhiều cách. Vài Rgói là: lme4, MCMCglmm, arm, vv Một tốt tài liệu tham khảo để xem là Gelman và Hill (2007)

Tôi sẽ đưa ra một ví dụ về việc làm điều này bằng cách sử dụng rjagsgói trong R. Nó là một giao diện giữa RJAGS(như OpenBUGShoặc WinBUGS).

đăng θ i j = β 0 + β 1 T r e một t m e n t i + δ i j δ i j ~ N ( 0 , σ 2 ε ) i = 1 ... tôi ,

ntôij~PotôiSSon(θtôij)
đăng nhậpθtôij= =β0+β1 Tremộttmenttôi+δtôij
δtôij~N(0,σε2)
tôi= =1Giáo dụctôi,j= =1Giáo dụcJ
Tremộttmenttôi= =0 hoặc là 1,Giáo dục,J-1 nếu tôith quan sát thuộc nhóm điều trị 1, hoặc là, 2,Giáo dục,J

Phần trong mã trên mô hình quá mức. Nhưng không có ai ngăn bạn mô hình hóa mối tương quan giữa các cá nhân (bạn không tin rằng các cá nhân thực sự độc lập) và trong các cá nhân (các biện pháp lặp đi lặp lại). Ngoài ra, tham số tốc độ có thể được thu nhỏ bởi một số hằng số khác như trong . Vui lòng xem Gelman và Hill (2007) để tham khảo thêm. Đây là mã cho mô hình đơn giản:δtô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)
}

Đây là Rmã để thực hiện sử dụng nó (giả sử nó được đặt tên 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])

Bạn có thể chơi xung quanh với các thông số sau của bạn và bạn có thể giới thiệu nhiều tham số hơn để giúp bạn mô hình hóa chính xác hơn ( chúng tôi muốn nghĩ điều này ). Về cơ bản, bạn có được ý tưởng.

Để biết thêm chi tiết về cách sử dụng rjagsJAGS, vui lòng xem trang của John Myles White


Cảm ơn!! Gần đây tôi mới bắt đầu xem xét phân tích bayes và tôi vẫn thấy hơi khó nắm bắt. Tôi đoán đây là một cơ hội để tìm hiểu thêm một chút về nó.
George Michaelides

1
Tại sao không phân tán gamma?
Patrick McCann

2
@Patrick bạn chắc chắn có thể làm điều đó. Nhưng vì tôi đang ghi nhật ký nghĩa là tôi thích hiệu ứng phân tán bình thường. Một bản phân phối bình thường nhật ký là một cách khác để mô hình hóa các bản phân phối tương tự như phân phối gamma. HTH.
suncoolsu

20

Không cần phải rời khỏi gói lme4 để tính toán quá mức; chỉ bao gồm một hiệu ứng ngẫu nhiên cho số quan sát. Các giải pháp BUGS / JAGS được đề cập có lẽ là quá mức cần thiết cho bạn và nếu không, bạn nên có kết quả lme4 dễ dàng để so sánh.

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)

Điều này được thảo luận ở đây: http://article.gmane.org/gmane.comp.lang.r.lme4.devel/4727 không chính thức và học thuật bởi Elston et al. (2001) .


Điều gì xảy ra nếu một mô hình bao gồm hai biến danh nghĩa, một biến liên tục (tất cả là hiệu ứng cố định) và một biến nhóm (hiệu ứng ngẫu nhiên) với các tương tác bậc 3 và hơn nữa, số lượng đối tượng đo được bằng số lượng quan sát hoặc bản ghi trong tập dữ liệu? Làm thế nào tôi nên bao gồm điều này trong mô hình?
Ladislav Naďo

7

Tôi nghĩ rằng gói glmmADMB chính xác là những gì bạn đang tìm kiếm.

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

Nhưng theo quan điểm bay bổng, bạn có thể sử dụng gói MCMCglmm hoặc phần mềm BUGS / JAGS , chúng rất linh hoạt và bạn có thể phù hợp với loại mô hình này. (và cú pháp gần với R)

EDIT cảm ơn @randel

Nếu bạn muốn cài đặt glmmADMBR2admbcác gói thì tốt hơn nên làm:

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

Tôi tin rằng hiện tại gói nên được cài đặt thông qua install.packages("glmmADMB",repos="http://glmmadmb.r-forge.r-project.org/repos")cộng install.packages('R2admb').
Randel

5

Đề nghị tốt cho đến nay. Đây là một trong nhiều. Bạn có thể điều chỉnh mô hình hồi quy nhị thức âm phân cấp bằng cách sử dụng rhierNegbinRwchức năng của bayesmgói.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.