見出し画像

差ではなく比で考えよう〜「数学ガール 確率の冒険」研究問題1-2


数学ガール

結城浩先生の「数学ガールの秘密ノート 確率の冒険」を読んで、巻末の「研究問題」についてあれこれ考えています。

私が別の本で勉強したことや、私の本に書こうと思っていたことが、もうほとんどそのまま形になっているという、優れた問題です。問題を引用しつつ、私の回答を書いていきます。(なるほど、これが正解か!などと思わないでくださいね! あくまでも一つの解答案です)

研究問題1-2

研究問題1-2は、こんな問題でした。

コインを投げたときに次の二つがどう違うかについて考えました。
- 表が出た回数と裏が出た回数の〈差〉
- 投げた回数に対する表が出た回数の〈比〉
0または1が出る乱数を繰り返し発生させるプログラムを作り、〈差〉と〈比〉が実際にどうなるかを調べてみましょう。

前掲書より、一部省略して引用

本文で、次のような会話が交わされていました。たとえばコイン投げをしていて、最初に、たまたま、表が10回連続で出たとする。そうしたら、そろそろ、0が出やすくなってくれないと、バランスが取れないのではないか(つまり表の出た相対度数が、いつまでたっても0.5に近づかないのではないか)という疑問を、ユーリが話しています。それに対して、「とてつもなく大きな数がバランスをとってくれる」から大丈夫だと、「僕」が返しています。

最初に表が10回連続で出たら、しばらくの間は表が出た相対度数は0.5よりずっと大きな値になるでしょう。しかし、そのままコイン投げを続けていけば、相変わらず表が出た回数が10回多いままだとしても、相対度数は0.5に近づいていく、「ユーリ」の言葉を借りれば「大きな数で薄められちゃう」ということです。
具体的に数字で表してみましょう。

具体例と疑問

  • コイン投げ10回:表10回、裏10回。表が出た相対度数=10/10=1

    • このあと、理想のコインと同じように、表と裏が同じ回数だけ出たと仮定すると、・・・

  • コイン投げ50回:表30回、裏20回。表が出た相対度数=30/50=0.6

  • コイン投げ100回:表55回、裏45回。表が出た相対度数=55/100=0.55

  • コイン投げ200回:表105回、裏95回。表が出た相対度数=105/200=0.525

という具合です。ただし、次のような疑問もわきます。

  1. 11回目以降に、表と裏がまったく同じ回数だけ出るとはいえない。つまり、表が出た回数が、10回ではなく12回とか15回とか、もっと増える可能性もある。そういうときにも、やはり「大きな数で薄められちゃう」のだろうか。

  2. 相対度数が0.5に近づいていくというなら、表と裏の回数の「差」もだんだん0に近づいていくと考えられないだろうか。それとも、そうとは限らないのだろうか。

というわけで、Rを使ってシミュレーションをしてみましょう。

Rによるシミュレーション

作成したスクリプトはこれです。

# 数学ガール研究問題
# 研究問題1-2 差と比

# フェアなコイン:表が出る確率を0.5とする
prob <- 0.5
# サイコロ投げ10000回まで試す
trial_max <- 10000
dice <- rbinom(trial_max, 1, prob)
# 相対度数と差を記録する配列
result.ratio <- numeric(length(trial_max))
result.diff <- numeric(length(trial_max))
# サイコロ投げ実験開始
for (t in 1:trial_max) {
  s <- sum(dice[1:t])
  result.ratio[t] <- s / t
  result.diff[t] <- (s*2)-t
}
# 記録
result.ratio
result.diff
# グラフ1
plot(1:trial_max, result.ratio, type="l", ylim=c(0,1), main=paste("Ratio, P =",prob))
abline(h=prob, col="red", lty=2)
# グラフ2
plot(1:trial_max, result.diff, type="l", main=paste("Diff, P =",prob))

前回とよくにたスクリプトです。変数〈result.diff〉に、表の回数と裏の回数の差を記録しています(実際の計算は、表の回数の2倍からコイン投げの回数を引いています。もし裏の方が多く出ていれば負の数になります)。

では、結果を見てみましょう。(乱数を使っていますから、実行するたびに結果は異なります。たまたま実行した2回の記録を掲載しています。)

記録1回目

前回と同様、相対度数の変化の記録。2000回以降、ほぼ0.5のまま推移しています。
回数の差の記録。4000〜6000回の間で明らかに差が大きくなっています。相対度数がわずかに(ほんとうにわずかに)大きくなっているのはこのせいだと思われます。

記録2回目

相対度数の変化は1回目とほとんど同じです。
回数の差の記録を見ると、ほぼ一貫して裏の回数が多く、8000回以降も、その差が大きくなり続けています。が、相対度数の変化はごくわずか。しっかりと「薄められ」ています。

シミュレーションからわかること

コイン投げを続けていくと、表と裏の回数の差が、より大きくなることは、ごく普通に観察されるようです。たまたま実験した2回で、2回ともそのようなことが起きています。しかし、そのことによる相対度数の変化はごくわずかでした。このことから、しっかりと「大きな数で薄められ」ていることがわかります。

また、表と裏の回数の差が、しだいに0に近づいていくことは、あるかもしれませんが、それほど期待できないともいえます。1回目は、4000〜6000回で山ができていて、そのあと少し差が小さくなっていますから、これから差が小さくなっていくのかもしれません。2回目は、シミュレーションの最後の10000回付近が一番差が大きくなっていますから、さらに差が大きくなるのか、それとも小さくなるのかわかりません。少なくともこの2回の結果からは、「差が0に近づいていくようだ」とは言えません。しかし、相対度数は、確率に近づいていっています。

なお、大数の法則の説明では、一般的に、「データの平均は真の平均に近づく」(「高校数学の美しい物語」より)という説明がされます。これは、次のように考えます。
コイン投げで表が出たときを1、裏が出たときを0としたデータとして記録し、データの平均を計算すると、「データの合計÷データの個数」という式になります。ただし、データの合計は、「1というデータが何個あったか」を数えればいいので、つまり「表が出た回数」と等しくなり、データの個数はコイン投げの回数と同じです。つまり表が出た相対度数というのは、「表=1、裏=0」というデータの平均値とも解釈できるのです。

次回はJavascriptシミュレーション

次回は、この研究問題について、Javascriptを使ったシミュレーションを紹介します。

カバー写真

カバー写真は、UnsplashJizhidexiaohailangが撮影した写真でした。