放送大学「心理統計法(‘17)」第2章 事後分布とベイズの定理
- 授業ではRスクリプトを使ってますが、以下はPython3スクリプトです。
Python3のスクリプト
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
import numpy as np
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
from os.path import basename, dirname
if __name__ == '__main__':
#図2.2 恩赦される確率の事後分布
np.random.seed(1234) #乱数の種
nod = 10000 #乱数の数
BdAa = np.random.rand(nod) #f(Bd|Aa)の確率分布
#print(BdAa)
AaBd = BdAa / (BdAa + 1) #事後分布
#print(AaBd)
mean = np.mean(AaBd) #EAP推定値
print("EAP推定値 : %6.3f" % mean)
median = np.median(AaBd) #MED推定値
print("MED推定値 : %6.3f" % median)
#事後分布、MAP推定値=0.5
plt.hist(AaBd,normed=True)
#plt.show()
plt.savefig("%s/%s1.png" % (dirname(__file__), basename(__file__)), dpi=70)
plt.clf()
#第2章演習問題 1
a = (0.15 * 0.5)/((0.15 * 0.5)+(0.02 * (1-0.5)))
b = (0.22 * 0.8823529)/((0.22 * 0.8823529)+(0.01 * (1- 0.8823529)))
c = (0.25 * 0.9939759)/((0.25 * 0.9939759)+(0.01 * (1- 0.9939759)))
print(a, b, c)
実行の結果
EAP推定値 : 0.307
MED推定値 : 0.335
0.8823529411764707 0.9939759012392944 0.9997576343665803