2014-02-23 104 views
9

我是WinBUGS/OpenBUGS的新手,並且無法調試我的代碼。BUGS錯誤消息

有沒有人知道BUGS模型的潛在錯誤信息列表及其在普通英語中的含義?

回答

13

WinBUGS manual有一些常見錯誤的列表。我添加了一些額外的筆記從我自己的經驗:

  • 預期變量名表示不恰當的變量名。偶爾在提供數據時出現此錯誤,可能使用1.02e04而不是1.02E04

  • 未定義變量 - 數據文件中的變量必須在模型中定義(只需將它們作爲常量或模糊的先驗)。如果未定義報告邏輯節點,則問題可能出在「右側」的節點上。當我從模型中刪除一個變量但不是從數據中刪除一個變量,或者在數據中遺漏一個逗號時,我偶爾會得到這個錯誤。

  • 無效或意外標記掃描 - 檢查Doodle中邏輯節點的值字段是否已完成。

  • 索引超出範圍 - 通常表示循環索引超出矢量(或矩陣維)的大小;然而,如果從註釋行開頭省略#,則有時會出現

  • 概率迴歸中的線性預測值太大表示數值溢出。請參閱下面的陷阱'未定義實際結果'的可能解決方案。

  • 邏輯表達式太複雜 - 一個邏輯節點在太多的參數/常量或太多運營商來定義:嘗試引入進一步的邏輯節點以表示整體的計算部件;例如,a1 + a2 + a3 + b1 + b2 + b3可以寫爲A + B,其中A和B分別是更簡單的邏輯表達式a1 + a2 + a3和b1 + b2 + b3。注意:有許多術語,其線性預測應該由「矢量化」參數和協變量,並通過再使用inprod(.,.)功能

  • 無法選擇更新方法制定表明,該方案的限制已侵犯

您可能還會在開始或MCMC期間遇到陷阱。蟲蟲手冊列表下面的常見陷阱(我總是前兩個,從未謀面的最後兩個):

  • 不確定的真正結果表示數值溢出。可能的原因包括:

    • 從「模糊」的先驗分佈生成的初始值可能在數值上極端 - 指定適當的初始值;
    • 數值上不可能的值,例如非正數的對數 - 檢查,例如,當泊松建模時沒有給出零期望;
    • 抽樣中的數值困難。可能的解決方案包括:
    • 更好的初始值;
    • 更多信息豐富的先驗 - 統一的先驗可能仍然可以使用,但範圍限於合理的價值;
    • 更好的參數化來改善正交性;
    • 標準化協變量的具有平均爲0,標準偏差1.
    • 可以發生,如果所有初始值是equal.Probit模型特別容易受到此問題,即生成未定義的真實結果。如果一個概率是一個隨機節點,它可能有助於在其分佈上設置合理的界限,例如,

      probit(p[i]) <- delta[i] 
          delta[i] ~ dnorm(mu[i], tau)I(-5, 5) 
      

      這個陷阱有時可以通過點擊更新按鈕來逃脫。等效建設

      p[i] <- phi(delta[i]) 
      

      可能會更寬容。

  • 索引陣列超出範圍 可能原因包括:

    • 嘗試分配值超出數組的聲明長度;
    • 如果邏輯表達式太長以至於無法評估,則將其分解爲更小的組件。如果有一個邏輯節點的遞歸定義可出現
  • 堆棧溢出

  • 無法解除引用(讀取)可能發生在編譯時,在某些情況下發生不適當的轉換時,例如將數組轉換爲標量。

  • 涉及到的陷阱消息DFreeARS表示用於對數凹分佈的無導數自適應拒絕算法的數值問題。一種可能性是改爲「切片」取樣