Markov-Chain-Montecarlo

是否有調試 MCMC 程序的標準技術?

  • July 22, 2010

調試 MCMC 程序是出了名的困難。出現困難的原因有幾個問題,其中一些是:

(a) 算法的循環性質

我們以所有其他參數為條件迭代地繪製參數。因此,如果實現不能正常工作,則很難隔離錯誤,因為問題可能出現在迭代採樣器的任何地方。

(b) 不一定知道正確答案。

我們無法判斷我們是否已經實現了收斂。在某種程度上,這可以通過在模擬數據上測試代碼來緩解。

鑑於上述問題,我想知道是否有可用於調試 MCMC 程序的標準技術。

編輯

我想分享我用來調試自己的程序的方法。當然,我會做 PeterR 提到的所有事情。除此之外,我使用模擬數據執行以下測試:

  1. 從真實值開始所有參數,看看採樣器是否偏離真實值太遠。
  2. 我的迭代採樣器中的每個參數都有標誌,用於確定我是否在迭代採樣器中繪製該參數。例如,如果標誌“gen_param1”設置為 true,那麼我會在迭代採樣器中從其完整條件中繪製“param1”。如果設置為 false,則 ‘param1’ 設置為其真值。

完成採樣器的編寫後,我使用以下配方測試程序:

  • 將一個參數的生成標誌設置為真,將其他所有參數設置為假,並根據真值評估收斂性。
  • 結合第一個參數設置另一個參數的生成標誌並再次評估收斂性。

上述步驟對我非常有幫助。

標準編程實踐:

  • 調試時使用固定的隨機源(即相同的種子)運行模擬,以便任何更改都是由於代碼更改而不是不同的隨機數引起的。
  • 在已知答案的模型(或多個模型)上嘗試您的代碼。
  • 養成良好的編程習慣,從而減少引入的錯誤。
  • 認真思考你得到的答案,是否有意義,等等。

祝你好運,還有很多咖啡!

引用自:https://stats.stackexchange.com/questions/524

comments powered by Disqus

相關問答