2015-10-09 46 views
1

我通过R包runjags运行JAGS模型。我刚从JAGS 3.4更新到JAGS 4.0.0,并且注意到一些似乎与更新有关的意外行为。runjags模型中未​​使用的变量警告

首先,当我运行一个模型时,我现在会收到一条警告消息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") 
+0

rjags_4-3不在CRAN还,但可以从http://sourceforge.net/projects/mcmc-jags/files/rjags/4/。使用R(64位)3.2的''run.jags'示例(使用'method ='rjags'')对我来说工作正常(没有错误/警告)。2在Windows上,JAGS 4.0,runjags 2.0.2-8和rjags 4-3。 – jbaums

+0

(仅供参考:您自己的代码未添加到帖子中) – jbaums

+0

@jbaums糟糕 - 我现在添加了示例代码。谢谢,rjags现在也适用于我,但是只有我从管理帐户开始工作。否则,我得到:'Loading required namespace:rjags 失败,错误:'.onLoad在'rjags'的loadNamespace()中失败,详细信息: 调用:fun(libname,pkgname) 错误:C:\ Program Files \ x64 /bin/libjags-4.dll找不到' 错误:未安装rjags软件包(或未能加载) - 请(重新)安装此软件包以使用runjags的'rjags'方法引用的文件确实存在在C:\ Program Files \ JAGS \ JAGS-4.0.0 \ x64 \ bin中。 –

回答

1

回答您的问题:

1)rjags和JAGS使用链接的(非互换)版本,并且还在使用CRAN系统JAGS_3.4.0所以CRAN上的rjags版本匹配。这将很快更新,同时你可以从@forum注释中获取sourceforge页面正确版本的rjags。

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中作为警告。

至于'我应该担心' - 是的,如果你认为这些变量应该在你的模型中。如果您找不到问题,请尝试发布您正在使用的代码 - 它会从原始帖子中删除。

马特

+0

非常感谢。 'method =“rjags”'现在有效(有时候 - 见上面的注释)。我已经添加了一些示例代码。有趣的是,当我使用'method =“rjags”'或'method =“rjparallel”'我没有得到未使用的变量错误,但是我确实得到了错误'method =“parallel”'或'method = “中断”'。不管方法如何,完全相同的代码不会产生JAGS 3.4.0的错误。所以,我怀疑我的设置有一些特殊性(获得JAGS 4,rjags,runjags正确安装,给予不完整的管理权限),而不是我的代码中的问题? –

+0

感谢您的代码 - 我可以复制警告消息。事实证明,它实际上是JAGS 4中的一个错误(一个误报警),所以在你的情况下它可以被安全地忽略!这不会在JAGS 3中显示,或者使用rjags接口(即%c('rjags','rjparallel')中的方法%),这些检查有点不同。我将与Martyn讨论这个问题,看看我们是否可以为JAGS 4.0.2修正它。 –

+0

更新:我已经解决了JAGS中的问题,因此这些误报警应该在下一个版本中消失(JAGS 4.0.2 - 无论何时)。如果您不想等待,可以从以下网址下载并安装固定版本4_patched源代码:https://sourceforge.net/p/mcmc-jags/code-0/ci/release-4_patched/tree/ –