Як мені підходити багаторівнева модель для надмірно дисперсних результатів пуассона?


32

Я хочу встановити багаторівневий GLMM з розподілом Пуассона (з надмірною дисперсією) за допомогою R. На даний момент я використовую lme4, але я помітив, що нещодавно quasipoissonсім’я була видалена.

Я десь бачив, що можна моделювати адитивну наддисперсію для біноміальних розподілів, додаючи випадковий перехоплення з одним рівнем за спостереження. Чи стосується це і розподілу пуассона?

Чи є кращий спосіб це зробити? Чи є інші пакунки, які ви б рекомендували?

Відповіді:


22

Ви можете встановити багаторівневі GLMM з розподілом Пуассона (з надмірною дисперсією), використовуючи R кількома способами. Мало хто Rпакети: lme4, MCMCglmm, armі т.д. Добре посилання , щоб побачити це Гельман і Hill (2007)

Я наведу приклад цього робити за допомогою rjagsпакета в R. Це інтерфейс між Rта JAGS(як OpenBUGSабо WinBUGS).

log θ i j = β 0 + β 1 T r e a t m e n t i + δ i j δ i jN ( 0 , σ 2 ϵ ) i = 1 I ,

нijПоiссон(θij)
журналθij=β0+β1 Тrеатментi+δij
δijN(0,σϵ2)
i=1Я,j=1J
Тrеатментi=0 або 1,,J-1 якщо iтгод спостереження належить до групи лікування 1, або, 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
@Patrick Ви точно можете це зробити. Але оскільки я беру журнал середнього значення, я віддаю перевагу нормальному ефекту відключення. Нормальний розподіл журналу - це ще один спосіб моделювання розподілів, подібних до розподілу гамми. HTH.
suncoolsu

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 неофіційно та академічно Elston et al. (2001) .


Що робити, якщо модель складається з двох номінальних змінних, однієї безперервної змінної (всі як фіксовані ефекти) та однієї змінної групування (випадковий ефект) з взаємодіями третього порядку і, крім того, кількість вимірюваних суб'єктів дорівнює кількості спостережень або записів у набір даних? Як слід це висвітлити в моделі?
Ladislav Naďo

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 та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.