Home > Back-end >  "Failed to set trace monitor for deviance There are no observed stochastic nodes" error wh
"Failed to set trace monitor for deviance There are no observed stochastic nodes" error wh

Time:04-14

I'm trying to get an N-mixture model to run in JAGS for a stats class that I'm currently in. However, I keep getting the error "Failed to set trace monitor for deviance There are no observed stochastic nodes" whenever I try to run the model. At the moment I'm just trying to get a very basic model with no covariates to run to make sure I have everything formatted correctly but am still unable to get the model to run. Any advice would be very much appreciated as I've been struggling with this for a while now and can't figure out where I've gone wrong.

Here's a reproducible example of the issue:

library(R2jags)

# Create example dataframe

years <- c(1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2)
sites <- c(1,1,1,2,2,2,3,3,3,1,1,1,2,2,2,3,3,3)
months <- c(1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3)

# Detection data
day1 <- floor(runif(18,0,7))
day2 <- floor(runif(18,0,7))
day3 <- floor(runif(18,0,7))
day4 <- floor(runif(18,0,7))
day5 <- floor(runif(18,0,7))

df <- as.data.frame(cbind(years, sites, months, day1, day2, day3, day4, day5))


# Put data into array
y <- array(NA,dim=c(2,3,3,5))                

for(m in 1:2){
  for(k in 1:3){
    sel.rows <- df$years == m & 
      df$months==k
    y[m,k,,] <- as.matrix(df)[sel.rows,4:8]
  }
}

# JAGS model
sink("model1.txt")
cat("
    model {
    
    # PRIORS

     lambda ~ dunif(0,10)
     p ~ dunif(0,1)
    
    # LIKELIHOOD
    # ECOLOGICAL MODEL FOR TRUE ABUNDANCE
      for (m in 1:2) {                            # Loop over years (1-2)
        
        for (k in 1:3) {                          # Loop over months (1-3)
        
          for (i in 1:3) {                        # Loop over sites (1-3)
    
            N[m,k,i] ~ dpois(lambda)              
    
            for (j in 1:5) {                     # Loop over days (1-5)
            
              y[m,k,i,j] ~ dbin(p, N[m,k,i])   
                                                      
            }#j
          }#i
        }#k
      }#m
  }#END", fill=TRUE)
sink()

win.data <- list(y <- y)

Nst <- apply(y,c(1,2,3),max) 1

inits <- function()list(N = Nst)

params <- c("lambda",
            "N") 

nc <- 3
nt <- 1
ni <- 5000
nb <- 500

out <- jags(win.data, inits, params, "model1.txt", 
             n.chains = nc, n.thin = nt, n.iter = ni, n.burnin = nb, 
             working.directory = getwd())

CodePudding user response:

Inside of list objects you cannot use the "<-" assignment operator to create a named list, which is what you need to provide to JAGS. Instead, you need to use =.

So if you change this line in your code:

# this line
win.data <- list(y <- y)

to:

win.data <- list(y = y)

the model compiles.

  • Related