2008年09月18日
一様分布の和は一様に分布しない話 (1)
一様分布から2つの値を取り出して足し合わせたものは一様には分布しないそうだ。
なんか違和感があったので、じっくりと悩んでみた。
Firebug で実証実験
まずは手軽に実験するために Firebug を使って実験。
Math.random() は 0~1 までの一様乱数なので、一様分布といってよいはず。
まずはそれを確かめる。
var N = 10000; var result = []; for(var i = 0; i < N; i++){ var n = Math.random(); var index = Math.floor(n * 10); result[index] = isNaN(result[index]) ? 1 : result[index] + 1; } var i = 0; while(result.length){ console.log("%f~ : %f%", i++ / 10, result.shift() * 100 / N); }
出力はこうなる。0~1 までの間に、10% ずつ分布してるのが分かる。
0~ : 9.84% 0.1~ : 10.49% 0.2~ : 10.76% 0.3~ : 9.96% 0.4~ : 10.08% 0.5~ : 9.44% 0.6~ : 10.16% 0.7~ : 9.62% 0.8~ : 10% 0.9~ : 9.65%
すばらしい。Math.random() は一様分布だ。
じゃあ、一様分布の和を確認しよう。ソースコードを一箇所修正する。
var n = Math.random() + Math.random();
0~1 までの値を2つ足したんだから、0~2 までの一様分布になるんじゃないの…と思いきや、実際にはこうなった。
0~ : 0.48% 0.1~ : 1.48% 0.2~ : 2.76% 0.3~ : 3.44% 0.4~ : 4.76% 0.5~ : 4.85% 0.6~ : 6.48% 0.7~ : 7.58% 0.8~ : 8.4% 0.9~ : 9.91% 1~ : 9.89% 1.1~ : 8.16% 1.2~ : 7.8% 1.3~ : 6.61% 1.4~ : 5.06% 1.5~ : 4.3% 1.6~ : 3.54% 1.7~ : 2.51% 1.8~ : 1.62% 1.9~ : 0.37%
OH!!
端っこは 0.5% 程度なのに、1.0~1.1 は 10% 近い。なんという顕著な差!
離散で考える
連続値で考えるから分かりにくいので、離散的な確率を考えてみよう。そうすれば、中学生レベルの数学の問題になる。
離散値で一様分布といえばサイコロ。サイコロは 1~6 までの整数を一様に返す。
だから、「一様分布の和」を離散の世界で言い換えると、「サイコロを2回ふったときの目の和の分布はどうなるの?」という問題になる。
サイコロを2回振ったときの組み合わせは36通り。表を作って目の和がどうなるか埋めてみた。
1 | 2 | 3 | 4 | 5 | 6 | |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
2 | 3 | 4 | 5 | 6 | 7 | 8 |
3 | 4 | 5 | 6 | 7 | 8 | 9 |
4 | 5 | 6 | 7 | 8 | 9 | 10 |
5 | 6 | 7 | 8 | 9 | 10 | 11 |
6 | 7 | 8 | 9 | 10 | 11 | 12 |
ということで、一番多いのは 7。36回中6回登場するので、確率は 6/36 = 16.67%。
逆に、一番少ないのが 2 と 12 で 1/36 = 2.77%。
先ほどの例と同様に、真ん中の値ほど、登場する確率が高い。
サイコロで考えると確かに納得! イメージも沸きやすい。
今日のまとめ
確率は「連続」が分かりにくいときは、「離散」で考え直すとイメージが沸きやすいかも。
続く?(中心極限定理の話とか)。