我是WinBUGS / OpenBUGS的新手,并且无法调试我的代码。
有没有人知道BUGS模型的潜在错误消息列表及其用简单英语的含义?
答案 0 :(得分:14)
WinBUGS manual列出了一些常见错误。我根据自己的经验添加了一些补充说明:
预期变量名称表示不适当的变量名称。我偶尔在提供数据时遇到此错误,可能使用了1.02e04
而不是1.02E04
。
未定义的变量 - 数据文件中的变量必须在模型中定义(只需将它们作为常量或模糊的先验放入)。如果报告逻辑节点未定义,则问题可能出在“右侧”的节点上。当我从模型中删除变量但没有从数据中删除变量或错过数据中的逗号时,偶尔会出现此错误。
扫描无效或意外的令牌 - 检查Doodle中逻辑节点的值字段是否已完成。
索引超出范围 - 通常表示循环索引超出了向量(或矩阵维度)的大小;但是,有时候,如果从注释行的开头省略了#,则会出现
概率回归中的线性预测器太大表示数值溢出。请参阅下面针对Trap'未定义的实际结果'的可能解决方案。
逻辑表达式太复杂 - 逻辑节点是根据太多参数/常量或太多运算符定义的:尝试引入更多逻辑节点来表示整体计算的各个部分;例如,a1 + a2 + a3 + b1 + b2 + b3可写为A + B,其中A和B分别是更简单的逻辑表达式a1 + a2 + a3和b1 + b2 + b3。请注意,具有多个术语的线性预测变量应通过“矢量化”参数和协变量来制定,然后使用inprod(.,.)
函数
无法选择更新方法表示违反了计划中的限制
您可能还会在开始时或MCMC期间遇到陷阱。 BUGS手册列出了以下常见陷阱(我总是得到前两个,从未遇到过最后两个):
未定义的实际结果表示数字溢出。可能的原因包括:
.Probit模型特别容易受到这个问题的影响,即产生未定义的实际结果。如果一个概率是一个随机节点,它可能有助于在其分布上设置合理的界限,例如
probit(p[i]) <- delta[i]
delta[i] ~ dnorm(mu[i], tau)I(-5, 5)
有时可以通过单击更新按钮来转义此陷阱。等效结构
p[i] <- phi(delta[i])
可能更宽容。
索引数组超出范围 可能的原因包括:
堆栈溢出。
NIL解除引用(读取)在某些情况下可能会在进行不适当的转换时发生,例如将数组转换为标量。
引用 DFreeARS 的陷阱消息表示用于对数凹分布的无导数自适应拒绝算法的数值问题。一种可能性是改为“切片”采样
答案 1 :(得分:2)
此WinBUGS User Manual可能有用。