R Bug中的未定义变量缺少值

R Bug中的未定义变量缺少值,r,winbugs,r2winbugs,R,Winbugs,R2winbugs,我正在通过R运行一个bug模型,我有一个bug问题,说我的一个数据集是“未定义的变量”。它遇到问题的数据集中有相当多的NA,但这为什么会导致问题?当NA被0替换时,它工作得很好,所以我知道使用NAs时存在bug问题。使用0而不是NA是不可接受的解决方案,因为我需要记录转换结果数量。有没有人遇到过类似的情况并找到了解决方案 以下是我正在努力解决的模型部分: rm(list=ls(all=T)) library(R2OpenBUGS) #set working directory separate

我正在通过R运行一个bug模型,我有一个bug问题,说我的一个数据集是“未定义的变量”。它遇到问题的数据集中有相当多的NA,但这为什么会导致问题?当NA被0替换时,它工作得很好,所以我知道使用NAs时存在bug问题。使用0而不是NA是不可接受的解决方案,因为我需要记录转换结果数量。有没有人遇到过类似的情况并找到了解决方案

以下是我正在努力解决的模型部分:

rm(list=ls(all=T))
library(R2OpenBUGS)

#set working directory separately, I name it here
 working_dir=getwd()

mod=function(){
  tau.cat~dgamma(0.001, 0.001)
  q.unr~dnorm(0, 1E-10)

  for(y in 1:nyears){
   log.N[y]~dnorm(0, 1E-10)
   N[y]<-exp(log.N[y])
   }

  for(w in 1:4){
   for(y in 1:nyears){
   #generating estimated catch
   est.c.cat.unr[y,w]<-N[y]*(1-exp(-q.unr*c.eff.unr[y,w]))
   #fitting it to data
   c.cat.unr[y,w]~dnorm(est.c.cat.unr[y,w], tau.cat)
  }
 }
}

#write model to a .txt file to pass to BUGS
write.model(mod, paste(working_dir, '/model_file.txt', sep=""))

dat=list(
 nyears=38,
 c.cat.unr=c.cat.unr,
 c.eff.unr=c.eff.unr)

#creating initial values for each chain
init1=list(
 log.N=log(rep(180000, 38)),
 q.unr=1E-5,
 tau.cat=.0001)

init2=list(
 log.N=log(rep(250000, 38)),
 q.unr=1E-6,
 tau.cat=.001)

inits=list(init1, init2)

#pass the model to BUGS; debug=T will keep the BUGS window open so you can see errors
sim=bugs(data=dat, 
     inits=inits, 
     parameters.to.save=c("N"), 
     n.iter=1000,
     n.chains=2,
     n.burnin=500,
     n.thin=1,
     model.file="model_file.txt",
     debug=T,
     codaPkg=T,
     working.directory=working_dir)

 ######DATA######

          ##c.cat.unr##

      chw.3 chw.4 chw.5 chw.6
 [1,]    NA 20010    NA    NA
 [2,] 12458 16227    NA    NA
 [3,] 18483 10066    NA    NA
 [4,] 24633    NA    NA    NA
 [5,]  9891    NA    NA    NA
 [6,] 29882    NA    NA    NA
 [7,]  4912 24628    NA    NA
 [8,] 13406    NA    NA    NA
 [9,]    NA 17181    NA    NA
[10,]    NA    NA    NA    NA
[11,]    NA    NA    NA    NA
[12,]    NA    NA    NA    NA
[13,]    NA    NA    NA    NA
[14,]    NA    NA    NA    NA
[15,]    NA    NA    NA    NA
[16,]    NA    NA    NA    NA
[17,]    NA    NA    NA    NA
[18,]    NA    NA    NA    NA
[19,]    NA    NA    NA    NA
[20,]    NA    NA    NA    NA
[21,]    NA    NA    NA    NA
[22,]    NA    NA    NA    NA
[23,]    NA    NA    NA    NA
[24,]    NA    NA    NA    NA
[25,]    NA    NA    NA    NA
[26,]    NA    NA    NA    NA
[27,]    NA    NA    NA    NA
[28,]    NA    NA    NA    NA
[29,]    NA    NA    NA    NA
[30,]    NA    NA    NA    NA
[31,]    NA    NA    NA    NA
[32,]    NA    NA    NA    NA
[33,]    NA    NA    NA    NA
[34,]    NA    NA    NA    NA
[35,]    NA    NA    NA    NA
[36,]    NA    NA    NA    NA
[37,]    NA    NA    NA    NA
[38,]    NA    NA    NA    NA


         ##c.eff.unr##

      cew.3 cew.4 cew.5 cew.6
 [1,]    NA  5724    NA    NA
 [2,]  2802  2904    NA    NA
 [3,]  3972  2004    NA    NA
 [4,]  6432    NA    NA    NA
 [5,]  2814    NA    NA    NA
 [6,]  6180    NA    NA    NA
 [7,]  2784  5970    NA    NA
 [8,]  5634    NA    NA    NA
 [9,]    NA  5562    NA    NA
[10,]    NA    NA    NA    NA
[11,]    NA    NA    NA    NA
[12,]    NA    NA    NA    NA
[13,]    NA    NA    NA    NA
[14,]    NA    NA    NA    NA
[15,]    NA    NA    NA    NA
[16,]    NA    NA    NA    NA
[17,]    NA    NA    NA    NA
[18,]    NA    NA    NA    NA
[19,]    NA    NA    NA    NA
[20,]    NA    NA    NA    NA
[21,]    NA    NA    NA    NA
[22,]    NA    NA    NA    NA
[23,]    NA    NA    NA    NA
[24,]    NA    NA    NA    NA
[25,]    NA    NA    NA    NA
[26,]    NA    NA    NA    NA
[27,]    NA    NA    NA    NA
[28,]    NA    NA    NA    NA
[29,]    NA    NA    NA    NA
[30,]    NA    NA    NA    NA
[31,]    NA    NA    NA    NA
[32,]    NA    NA    NA    NA
[33,]    NA    NA    NA    NA
[34,]    NA    NA    NA    NA
[35,]    NA    NA    NA    NA
[36,]    NA    NA    NA    NA
[37,]    NA    NA    NA    NA
[38,]    NA    NA    NA    NA
rm(list=ls(all=T))
库(R2OpenBUGS)
#单独设置工作目录,我在这里命名
工作目录=getwd()
mod=函数(){
τ类~dgamma(0.001,0.001)
q、 unr~dnorm(0,1E-10)
for(y为1:nyears){
log.N[y]~dnorm(0,1E-10)

N[y]如果变量中存在NAs,然后在定义第二个变量时使用该变量,则Bug会抱怨,因为它无法使用NAs进行计算。您可以在Bug中指定一个模型,说明如何生成c.eff.unr。该模型的参数将根据观察值进行估计,并将其视为prior查找缺失值,因此Bug将为NAs插补值。或者,您可以格式化数据以排除缺失值,因为缺失值很多。

如果MCMC不太敏感,请记录(0)一般来说,问题通常通过添加1或非常小的值来解决。谢谢你的评论。我可以尝试这样做,看看MCMC是否对它非常敏感。我只是想知道是否有办法使NA保持为真正缺失的值。@kingcounter36请看。如果你仍然无法使其工作,请发布错误代码。我仍然无法解释解决它。它遇到问题的变量是c.eff.unr。我已经更新了原始问题,以显示给我带来问题的模型位。它应该给出一个错误:“变量c.eff.unr未定义”。我真的需要保持格式不变,因为这只是用于估算N的数据集之一,每一行必须匹配到特定的年份(许多NA在其他数据集中表示为数据,但我必须将它们分开,以便模型为每一行估算不同的参数).我不认为我可以为NAs估算建模数据,因为这会影响N的估算。有没有办法简单地告诉bug忽略NAs(比如R的na.rm参数?)