Up

第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()

 

 

Up