中心極限定理とは?証明と応用をわかりやすく解説

サイコロの出目の分布は一様分布です。指数分布は右に長い裾を引く非対称な分布です。コイン投げの結果は 0 か 1 の離散的なベルヌーイ分布です。これらの分布は正規分布とは似ても似つかない形をしています。

しかし、これらの分布から標本を何度も取り出して平均を計算すると、不思議なことにその 標本平均の分布はいつも正規分布に近づきます。この驚くべき普遍的性質を数学的に保証するのが 中心極限定理(Central Limit Theorem, CLT) です。

中心極限定理は確率論の最も重要な定理の一つであり、正規分布があらゆる分野に現れる根本的な理由を説明します。身長や測定誤差、株価の日次収益率など、多数の微小な独立要因が加法的に重なった結果は正規分布に近づくのです。また、統計的検定や信頼区間の構成において「なぜ正規分布やt分布を使ってよいのか?」という問いへの答えでもあります。

本記事の内容

  • 中心極限定理の数学的定式化
  • 特性関数を用いた証明のスケッチ
  • 一様分布・指数分布・ベルヌーイ分布での数値検証
  • 統計学(信頼区間・仮説検定)への応用
  • Pythonでの実装と可視化

前提知識

この記事を読む前に、以下の記事を読んでおくと理解が深まります。

大数の法則との関係

中心極限定理を学ぶ前に、大数の法則との関係を整理しておきましょう。

大数の法則 は「標本平均 $\bar{X}_n$ は、$n \to \infty$ で母平均 $\mu$ に収束する」ことを主張します。つまり、標本平均の 収束先 を教えてくれます。

一方、中心極限定理 は「$\bar{X}_n$ が $\mu$ のまわりでどのように ばらつくか」を教えてくれます。具体的には、標本平均を適切に標準化した量が正規分布に従うことを主張します。

大数の法則が「どこに収束するか」なら、中心極限定理は「どのくらいの速さでそこへ収束するか、その途中の分布はどうなっているか」を示す定理です。

中心極限定理の定式化

設定

確率変数 $X_1, X_2, \dots, X_n$ が 独立同一分布(i.i.d.) に従い、

$$ E[X_i] = \mu, \quad \text{Var}(X_i) = \sigma^2 \quad (0 < \sigma^2 < \infty) $$

を満たすとします。ここで $\mu$ は母平均、$\sigma^2$ は母分散です。

標本平均の定義

標本平均を

$$ \bar{X}_n = \frac{1}{n} \sum_{i=1}^{n} X_i $$

と定義します。$\bar{X}_n$ の期待値と分散は次のようになります。

$$ E[\bar{X}_n] = \mu, \quad \text{Var}(\bar{X}_n) = \frac{\sigma^2}{n} $$

標準化

$\bar{X}_n$ を標準化した量 $Z_n$ を定義します。

$$ Z_n = \frac{\bar{X}_n – \mu}{\sigma / \sqrt{n}} = \frac{\sum_{i=1}^{n} X_i – n\mu}{\sigma \sqrt{n}} $$

この $Z_n$ は $E[Z_n] = 0$, $\text{Var}(Z_n) = 1$ を満たします。

中心極限定理(CLT)

定理(中心極限定理): $X_1, X_2, \dots$ が i.i.d. で $E[X_i] = \mu$, $\text{Var}(X_i) = \sigma^2 \in (0, \infty)$ を満たすとき、

$$ Z_n = \frac{\bar{X}_n – \mu}{\sigma / \sqrt{n}} \xrightarrow{d} N(0, 1) \quad (n \to \infty) $$

が成り立ちます。ここで $\xrightarrow{d}$ は 分布収束(convergence in distribution) を表します。

すなわち、任意の $z \in \mathbb{R}$ に対して、

$$ \lim_{n \to \infty} P(Z_n \le z) = \Phi(z) = \frac{1}{\sqrt{2\pi}} \int_{-\infty}^{z} e^{-t^2/2} \, dt $$

が成り立ちます。$\Phi(z)$ は標準正規分布の累積分布関数です。

直感的に言えば、元の分布が何であっても(正規分布である必要はない)、独立な確率変数の和を標準化したものは正規分布に近づく ということです。必要な条件は、平均と分散が有限であることだけです。

証明のスケッチ(特性関数を用いた方法)

中心極限定理の証明にはいくつかの方法がありますが、ここでは 特性関数(characteristic function) を用いた方法を紹介します。この方法の核心は、特性関数の収束が分布収束を意味する というレヴィの連続性定理にあります。

特性関数の定義

確率変数 $X$ の特性関数は次で定義されます。

$$ \varphi_X(t) = E[e^{itX}] = E[\cos(tX)] + i \, E[\sin(tX)] $$

ここで $i$ は虚数単位です。特性関数は モーメント母関数 $M_X(t) = E[e^{tX}]$ の「虚数版」であり、モーメント母関数が存在しない場合でも常に存在するという強みがあります。

特性関数の重要な性質として、独立な確率変数の和に対して積になる という点があります。

$$ \varphi_{X+Y}(t) = \varphi_X(t) \cdot \varphi_Y(t) \quad (X, Y \text{ が独立のとき}) $$

証明の概略

ステップ1: 標準化

$Y_i = (X_i – \mu) / \sigma$ と標準化します。すると $E[Y_i] = 0$, $\text{Var}(Y_i) = 1$ です。標準化された和は

$$ Z_n = \frac{1}{\sqrt{n}} \sum_{i=1}^{n} Y_i $$

と書けます。

ステップ2: 特性関数のテイラー展開

$Y_i$ の特性関数を $\varphi_Y(t) = E[e^{itY}]$ とします。$E[Y] = 0$, $E[Y^2] = 1$ なので、$\varphi_Y(t)$ を $t = 0$ の周りでテイラー展開すると、

$$ \begin{align} \varphi_Y(t) &= E[e^{itY}] \\ &= E\!\left[1 + itY + \frac{(itY)^2}{2!} + \cdots\right] \\ &= 1 + it \, E[Y] + \frac{(it)^2}{2} E[Y^2] + o(t^2) \\ &= 1 + 0 – \frac{t^2}{2} + o(t^2) \\ &= 1 – \frac{t^2}{2} + o(t^2) \end{align} $$

ここで $o(t^2)$ は $t \to 0$ で $t^2$ より速く $0$ に近づく項を表します。重要なのは、この展開は元の分布の形状によらず成り立つ という点です。$E[Y] = 0$ と $E[Y^2] = 1$ さえ満たせば、分布の詳細な情報は $o(t^2)$ の中に閉じ込められます。

ステップ3: $Z_n$ の特性関数を計算

$Z_n = \frac{1}{\sqrt{n}} \sum_{i=1}^{n} Y_i$ の特性関数を計算します。$Y_i$ が独立なので、

$$ \begin{align} \varphi_{Z_n}(t) &= E\left[\exp\left(it \cdot \frac{1}{\sqrt{n}} \sum_{i=1}^{n} Y_i\right)\right] \\ &= \prod_{i=1}^{n} E\left[\exp\left(i \frac{t}{\sqrt{n}} Y_i\right)\right] \\ &= \left[\varphi_Y\left(\frac{t}{\sqrt{n}}\right)\right]^n \end{align} $$

ステップ4: テイラー展開の代入

ステップ2の結果を代入します。

$$ \varphi_{Z_n}(t) = \left[1 – \frac{t^2}{2n} + o\left(\frac{t^2}{n}\right)\right]^n $$

ステップ5: 極限の計算

$n \to \infty$ の極限を取ります。ここで指数関数の極限公式

$$ \lim_{n \to \infty} \left(1 + \frac{a}{n}\right)^n = e^a $$

を $a = -t^2 / 2$ として適用すると、

$$ \lim_{n \to \infty} \varphi_{Z_n}(t) = e^{-t^2/2} $$

が得られます。

ステップ6: 標準正規分布の特性関数との一致

$e^{-t^2/2}$ が標準正規分布 $N(0, 1)$ の特性関数であることを確認します。$N(0,1)$ の確率密度関数 $f(x) = \frac{1}{\sqrt{2\pi}} e^{-x^2/2}$ に対して、

$$ \begin{align} \varphi_{N(0,1)}(t) &= \int_{-\infty}^{\infty} e^{itx} \cdot \frac{1}{\sqrt{2\pi}} e^{-x^2/2} \, dx \\ &= \frac{1}{\sqrt{2\pi}} \int_{-\infty}^{\infty} e^{-\frac{1}{2}(x^2 – 2itx)} \, dx \\ &= \frac{1}{\sqrt{2\pi}} \int_{-\infty}^{\infty} e^{-\frac{1}{2}(x – it)^2 – \frac{t^2}{2}} \, dx \\ &= e^{-t^2/2} \cdot \frac{1}{\sqrt{2\pi}} \int_{-\infty}^{\infty} e^{-\frac{1}{2}(x – it)^2} \, dx \\ &= e^{-t^2/2} \end{align} $$

最後の等号はガウス積分(複素平面での積分路のシフト)によります。

結論: レヴィの連続性定理により、特性関数の各点収束 $\varphi_{Z_n}(t) \to e^{-t^2/2}$ は分布収束 $Z_n \xrightarrow{d} N(0,1)$ を意味します。これで中心極限定理が証明されました。$\blacksquare$

証明のポイント

この証明の要点を3つにまとめます。

  1. テイラー展開による普遍性: $E[Y] = 0$, $E[Y^2] = 1$ であれば、分布の詳細な形状によらず $\varphi_Y(t) \approx 1 – t^2/2$ となります。元の分布の情報は $o(t^2)$ の項に閉じ込められ、極限では消えてしまいます。これこそが「どんな分布でも正規分布に収束する」理由です。
  2. 独立性による積: 独立な確率変数の和の特性関数は、各特性関数の積になります。この性質のおかげで $n$ 乗の形が現れます。
  3. 指数関数の極限: $(1 + a/n)^n \to e^a$ という古典的な極限公式が最後の決め手です。

具体的な検証1: 一様分布

まず、最もシンプルな例として 一様分布 $U(0, 1)$ で中心極限定理を検証しましょう。

一様分布 $U(0,1)$ の平均と分散は、

$$ \mu = \frac{1}{2}, \quad \sigma^2 = \frac{1}{12} $$

です。$U(0,1)$ の確率密度関数は $[0, 1]$ 上で一定値 1 をとる長方形型であり、正規分布とは全く異なる形状をしています。

中心極限定理によれば、$n$ 個の $U(0,1)$ からの標本平均 $\bar{X}_n$ を標準化した

$$ Z_n = \frac{\bar{X}_n – 1/2}{1/\sqrt{12n}} $$

は $n$ が大きくなるにつれて $N(0,1)$ に近づくはずです。

以下のPythonコードで $n = 1, 5, 30$ のそれぞれについて、10,000回の標本平均を生成し、ヒストグラムと標準正規分布の密度関数を重ねて描画します。

import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

np.random.seed(42)
n_simulations = 10000

fig, axes = plt.subplots(1, 3, figsize=(14, 4))
sample_sizes = [1, 5, 30]

for ax, n in zip(axes, sample_sizes):
    # n個の一様分布からの標本平均を10000回生成
    sample_means = np.mean(
        np.random.uniform(0, 1, size=(n_simulations, n)), axis=1
    )

    # 標準化
    mu, sigma = 0.5, np.sqrt(1 / 12)
    z = (sample_means - mu) / (sigma / np.sqrt(n))

    # ヒストグラム
    ax.hist(z, bins=50, density=True, alpha=0.7,
            color='steelblue', edgecolor='white')

    # 標準正規分布の密度関数
    x = np.linspace(-4, 4, 200)
    ax.plot(x, stats.norm.pdf(x), 'r-', linewidth=2, label='$N(0,1)$')

    ax.set_title(f'Uniform: n = {n}', fontsize=13)
    ax.set_xlabel('$Z_n$')
    ax.set_ylabel('Density')
    ax.legend()
    ax.set_xlim(-4, 4)

plt.tight_layout()
plt.savefig('clt_uniform.png', dpi=150, bbox_inches='tight')
plt.show()

$n = 1$ では一様分布そのもの(長方形型)ですが、$n = 5$ で既にベル型の形状が現れ始め、$n = 30$ ではほぼ完全に標準正規分布と一致します。一様分布は対称な分布なので、比較的少ない $n$ でも正規分布への収束が速いことがわかります。

具体的な検証2: 指数分布

次に、非対称な分布の例として 指数分布 $\text{Exp}(\lambda)$ で検証しましょう。$\lambda = 1$ とすると、

$$ \mu = \frac{1}{\lambda} = 1, \quad \sigma^2 = \frac{1}{\lambda^2} = 1 $$

です。指数分布は右に長い裾を持つ非対称な分布であり、歪度(skewness)は $2/\lambda = 2$ です。正規分布とは大きく異なる形状ですが、中心極限定理によれば、標本平均を標準化した $Z_n$ はやはり $N(0,1)$ に収束するはずです。

import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

np.random.seed(42)
n_simulations = 10000

fig, axes = plt.subplots(1, 3, figsize=(14, 4))
sample_sizes = [1, 5, 30]

for ax, n in zip(axes, sample_sizes):
    # n個の指数分布からの標本平均を10000回生成
    sample_means = np.mean(
        np.random.exponential(scale=1.0, size=(n_simulations, n)), axis=1
    )

    # 標準化
    mu, sigma = 1.0, 1.0
    z = (sample_means - mu) / (sigma / np.sqrt(n))

    # ヒストグラム
    ax.hist(z, bins=50, density=True, alpha=0.7,
            color='darkorange', edgecolor='white')

    # 標準正規分布の密度関数
    x = np.linspace(-4, 4, 200)
    ax.plot(x, stats.norm.pdf(x), 'r-', linewidth=2, label='$N(0,1)$')

    ax.set_title(f'Exponential: n = {n}', fontsize=13)
    ax.set_xlabel('$Z_n$')
    ax.set_ylabel('Density')
    ax.legend()
    ax.set_xlim(-4, 4)

plt.tight_layout()
plt.savefig('clt_exponential.png', dpi=150, bbox_inches='tight')
plt.show()

$n = 1$ では明らかに右に歪んだ分布(指数分布そのもの)ですが、$n = 5$ で歪みが軽減され、$n = 30$ ではかなり正規分布に近い形状になります。非対称な分布では対称な分布よりも収束に多くの標本サイズが必要ですが、$n = 30$ 程度あれば十分に正規近似が使えることが確認できます。

具体的な検証3: ベルヌーイ分布

最後に、離散分布の例として ベルヌーイ分布 $\text{Bernoulli}(p)$ で検証します。$p = 0.3$ とすると、

$$ \mu = p = 0.3, \quad \sigma^2 = p(1 – p) = 0.21 $$

です。ベルヌーイ分布は 0 か 1 しか取らない最も極端な離散分布であり、正規分布とはかけ離れています。

なお、$n$ 個のベルヌーイ確率変数の和 $S_n = \sum_{i=1}^{n} X_i$ は二項分布 $\text{Binomial}(n, p)$ に従います。したがって中心極限定理を二項分布に適用すると、

$$ \frac{S_n – np}{\sqrt{np(1-p)}} \xrightarrow{d} N(0, 1) $$

が得られます。これは ド・モアブル-ラプラスの定理(De Moivre-Laplace theorem) として知られ、歴史的に中心極限定理の最初の特殊ケースです。

import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

np.random.seed(42)
n_simulations = 10000
p = 0.3

fig, axes = plt.subplots(1, 3, figsize=(14, 4))
sample_sizes = [1, 5, 30]

for ax, n in zip(axes, sample_sizes):
    # n個のベルヌーイ分布からの標本平均を10000回生成
    sample_means = np.mean(
        np.random.binomial(1, p, size=(n_simulations, n)), axis=1
    )

    # 標準化
    mu = p
    sigma = np.sqrt(p * (1 - p))
    z = (sample_means - mu) / (sigma / np.sqrt(n))

    # ヒストグラム
    ax.hist(z, bins=50, density=True, alpha=0.7,
            color='mediumseagreen', edgecolor='white')

    # 標準正規分布の密度関数
    x = np.linspace(-4, 4, 200)
    ax.plot(x, stats.norm.pdf(x), 'r-', linewidth=2, label='$N(0,1)$')

    ax.set_title(f'Bernoulli(p={p}): n = {n}', fontsize=13)
    ax.set_xlabel('$Z_n$')
    ax.set_ylabel('Density')
    ax.legend()
    ax.set_xlim(-4, 4)

plt.tight_layout()
plt.savefig('clt_bernoulli.png', dpi=150, bbox_inches='tight')
plt.show()

$n = 1$ では 0 と 1 の2つのスパイクしかありません。$n = 5$ では離散的な棒グラフ状ですがベル型の輪郭が見え始め、$n = 30$ ではかなり滑らかな正規分布に近い形状になります。$p = 0.3$ は対称($p = 0.5$)ではないため、一様分布に比べると収束はやや遅めですが、$n = 30$ あればよい近似が得られます。

統計学への応用

中心極限定理は統計学の多くの手法の理論的基盤です。ここでは、代表的な応用を2つ紹介します。

なぜ検定で正規分布やt分布が使えるのか

統計的検定や信頼区間を学ぶと、「母集団が正規分布に従うと仮定する」という記述をしばしば見かけます。しかし現実のデータが正規分布に従うとは限りません。実は、母集団が正規分布でなくても、$n$ が十分大きければ中心極限定理のおかげで正規分布ベースの手法が使える というのが本質です。

信頼区間の構成

母平均 $\mu$ の 信頼区間 を構成する際、中心極限定理が本質的な役割を果たします。

$n$ が十分大きいとき、中心極限定理により

$$ Z_n = \frac{\bar{X}_n – \mu}{\sigma / \sqrt{n}} \stackrel{\text{approx}}{\sim} N(0, 1) $$

と近似できます。したがって、

$$ P\left(-z_{\alpha/2} \le \frac{\bar{X}_n – \mu}{\sigma / \sqrt{n}} \le z_{\alpha/2}\right) \approx 1 – \alpha $$

が成り立ちます。ここで $z_{\alpha/2}$ は標準正規分布の上側 $\alpha/2$ 点です。これを $\mu$ について解くと、

$$ P\left(\bar{X}_n – z_{\alpha/2} \frac{\sigma}{\sqrt{n}} \le \mu \le \bar{X}_n + z_{\alpha/2} \frac{\sigma}{\sqrt{n}}\right) \approx 1 – \alpha $$

となり、母平均 $\mu$ の近似 $100(1 – \alpha)\%$ 信頼区間

$$ \left[\bar{X}_n – z_{\alpha/2} \frac{\sigma}{\sqrt{n}}, \quad \bar{X}_n + z_{\alpha/2} \frac{\sigma}{\sqrt{n}}\right] $$

が得られます。例えば 95% 信頼区間であれば $z_{0.025} = 1.96$ です。

重要なのは、元の分布が正規分布でなくても、$n$ が十分大きければこの信頼区間が近似的に有効であるということです。これが中心極限定理の威力です。

実際に $\sigma$ が未知の場合は標本標準偏差 $s$ で置き換え、t分布 を使います。$n$ が大きいとき t分布は正規分布に近づくため、これもまた中心極限定理の帰結と言えます。

仮説検定への応用

統計的仮説検定 でも中心極限定理は不可欠です。例えば、母平均 $\mu$ に対する検定を考えます。

帰無仮説 $H_0: \mu = \mu_0$ のもとで、中心極限定理により検定統計量

$$ Z = \frac{\bar{X}_n – \mu_0}{\sigma / \sqrt{n}} $$

は近似的に $N(0, 1)$ に従います。この $Z$ の絶対値が $z_{\alpha/2}$ を超えれば $H_0$ を棄却する、というのが標準的な z検定の手順です。

ここでも元の分布が正規分布である必要はなく、$n$ が十分大きければ中心極限定理により正規近似が正当化されます。t検定 は $\sigma$ が未知の場合の手法ですが、$n$ が大きいときは z検定とほぼ同じ結果を与えます。

具体例: 品質管理への応用

ある工場で生産されるボルトの直径の母平均は $\mu = 10.00\,\text{mm}$、母標準偏差は $\sigma = 0.05\,\text{mm}$ であることが過去のデータから分かっています。新しいロットから $n = 36$ 本をランダムに抜き取ったところ、標本平均は $\bar{x} = 10.012\,\text{mm}$ でした。このロットの母平均が 10.00 mm と異なるか、有意水準 5% で検定しましょう。

中心極限定理により、$n = 36$ は十分大きいので

$$ Z = \frac{\bar{X} – \mu_0}{\sigma / \sqrt{n}} = \frac{10.012 – 10.000}{0.05 / \sqrt{36}} = \frac{0.012}{0.00833} \approx 1.44 $$

両側検定の棄却域は $|Z| > z_{0.025} = 1.96$ なので、$|Z| = 1.44 < 1.96$ となり、帰無仮説は棄却されません。このロットの平均直径が規格値と有意に異なるとは言えません。

Python実装: 3つの分布を統合した可視化

最後に、3つの分布(一様分布、指数分布、ベルヌーイ分布)を1つの図にまとめ、$n$ の増加に伴い標本平均の分布が正規分布に近づく様子を包括的に可視化します。

import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

np.random.seed(42)
n_simulations = 10000

# 3つの分布の設定
distributions = {
    'Uniform(0,1)': {
        'sampler': lambda size: np.random.uniform(0, 1, size=size),
        'mu': 0.5,
        'sigma': np.sqrt(1 / 12),
        'color': 'steelblue'
    },
    'Exponential(1)': {
        'sampler': lambda size: np.random.exponential(1.0, size=size),
        'mu': 1.0,
        'sigma': 1.0,
        'color': 'darkorange'
    },
    'Bernoulli(0.3)': {
        'sampler': lambda size: np.random.binomial(1, 0.3, size=size),
        'mu': 0.3,
        'sigma': np.sqrt(0.3 * 0.7),
        'color': 'mediumseagreen'
    }
}

sample_sizes = [1, 5, 30, 100]

fig, axes = plt.subplots(3, 4, figsize=(16, 10))

for row, (dist_name, config) in enumerate(distributions.items()):
    for col, n in enumerate(sample_sizes):
        ax = axes[row, col]

        # 標本平均を生成
        samples = config['sampler'](size=(n_simulations, n))
        sample_means = np.mean(samples, axis=1)

        # 標準化
        z = (sample_means - config['mu']) / (config['sigma'] / np.sqrt(n))

        # ヒストグラム
        ax.hist(z, bins=50, density=True, alpha=0.7,
                color=config['color'], edgecolor='white')

        # 標準正規分布
        x = np.linspace(-4, 4, 200)
        ax.plot(x, stats.norm.pdf(x), 'r-', linewidth=2)

        ax.set_xlim(-4, 4)
        ax.set_ylim(0, 0.55)

        if row == 0:
            ax.set_title(f'n = {n}', fontsize=13)
        if col == 0:
            ax.set_ylabel(dist_name, fontsize=12)
        if row == 2:
            ax.set_xlabel('$Z_n$')

fig.suptitle('Central Limit Theorem: Convergence to Normal Distribution',
             fontsize=15, y=1.02)
plt.tight_layout()
plt.savefig('clt_all_distributions.png', dpi=150, bbox_inches='tight')
plt.show()

この図では、各行が異なる分布、各列が異なる標本サイズ $n$ に対応しています。赤い曲線は標準正規分布の密度関数です。

読み取れること:

  • $n = 1$ では元の分布の形状がそのまま現れます(一様 → 長方形、指数 → 右裾、ベルヌーイ → 2本のスパイク)
  • $n = 5$ で対称な一様分布は既にベル型に近づきます。非対称な指数分布やベルヌーイ分布ではまだ歪みが残っています
  • $n = 30$ で3つとも正規分布によく一致します
  • $n = 100$ ではほぼ完全に正規分布と重なります

収束の定量的評価

さらに、コルモゴロフ-スミルノフ(KS)統計量を用いて、収束の速さを定量的に比較しましょう。KS統計量は経験分布関数と理論分布関数(標準正規分布)の最大乖離を表し、値が小さいほど正規分布に近いことを意味します。

import numpy as np
from scipy import stats

np.random.seed(42)
n_simulations = 50000
sample_sizes = [1, 2, 5, 10, 30, 50, 100, 500]

distributions = {
    'Uniform(0,1)': {
        'sampler': lambda size: np.random.uniform(0, 1, size=size),
        'mu': 0.5, 'sigma': np.sqrt(1 / 12)
    },
    'Exponential(1)': {
        'sampler': lambda size: np.random.exponential(1.0, size=size),
        'mu': 1.0, 'sigma': 1.0
    },
    'Bernoulli(0.3)': {
        'sampler': lambda size: np.random.binomial(1, 0.3, size=size),
        'mu': 0.3, 'sigma': np.sqrt(0.3 * 0.7)
    }
}

print(f"{'n':>5s}", end="")
for name in distributions:
    print(f"  {name:>18s}", end="")
print()
print("-" * 65)

for n in sample_sizes:
    print(f"{n:5d}", end="")
    for name, config in distributions.items():
        samples = config['sampler'](size=(n_simulations, n))
        sample_means = np.mean(samples, axis=1)
        z = (sample_means - config['mu']) / (config['sigma'] / np.sqrt(n))

        # KS統計量(正規分布との最大乖離)
        ks_stat, _ = stats.kstest(z, 'norm')
        print(f"  {ks_stat:18.4f}", end="")
    print()

$n$ の増加に伴い、すべての分布でKS統計量が単調に減少していく様子が確認できます。対称な一様分布は収束が最も速く、非対称な指数分布は最も遅いことがわかります。これはベリー・エシーン定理が予測する通り、元の分布の歪度(3次モーメント)が大きいほど収束が遅いという事実と整合しています。

まとめ

本記事では、中心極限定理について解説しました。

  • 中心極限定理の主張: i.i.d. 確率変数の標本平均を標準化した量は、元の分布が何であっても(平均と分散が有限であれば)、標本サイズ $n \to \infty$ で標準正規分布 $N(0, 1)$ に分布収束します
  • 特性関数による証明: テイラー展開により元の分布の詳細が $o(t^2)$ に押し込められ、$(1 + a/n)^n \to e^a$ の極限公式によって正規分布の特性関数 $e^{-t^2/2}$ が現れます
  • 数値検証: 一様分布(対称・連続)、指数分布(非対称・連続)、ベルヌーイ分布(離散)という3つの全く異なる分布で、$n = 30$ 程度で正規分布への収束が確認できました
  • 統計学への応用: 信頼区間の構成や仮説検定において、母集団の分布によらず正規分布に基づく手法が使える理論的根拠が中心極限定理です

中心極限定理は「なぜ正規分布がいたるところに現れるのか」という問いに対する最も根本的な答えであり、確率論と統計学を橋渡しする最重要定理の一つです。

次のステップとして、以下の記事も参考にしてください。