大数の法則と中心極限定理 part2
そもそも、中心極限定理は成り立つのか。
この疑問に答えるためには1934年まで待たなければなりませんでした。それまで中心極限定理は推論としてだけ存在していました。現在では中心極限定理が成立するための必要条件が発見されているので、条件を満たしていれば安心してガウス分布の性質を利用できます。
中心極限定理を試そう(一様分布)
条件は大数の法則を実験したときと同じです。6面あるサイコロをイメージして、以下の実験を行ないます。ただし、平均を取ることを100回繰り返すのが異なります。
- 1~6の一様分布から10個取り出して平均を取る。これを100回繰り返す。
- 1~6の一様分布から100個取り出して平均を取る。これを100回繰り返す。
では、2つのケースを実験してみましょう。
3.4
これを100回繰り返すのですが、面倒なのでバッチ処理にして計算します。以下の2行を100回コピーして、ファイルの"central.bat"に保存します。なお、sleepプログラムは乱数の初期化を確実に行なうために使います。
rpn 1 -c sleep
以下のようにバッチファイルを実行します。
実行後、tmpファイルに100回試行した平均値が格納されていますので、これを幹葉表示してみます。
22 | 99
23 |
24 |
25 |
26 | 0
27 | 0000
28 | 00000
29 | 000
30 | 0000
31 | 0000000
32 | 000
33 | 0000000000
34 | 000000000
35 | 00000000
36 | 00000000
37 | 0000
38 | 000000
39 | 0000
40 | 00099999
41 |
42 | 0
43 | 000
44 | 0000
45 | 00999
46 |
47 |
48 | 0
ばらつきが激しく全然、ガウス分布っぽくありませんね(9が出ているのは数値計算の誤差)。標本数が少なすぎるからでしょうか。次は標本数が100個の場合です。以下のrpn式を100回コピーして、"central.bat"に保存です。
rpn 1 -c sleep
先にtmpを削除してバッチを実行します。実行結果はtmpにあるので先ほどと同じように幹葉表示してみます。
31 | 26678
32 | 002224679
33 | 003334556678999
34 | 00011122234567788889
35 | 1112333444456777888
36 | 000111122225566678
37 | 11345689
38 | 234
39 | 25
40 | 0
今度は末広がりだった分布が中央にまとまってきました。確かに中心極限定理どおり、ガウス分布に近づいているように見えます。
中心極限定理を試そう(ガウス分布)
次はガウス分布です。ガウス分布から取り出したデータの平均がガウス分布になるという合わせ鏡のような例です。
- ガウス分布から10個取り出して平均を取る。これを100回繰り返す。
- ガウス分布から100個取り出して平均を取る。これを100回繰り返す。
まず、以下の2行を100回コピーして、バッチファイルにして実行します(実行前にtmpを削除)。バッチファイルは"central.bat"です。
rpn 1 -c sleep
バッチの実行後はtmpに平均値が格納されているので、幹葉表示にして確認してみます。
-9 | 6
-8 |
-7 | 13
-6 | 167
-5 | 4689
-4 | 00113779
-3 | 11222569
-2 | 00233344578
-1 | 002223578889
-0 | 0111224566799
0 | 0011225666777799
1 | 0111469
2 | 23557
3 | 478
4 | 1778
5 | 3
6 | 0
7 | 5
元々がガウス分布だからなのか、標本数が10でもそれなりにガウス分布のようになります。ただ、釣鐘状とは言えず裾野が少々広いようです。次は表歩数が100個の場合です。以下の2行を100回コピーして、バッチにして実行してください(実行前にtmpを削除)。
rpn 1 -c sleep
バッチを実行後、tmpファイルを幹葉表示にします。
-2 | 245
-1 | 00000111222223455666679
-0 | 00000001112233333334445666677888999
0 | 00000112223333334455556777777789
1 | 014689
2 |
3 | 1
理論平均値の0を中心にまとまってきています。やはり、ガウス分布に近づいているようです。
中心極限定理を試そう(指数分布)
最後に指数分布です。同じように標本数10と100のケースで試してみます。
- 指数分布から10個取り出して平均を取る。これを100回繰り返す。
- 指数分布から100個取り出して平均を取る。これを100回繰り返す。
以下の2行を100回コピーして、バッチファイルにして実行してください(実行前にtmpを削除)。ファイル名は先ほどと同じです。
rpn 1 -c sleep
バッチ実行後、同じようにtmpファイルを幹葉表示します。
3 | 556
4 | 2
5 | 57899
6 | 001237799
7 | 11122355677889
8 | 0111247789
9 | 0224589
10 | 11223456789999
11 | 001144555668
12 | 045688
13 | 112778
14 | 011258
15 | 00089
16 | 5
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 | 0
極端に離れた値もありますが、多くはまとまって存在しています。ただ、ガウス分布というには難のある分布形状です。次に以下の2行を100回コピーして、同様に中心極限定理を試してみます。
rpn 1 -c sleep
tmpファイルを幹葉表示すると今度は裾野がかなり狭まっています。これもガウス分布に近づいているような感じです。
8 | 00123345567788999
9 | 0000011111111222223334445566777788888999
10 | 000011122444445566666667789999
11 | 1123444556
12 | 026
3つの分布について、中心極限定理どおりになるか実験してみました。平均する標本の数が多ければ多いほど、幹葉表示を見る限り、ガウス分布の形状に近づいているように思えます。
中心極限定理の応用
最後に中心極限定理の実用的な使い方を見てみます。以下のように正体の知れないデータがあったとして、その母平均を知りたいとします。
0.0585 0.0587 0.0632 0.0605 0.0607 0.0588
0.0586 0.0576 0.0626 0.0629 0.0595 0.0609
0.059 0.0587 0.0591 0.0616 0.0584 0.0596
0.058 0.0649 0.0587 0.0603 0.0586 0.0613
0.0574 0.0813 0.059 0.0596 0.0588 0.0637
0.0593 0.0868 0.059 0.0593 0.0598 0.0649
0.0584 0.0817 0.0603 0.0581 0.0583 0.0649
0.0571 0.0736 0.0621 0.0586 0.0592 0.0634
0.0577 0.0699 0.0624 0.0589 0.0592
0.0577 0.0646 0.061 0.0586 0.0585
>rpn 1000 * -c stemleaf <unkown.txt
5 | 7777788888888888888888999999999999
6 | 00000111222233344449
7 | 3
8 | 116
>rpn -c statinfo <unkown.txt
デ ー タ 58
最 小 値 0.0571
最 大 値 0.0868
範 囲 0.0297
合 計 値(Σ) 3.5738
平 均 値(μ) 0.0616172
分 散 値(σ2) 3.46621e-05
標準偏差(σ) 0.00588745
分 散 値(s2) 3.52702e-05
標準偏差(s) 0.00593887
歪度(a3≒0) 2.79829
尖度(a4≒3) 10.6786
変動係数(ν) 0.0963833
平均は0.0616172で小数ですね。分散も小さいのでばらつきはないのかも知れません。歪度と尖度を見るとガウス分布ではなさそうでし、幹葉表示から感じられる指数分布にしては裾野が短すぎる気がします。
基本統計量からでは母集団の平均を推定することはできませんが、どうしても母集団の平均値を知りたい場合、中心極限定理を逆手にとると母平均との間に以下の関係が成り立ちます。
μ = x ± 1.96 { --- }
√n
μは母平均、x(バー付き)は標本平均、sは標本標準偏差、nはデータ数です。定数の1.96は95%信頼区間を示す統計量です。この数式に当てはめれば危険率5%で母平均の範囲を求めることができます。nは最低でも30個ですが、あればあるほどいいでしょう。
本当はs(標本標準偏差)はσで母集団の標準偏差なのですが、母集団の特性自体が分からないわけですから、sで代用しています。
式中の1.96は有意水準5%(95%信頼区間)ですが、より厳しく有意水準を1%(99%信頼区間)にするなら、2.58を使用します。逆に緩めな有意水準10%(90%信頼区間)なら1.64です。
では、この式に従ってさっそく計算してみましょう。
0.0616172
>rpn -c ssdev <unkown.txt
0.00593887
これで平均と標本標準偏差が計算できました。上の式をrpnで書き直すと次のようになります。
0.0600888 0.0631456
rpn式先頭の#xには標本平均の値、#sには標本標準偏差の値を設定してください。ちょっと問題はありますが、nの数が多ければ標準偏差を使うのも方法です。参考までにsdevを使うと値は0.00588745になります。
計算の結果、このデータの母平均は0.0600888~0.0631456(95%の信頼区間)ということになります。このように正体の知れないデータ群でも真の平均の区間を知ることができます。
rpnプログラムを実行するには、rpn試用版かrpn標準版が必要です(バージョンの違いはこちら)。
sleepはカレンダー・システムパッケージに同梱されています。statinfo, stemleaf, rand-gau, rand-expはrpnマイスターパッケージに同梱されています。foldはユーティリティパッケージに同梱されています。ssdevはビジネス統計(基礎編)に同梱されています。詳しくはプロダクトを参照ください。