平均値と標準偏差の事後分布
データに対して、その分布の平均値と標準偏差の事後分布をPyMC3のMCMCサンプリングによって求めるPythonスクリプトを書いてみた。
データが
data = [190, 197, 186, 204, 190, 230,
224, 223, 191, 217,
152,
183, 223, 236, 210, 192, 194, 180, 213, 197]
であるとき、事後分布を求めるスクリプトをリスト1のように用意した。
リスト1 平均値と標準偏差を求めるスクリプト
import pymc3 as pm
import arviz
as az
import matplotlib.pyplot
as plt
data = [190, 197, 186, 204, 190, 230,
224, 223, 191, 217,
152,
183, 223, 236, 210, 192, 194, 180, 213, 197]
with pm.Model()
as one_sample:
mn
= pm.Normal('mn', mu = 0.0,
sigma = 1000.0)
sgm
= pm.HalfNormal('sgm',
sigma = 1000.0)
y = pm.Normal('y',
mu = mn, sigma = sgm,
observed = data)
trace = pm.sample(3000)
print(az.summary(trace))
az.plot_trace(trace)
plt.savefig('FigureTrace.png')
az.plot_posterior(trace)
plt.savefig('FigureDistri.png')
リスト1を実行すると図1、図2に示す結果を得た。
図1
図2
PyMC3の説明は、<岡本安晴「いまさら聞けないPythonでデータ分析」丸善出版>で行っている。