📘

推計統計学と中心極限定理

2023/06/07に公開

推計統計学について学ぶ

こんにちは!わいわわです。
記述統計学を学習してきましたが、今回は推計統計学について触れていきます。
違いなどをはっきりさせて、自分のものにしていきます!

推計統計学

統計学にはこれまで学習をしてきた「記述統計学」に加えて、
「推計統計学」があります。推計統計学では、、、
・収集したデータをもとにして真の平均値や分散を推測する
・収集したデータに重要な意味があるのか、それとも集められた平凡なものなのかを判断する
といったことを行います。
後者の判断することを検定と呼ぶこともあります。

母集団と標本

統計学では調査の対象となるすべてのデータのことを母集団と呼びます。
選挙の場合は有効票全体が母集団で、選挙の出口調査がサンプリング
調べた結果が標本となります。

全数調査と標本調査

母集団の全てについて調査することを全数調査と呼びます。
これに対して母集団から取り出した一部の標本について調査することを標本調査といいます。
全数調査はすべて調べるため、時間も費用もかかります。
ただし、「学校の1クラスだけ」「特定の学年の成績だけ」「社員の営業成績だけ」のように
母集団の親模がある程度限定される場合は全数調査が可能です。

対して、調査対象の全てのデータを集めることが困難な場合に「標本調査」が有効です。
・データの収集に時間や費用をかけられない場合
・すべてのデータを調べることが不可能な場合
は調査対象の一部のデータを用いて分析を行います。
選挙の出口調査がまさしくこの標本調査なのです。

ランダムサンプリング

選挙の出口調査や製品の抜き取り検査では、母集団から無作為に標本を取り出します。
このことをランダムサンプリングとよびます。

大数の法則

母集団からランダムに抽出した標本に対して平均値を求めることをN回繰り返し、
標本平均のさらに平均を求めることを考えます。
回数Nを大きくしていくと、やがてその平均値は母集団の平均値に近づいていく
という法則があり、これを大数の法則と呼びます。

実際に確認してみる

サイコロ投げを例に、大数の法則を確認していきます。
サイコロを1回投げた時の期待値は「3.5」です。
期待値…1階の施行で得られる値の平均値のこと
(1+2+3+4+5+6)/6=3.5

標本平均を求める回数Nを大きくしていくとどうなるか、確認します。

import numpy as np
import matplotlib.pyplot as plt

# 試行回数
steps = 1000
# サイコロ
dice = np.array([1, 2, 3, 4, 5, 6])
# 試行回数を1から始まる等差数列にする
count = np.arange(1, steps + 1)

# 標本平均の平均を求める処理を3回実施
for i in range(3):
    # diceからランダムに1つを取り出し、これを1回の試行で得られる平均値とする
    # これをstepsだけ繰り返し、その累積和を求める
    sample_mean_cum = np.random.choice(dice, steps).cumsum()
    # 標本平均の平均を求める
    # 試行1回ごとの平均値を試行回数で割って
    # 各試行ごとに平均値を求めることでシミュレーションする
    plt.plot(sample_mean_cum / count)
    plt.grid(True)

!出力結果!

試行一回ごとの平均値の累積和を試行回数で割ることで、
「試行回数が増えると標本平均の平均がどうなるのか」を示しました。
1000回の試行を3セット繰り返しましたがどのセットでも試行回数が増えるにしたがって
「サイコロを1回投げた時の期待値が3.5」に近づいている様子が確認できました。

中心極限定理

中心極限定理
元のデータの分布によらず、十分な数の標本平均の分布は正規分布に従うこと。
つまり、バラバラに分布しているデータであってもサンプルの平均をとることを繰り返せば
平均の分布は次第に正規分布するようになる、というものです。

実際に確認

サイコロを1回投げた時の期待値は「3.5」です。
サイコロをnum回投げて、出た目の平均を求めることを1セットとし、
これを1000回繰り返します!

import numpy as np
import matplotlib.pyplot as plt

def central_theory(num):
    # サイコロ
    dice = np.array([1, 2, 3, 4, 5, 6])
    # 1からnum+1までの等差数列を作成
    count = np.arange(1, num + 1, dtype=float)
    # num回の試行を何セット繰り返すか
    steps = 1000
    # num回の試行から得られた平均値をstepsの数だけ格納する配列
    mean = np.array([])

    # サイコロ振りをnum回実施して出た目の平均を取る処理をsetps回繰り返す
    for i in range(steps):
        # diceからランダムに1つを取り出すことをnum回繰り返し、
        # 抽出されたサイコロの目の累積和を求める
        sample_mean_cum = np.random.choice(dice, num).cumsum()
        # num回の試行で得られたサイコロの目の累積和を
        # 試行回数numで割って平均値を求め、配列meanに追加
        mean = np.append(mean, sample_mean_cum[num - 1] / num)

    # 標本平均の平均をヒストグラムにする
    plt.hist(mean)
    plt.grid(True)
    plt.show()

central_theory(3)

!出力結果!

まずは3回で実行してみました。
次は6回でやってみます

central_theory(6)

!出力結果!

最後は100回です。

central_theory(100)

!出力結果!

このように...
「試行回数を増やしていくと次第に一峰性の正規分布の形になっていく」
ことが確認できました。
母集団がどのような分布であってもサンプルサイズが大きい時に
標本平均の分布が正規分布で近似できる、としたのが中心極限定理です。

所感

今回は推計統計学に触れていきました。
テキストだけで読んだときに「まぁなんとなくその通りだよね」と理解できましたが
実際にグラフを出して視覚化し、より深く理解することができました。
やってみるのは大切ですね、引き続き頑張ります!

Discussion