我在处理贝叶斯方法方面仍然很陌生。在对真实数据产生随机影响的情况下运行贝叶斯分析时,我遇到了以下错误“slicker 停留在具有无限密度的值”,我尝试更改精度参数的起始值(基于我在 stackoverflow 上找到的建议) ,以及我的参数的其他起始值,但这并没有解决问题。这是我的代码的一部分
cat("model
{
for( i in 1 : N) {
D[i] ~ dpois(r[i])
log(r[i]) <- mu[i] + log(pt[i])
mu[i] ~ dnorm(theta,precision)
}
theta ~ dnorm(0.0,1.0E-6)
ExpTheta <- exp(theta)
tau1 ~ dgamma(0.001,0.001)
precision <- 1/(tau1*tau1)
}", file="myfile.txt")
我观察到以下解决了这些问题:
- 以 ( theta ~ dnorm(0,1.0E-5) T(0,0.99) 形式截断法线先验
就我而言,上述解决方案的问题是我的估计比平时多。其次,我真的不明白截断的法线如何适合我的解决方案。有人可以让我深入了解截断法线以及它如何影响使用它生成的结果的解释吗?
- 第二种选择是使用非常少的迭代次数。我观察到迭代次数很少,模型停止抛出错误。
这样做的问题是收敛是不值得怀疑的。
- 第三个可行的选项是我必须先将 gamma 从 gamma(0.001,0.001) 更改为 gamma(1,1)。我不确定从 gamma(0.001,0.001) 到 gamma(1,1) 将如何影响我的解释,但获得的结果似乎是合理的。
我将不胜感激就上述修复在建模过程及其如何影响推理方面的优缺点发表评论。
附加信息,D 是观察计数,pt 是人时(偏移量)。