中心極限定理で標本平均が正規分布に従う分布と従わない分布

More than 1 year has passed since last update.

Julia Advent Calendar 5日目の記事です。

中心極限定理によると、どのような母分布であっても標本数が十分大きければ、その標本平均は正規分布に従うのだそうです。
しかし、母分布の分散が有限ではない場合、標本平均はけっして正規分布には従わないようです。

どのような分布の場合に、どのくらいの数の標本を揃えれば標本平均が正規分布に従うのか Julia を使って調べてみましょう。

標本分布が正規分布に従うかどうかを Julia で調べる方法

標本分布が正規分布に従っているかどうかは、Kolmogorov-Smirnov 検定や Anderson-Darling 検定などの分布の比較を行う検定によって調べられます。正規分布との比較をする場合は Kolmogorov-Smirnov 検定よりも Anderson-Darling 検定の方が良いようです。

Julia には HypothesisTests.jl という仮説検定ライブラリがあります。3日前に Anderson-Darling 検定が実装されていますが、私が悪いのか実装が悪いのか分かりませんが上手く動いてないようなので、本記事では ExactOneSampleKSTest 関数による Kolmogorol-Smirnov 検定を使用します。

この関数は、帰無仮説 h_0 として「与えられた数値配列が与えられた分布から生成されている」を設定します。本記事の用途としては、xs が検証したい標本であるとして以下の関数呼出の結果を見れば良いことになります。

ExactOneSampleKSTest(xs, Normal(mean(xs), std(xs)))

ここで、Normal は Distributions.jl ライブラリが提供する正規分布です。

関数定義

与えられた分布に従う乱数を指定された数だけ生成し、その標本平均が正規分布に従っているかどうかを検定し、その結果を表示する関数を以下のように定義します。

function testnormal(dist, n)
  means = [mean(rand(dist, n)) for i in 1:10000]
  print(ExactOneSampleKSTest(means, Normal(mean(means), std(means))))
  return means
end

試しに5つの正規乱数の平均が正規分布に従うかどうか確認してみましょう。

julia> testnormal(Normal(), 5)
Exact one sample Kolmogorov-Smirnov test
----------------------------------------
Population details:
    parameter of interest:   Supremum of CDF differences
    value under h_0:         0.0
    point estimate:          0.008045225323243144

Test summary:
    outcome with 95% confidence: fail to reject h_0
    two-sided p-value:           0.5341160627316476 (not significant)

Details:
    number of observations:   10000

outcome with 95% confidence: fail to reject h_0 つまり帰無仮説を棄却できなかったということなので、5つの正規乱数の平均は正規分布に従うことが分かりました。まぁ、当たり前ですね。

さまざまな分布のさまざまなサイズの標本について調べてみる

testnormal 関数を使って、さまざまな分布についてさまざまなサイズの標本の平均が正規分布に従うかどうか調べてみました。その結果は以下のノートブックをご覧ください。

https://github.com/mrkn/JuliaStatsExamples/blob/master/CentralLimitTheorem.ipynb

分布の種類ごとに結果をまとめたものが次の表です。

分布 標本平均が正規分布に従うことが確認できた最小標本数
正規分布 5
二項分布 2000 (だが、正規分布にならない場合もある)
指数分布 1000
Poisson 分布 2000
対数正規分布 5000
幾何分布 1000 (だが、正規分布にならない場合もある)
Pareto 分布 N/A
Rayleigh 分布 100

標本平均が正規分布に従う標本サイズが分布によって異なっていることが分かると思います。

また、Pareto 分布は N=10000 で試しても p-value は 0.0 でした。パラメータ $\alpha$ が 1.0 の Pareto 分布は分散が無限大になるため、この結果は中心極限定理の帰結と整合しています。

まとめ

本記事では、Julia Advent Calendar 5日目として、Julia を用いて中心極限定理の内容を実験により確認しました。その結果、分布によって標本平均が正規分布に従う標本数が異なっていることが確認できました。