Up

平均値と標準偏差の事後分布

 

データに対して、その分布の平均値と標準偏差の事後分布をPyMC3MCMCサンプリングによって求める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データ分析丸善出版>で行っている。

 

 

Up