コイン投げの正規分布

「完全独習 統計学入門」小島寛之 著をお勉強中で、下記のような命題を実際に検証してみた。

コインをN枚同時に投げて(あるいはN回続けて投げて),そのうち何枚が表になったかをデータとして記録する。この作業を膨大に実行して、表の枚数Xの出た相対度数のヒストグラムを作ると、それは近似的に、平均値がN/2、S.D.が√N/2になる

perlスクリプトをかいてそれをグラフにしてみました。スクリプトで出力したのは同時に100枚投げて表になった枚数をkeyにして10万回繰り返した分布をvalueにいれたハッシュです。結果はエクセルで分析しました。

use strict;
use warnings;
use GD::Graph::bars;
use Data::Dumper;

my $N = 100;
my %distribution;
for ( 1 .. 100000 ) {
    my $num_of_omote = throw($N);
    $distribution{$num_of_omote}++;
}

for ( sort keys %distribution ) {
    printf "%s\t%s\n", $_, $distribution{$_};
}
graph( \%distribution );

sub graph {
    my $dist  = shift;
    my @label = sort { $a <=> $b } keys %$dist;
    my @data  = map { $dist->{$_}, } @label;
    my $graph = GD::Graph::bars->new( 600, 450 );

    my $img = $graph->plot( [ \@label, \@data ] );
    open my $fh, ">", "./graph.gif" or die;
    print $fh $img->gif;
    close $fh;
}

sub throw {
    my $n     = shift;
    my $total = 0;
    for ( 1 .. $n ) {
        $total++ if is_omote();
    }
    return $total;
}

sub is_omote {
    my $rand = int( rand(10) );
    ## 1はオモテ 0はウラと考える                                                       
    return ( $rand % 2 );
}


結果のグラフはきれいに正規分布の形になりました。(グラフの数値が見えなくなってるけどまぁいいや)

下記はごちゃごちゃしてますがCSVデータです。perlで出力したハッシュのkeyが「階級値」でvalueが「度数」となります。

  • 「相対度数」は「度数/100000」で導出
  • 「階級値X相対度数」の和は平均となります。これは50.0088となり命題を満たします。
  • 「偏差」は「階級値-平均」で導出
  • 「偏差の2乗X相対度数」の和が「分散」です。
  • 標準偏差(S.D.)」は分散の√を取ることで導出。これも約5となり命題を満たします。

階級値,度数,相対度数,階級値X相対度数,偏差,偏差の2乗,偏差の2乗X相対度数
28,1,0.00001,0.00028,-22.0088,484.3872774,0.004843873
30,3,0.00003,0.0009,-20.0088,400.3520774,0.012010562
31,7,0.00007,0.00217,-19.0088,361.3344774,0.025293413
32,11,0.00011,0.00352,-18.0088,324.3168774,0.035674857
33,18,0.00018,0.00594,-17.0088,289.2992774,0.05207387
34,35,0.00035,0.0119,-16.0088,256.2816774,0.089698587
35,82,0.00082,0.0287,-15.0088,225.2640774,0.184716544
36,163,0.00163,0.05868,-14.0088,196.2464774,0.319881758
37,281,0.00281,0.10397,-13.0088,169.2288774,0.475533146
38,448,0.00448,0.17024,-12.0088,144.2112774,0.646066523
39,720,0.0072,0.2808,-11.0088,121.1936774,0.872594478
40,1072,0.01072,0.4288,-10.0088,100.1760774,1.07388755
41,1524,0.01524,0.62484,-9.0088,81.15847744,1.236855196
42,2267,0.02267,0.95214,-8.0088,64.14087744,1.454073692
43,3063,0.03063,1.31709,-7.0088,49.12327744,1.504645988
44,3799,0.03799,1.67156,-6.0088,36.10567744,1.371654686
45,4890,0.0489,2.2005,-5.0088,25.08807744,1.226806987
46,5805,0.05805,2.6703,-4.0088,16.07047744,0.932891215
47,6649,0.06649,3.12503,-3.0088,9.05287744,0.601925821
48,7305,0.07305,3.5064,-2.0088,4.03527744,0.294777017
49,7791,0.07791,3.81759,-1.0088,1.01767744,0.079287249
50,8104,0.08104,4.052,-0.0088,7.744E-05,6.27574E-06
51,7743,0.07743,3.94893,0.9912,0.98247744,0.076073228
52,7408,0.07408,3.85216,1.9912,3.96487744,0.293718121
53,6610,0.0661,3.5033,2.9912,8.94727744,0.591415039
54,5794,0.05794,3.12876,3.9912,15.92967744,0.922965511
55,4767,0.04767,2.62185,4.9912,24.91207744,1.187558732
56,3788,0.03788,2.12128,5.9912,35.89447744,1.359682805
57,3079,0.03079,1.75503,6.9912,48.87687744,1.504919056
58,2282,0.02282,1.32356,7.9912,63.85927744,1.457268711
59,1617,0.01617,0.95403,8.9912,80.84167744,1.307209924
60,1075,0.01075,0.645,9.9912,99.82407744,1.073108832
61,718,0.00718,0.43798,10.9912,120.8064774,0.867390508
62,471,0.00471,0.29202,11.9912,143.7888774,0.677245613
63,260,0.0026,0.1638,12.9912,168.7712774,0.438805321
64,164,0.00164,0.10496,13.9912,195.7536774,0.321036031
65,92,0.00092,0.0598,14.9912,224.7360774,0.206757191
66,53,0.00053,0.03498,15.9912,255.7184774,0.135530793
67,13,0.00013,0.00871,16.9912,288.7008774,0.037531114
68,12,0.00012,0.00816,17.9912,323.6832774,0.038841993
69,10,0.0001,0.0069,18.9912,360.6656774,0.036066568
70,3,0.00003,0.0021,19.9912,399.6480774,0.011989442
71,2,0.00002,0.00142,20.9912,440.6304774,0.00881261
72,1,0.00001,0.00072,21.9912,483.6128774,0.004836129