中心極限定理をアニメレーティングデータで検証する

in  CS, 統計学, Python

Pythonプログラミングイントロダクション(17章) まで読みました。 17章では中心極限定理について説明されています。

この章の目標の一つは「一つの標本から標本平均の信頼度を出す」ことにあります。 そのための道具として中心極限定理を利用します。

中心極限定理

中心極限定理についての引用は下記になります。

- 同じ母集団から抽出された標本サイズが十分に大きいと、標本の平均(標本平均)はおおよそ正規分布に従う
- この正規分布の平均は母集団の平均に非常に近い。
- 標本平均の分散は母集団の分散を標本サイズで割ったものに非常に近い

中心極限定理により標本平均は正規分布に従います。

また、標本平均の分散は母集団の分散を標本サイズで割ったものに非常に近いという事は、標本平均の標準偏差は母集団の標準偏差を標本サイズの平方根で割ったものに非常に近いということになります。 これを式にすると、標本平均の標準偏差を求める式は下記のようになります。

\( \sigma_{a}^{2} : 母集団の分散 \\\
\sigma_{a} : 母集団の標準偏差 \\\
\sigma_{s}^{2} : 標本平均の分散 \\\
\sigma_{s} : 標本平均の標準偏差 \\\
n : 標本サイズ \)

\[ \sigma_{s}^{2} = \frac{\sigma_{a}^{2}}{n} \] \[ \sigma_{s} = \frac{\sigma_{a}}{\sqrt{n}} \]

母集団の標準偏差を標本サイズの平方根で割ったものは標準誤差とも言われます。 そしてこのとき必要な母集団の標準偏差は、ある一定数の標本サイズがあれば標本の標準偏差を用いて良いとされているそうです。

まとめると、下記の手順で中心極限定理が正しいかを見ていきます。

  1. 標本の値から標準偏差を求め、母集団の標準偏差とする。
  2. 標本平均の標準偏差を求める。
  3. この標準偏差から95%信頼区間を導きます。
  4. 実際の母集団の平均値と標本平均の誤差を求める

アニメのレーテイングデータで検証する

kaggleのサイトでアニメのレーティングに関するデータを利用させていただきました。 本書と同様の手順でこのデータから標本サイズ200のデータを元に信頼区間を導き、 実際の母集団から求めた平均との絶対誤差を元に信頼区間の値が妥当を見ていきます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import random
import pylab
import csv

def variance(X):
    """分散"""
    mean = sum(X)/len(X)
    tot = 0.0
    for x in X:
        tot += (x - mean)**2
    return tot/len(X)


def stdDev(X):
    """標準偏差(分散の平方根)"""
    return variance(X)**0.5

def read_anime_score(path):
    """データを読み込みスコアのリストを返す"""
    scores = []
    with open(path, newline='') as f:
        reader = csv.reader(f)
        # skip header
        next(reader)
        for row in reader:
            scores.append(float(row[15]))

    return scores

data = read_anime_score('./anime_cleaned.csv')

# 母平均
popMean = sum(data) / len(data)
# 標本サイズ
sampleSize = 200
numBad = 0
for t in range(10000):
    sample = random.sample(data, sampleSize)
    # 標本平均
    sampleMean = sum(sample) / sampleSize
    # 標準誤差
    se = stdDev(sample) / sampleSize**0.5

    # 母平均と標本平均の誤差から信頼区間外のデータ数を求める
    if abs(popMean - sampleMean) > 1.96 * se:
        numBad += 1
print('Fraction outside 95% confidence interval =', numBad / 10000)
: Fraction outside 95% confidence interval = 0.05

概ね5%程度の結果が求められます。 中心極限定理で定義されている通り、標本サイズが十分大きいと標本平均が正規分布に従い、母集団の平均に非常に近いと言えそうです。

まとめ

本章は話の流れがわかりにくかったので最初は何を言っているのか正直わかりませんでしたが、 まとめてみると最終的に標本平均から信頼区間を求めたいのだとわかりました。

母集団の標準偏差が標本の標準偏差で代用できる点は気持ちの悪いところですが、本書でも下記のように説明されています。

多くの統計学者が言うには、母集団の分布がおおよそ正規分布であれば標本サイズが30から40で十分に大きい。
標本サイズが小さい場合にはt分布と呼ばれるものを使って区間計算したほうが良い。

t分布はこの後出てくるようなので一旦読み進めていくとします。


Share