Bayesian

PyMC3 中的貝葉斯模型選擇

  • July 12, 2015

我正在使用 PyMC3 對我的數據運行貝葉斯模型。

我是貝葉斯建模的新手,但根據該站點的一些博客文章、維基百科和QA,使用貝葉斯因子和 BIC 標準來選擇最能代表我的數據的模型似乎是一種有效的方法(生成我的數據)。

為了計算貝葉斯因子,我需要我想要比較的模型的相對似然。這對我來說可能有點困惑,但我認為有兩種方法可以獲得可能性(如果我錯了,請糾正我):

  • 模型簡單時的代數方式:參見維基百科示例貝葉斯因子頁面
  • 數字方式:這就是 PyMC3 與 MCMC 算法的關係

如何訪問可能性並在 PyMC3 中比較我的模型?我發現model.logp根據文檔的方法是“對數概率密度函數”。我可以用它來獲得可能性嗎?

額外的問題:當比較兩個模型時,計算兩個可能性之間的比率。如果你想比較幾個模型會發生什麼?

一個具體的 PyMC3 示例將非常有幫助!

您可以使用 model.logp() 計算模型的可能性。作為輸入,它需要一個點。例如,我可以做的示例目錄中的 BEST 模型:

np.exp(model.logp({'group1_mean': 0.1, 
                  'group2_mean': 0.2, 
                  'group1_std_interval': 1., 
                  'group2_std_interval': 1.2, 
                  'nu_minus_one_log': 1}))

請注意,此模型使用轉換後的變量,因此我必須提供這些。然後,您可以使用 exp() 並在數值積分器中使用它,例如 scipy.integrate 提供的。問題是即使只有 5 個參數,這也會很慢。

貝葉斯因子通常很難計算,因為您必須在整個參數空間上進行積分。為此使用 MCMC 樣本有一些想法。請參閱此帖子,尤其是評論部分以獲取更多信息:https ://radfordneal.wordpress.com/2008/08/17/the-harmonic-mean-of-the-likelihood-worst-monte-carlo-method-ever /不幸的是,BIC 的情況類似。

如果您真的想計算貝葉斯因子,您還可以查看 Savage Dickey Ratio 測試(參見例如http://drsmorey.org/bibtex/upload/Wagenmakers:etal:2010.pdf),但它的應用程序是有限的。

我想您正在嘗試進行模型比較,這是一個具有許多意見和解決方案的領域(有些難以實施,例如 BF)。一種非常容易計算的度量是偏差信息準則。它有其缺點,儘管其中一些可以補救(參見http://onlinelibrary.wiley.com/doi/10.1111/rssb.12062/abstract)。不幸的是,我們還沒有移植代碼 pymc3,但這很容易(參見此處了解 pymc2 實現:https ://github.com/pymc-devs/pymc/blob/895c24f62b9f5d786bce7ac4fe88edb4ad220364/pymc/MCMC.py# L410 )。

Kruschke 喜歡只構建完整模型並讓它告訴你哪些參數很重要的方法。您還可以在模型本身中構建變量選擇(參見例如http://arxiv.org/pdf/math/0505633.pdf)。

最後,對於更完整的處理,請參閱最近的博客文章:http: //jakevdp.github.io/blog/2015/08/07/frequentism-and-bayesianism-5-model-selection/

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

comments powered by Disqus