Up

第6回 確率モデルと検定――後編――

 

プログラム(Pythonスクリプト)の完全なリストを以下に上げる。スクリプトのファイルは圧縮ファイルfiles6.zipとしてまとめたので、クリックしてダウンロード解凍すればスクリプトファイルを開くことができる。プログラムの説明は連載本文を参照されたい。

 

リスト1 対立仮説の下でのt値のシミュレーション

import numpy as np

import matplotlib.pyplot as plt

import scipy.stats

 

def calc_t(X, Y):

    M = len(X)

    N = len(Y)

    df = M + N - 2

    meanX = X.mean()

    meanY = Y.mean()

    ss = (((X - meanX) ** 2).sum() + ((Y - meanY) ** 2).sum()) / df

    ss_XY = ss * (M + N) / (M * N)

    t = (meanX - meanY) / (ss_XY ** 0.5)

    return t, df

 

muA = 170

muB = 180

sgm = 6

M = 10

 

N_Exp = 10000

t_values = []

for t in range(N_Exp):

    X = scipy.stats.norm.rvs(loc = muA, scale = sgm, size = M)

    Y = scipy.stats.norm.rvs(loc = muB, scale = sgm, size = M)

    t, df = calc_t(X, Y)

    t_values.append(t)

 

t_range = [v for v in np.arange(-4, 4, 0.25)]

p_values = [scipy.stats.t.pdf(t, 2 * M - 2) for t in t_range]

plt.hist(t_values, density = True)

plt.plot(t_range, p_values, linewidth = 3)

plt.plot([-5.45, -5.45], [0.0, 0.1], 'r-o', linewidth = 5, label = 't = -5.45')

plt.legend()

plt.title('$\mu$A = {0}     $\mu$B = {1}'.format(muA, muB), fontsize = 16)

plt.show()

 

 

リスト2 棄却域の描画

import numpy as np

import matplotlib.pyplot as plt

import scipy.stats

 

df = 18

t_a2L = scipy.stats.t.ppf(0.025, df)

t_a2R = scipy.stats.t.ppf(0.975, df)

print('P(t<{0:.3f}) = 0.025,   P(t>{1:.3f}) = 0.025'.format(t_a2L, t_a2R))

t_range = np.arange(-4.0, 4.0, 0.01)

p_values = scipy.stats.t.pdf(t_range, df)

plt.plot(t_range, p_values)

plt.hlines(0.0, -4.0, 4.0, color = 'k')

plt.vlines(t_a2L, 0.0, scipy.stats.t.pdf(t_a2L, df), color = 'r', linewidth = 2,

           label = 'P(t<{0:<0.2f}) = 0.025'.format(t_a2L))

t_rangeL = np.arange(-4.0, t_a2L, 0.01)

plt.fill_between(t_rangeL, scipy.stats.t.pdf(t_rangeL, df), color = 'r', alpha = 0.5)

plt.vlines(t_a2R, 0.0, scipy.stats.t.pdf(t_a2R, df), color = 'm', linewidth = 2,

           label = 'P(t>{0:<.2f}) = 0.025'.format(t_a2R))

t_rangeR = np.arange(t_a2R, 4.0, 0.01)

plt.fill_between(t_rangeR, scipy.stats.t.pdf(t_rangeR, df), color = 'm', alpha = 0.5)

plt.title('t distribution with df = 18', fontsize = 16)

plt.legend()

plt.show()

 

 

リスト3 t値と確率

import scipy.stats

 

df = 18

t = -2.0

p = scipy.stats.t.cdf(t, df)

print('p = ', p)

 

Up