我正在通过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是一个未定义的变量”错误
答案 0 :(得分:0)
如果变量中有NA,然后在第二个变量的定义中使用该变量,则BUGS会抱怨,因为它无法使用NA进行计算。您可以在BUGS中指定模型,以了解如何生成c.eff.unr。该模型的参数将根据观测值进行估算,并将其视为缺失值的先验值,因此BUGS将为NA估算值。或者,您可以格式化数据以排除缺失值,因为它们有很多。