Làm cách nào tôi có thể thiết lập một poisson không bị thổi phồng trong JAGS?


12

Tôi đang cố gắng thiết lập một mô hình poisson bằng 0 trong R và JAGS. Tôi chưa quen với JAGS và tôi cần một số hướng dẫn về cách thực hiện điều đó.

Tôi đã thử với điều sau đây trong đó y [i] là biến quan sát

model {
for (i in 1:I) {

    y.null[i] <- 0
    y.pois[i] ~ dpois(mu[i])
    pro[i] <- ilogit(theta[i])
    x[i] ~ dbern(pro[i])

    y[i] <- step(2*x[i]-1)*y.pois[i] + (1-step(2*x[i]-1))*y.null[i]

    log(mu[i]) <- bla + bla +bla + ....
    theta[i] <- bla + bla + bla + ....
}

}

Tuy nhiên, điều này không hoạt động vì bạn không thể sử dụng <- trên một biến quan sát.

Bất kỳ ý tưởng làm thế nào để thay đổi / sửa lỗi này? Có cách nào khác để thiết lập mô hình poisson bằng 0 trong JAGS không?


Câu trả lời:


3

Đây là một giải pháp đơn giản sử dụng thực tế là poisson sẽ cung cấp cho bạn các số không khi tham số lambda bằng không. Tuy nhiên, lưu ý rằng JAGS có xu hướng bị phá vỡ nếu lambda chính xác bằng 0, do đó "+ 0,00001".

model {
  for (i in 1:I) {

    y[i] ~ dpois(mu1[i])

    mu1[i] <- mu[i]*x[i] + 0.00001

    x[i] ~ dbern(pro[i])
    logit(pro[i]) <- theta[i]

    mu[i] <- bla + bla +bla + ....
    theta[i] <- bla + bla + bla + ....
  }

4
C <- 10000 #Constant 1/0 trick

# Likelihood:
for ( i in 1:ny ) {

#Likelihood of the count model component
LikCountModel[i] <- pow(mu[i],y[i])/y_fact[i]*exp(-mu[i])

#Count model component
eta[i] <- bet0 + inprod( beta[] , B[i,] )
mu[i] <- exp(eta[i])

#ZI Component
zeta[i] <- gamm0 + inprod( gamma[] , G[i,] )
w[i] <- exp(zeta[i])/(1+exp(zeta[i]))

#1/0 Tricks: ones is a column containing only ones, with the same size of y
  p[i] <- L[i] / C
  ones[i] ~ dbern(p[i])

#Full likelihood expression
L[i] <- LikCountModel[i] * (1-w[i]) + equals(y[i],0)*w[i]
}

#then set your priors for all beta and gamma
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.