"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)
模型编译。
我正在尝试在 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)
模型编译。