과도하게 분산 된 포아송 결과를 위해 다단계 모델을 어떻게 적합합니까?


32

R을 사용하여 Poisson 분포 (과도 분산 포함)와 다중 수준 GLMM을 맞추고 싶습니다. 현재 lme4를 사용 하고 있지만 최근에 quasipoisson가족이 제거 되었음을 알았 습니다.

다른 곳에서는 관측 당 하나의 수준으로 임의의 절편을 추가하여 이항 분포에 대한 추가과 분산을 모델링 할 수 있음을 알았습니다. 포아송 분포에도 적용됩니까?

더 좋은 방법이 있습니까? 추천 할만한 다른 패키지가 있습니까?

답변:


22

R을 여러 가지 방법으로 사용하여 다중 분산 GLMM을 포아송 분포 (과도 분산)로 맞출 수 있습니다. 몇몇 R패키지는 : lme4, MCMCglmm, arm, 등 좋은 참조가 볼 겔만과 힐 (2007)

rjags패키지를 사용 하여이 작업을 수행하는 예제를 제공합니다 R. RJAGS(와 OpenBUGS또는 사이)의 인터페이스 WinBUGS입니다.

로그 θ I J = β 0 + β 1 T R E t m의 E N 마에 I + δ I J δ I J ~ N ( 0 , σ (2) ε ) 내가 = 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])

매개 변수의 후부를 가지고 놀 수 있으며 더 많은 매개 변수를 도입하여 모델링을보다 정확하게 만들 수 있습니다 ( 우리는 이것을 생각합니다 ). 기본적으로 아이디어를 얻습니다.

사용에 대한 자세한 내용 rjagsJAGS, 참조하시기 바랍니다 존 마일스 화이트의 페이지를


감사!! 나는 최근에 베이지안 분석을 조사하기 시작했지만 여전히 이해하기가 조금 어렵다. 나는 이것이 그것에 대해 조금 더 배울 수있는 기회라고 생각합니다.
George Michaelides

1
감마 분산이 어떻습니까?
Patrick McCann

2
@ 패트릭 당신은 확실히 그렇게 할 수 있습니다. 그러나 나는 평균의 로그를 취하기 때문에 정상적인 disp 효과를 선호합니다. 로그 정규 분포는 감마 분포와 유사한 분포를 모델링하는 또 다른 방법입니다. 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 등. (2001) .


모형이 두 개의 명목 변수, 하나의 연속 변수 (모두 고정 효과)와 하나의 그룹화 변수 (임의 효과)로 구성되어 있고 3 차 상호 작용이 있고 측정 된 피험자 수가 관찰 또는 기록 횟수와 동일한 경우 데이터 세트? 모델에서 어떻게 다루어야합니까?
Ladislav Naďo

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

5

지금까지 좋은 제안. 여기 하나 더 있습니다. 패키지 rhierNegbinRw기능을 사용하여 계층 적 음 이항 회귀 모형을 적합 할 수 있습니다 bayesm.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.