Hi,

I am new to Bayesian modelling and to JAGS. I’ve been working through the

examples in McCarthy’s ‘Bayesian Methods for Ecology’ which has so far been

excellent but uses WinBUGS. As an exercise, I’m attempting to replicate the

examples from this book in JAGS.

I realise there are some syntax differences between JAGS and WinBUGS but I

think my understanding of either is too limited to figure out what I’ve got

wrong here… I’m stuck on the example in Box 5.9, ‘Accounting for imperfect

detection’. This is binomial regression predicting the occurrence of a tree

frog in survey sites from two explanatory variables (size of streams, ‘LnCV’

and presence of palms, ‘palms’). The observed number of frogs using two survey

methods (Y1 and Y2 (given the number of surveys V1 and V2) are modelled as the

product of the predicted probability of the presence of the frog, and the

detection probability using each survey method.

The model runs fine using WinBUGS. However, when I attempt to replicate it in

JAGS (exact same model, inits, priors and data), calling JAGS from R using

R2jags, the following error message is returned:

“Error in jags.model(model.file, data = data, inits = inits, n.chains =

n.chains, :

Error in node Y1

Observed node inconsistent with unobserved parents at initialization”

I thought the problem might be the inits, but changing them to default (=NULL)

yields the same problem.

I suspect something might be going wrong with the Y1/Y2 distributions, but I’m

not sure I understand this enough to solve it…!

Here is the R code I use, which first sinks the model to a file, then reads

data, then attempts to run the model:

sink('example5-9.jag') cat(" model { # uninformative priors for the variables a ~ dnorm(0, 1.0E-6) b[1] ~ dnorm(0, 1.0E-6) b[2] ~ dnorm(0, 1.0E-6) b[3] ~ dnorm(0, 1.0E-6) # detection probabilities when the species is present: d[1] ~ dunif(0, 1) d[2] ~ dunif(0, 1) # average catchment volume: mLnCV <- mean(LnCV[]) for (i in 1:64) # for each of the 64 sites { # probability of presence: logit(p[i]) <- a + b[1]*(LnCV[i] - mLnCV) + b[2]*palms[i] + b[3]*(LnCV[i] - mLnCV)*palms[i] # actual presence: Lp[i] ~ dbern(p[i]) # detectability of nocturnal searches: dd1[i] <- d[1]*Lp[i] # detectability of automatic tape recorders: dd2[i] <- d[2]*Lp[i] # number of detections with searches: Y1[i] ~ dbin(dd1[i], V1[i]) # number of detections with tapes: Y2[i] ~ dbin(dd2[i], V2[i]) } } ", fill=T) sink() # Data: dat <- list( ‘LnCV’ = c(3.871, 3.714, 3.113, 3.117, 3.434,2.932,4.241,3.382, 4.197, 2.872, 3.583, 2.986, 2.131, 4.794, 3.749, 3.123, 3.220, 3.836, 4.542, 3.382, 3.513, 3.193, 4.336, 4.221, 2.541, 4.261, 3.764, 5.019, 2.517, 3.621, 3.178, 3.211, 3.028, 3.204, 2.065, 4.114, 4.662, 2.593, 2.170, 3.557, 3.162, 3.596, 4.229, 3.809, 3.641, 3.042, 3.122, 3.465, 3.376, 3.949, 2.591, 3.175, 2.633, 2.955, 3.172, 3.078, 3.842, 2.770, 3.454, 2.459, 2.941, 3.120, 3.679, 4.202), ‘palms’=c(1,0,1,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,1,1,1,1,0,1,0,1,1,1,1,0,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,1,1,1,1,1,0,0,0), ‘Y1’=c(2,0,0,0,0,0,2,3,1,0,0,0,0,0,0,0,0,2,0,0,0,0,1,7,1,9,7,0,0,1,3,2,1,0,0,2,2,0,1,4,0,0,1,1,1,1,2,2,2,2,0,0,0,0,0,0,9,0,3,0,0,0,0,0), ‘Y2’=c(2,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,4,0,6,5,0,0,0,0,1,1,0,0,1,2,0,0,3,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,8,0,2,0,0,0,0,0), ‘V1’=c(2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,9,9,9,9,9,9,9,5,5,2,2,2,2,2,2,2,9,2,2,2,9,2,2,2,2,2,2,9,9,9,9,9,9,9,3,9,9,9,2,2,2), ‘V2’=c(2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,9,8,9,9,8,7,8,3,3,2,2,2,2,2,2,2,9,2,2,2,9,2,2,2,2,2,2,9,9,9,9,9,9,9,1,9,8,7,2,2,2)) # Run the model: library(R2jags) inits <- list('a'=0,'b'=c(0,0,0),'d'=c(0.5,0.5)) jagsfit <- jags('example5-9.jag', data=dat, inits=inits, parameters.to.save=c('a','b[1:3]','d[1:2]'))

Returns error message as above.

Any suggestions?

Like I say, I am new to JAGS entirely, there may be something I’ve

missed/misunderstood about the model specification being very different.

I apologise if I’ve done something silly; I am only trying to learn JAGS (and

Bayesian modelling!) from scratch based on familiar WinBUGS examples…!

R session info/version below.

Many thanks in advance and best wishes,

Jeroen Minderman

sessionInfo()

R version 2.12.0 (2010-10-15)

Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit)

locale:

en_GB.UTF-8/en_GB.UTF-8/C/C/en_GB.UTF-8/en_GB.UTF-8

attached base packages:

tools stats graphics grDevices utils datasets methods base

other attached packages:

R2jags_0.02-15 rjags_2.2.0-4 R2WinBUGS_2.1-16 coda_0.13-5

lattice_0.19-13 SciViews_0.9-2 ellipse_0.3-5 MASS_7.3-8

svGUI_0.9-50 svMisc_0.9-60

loaded via a namespace (and not attached):

grid_2.12.0