BUGS错误消息

use*_*467 9 r winbugs r2winbugs

我是WinBUGS/OpenBUGS的新手,并且无法调试我的代码.

有没有人知道BUGS模型的潜在错误消息列表及其用普通英语的含义?

gja*_*bel 14

WinBUGS 手册列出了一些常见错误.我根据自己的经验添加了一些额外的注释:

  • 预期变量名称表示不适当的变量名称.我偶尔会在提供数据时遇到此错误,可能已经使用了1.02e04而不是1.02E04.

  • 未定义的变量 - 数据文件中的变量必须在模型中定义(只需将它们作为常量或模糊的先验放入).如果报告逻辑节点未定义,则问题可能出在"右侧"的节点上.当我从模型中删除变量而不是从数据中删除变量或错过数据中的逗号时,我偶尔会遇到此错误.

  • 扫描无效或意外的令牌 - 检查Doodle中逻辑节点的值字段是否已完成.

  • index超出范围 - 通常表示循环索引超出了向量(或矩阵维度)的大小; 但是,有时候,如果从注释行的开头省略了#,则会出现

  • 概率回归中的线性预测器太大表示数值溢出.请参阅下面针对Trap'未定义的实际结果'的可能解决方案.

  • 逻辑表达式太复杂 - 逻辑节点是根据太多参数/常量或太多运算符定义的:尝试引入更多逻辑节点来表示整体计算的部分; 例如,a1 + a2 + a3 + b1 + b2 + b3可写为A + B,其中A和B分别是更简单的逻辑表达式a1 + a2 + a3和b1 + b2 + b3.请注意,具有许多项的线性预测变量应通过"矢量化"参数和协变量以及然后使用该inprod(.,.)函数来制定

  • 无法选择更新方法表示违反了程序中的限制

您可能还会在开始时或MCMC期间遇到陷阱.BUGS手册列出了以下常见陷阱(我总是得到前两个,从未遇到过最后两个):

  • 未定义的实际结果表示数值溢出.可能的原因包括:

    • 从"模糊的"先验分布生成的初始值可能在数值上极端 - 指定适当的初始值;
    • 数值上不可能的值,例如非正数的对数 - 检查,例如,当Poisson建模时没有给出零期望值;
    • 采样中的数值困难.可能的方案包括:
    • 更好的初始值;
    • 更多信息丰富的先验 - 可能仍然使用均匀的先验,但其范围仅限于合理的值;
    • 更好的参数化以改善正交性;
    • 协变量的标准化具有平均值0和标准偏差1.
    • 如果所有初始值都相等,则会发生.Probit模型特别容易受到这个问题的影响,即生成未定义的实际结果.如果一个概率是一个随机节点,它可能有助于在其分布上设置合理的界限,例如

        probit(p[i]) <- delta[i]
        delta[i] ~ dnorm(mu[i], tau)I(-5, 5)
      
      Run Code Online (Sandbox Code Playgroud)

      有时可以通过单击更新按钮来转义此陷阱.等效的结构

        p[i] <- phi(delta[i])
      
      Run Code Online (Sandbox Code Playgroud)

      可能会更宽容.

  • 索引数组超出范围 可能的原因包括:

    • 尝试分配超出声明的数组长度的值;
    • 如果逻辑表达式太长而无法评估,请将其分解为更小的组件.
  • 如果存在逻辑节点的递归定义,则可能发生堆栈溢出.

  • 在某些情况下,当进行不适当的转换时,例如将数组转换为标量,NIL解除引用(读取)可以在编译时发生.

  • 涉及DFreeARS的陷阱消息表明用于对数凹分布的无导数自适应抑制算法存在数值问题.一种可能性是改为"切片"采样