Up

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

 

 

Up