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の目が少ないですね。ただし、この結果が本当に普通でないのか、検定を行って確実なものにします。

検定を行う

式①を用いて統計量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

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

関連記事

Pythonでt検定を行う①

Table of Contents こちらを読むとやりたいことt検定とは仮説を立てるサイコロを振るまとめ こちらを読むと Pythonでの統計検定方法の例が分かりますt検定の方法が分かります やりたい …

日本語の疑似コードによるプログラミング(プログラミング初心者のために)

Table of Contents こちらを読むとはじめに課題:バブルソート関数の定義疑似コードを書く繰り返しをまとめるソートの交換処理を具体的に疑似コード⇒Pythonコードへの変換まとめRefer …

単純パーセプトロン③

Table of Contents こちらを読むと数式おさらい実装まとめReference こちらを読むと 単純パーセプトロンの実装方法が分かります 数式おさらい 前回のブログで、単純パーセプトロンの …

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

Table of Contents こちらを読むとやりたいこと手順Gistとはまとめ こちらを読むと WordPress(Stingerテンプレート)でのPythonのソースコードの貼り方が分かります …

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

Table of Contents やりたいこと検定のターゲットイカサマサイコロの仕様 イカサマサイコロの実装まとめ やりたいこと 統計の勉強をしておりまして、「検定」と呼ばれる分析手法を実践してみた …

Twitterフォロー

Twitterタイムライン