"Failed to set trace monitor for deviance There are no observed stochastic nodes" 在 R 中使用 运行 JAGS 模型时出错

"Failed to set trace monitor for deviance There are no observed stochastic nodes" error when running JAGS model in R

我正在尝试在 JAGS 中将 N 混合模型 运行 用于我当前所在的统计数据 class。但是,我不断收到错误消息“无法设置偏差跟踪监视器 每当我尝试 运行 模型时,都没有观察到的随机节点”。目前我只是想得到一个非常基本的模型,没有 运行 的协变量确保我的所有格式都正确但是我仍然无法将模型设置为 运行。任何建议将不胜感激,因为我已经为此苦苦挣扎了一段时间,无法弄清楚我哪里出了问题。

这是一个可重现的问题示例:

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())

list 对象中,您不能使用“<-”赋值运算符来创建命名列表,这是您需要提供给 JAGS 的内容。相反,您需要使用 =.

因此,如果您在代码中更改这一行:

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

至:

win.data <- list(y = y)

模型编译。