第2回 データの分布と確率モデル
プログラム(Pythonスクリプト)の完全なリストを以下に上げる。スクリプトのファイルは圧縮ファイルfiles2.zipとしてまとめたので、クリックしてダウンロード解凍すればスクリプトファイルを開くことができる。解説記事はこのウェブサイトにある。
リスト1 ベルヌーイ分布
import scipy.stats
for i in range(20):
v =
scipy.stats.bernoulli.rvs(0.5)
print(v, end = '')
print()
n_samples = 10
n_times = 5
for t in range(n_times):
v =
scipy.stats.bernoulli.rvs(0.5, size = n_samples)
print(v, v.sum())
リスト2 二項分布と正規分布
import numpy as np
import scipy.stats
import matplotlib.pyplot as plt
p = 0.5
n_trials = 10
for t in range(20):
v =
scipy.stats.binom.rvs(n_trials, p)
print(v, end = ' ')
data = scipy.stats.binom.rvs(n_trials,
p, size = 100000)
x_range = [i - 0.5 for i in range(12)]
plt.hist(data, bins = x_range)
plt.show()
n_trials = 1000
raw_v =
scipy.stats.binom.rvs(n_trials, p, size = 100000)
z_v = (raw_v - n_trials * p) /
((n_trials * p * (1 - p)) ** 0.5)
z_indx = [ v for v in np.arange(-3.0,
3.3, 0.4)]
plt.hist(z_v, bins = z_indx, density =
True)
rng_x = np.arange(-3, 3, 0.1)
fv_norm = [scipy.stats.norm.pdf(x) for
x in rng_x]
plt.plot(rng_x, fv_norm, color = 'r',
linestyle = '-', linewidth = 3)
plt.show()
リスト3 正規分布の2乗和とカイ二乗分布
import numpy as np
import matplotlib.pyplot as plt
import scipy.stats
n = 10000
df = 5
z = scipy.stats.norm.rvs(size = (n,
df))
z2 = z ** 2
chi5 = z2.sum(axis = 1)
max_x = chi5.max()
x2_values = np.arange(0.0, max_x, 0.1)
f_chi2_values =
scipy.stats.chi2.pdf(x2_values, df)
plt.hist(chi5, bins = 30, density =
True, label = 'sum 5 squares')
plt.plot(x2_values, f_chi2_values,
linewidth = 3, label = 'df = 5')
plt.legend()
plt.show()