Up

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世紀アート

 

 

Up