Pythonで学ぶ! ベイズ統計 第4回
ここまでは、ベイズの定理と、ベイズ更新の例を紹介した
今回は、ベイズ統計の肝になる「確率分布」を紹介する
後半のPyMC3を使ってMCMCを使う上でもある程度の知識は必要
ポワソン分布
変数が、パラメータが の分布になる
特徴としては、
- 平均値が
- 分散も
使用用途としては、「個数」のカウントによく使われる
もともとが2項分布の確率から来ているらしく
「コインを10個投げて表の出る個数」とか、
「1万回に1回事故が起こる交差点に合計1000台の車が通った場合に何回事故が起こるか」
といった、「個々の事象の発生確率」と「合計の試行回数」から「発生回数の確率分布」を得る場合に使用される模様
そのため、変数は0、または、正の整数になる
グラフで表現すると下図になる
import matplotlib.pyplot as plt import numpy as np from scipy import stats lambda_ = 1.6 x = np.arange(10) data = stats.poisson.pmf(x, lambda_) fig = plt.figure(figsize=(6, 5)) ax = fig.add_subplot(111) ax.plot(x, data, 'o-') ax.set_xlim(-0.5, 9.5) ax.grid()
乱数で生成すると下図になる
import matplotlib.pyplot as plt import numpy as np import pandas as pd lambda_ = 1.6 np.random.seed(1) data = pd.Series(np.random.poisson(lambda_, size=1000)) fig = plt.figure(figsize=(6, 5)) ax = fig.add_subplot(111) data.plot(ax=ax, kind="hist", density=True, bins=10, range=[-0.5, 9.5], rwidth=0.6, alpha=0.5) ax.set_xlim(-0.5, 9.5) ax.grid()
ガンマ分布
変数が、パラメータが の分布になる
特徴としては、
- 平均値が
- 分散も
使用用途としては、ポワソン分布の小数点バージョンのイメージ
先ほどのポワソン分布のの分布などによく使われる
例えば、「ある交差点での年間の事故の回数の分布」はポワソンで表し、
「全国の交差点の年間の事故の平均回数()の分布」をガンマ分布で表す、など
グラフで表現すると下図になる
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, 3.2, scale=1.0/1.0) ax.plot(x, data, '-', label=r'$\alpha =3.2, \beta =1.0$') data = stats.gamma.pdf(x, 1.6, scale=1.0/2.0) ax.plot(x, data, '-', label=r'$\alpha =1.6, \beta =2.0$') data = stats.gamma.pdf(x, 3.2, scale=1.0/2.0) ax.plot(x, data, '-', label=r'$\alpha =3.2, \beta =2.0$') ax.set_xlim(-0.5, 9.5) ax.grid() ax.legend()
乱数で生成すると下図になる
import matplotlib.pyplot as plt import numpy as np import pandas as pd alpha = 1.6 beta = 1.0 np.random.seed(1) data = pd.Series(np.random.gamma(alpha, scale=1.0/beta, size=1000)) fig = plt.figure(figsize=(6, 5)) ax = fig.add_subplot(111) data.plot(ax=ax, kind="hist", density=True, bins=20, range=[-0.25, 9.75], rwidth=0.6, alpha=0.5) data.plot(ax=ax, kind="kde", bw_method=0.3) ax.set_xlim(-0.5, 9.5) ax.grid()
参考文献
この記事は以下の書籍を参考にしましたが、
私の拙い知識で書いておりますので、誤り等ありましたらご指摘ください