LoginSignup
4
5

More than 3 years have passed since last update.

Pythonで「中心極限定理」を確かめてみる

Last updated at Posted at 2019-07-30

Pythonで「中心極限定理」を確かめてみる
母平均の区間推定で「中心極限定理」を使う

中心極限定理

統計において正規分布は重要な役割を果たしていますが、それは以下のような中心極限定理が成り立つからです。これにより、nを十分大きい数字として、n個の標本を取り出してその平均を調べる時、正規分布の特性を適用して調べることができます。

\begin{align}
\\
&平均値\mu、分散\sigma^2 の分布に従う独立したn個の確率変数X_1、X_2、...、X_n について、\\
&次のように\bar{X}を定義する。\\
\\
&\bar{X} = \frac{X_1 + X_2 + ... + X_n}{n}\\
&nが大きいとき、この確率変数\bar{X}は平均値\mu、分散\frac{\sigma^2}{n}の正規分布に従う。\\
&\qquad \qquad  \qquad \qquad  \qquad \qquad  \qquad \qquad \qquad  \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad  \qquad  \\
\end{align}

例:一様分布の平均を正規分布で近似する

Juliaで学ぶ確率変数(5) - 正規分布(連続型)
Juliaで学ぶ確率変数(6) - 一様分布(連続型)

中心極限定理によって、次のことが言える

  • n個の確率変数を取ってその平均を求める
  • それを何回も繰り返せば、平均値(X)とその確率(Y)のグラフは正規分布で近似できる

以上のことを確かめるためにPythonプログラムを作ります。
プログラムの概要は以下の通りです。

  • もととなる確率変数として、区間[0, 10]の一様分布を考えます。 n=10個の一様分布の平均を求めます。
  • それを1000回繰り返し、同じ平均値の頻度(何回出現するか)をカウントします。
  • 頻度を確率に変換して(1000で割って)、プロットします。
import numpy as np
import matplotlib.pyplot as plt
from decimal import Decimal

d={}
for i in range(1000):
    a=np.random.uniform(low=0.0,high=10, size=10)  # 任意の範囲の浮動小数点数
    b=np.mean(a)
    c=np.around(b, decimals=0)
    if c in d:
        d[c]=d[c]+1
    else:
        d[c]=1
ds = sorted(d.items(), key=lambda x:x[0])
print(ds)
xs=[x for (x,y) in  ds]
ys=[y/1000 for (x,y) in  ds]
print(xs)
print(ys)
plt.bar(xs, ys, 0.35, linewidth=0)

一応、プロットする数字を出力しました。

[(2.0, 3), (3.0, 52), (4.0, 227), (5.0, 422), (6.0, 245), (7.0, 48), (8.0, 3)]
[2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0]
[0.003, 0.052, 0.227, 0.422, 0.245, 0.048, 0.003]

なるほど、プロットしたグラフは正規分布に近いようです。

image.png

実際に正規分布で近似できているかを確認します。

中心極限定理の定理を使って、もとの一様分布平均値分散から、正規分布平均値分散を求めます。

  • 平均値は一様分布と同じで5です。
  • 分散は(10*10/12)/10です。

前のプログラムの最後尾に、以下のプログラムを追加して、再実行しプロットします。

from scipy.stats import norm

X = np.arange(0,10,1)
Y = norm.pdf(X, loc=5, scale=np.sqrt(10*10/12/10))
plt.plot(X,Y,color='r')

なるほど、確かに正規分布で近似できているようです。中心極限定理は魔法のような定理ですね!

image.png

今回は以上です。

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5