runjags 模型中未使用的变量警告

unused variable(s) warning in runjags model

我正在 运行通过 R 包 runjags 构建 JAGS 模型。我刚刚从 JAGS 3.4 更新到 JAGS 4.0.0,并注意到一些似乎与更新相关的意外行为。

首先,当我 运行 模型时,我现在收到一条警告消息 WARNING: Unused variable(s) in data table:,后跟模型中引用并作为数据提供的数据对象列表。好像不影响结果(但是很费解)。然而,我在玩这个游戏时注意到几次,对于某些变量,后验实际上与先验相同(表明没有发生更新)。我现在似乎无法重新创建更新失败,但下面是一个可重现的代码示例,说明了奇怪的警告消息。 run.jags 帮助页面上的代码示例也产生相同的警告。

其次,我想如果我使用 R 包 R2jags 而不是 runjags,我会检查是否会弹出相同的消息,但是 R2jags 不会加载因为显然 rjags(依赖项之一)与 JAGS 4.0 不兼容(它正在寻找 JAGS 3.X)。此外,在 runjags 函数 run.jags 中,参数 method="rjags" 似乎不再起作用,但 method="parallel" 确实起作用。

我正在使用 runjags_2.0.1-4 和 R 3.2.2.

所以我的问题是:

1) rjags 真的与 JAGS 4.0 不兼容吗?进入 4.0 的动机是使用向量作为索引(参见 https://martynplummer.wordpress.com/2015/08/16/whats-new-in-jags-4-0-0-part-34-r-style-features/)。

2) 未使用的变量警告是怎么回事,我应该关注它吗?

谢谢, 格伦

代码:

#--- GENERATE DATA ------------------------
rm(list=ls())
# Number of sites and observations per site
N <- 200
nobs <- 3
# generate covariates and standardize (where appropriate)
set.seed(123)
forest <- rnorm(N) 
# relationship between occupancy and covariates
b0 <- 0.5  
b.for <- 0.5
psi <- plogis(b0 + b.for*forest)
# draw occupancy for each site
z <- rbinom(n=N, size=1,prob=psi)
# specify detection probablility
p <- 0.5
pz <- p*z
# generate the observations
Y <- rbinom(n=N, size=nobs,prob=pz)
#---- BUGS model ------------------------
model1 <- "model {
for (i in 1:N){ 
    logit(eta[i]) <- b0 + b.for*forest[i] 
    z[i] ~ dbern(eta[i])
    pz[i] <- z[i]*p
    y[i] ~ dbin(pz[i],nobs) 
} #i
b0.0 ~ dunif(0,1)
b0 <- log(b0.0/(1-b0.0)) 
b.for ~ dnorm(0,0.01)
p ~ dunif(0,1)
}"
occ.data1 <-list(y=Y,N=N,nobs=nobs,forest=forest)
inits1 <- function(){list(b0.0=runif(1),b.for=rnorm(1),p=runif(1),z=as.numeric(Y>0))}  
parameters1 <- c("b0","b.for","p")
#---- RUN MODEL ------------------------
library(runjags)
ni <- 2000
nt <- 1
nb <- 1000
nc <- 3
ad <- 100
out <- run.jags(model=model1,data=occ.data1,monitor=parameters1,n.chains=nc,inits=inits1,burnin=nb,
    sample=ni,adapt=ad,thin=nt,modules=c("glm","dic"),method="parallel")

回答您的问题:

1) rjags 和 JAGS 使用链接(不可互换)版本,而 CRAN 系统仍在使用 JAGS_3.4.0,因此 CRAN 上的 rjags 版本匹配。这将很快更新,同时您可以从 sourceforge 页面获取正确版本的 rjags 作为@jbaums 注释。

2) 这是一条来自 JAGS/rjags 的有用消息,告诉您您已将某些内容指定为模型未使用的数据。请记住,变量名称区分大小写,即

library('runjags')
model <- "model {
    m ~ dunif(-1000,1000)
    #data# M
    #inits# m
    #monitor# m
}"
M <- 0
m <- list(-10, 10)

results <- run.jags(model, method="interruptible", n.chains=2)
results <- run.jags(model, method="rjags", n.chains=2)

...给你一个警告,因为 M 不匹配 m。另请注意,警告看起来与这两个函数调用有点不同 - 第一个是 JAGS 输出的中途,第二个是函数完成后 R 中的警告。

至于 'should I be concerned' - 是的,如果您认为这些变量应该在您的模型中。如果您找不到问题,请尝试 post 使用您正在使用的代码 - 它已从您的原始 post.

中删除

马特