当“节点与父母不一致”时,如何在循环中重新启动JAGS

时间:2018-08-31 17:53:59

标签: loops simulation jags

我正在尝试使用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

0 个答案:

没有答案