記事の概要
第3回は数値計算ライブラリであるScipyを使用した仮説検定の方法についてまとめます。
Scipy
ScipyはNumpyと同じ計算ライブラリだが、Numpyでできる行列計算等の機能に加え、高度な統計解析が可能となっている。
本記事では仮説検定の方法についてまとめる(仮説検定の詳細な数式は省いています)。
1 Sample T-Test
1 Sample T-Test(1標本t検定)は、ある正規分布の母集団の平均値が、特定の値に一致するかどうかを検定する。
p値は帰無仮説(ある正規分布の母集団の平均値が、特定の値に一致すること)を採択する確率を表す。
p値が有意水準(例えば0.05)を下回った場合、帰無仮説を棄却し、その母集団の平均値は特定の値と有意に差があることになる。
from scipy.stats import ttest_1samp
tstat, pval = ttest_1samp(example_distribution, expected_mean)
2 Sample T-Test
2 Sample T-Test(2標本t検定)は、正規分布の母集団2つについて、平均値が一致するかどうかを検定する。
p値は帰無仮説(正規分布の母集団2つについて、平均値が一致すること)を採択する確率を表す。
p値が有意水準(例えば0.05)を下回った場合、帰無仮説を棄却し、2つの母集団の平均値の間には有意に差があることになる。
from scipy.stats import ttest_ind
tstat, pval = ttest_ind(example_distribution1, example_distribution2)
ANOVA
T-Testは最大で2標本までの検定に使用できない。3つ以上の標本に対して行う検定がANOVA(Analysis of Variance, 分散分析)である。
ANOVAは、全ての母集団について平均値が一致するかどうかを検定する。
p値は帰無仮説(全ての母集団について平均値が一致すること)を採択する確率を表す。
p値が有意水準(例えば0.05)を下回った場合、帰無仮説を棄却し、少なくとも1組の母集団の間の平均値に有意に差があることになる。
ただし、どの母集団の間の平均値に有意に差があるかは判定できない。
from scipy.stats import f_oneway
fstat, pval = f_oneway(example_distribution1, example_distribution2, example_distribution3)
Tukey's Range Test
※Scipyのメソッドではない
ANOVAではどの母集団の間の平均値に有意に差があるかは判定できないが、
Tukey's Range Test(テューキーの範囲検定)によりどの母集団の間に有意に差があるかを表形式で確認できる。
from statsmodels.stats.multicomp import pairwise_tukeyhsd
import numpy as np
v = np.concatenate([a, b, c]) #a, b, c: 母集団
labels = ['a'] * len(a) + ['b'] * len(b) + ['c'] * len(c)
tukey_results = pairwise_tukeyhsd(v, labels, 0.05)
print(tukey_results)
Multiple Comparison of Means - Tukey HSD,FWER=0.05
=============================================
group1 group2 meandiff lower upper reject
---------------------------------------------
a b 7.2767 3.2266 11.3267 True
a c 4.0115 -0.0385 8.0616 False
b c -3.2651 -7.3152 0.7849 False
---------------------------------------------
Binomial Test
Binomial Test(二項検定)は、二項分布の母集団が与えられたとき、その成功確率が特定の値に一致するかどうかを検定する。
p値は帰無仮説(二項分布の母集団の成功確率が、特定の値が一致すること)を採択する確率を表す。
p値が有意水準(例えば0.05)を下回った場合、帰無仮説を棄却し、二項分布の母集団の成功確率と特定の値の間に有意な差があることになる。
from scipy.stats import binom_test
pval = binom_test(510, 10000, 0.06)
print(pval)
0.000115920327245
Chi Square Test
Binomial Testは2種類のカテゴリへの分類に関する検定となっている。
これに対し、Chi Square Test(カイ二乗検定)は、2種類以上の任意の分類に関して検定が行える。
カイ二乗検定は、「クロス集計表」に対して、各母集団がすべて同じ度数分布に従うかどうかを検定する。
p値は帰無仮説(各母集団がすべて同じ度数分布に従うこと)を採択する確率を表す。
p値が有意水準(例えば0.05)を下回った場合、帰無仮説を棄却する。
X = [[30, 10],
[20, 20]]
chi2, pval, dof, expected = chi2_contingency(X)
print(pval)
0.0376669222286
次回はPandasについてです。Kaggleコンペでも頻繁に使用するライブラリでもあり、分量が多くなる予定です。