Как перезапустить JAGS в цикле, когда «узел несовместим с родителями» - PullRequest
0 голосов
/ 31 августа 2018

Я пытаюсь смоделировать и проанализировать данные, используя 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
...