我的模型因以下错误而失败:
Compiling rjags model...
Error: The following error occured when compiling and adapting the model using rjags:
Error in rjags::jags.model(model, data = dataenv, inits = inits, n.chains = length(runjags.object$end.state), :
Error in node Y[34,10]
Observed node inconsistent with unobserved parents at initialization.
Try setting appropriate initial values.
我做了一些诊断,发现链3中的初始值存在问题。但是,这可能会不时发生。在这种情况下,有没有办法告诉run.jags
或JAGS本身重新尝试并重新运行模型?例如,告诉他再做N次尝试正确初始化模型。这将是非常合乎逻辑的事情,而不仅仅是失败。或者我必须手动执行一些tryCatch
事情?
P.S。:请注意,我目前正在使用run.jags
从R运行JAGS。
答案 0 :(得分:2)
runjags中没有提供的功能,但是自己这样编写会非常简单:
success <- FALSE
while(!success){
s <- try(results <- run.jags(...))
success <- class(s)!='try-error'
}
results
[请注意,如果此模型无效,循环将永远不会停止!]
更好的想法可能是指定一个初始值函数/列表,它提供保证有效的初始值(如果可能的话)。
在runjags版本2中,当某些模拟已经崩溃时,有可能恢复成功的模拟,所以如果你并行运行(比方说)5个链,那么如果1或2崩溃,你仍然会有3个或4个。那应该是在接下来的几周内发布,并包含大量其他改进。
答案 1 :(得分:1)
通常,当发生此错误时,它表明存在严重的潜在问题。我不会想到&#34;再试一次&#34;通常很有用(特别是因为默认初始值是确定性的)。
JAGS生成的默认初始值由&#34;典型值&#34;来自先前分布的值(例如,均值,中值或模式)。如果事实证明这与数据不一致,那么通常有两个可能的原因:
当您提供自己的初始值时,这些问题保持不变。
如果您认为您可以在大多数情况下产生良好的初始值,偶尔会出现故障,那么在try()调用中可能值得重复尝试,但我认为这是一个不常见的情况。