第3回 データの分布と確率モデル
プログラム(Pythonスクリプト)の完全なリストを以下に上げる。スクリプトのファイルは圧縮ファイルfiles3.zipとしてまとめたので、クリックしてダウンロード解凍すればスクリプトファイルを開くことができる。プログラムの説明は連載本文を参照されたい。
リスト1 正規分布の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()
リスト2 t分布と正規分布とカイ二乗分布
import
numpy as np
import
matplotlib.pyplot as plt
import
scipy.stats
n
= 100000
z
= scipy.stats.norm.rvs(size = n)
df
= 3
ch2
= ((scipy.stats.chi2.rvs(df, size = n)) / df) ** 0.5
t_v
= z / ch2
t_range
= np.arange(-5, 5, 0.2)
t_dv
= scipy.stats.t.pdf(t_range, df)
plt.hist(t_v,
bins = t_range, density = True, label = 'z/$\chi$')
plt.plot(t_range,
t_dv, linewidth = 3, label = 't')
plt.legend()
plt.show()
リスト3 t分布の自由度と正規分布
import numpy as np
import matplotlib.pyplot as plt
import scipy.stats
samples = scipy.stats.t.rvs(5, size = 10)
print(samples)
x_range = np.arange(-4.0, 4.0, 0.1)
f_t1 = scipy.stats.t.pdf(x_range, 1)
f_t2 = scipy.stats.t.pdf(x_range, 2)
f_t10 = scipy.stats.t.pdf(x_range, 10)
f_n = scipy.stats.norm.pdf(x_range)
plt.plot(x_range, f_t1, label = 'df = 1')
plt.plot(x_range, f_t2, label = 'df = 2')
plt.plot(x_range, f_t10, label = 'df = 10')
plt.plot(x_range, f_n, label = 'normal')
plt.legend()
plt.show()
リスト4 F分布
import
numpy as np
import
matplotlib.pyplot as plt
import
scipy.stats
n
= 100000
df1
= 3
ch2_1
= (scipy.stats.chi2.rvs(df1, size = n)) / df1
df2
= 5
ch2_2
= (scipy.stats.chi2.rvs(df2, size = n)) / df2
F_v
= ch2_1 / ch2_2
F_range
= np.arange(0.0, 20.0, 0.25)
F_p
= np.arange(1.0e-300, 20.0, 0.1)
F_dv
= scipy.stats.f.pdf(F_p, df1, df2)
plt.hist(F_v,
bins = F_range, density = True)
plt.plot(F_p,
F_dv, linewidth = 3)
plt.show()