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