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