2項分布のベイズ統計モデル
同時分布の3D描画
ベイズ統計の基本モデルは、データとパラメータの同時分布であり、次式で与えられる(Gelman, Carlin, Stern, Dunson, Vehtari, and Rubin (2014). Bayesian Data Analysis, third edition. CRC Press;岡本安晴(2014)「心理学データ分析と測定」勁草書房、付録C ベイズ的分析法;岡本安晴(2006)「計量心理学」培風館、付録H ベイズ的アプローチ)。
モデル(1)は、パラメータの確率分布を想定したとき、自然なモデルである。このモデルの有用性・有効性は、ベイズモデルによる分析の成功によって示されていると考えられる。モデル(1)のもとで次式が成り立つ。
いま、2項分布について考える。当該の事象の生起確率をとし、10試行中、当該の事象の生起した度数をXとおく。式(1)あるいは(2)におけるがであり、DがXである。
このとき、
である。事前分布として一様分布
を採用すると、式(1)より
を得る。同時分布を描画すると図1のようになる。
図1
グラフは画像をマウスでドラッグすることにより回転することができる(図2)。
図2
図2における赤線は、X=4で分布を切断するイメージを表している。これは、式(2)における事後確率分布を表すものであるが、定数によるスケーリングを除いた形である。
描画に用いたPythonスクリプトを以下に示す。
==========================================
from
mpl_toolkits.mplot3d import Axes3D
import
matplotlib.pyplot as plt
import numpy as np
import math
def combi(N, k):
v = 1
if (0 < k) and (k <
N):
for i
in range(1, k+1):
v *= (N - i +1) / i
return v
fig = plt.figure()
ax = Axes3D(fig)
X = np.arange(0,
10.1, 1)
P = np.arange(0.0,
1.001, 0.01)
Xg, Pg =
np.meshgrid(X, P)
def f(x, p):
return combi(10, x) * (p**x) * ((1-p)**(10-x))
Z = []
pos = -1
for p in P:
Z.append([])
pos += 1
for x in X:
Z[pos].append(f(int(x), p))
Z = np.array(Z)
ax.plot_surface(Xg,
Pg, Z, rstride = 1, cstride = 1, cmap = plt.cm.coolwarm)
plt.show()
===========================================
XおよびPのグリッド点を次のリストで表す。
X = |
[X1, X2, ・・・, Xm] |
|||
P = |
[P1, P2, ・・・, Pn] |
このとき、関数の描画に使用される関数の値はリストZに示す形で用意されている。
Z = |
[ |
||||
[f(X1, P1), |
f(X2, P1), |
・・・ |
f(Xm, P1)], |
||
[f(X1, P2), |
f(X2, P2), |
・・・ |
f(Xm, P2)], |
||
︙ |
︙ |
︙ |
︙ |
||
[f(X1, Pn), |
f(X2, Pn), |
・・・ |
f(Xm, Pn)] |
||
] |
上のプログラム(スクリプト)は圧縮ファイルPrg.zipとして用意した。ファイル名Prg.zipをクリックしてダウンロードすることができる。
なお、上のプログラムでは関数の値のリストZを格子点ごとに計算しているが、リストを引数として求めるスクリプト例を別のウェブサイトに用意している。