1

我正在通过 R 运行一个 BUGS 模型,但我遇到了一个问题,BUGS 说我的一个数据集是一个“未定义的变量”。它遇到问题的数据集有很多 NA,但为什么会导致问题?当 NA 被 0 替换时它工作得很好,所以我知道使用 NA 的 BUGS 存在问题。使用 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

该模型还有很多内容,但其余部分运行良好。我已经剪掉了模型的其余部分,只包括了给我带来问题的部分。我已经运行了模型的这一部分,我得到了相同的“c.eff.unr 是一个未定义的变量”错误

4

1 回答 1

0

如果变量中有 NA,然后您在第二个变量的定义中使用该变量,那么 BUGS 会抱怨,因为它无法使用 NA 进行计算。您可以在 BUGS 中指定模型以了解如何生成 c.eff.unr。该模型的参数将根据观测值进行估计,并将被视为缺失值的先验,因此 BUGS 将为 NA 估算值。或者,您可以格式化您的数据以排除缺失值,因为它们有很多。

于 2014-08-08T10:54:51.990 回答