我正在尝试使用JAGS模拟和分析数据。对于数据和模型,我经常遇到初始值产生错误“节点与父母不一致”的问题。我知道这只是初始值,因为再次使用相同的数据集再次调用JAGS经常需要再次运行。
但是,在我设置的任何循环中,只要出现此节点错误,它都会关闭整个过程。有没有一种方法可以使“节点与父母不一致”的标准可用于重新启动锯齿运行?还是只是重新开始整个过程而不是退出?
我在下面写了一个函数示例。如果没有用于模拟数据的功能,它将无法运行,但是如果需要回答这个问题,我可以提供。
repeat.sims<-function(X,Y){
# Setup a simulation
X<-X
Y<-Y
repeat{
# Format simulated data to a matrix
sim.data<-data.sim(X,Y)
files<-list.files(path=paste0(getwd(),'/output'))
n.sims<-length(files)
if (n.sims>100) break
minC <- apply(sim.data[,3:4], 1,max)
inits<-function()
list(alpha=runif(1,-1,1),beta=runif(1,-1,2),mu1=runif(1,-1,1),mu2=runif(1,-2,0),
C = map2_int(minC, sim.data[,1], ~sample(.x:.y,size=1)))
mydata<-list(obs=nrow(sim.data),reps=ncol(sim.data)-5,X=sim.data[,3:4],
Z = sim.data[,1], scov = sim.data[,2],pcov=sim.data[,5:6])
#set iterations, thinning, burn-in, and number of chains
ni <-50000; nt <-1; nb <-10000;nc <-3
params <- c('alpha','beta','mu1','mu2')
jag <- jags(data=mydata,inits=inits,
parameters.to.save=params,
model.file="model.txt",
n.chains=3,n.thin=nt,n.iter=ni,n.burnin=nb,
DIC=F,parallel=TRUE)
saveRDS(jag,paste0(getwd(),'/output/sim_',n.sims+1,'.rds'))
}
}
starttime<-Sys.time()
repeat.sims(50,0.8)
endtime<-Sys.time()
runtime<-endtime-starttime
runtime