Python用PyMC3貝葉斯模型平均BMA:採樣、信息準則比較和預測可視化靈長類動物

2023-08-17     tecdat拓端

原標題:Python用PyMC3貝葉斯模型平均BMA:採樣、信息準則比較和預測可視化靈長類動物

全文連結:https://tecdat.cn/?p=33449

原文出處:拓端數據部落公眾號

當面對多個模型時,我們有多種選擇。模型選擇因其簡單性而具有吸引力,但我們正在丟棄有關模型中不確定性的信息。

print(f"Runing

模型平均

一種替代方法是執行模型選擇,但討論所有不同的模型以及給定信息準則的計算值。重要的是要將所有這些數字和測試放在我們問題的背景下,以便我們和我們的客戶能夠更好地了解我們方法可能存在的局限性和缺點。如果你在學術界,你可以使用這種方法向論文、演示文稿、論文等的討論部分添加元素。

另一種方法是執行模型平均。現在的想法是使用模型的加權平均值生成元模型(和元預測)。有幾種方法可以做到這一點,PyMC3 包括其中的 3 種,我們將簡要討論,您將在 Yuling Yao 等人的工作中找到更徹底的解釋。

偽貝葉斯模型平均

貝葉斯模型可以通過其邊緣機率進行加權,這被稱為貝葉斯模型平均。我們可以使用以下公式來做到這一點:

這種方法稱為偽貝葉斯模型平均或類似赤池的加權,是一種啟發式方法,用於根據信息標準值計算每個模型(給定一組固定的模型)的相對機率。看看分母只是一個歸一化項,以確保權重總和為 1。

使用貝葉斯自舉進行偽貝葉斯模型平均

上述計算權重的公式是一種非常好且簡單的方法,但有一個主要警告,它沒有考慮 IC 計算中的不確定性。

堆疊

在PyMC3中實現的第三種方法被稱為預測分布的堆疊,並且最近被提出。我們希望在一個元模型中組合多個模型,以最小化元模型和真實生成模型之間的分歧,當使用對數評分規則時,這相當於:

加權後驗預測樣本

一旦我們計算了權重,使用上述 3 種方法中的任何一種,我們就可以使用它們來獲得加權後驗預測樣本。PyMC3 提供了以簡單方式執行這些步驟的函數,因此讓我們通過示例查看它們的實際效果。

簡而言之,我們的問題如下:我們想探索幾種靈長類動物的乳汁成分,假設來自大腦較大的靈長類動物的雌性產生更有營養的牛奶(這樣做是為了*支持這種大大腦的發育)。對於進化生物學家來說,這是一個重要的問題,為了給出和回答,我們將使用3個變量,兩個預測變量:新皮層的比例與總質量的比較 大腦和母親體重的對數。對於預測變量,每克牛奶的千卡。使用這些變量,我們將構建 3 個不同的線性模型:

d.iloc[:, 1:] = d.iloc[:, 1:] - d.iloc[:, 1:].mean()

d.head()

現在我們有了數據,我們將僅使用 neocortex。

with pm.Model() as model_0:

trace_0 = pm.sample(2000, return_inferencedata=True)

第二個模型與第一個模型完全相同,只是我們現在使用質量的對數

with pm.Model() as model_1:

trace_1 = pm.sample(2000, return_inferencedata=True)

最後是第三個模型使用 neocortex和 變量log_mass

with pm.Model() as model_2:

trace_2 = pm.sample(2000, return_inferencedata=True)

現在我們已經對 3 個模型的後驗進行了採樣,我們將對它們進行視覺比較。一種選擇是使用forestplot支持繪製多個跡線的函數。

az.plot_fo

另一種選擇是在同一圖中繪製多條跡線是使用densityplot 。

az.plot_d

現在我們已經對 3 個模型的後驗進行了採樣,我們將使用 WAIC(廣泛適用的信息標準)來比較 3 個模型。我們可以使用 PyMC3 附帶的compare功能來做到這一點。

comp = az.compare(model_dict)

comp

我們可以看到最好的模型是,具有兩個預測變量的模型。請注意,數據幀按從最低到最高 WAIC 的順序(即從好到最差的模型)。

現在,我們將使用copmuted來生成預測,而不是基於單個模型,而是基於加權模型集。

ppc_w = pm.sample_posterior_predictive_w(

請注意,我們正在傳遞按其索引排序的權重。

我們還將計算最低 WAIC 模型的 PPC

ppc_2 = pm.sample_posterior_predi

比較這兩種預測的一種簡單方法是繪製它們的平均值和 hpd 區間

plt.yticks([])

plt.ylim(-1, 2)

plt.legend();

正如我們所看到的,兩個預測的平均值幾乎相同,但加權模型中的不確定性更大。我們已經有效地將我們應該選擇哪個模型的不確定性傳遞到後驗預測樣本中。

結語:

還有其他方法可以平均模型,例如,顯式構建一個包含我們擁有的所有模型的元模型。然後,我們在模型之間跳轉時執行參數推理。這種方法的一個問題是,在模型之間跳躍可能會妨礙後驗的正確採樣。

版本信息

%load_ext watermark

%watermark -n -u -v -iv -w

最受歡迎的見解

1.matlab使用貝葉斯優化的深度學習

2.matlab貝葉斯隱馬爾可夫hmm模型實現

3.R語言Gibbs抽樣的貝葉斯簡單線性回歸仿真

4.R語言中的block Gibbs吉布斯採樣貝葉斯多元線性回歸

5.R語言中的Stan機率編程MCMC採樣的貝葉斯模型

6.R語言貝葉斯Poisson泊松-正態分布模型分析職業足球比賽進球數

7.R語言使用貝葉斯 層次模型進行空間數據分析

8.R語言隨機搜索變量選擇SSVS估計貝葉斯向量自回歸(BVAR)模型

9.matlab貝葉斯隱馬爾可夫hmm模型實現

文章來源: https://twgreatdaily.com/zh-mo/3e4de5eed567bbd7da1b71f1dc8ed6c9.html