Python 統計

Pythonでイカサマサイコロの検定を行う

投稿日:

こちらを読むと

  • Pythonでの統計検定方法の例が分かります
  • 二項分布を用いた検定の方法が分かります

やりたいこと

先日作成した以下のサイコロを用いて、このサイコロが普通のサイコロかどうかを調べたいと思います。

サイコロの仕様:
1:1/24の確率で出る
6:7/24の確率で出る
2~5:それぞれ1/6の確率で出る

調べる方法

1の目に着目すると、サイコロを投げて、(1が出る, 1が出ない)という2種類の結果が得られるため、この試行は”二項分布”という分布に従います。以下の手順で、普通のサイコロかどうかを調べることができます。

  1. サイコロを12000回投げ、1の目が出る確率を調べる。
  2. 仮説を立てる。帰無仮説:サイコロを振って1の目が出るのは2000回(確率1/6なので普通のサイコロ)、対立仮説:サイコロを振って1の目が出るのは2000回でない(普通のサイコロでない)
  3. 有意水準αを設定する。α=0.05とする。
  4. 検定統計量を決める。二項分布では、X=「1が出た回数」、p=「1が出る確率」、n=「試行回数」とすると、統計量zは以下の式①で表される。
  5. 棄却ルールを決める。95%の確率で帰無仮説が成り立つことを考えると、zが±1.96を超えれば、帰無仮説を棄却する(普通のサイコロではない)。
  6. 検定統計量をもとに結論を出す。
式①:標準正規分布に従う検定統計量z

サイコロを12000回投げる

サイコロを12000回投げる試行を行うプログラムは、以下のようになります。

count = {1:0, 2:0, 3:0, 4:0, 5:0, 6:0}
for i in range(0,12000):
dice = get_dice()
count[dice] += 1

その結果は以下のようになりました。
1の目が少ないですね。ただし、この結果が本当に普通でないのか、検定を行って確実なものにします。

{1: 509, 2: 2019, 3: 1941, 4: 2035, 5: 1994, 6: 3502}

検定を行う

式①を用いて統計量zを求めると、以下のようになります。

結果は、z=-36.521…となり、-1.96を大幅に超えていました。
したがって、帰無仮説: サイコロを振って1の目が出るのは2000回(確率1/6なので普通のサイコロ)は棄却され、このサイコロは普通ではないイカサマサイコロであることが分かります。

ちなみに、通常通り1/6の確率で目が出る2の目で試すと、
z=0.465…となり、±1.96に収まっていることが分かります。

まとめ

  • Pythonでの統計検定方法の例が分かりました
  • 二項分布を用いた検定の方法が分かりました

検定を行うときは、具体的な試行で試すとわかりやすいと思います!

Reference

https://bellcurve.jp/statistics/course/9490.html



-Python, 統計

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

単純パーセプトロン③

こちらを読むと 単純パーセプトロンの実装方法が分かります 数式おさらい 前回のブログで、単純パーセプトロンのモデル式および、重みとバイアスの更新式を以下のように定義できました。$$y = f({\bf …

統計 検定を行うためイカサマサイコロを作ってみた

やりたいこと 統計の勉強をしておりまして、「検定」と呼ばれる分析手法を実践してみたいと思います。 検定のターゲット 検定のターゲットは、サイコロにします。サイコロは通常、1~6の目がそれぞれ、1/6の …

WordPress (Stinger)にPythonのソースコードを貼るには

こちらを読むと WordPress(Stingerテンプレート)でのPythonのソースコードの貼り方が分かりますWordPressのhtmlの編集方法が分かります やりたいこと 当ブログでは、Wor …

Pythonでt検定を行う①

こちらを読むと Pythonでの統計検定方法の例が分かりますt検定の方法が分かります やりたいこと イカサマサイコロを使った検定シリーズ第2弾です。今回は、統計検定の王道と言われる”t検定 …

Python matplotlibで複数のグラフを描画する

こちらを読むと Pythonのグラフライブラリmatplotlibで複数のグラフを描画する方法が分かります。記事の所要時間は10分です。 記事を書いたきっかけ Pythonのmatplotlibは、デ …