「Pythonによるベイズ統計モデリング」まとめ #2
「Pythonによるベイズ統計モデリング―PyMCでのデータ分析実践ガイド― 」:
Pythonによるベイズ統計モデリング: PyMCでのデータ分析実践ガイド
- 作者: オズワルドマーティン,Osvaldo Martin,金子武久
- 出版社/メーカー: 共立出版
- 発売日: 2018/06/22
- メディア: 単行本
- この商品を含むブログを見る
前回↓
#2では第2章と第3章について扱う。特に第2章は今後の基礎となる重要な章であり,ここである程度概念を理解しておきたいところである。
第2章 確率プログラミング-PyMC3入門
推論エンジン
第1章では事後分布を解析的に解いたが,できない場合は以下の方法により近似計算される。
ベイジアン分析は,主にマルコフ連鎖モンテカルロ(MCMC)法によって実行される。マルコフ連鎖において,メトロポリス-ヘイスティングス・アルゴリズムが汎用される。アルゴリズムの手順を以下に示す。
- パラメータの初期値を決める
- 新しいパラメータの値を決め,サンプリングが簡単な分布(例:正規分布)からサンプルを得る。
-
を使って,新しいパラメータの値を受け入れる確率を計算する。
- 3.で計算された確率が区間[0,1]の一様分布から得られる値より大きい場合,新しい状態を受容して,そうでなければ古い状態に留まる。
- 1.から4.を繰り返す。
最終的に,サンプルチェーン(サンプルトレース)という数値リストを得る。これは事後分布の近似である。
Pymc3を使う
インストールについてはドキュメントを参照。
PyMC3 Documentation — PyMC3 3.6 documentation
#1の例を用いて手順を説明する。
(1) 5回投げて2回表が出た,事前分布はとする
(2) さらに5回投げて1回表が出た,事前分布は(1)の確率分布とする
(1)
まずデータを生成する。dataに「5回投げて2回表が出た」ことを記述させている。
import pymc3 as pm import numpy as np import scipy.stats as stats import matplotlib.pyplot as plt plt.style.use('seaborn-darkgrid') #(1) data = np.array([0,1,0,0,1]) #5回投げて2回表
次にモデルを記述する。ここでは
,
であることを示す。
with pm.Model() as our_first_model: theta = pm.Beta('theta', alpha=1, beta=1) #事前分布,ベータ分布 y = pm.Bernoulli('y', p=theta, observed=data) #事後分布,ベルヌーイ分布
推論ボタンを押す。
start = pm.find_MAP() #初期値を与える(任意) step = pm.Metropolis() #MCMC法を用いる(任意) trace = pm.sample(5000, step=step, start=start) #ステップ数
これでサンプリングが始められる。
その結果を表示する。
chain = trace[burnin:] pm.traceplot(chain, lines={'theta':0.5}); #グラフ作成 plt.figure()
左はカーネル密度推定のグラフ(事後分布の近似),右は個々のサンプル値を表している。右のグラフは規則性がないのが望ましい。
要約量はsummaryで得られる。
pm.summary(chain)
最後に事後分布を要約する。
pm.plot_posterior(chain, kde_plot=True, ref_val=0.5) plt.figure()
ref_val=0.5は,参照点が0.5であることを示す。
(2)も同じようにやってみるとよい。
第3章 複数パラメータの取り扱いと階層モデル
基本的には第2章の延長線として読めるので,ここでは概要のみとする。
正規性の仮定
先ほどの例ではベータ分布と2項分布によるモデルを用いた。この他,正規分布からなるモデルが構築できる。
,
もし外れ値が気になるのであれば,Studentのt分布を用いる。
,
Studentのt分布では頑健推定ができる。
グループ間比較
ベイジアン分析においてはp値は用いず,代わりに効果量を用いる。効果量を測定する方法として,コーエンのdや優越率などが用いられる。
階層モデル
モデルのパラメータを入れ子にすることで,階層モデルが構築できる。本書の例は以下の通りである。
,
参考:はてなブログにコードを挿入する方法
【はてなブログ】ソースコードを貼り付ける方法!(言語名&行番号表示) - 黒木ノ水岩
次回↓