以前に二項分布の概要をまとめ、その分布をPythonで可視化してみました。
二項分布を用いて検定を行うこともできます。二項検定は結果が2つに分類されるデータの比率が期待される比率に対して偏っているかを調べる際に用いる検定です。
今回は二項分布を用いた検定の流れを把握し、Pythonで検定を行ってみたいと思います。
二項分布を用いた検定
前提
10000回投げて5200回表が出るコインがあります。
コインを投げたときの結果は表が出るか、裏が出るかの2種類です。このコインをn回投げたときにx回表が出る確率はf(x)の二項分布に従います。
仮説
前提から、帰無仮説H0と対立仮説H1は次のようになります。
- H0:コインを10000回投げたときに表が出るのは5000回である
- H1:コインを10000回投げたときに表が出るのは5000回ではない
検定統計量
検定にそのままの数字を使うことはできません。前提の情報を検定できる値に変換する必要があります。今回は統計量zを算出し、検定します。
このときμは平均(期待値E(x))、は分散V(X)です。
二項分布の場合、Xを確率変数とすると期待値E(X)=np、分散V(X)=np(1-p)が成り立ちます。このときXは表が出た回数、pは表が出る確率、nは試行の回数を表します。これをzを求める式にあてはめると、以下のようになります。
この式から得られる統計量zは標準正規分布N(0,1)に従います。
棄却域の設定
今回は有意水準をα=0.05として検定を進めていくことにします。この検定で用いる分布は「標準正規分布」です。また、今回は両側検定で行います。このとき片側あたり0.025での検定になります。
統計数値表(6ページ)からZ0.025を読むと、1.96が判定の基準となります。
検定統計量の算出と検定結果
これまでの情報をもとに検定統計量zを算出してみます。
標準正規分布を図にしたとき、検定統計量z=4は、次の位置になります。
この図から、検定統計量zは棄却域に入っていることがわかります。したがって、「有意水準5%において帰無仮説を棄却し、対立仮説を採択する」という結論に至ります。
この結論から、このコインを投げて表が出る確率は1/2ではないということが言えます。
Pythonで検定してみる
Pythonで二項分布を用いた検定をやってみます。実はPythonを使うと一瞬で結果が出てしまいます。
二項分布を用いた検定(二項検定)はscipyのstats.binom_test()を用います。引数は第一引数から成功数、試行数、仮説での成功確率の3つです。
これを実行するとその仮説検定におけるp値が返ってきます。試しに上で実施した試行を実装してみます。
from scipy import stats
p = stats.binom_test(5200, 10000, 0.5)
p
>> 6.593515598652677e-05
10000回試行して5200回表が出るコインにおいて、表が出る確率は1/2と言えるかを検定します。このとき結果はp値で返ってきます。p値とは、帰無仮説が正しいとした仮定とき、観測した事象よりも極端なことが起こる確率のことです。
今回の場合、表が出る確率が1/2のコインを10000回投げたときに5200回以上表が出る確率を表しています。その確率は0.00006…(0.0006%)程度であることがわかります。今回有意水準は5%(片側2.5%)としているので、10000回コインを投げて5200回表が出るのはかなり稀なケースであると言え、コインを投げて表が出る確率が1/2であるという帰無仮説が棄却されることになります。
Pythonでデータサイエンスするなら
Pythonでデータサイエンスをするなら、以下の書籍がおすすめです。Pandas、matplotlib、Numpy、scikit-learnといったデータサイエンスに必要なライブラリを、体系立てて一通り学ぶことができます。
ややお値段高めですが、これ1冊で十分という内容・ボリュームなので、損はしないと思います^^
まとめ
二項分布を用いた検定について、概要を見てきました。二項検定は結果が2つに分類されるデータの比率が期待される比率に対して偏っているかを調べる際に用いる検定です。
結果を求めるだけであれば、Pythonで簡単に実装できるので試してみてください^^
ではでは👋