いっかくのデータサイエンティストをいく

1からプログラミングとデータサイエンスを独習したい

【統計学】大数の法則と中心極限定理

今回は統計学をやっていると避けては通れない大数の法則の解説とPythonでシミュレーションをしてみました。

教科書第8章SECTION3です。

大数の法則

統計だけでなく金融・政治・社会・経済を語るうえで、大数の法則は欠かすことができません。選挙速報も保険制度もこの法則があるから成り立っています。 この法則は、分散と平均さえ存在していればどのような母集団からの無作為抽出による標本であっても、サンプルサイズさえ大きくすれば標本平均は母平均に近づき、標本分散は0になります。

シミュレーション

今回はサイコロを投げて、サイコロの出た目の期待値が理論上の3.5に近づくかやってみました。ちなみに試行が1回の場合は絶対に3.5にはなりません。

#サイコロの目の出方(母平均)
myu = (1+2+3+4+5+6)/6
print(myu)
#3.5

import random

#サイコロを振る(標本平均)
def shake(trial):
    x = []
    for i in range(trial):
        x.append(random.randint(1,6))
    return sum(x)/trial

#サイコロを10回、100回、1000回、10000、100000回降る
for trial in [10,100,1000,10000,100000]:
        ave = shake(trial)
        print('試行回数{0}, 期待値平均{1}'.format(trial, ave))

#試行回数10, 期待値平均3.3
#試行回数100, 期待値平均3.59
#試行回数1000, 期待値平均3.437
#試行回数10000, 期待値平均3.4638
#試行回数100000, 期待値平均3.50307

見事に3.5に近づいているのがわかります。

中心極限定理

母平均と母分散が有限であれば、無作為標本の標本平均を標準化した統計量

f:id:imakoto0323:20180616055029p:plain

のnがおおきいほどN(0,1)の分布に従うというものです。 つまり母集団の分布がどんな分布であったとしても、その誤差はサンプルのサイズを大きくしたとき近似的に正規分布に従うという定理です。

シミュレーション

今回は試行回数を増やすと平均が0、分散が1になるか検証します。

from statistics import mean,variance
import numpy as np
def central_limit(trial2):
    z = []
    for i in range(trial2):
        z.append(np.random.normal()) 
    return mean(z), variance(z)


for trial2 in [10,100,1000,10000,100000]:
    ave = central_limit(trial2)
    print('試行回数{0}, 期待値平均{1}, 分散{2}'.format(trial2, ave[0], ave[1]))
#試行回数10, 期待値平均-0.2698716977124849, 分散0.6341543808720194
#試行回数100, 期待値平均0.033478828402187445, 分散0.7862340992587354
#試行回数1000, 期待値平均0.055126637228730936, 分散0.9746330644710819
#試行回数10000, 期待値平均-0.0038139782432359687, 分散1.0010798395988687
#試行回数100000, 期待値平均-0.0005036921767426258, 分散1.0033757869524011

いい感じでN(0,1)の標準正規分布になっています。