我如何适合用于过度分散泊松结果的多级模型?


32

我想使用R来拟合具有Poisson分布(过度分散)的多级GLMM。此刻,我正在使用lme4,但是我注意到最近该quasipoisson家族被删除了。

我在其他地方看到过,您可以通过为每个观测值添加一个随机截距来为二项式分布建模加法过度弥散。这也适用于泊松分布吗?

有更好的方法吗?您还有其他推荐的软件包吗?

Answers:


22

您可以通过多种方式使用R将多级GLMM与泊松分布(具有过度分散)配合。几个R包是:lme4MCMCglmmarm,等一个很好的参考,看看是盖尔曼和希尔(2007年)

我将举一个使用rjagspackage中的例子来做这件事R。它是R和之间JAGS(如OpenBUGSWinBUGS)的接口。

登录θ Ĵ = β 0 + β 1 Ť ř Ë ë Ñ Ť + δ Ĵ δ ĴÑ 0 σ 2 ϵi = 1 I

ñ一世ĴPØ一世ssØñθ一世Ĵ
日志θ一世Ĵ=β0+β1个 Ť[RË一种ŤËñŤ一世+δ一世Ĵ
δ一世Ĵñ0σϵ2
一世=1个一世Ĵ=1个Ĵ
Ť[RË一种ŤËñŤ一世=0 要么 1个Ĵ-1个 如果 一世ŤH 观察属于治疗组 1个, 要么, 2Ĵ

上面代码中的部分为过度分散建模。但是,没有人阻止您对个人之间的关联(您不相信个人真正独立)和个人内部的关联进行建模(重复测量)。同样,速率参数可以按的其他常数进行缩放。请参阅Gelman和Hill(2007)以获取更多参考。这是简单模型的代码:δ一世Ĵrate 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的页面。


谢谢!!我只是最近才开始研究贝叶斯分析,但仍然很难理解。我想这是一个学习更多知识的机会。
乔治·米歇里德斯

1
为什么不扩散伽玛?
Patrick McCann

2
@Patrick您绝对可以做到这一点。但是,由于我采用均值的对数,因此我更喜欢正常显示效果。对数正态分布是对类似于伽玛分布的分布进行建模的另一种方法。HTH。
suncoolsu 2011年

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)

这在这里进行了讨论:Elston等人非正式地和学术地http://article.gmane.org/gmane.comp.lang.r.lme4.devel/4727 。(2001)


如果模型由两个名义变量组成,一个连续变量(均作为固定效应)和一个分组变量(具有三阶相互作用),并且被测对象的数量等于观测值或记录中的记录的数量,该怎么办?数据集?我应该如何在模型中涵盖这一点?
LadislavNaďo2014年

7

我认为glmmADMB软件包正是您所需要的。

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

但是从贝叶斯角度来看,您可以使用MCMCglmm软件包或BUGS / JAGS软件,它们非常灵活,可以适合这种模型。(并且语法接近R一)

编辑感谢@randel

如果要安装glmmADMBR2admb软件包,最好执行以下操作:

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")plus 安装该软件包install.packages('R2admb')
Randel 2014年

5

到目前为止,很好的建议。还有一个 您可以使用软件包的rhierNegbinRw功能拟合分层负二项式回归模型bayesm

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.