2項分布のシミュレーション
<岡本安晴「データを使いこなすための統計入門」22世紀アート>の付録 確率: E.2 2項分布で説明されている2項分布のシミュレーションを行うプログラムをリスト1のように作成した。
リスト1 2項分布
import numpy
as np
import scipy.stats
as ss
import matplotlib.pyplot
as plt
n_simu = 10000
N = int(input('N
= '))
p = float(input('p = '))
sample = np.empty(n_simu, dtype = 'int')
for s in range(n_simu):
v = ss.bernoulli.rvs(p,
size = N)
sample[s] = v.sum()
plt.hist(sample, bins = np.arange(-0.5,
N+0.6, 1), density = True,
label = 'Simulation')
x_coord = np.arange(0,
N+0.1, 1)
y_coord = ss.binom.pmf(x_coord, N, p)
plt.plot(x_coord, y_coord, label = 'Model')
plt.title(f'p =
{p}, N = {N}')
plt.legend()
plt.show()
ベルヌーイ試行N試行からなる2項分布のサンプリングをベルヌーイ分布のクラス型を用いて次のコードで行っている。
v = ss.bernoulli.rvs(p, size = N)
このサンプリングをn_simu = 10000回行った結果のグラフと2項分布のグラフを重ねて表示するグラフを描画している。
リスト1のスクリプトを実行すると、まず、ベルヌーイ試行の試行数と確率の設定が求められる。
N = 20
p = 0.7
pの値を設定すると計算が始まり、図1のグラフが表示される。
図1
シミュレーションによるサンプリングのヒストグラムと2項分布のグラフが重ねて表示されている。
参考文献
岡本安晴(2022)データを使いこなすための統計入門.22世紀アート