Pythonで学ぶ! ベイズ統計 第5回
今回は、確率分布でのベイズ更新の例を紹介する
前回紹介した、ポワソン分布、ガンマ分布を使用する
確率分布のベイズ更新
- 推定対象のパラメータが
- についての事前分布が
- が得られた場合の、尤度分布が
- 事後分布( が得られた場合の、 の更新分布)は、
これらから、ベイズ更新は下記になる
事後分布の計算
交差点の年間の事故発生回数の予測(確率分布)を取得する
- 推定対象は、下記のポワソン分布の平均値
- 事故発生回数の分布は、ポワソン分布 を仮定(尤度分布として使用)
- 事前分布は、ガンマ関数 を仮定
- 事前分布は、例えば、「全国の交差点の の分布」とかが分かれば定められる
- 得られたデータを とする(とある年の事故発生回数)
事後分布を計算すると
となる(途中から に関係する部分のみ抽出)
上記から、事後分布もガンマ分布となり、各パラメータは、下記になる
同様に、データが複数個得られた場合は、下記になる
具体例
事前分布のパラメータは、 とし
データとして が得られた場合を考える
この場合、事後分布のパラメータは、
平均値と分散は、下記になる
事前分布では、平均1.6、分散も1.6だった
追加されたデータが4のため平均値は大きくなり、データが追加されたことで分散は小さくなっている
さらに、過去のデータとして、5年分 が得られた場合は
平均値と分散は、下記になる
分散がさらに小さくなり、推測が進んでいることがわかる
Pythonによるグラフ化
グラフで表現すると下図になる
import matplotlib.pyplot as plt import numpy as np from scipy import stats x = np.arange(0, 10, step=0.01) fig = plt.figure(figsize=(6, 5)) ax = fig.add_subplot(111) data = stats.gamma.pdf(x, 1.6, scale=1.0/1.0) ax.plot(x, data, '-', label=r'$\alpha =1.6, \beta =1.0$') data = stats.gamma.pdf(x, 5.6, scale=1.0/2.0) ax.plot(x, data, '-', label=r'$\alpha =5.6, \beta =2.0$') data = stats.gamma.pdf(x, 17.6, scale=1.0/7.0) ax.plot(x, data, '-', label=r'$\alpha =17.6, \beta =7.0$') ax.set_xlim(-0.5, 9.5) ax.grid() ax.legend()
参考文献
この記事は以下の書籍を参考にしましたが、
私の拙い知識で書いておりますので、誤り等ありましたらご指摘ください