WinBUGS/OpenBUGS は初めてで、コードのデバッグに苦労しています。
バグモデルの潜在的なエラーメッセージとその意味のリストを平易な英語で知っている人はいますか?
WinBUGSマニュアルには、いくつかの一般的なエラーのリストがあります。私自身の経験からいくつかの追加のメモを追加しました。
予想される変数名は、不適切な変数名を示しています。データを提供する際にこのエラーが発生することがあり1.02e04
ます1.02E04
。
未定義の変数- データ ファイル内の変数は、モデル内で定義する必要があります (変数を定数として、またはあいまいな優先順位で配置するだけです)。論理ノードが未定義であると報告された場合、問題は「右側」のノードにある可能性があります。モデルからは変数を削除したがデータからは変数を削除しなかった場合、またはデータ内のコンマを見逃した場合に、このエラーが発生することがあります。
無効または予期しないトークンがスキャンされました - Doodle の論理ノードの値フィールドが入力されていることを確認してください。
範囲外のインデックス- 通常、ループ インデックスがベクトル (または行列の次元) のサイズを超えていることを示します。ただし、コメント行の先頭から # を省略した場合に表示されることがあります
プロビット回帰の線形予測子が大きすぎると、数値のオーバーフローが示されます。トラップ「未定義の実際の結果」については、以下の可能な解決策を参照してください。
論理式が複雑すぎます- 論理ノードがあまりにも多くのパラメータ/定数または演算子で定義されています: 全体的な計算の一部を表すためにさらに論理ノードを導入してみてください; たとえば、a1 + a2 + a3 + b1 + b2 + b3 は、A + B と書くことができます。ここで、A と B はそれぞれ、より単純な論理式 a1 + a2 + a3 と b1 + b2 + b3 です。多くの項を持つ線形予測子は、パラメーターと共変量を「ベクトル化」してからinprod(.,.)
関数を使用して定式化する必要があることに注意してください。
更新方法を選択できない場合は、プログラムの制限に違反していることを示しています
開始時または MCMC 中にトラップにヒットすることもあります。BUGS マニュアルには、次の一般的なトラップがリストされています (私は常に最初の 2 つを取得し、最後の 2 つに遭遇したことはありません)。
未定義の実数結果は、数値オーバーフローを示します。考えられる理由は次のとおりです。
すべての初期値が等しい場合に発生する可能性があります。プロビット モデルは特にこの問題の影響を受けやすく、未定義の実際の結果が生成されます。プロビットが確率的ノードである場合、その分布に合理的な境界を設定すると役立つ場合があります。
probit(p[i]) <- delta[i]
delta[i] ~ dnorm(mu[i], tau)I(-5, 5)
このトラップは、更新ボタンをクリックするだけで回避できる場合があります。同等の構造
p[i] <- phi(delta[i])
もっと寛容かもしれません。
インデックス配列が範囲外である 可能性のある理由には、次のものがあります。
論理ノードの再帰的な定義がある場合、スタック オーバーフローが発生する可能性があります。
NIL 逆参照 (読み取り)は、配列からスカラーへの変換など、不適切な変換が行われた場合に、コンパイル時に発生する可能性があります。
DFreeARSを参照するトラップ メッセージは、対数凹分布に使用される導関数を使用しない適応拒否アルゴリズムの数値的な問題を示しています。1つの可能性は、「スライス」サンプリングに変更することです
このWinBUGS ユーザー マニュアルは役に立つかもしれません。