中心極限定理の意味と応用を完全理解する

中心極限定理(Central Limit Theorem, CLT)は、確率論・統計学において最も重要な定理の1つです。この定理は、「元の分布が何であっても、標本平均の分布はサンプルサイズが大きくなると正規分布に近づく」ことを主張します。

大数の法則が「標本平均が母平均に近づく」という点の情報を与えるのに対し、中心極限定理は「標本平均がどのような分布に従うか」という分布の情報を与えます。この定理のおかげで、母集団の分布がわからない場合でも、標本平均の分布を正規分布で近似でき、信頼区間の構成や仮説検定が可能になります。本記事では、直感的な理解から出発して証明のスケッチを行い、応用と可視化まで一気通貫で解説します。

本記事の内容

  • 中心極限定理の直感的な理解
  • 中心極限定理の厳密な定義
  • 特性関数を用いた証明のスケッチ
  • 正規近似の応用
  • 信頼区間の構成
  • Pythonでの可視化

前提知識

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

中心極限定理とは

中心極限定理とは、独立同分布に従う確率変数の標本平均を標準化したものが、サンプルサイズが大きくなると標準正規分布に収束するという定理です。

直感的に言うと、「サイコロを何回も振って平均を取る」「身長を何人も測って平均を取る」「株価の日次収益率を何日分も平均する」など、多数の独立な確率変数の平均は、元の分布がどんな形であろうと、正規分布の釣鐘型になるということです。

これが「中心」極限定理と呼ばれる由来の1つは、正規分布が確率分布の「中心的な」位置にあるという意味です。あらゆる分布が平均操作を通じて正規分布に向かうという、驚くべき普遍性を持っています。

数学的定義

中心極限定理(Lindeberg-Levy CLT)

$X_1, X_2, \dots$ を、期待値 $\mu$、分散 $\sigma^2$($0 < \sigma^2 < \infty$)を持つ独立同分布の確率変数列とする。標本平均 $\bar{X}_n = \frac{1}{n}\sum_{i=1}^{n}X_i$ を標準化した統計量 $Z_n$ を定義する。

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

このとき、$n \to \infty$ で $Z_n$ は 分布収束 する。

$$ \begin{equation} Z_n \xrightarrow{d} N(0, 1) \end{equation} $$

すなわち、任意の実数 $z$ に対して、

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

定理の意味

この定理は以下のことを意味しています。

  1. $\bar{X}_n$ は近似的に $N(\mu, \sigma^2/n)$ に従います
  2. サンプルサイズ $n$ が大きいほど、近似の精度が向上します
  3. 元の分布が正規分布でなくても成り立ちます(一様分布、指数分布、ポアソン分布など何でもOK)
  4. ただし、分散が有限であることが必要です

特性関数を用いた証明のスケッチ

特性関数の定義

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

$$ \varphi_X(t) = E[e^{itX}] $$

特性関数には以下の重要な性質があります。

  • $X, Y$ が独立ならば $\varphi_{X+Y}(t) = \varphi_X(t) \cdot \varphi_Y(t)$
  • $\varphi_{aX+b}(t) = e^{ibt} \varphi_X(at)$
  • 特性関数が分布を一意に決定する(連続性定理)

証明のスケッチ

$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 $$

$Z_n$ の特性関数を求めます。

$$ \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(\frac{it}{\sqrt{n}} Y_i\right)\right] \quad (\because \text{独立}) \\ &= \left[\varphi_Y\left(\frac{t}{\sqrt{n}}\right)\right]^n \end{align} $$

$\varphi_Y(s)$ を $s = 0$ の周りでテイラー展開します。

$$ \begin{align} \varphi_Y(s) &= \varphi_Y(0) + \varphi_Y'(0) s + \frac{1}{2}\varphi_Y”(0) s^2 + o(s^2) \\ &= 1 + i E[Y] \cdot s + \frac{1}{2} (i)^2 E[Y^2] \cdot s^2 + o(s^2) \\ &= 1 + 0 – \frac{s^2}{2} + o(s^2) \quad (\because E[Y] = 0, E[Y^2] = 1) \end{align} $$

$s = t/\sqrt{n}$ を代入すると、

$$ \varphi_Y\left(\frac{t}{\sqrt{n}}\right) = 1 – \frac{t^2}{2n} + o\left(\frac{1}{n}\right) $$

したがって、

$$ \begin{align} \varphi_{Z_n}(t) &= \left[1 – \frac{t^2}{2n} + o\left(\frac{1}{n}\right)\right]^n \\ &\to e^{-t^2/2} \quad (n \to \infty) \end{align} $$

最後の極限は $\lim_{n \to \infty} (1 + a/n)^n = e^a$ の公式によるものです。

$e^{-t^2/2}$ は標準正規分布 $N(0, 1)$ の特性関数なので、連続性定理(レヴィの連続性定理)により $Z_n \xrightarrow{d} N(0, 1)$ が示されました。

正規近似

基本的な正規近似

中心極限定理により、サンプルサイズ $n$ が十分大きいとき、

$$ \bar{X}_n \approx N\left(\mu, \frac{\sigma^2}{n}\right) $$

あるいは等価的に、

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

二項分布の正規近似

$X \sim \text{Binomial}(n, p)$ のとき、$X = \sum_{i=1}^{n} Y_i$($Y_i \sim \text{Bernoulli}(p)$)と書けるので、CLTより、

$$ \frac{X – np}{\sqrt{np(1-p)}} \approx N(0, 1) $$

この近似は $np \geq 5$ かつ $n(1-p) \geq 5$ のときに実用上十分な精度があるとされています。

ポアソン分布の正規近似

$X \sim \text{Poisson}(\lambda)$ のとき、$\lambda$ が十分大きければ(目安: $\lambda \geq 20$)、

$$ \frac{X – \lambda}{\sqrt{\lambda}} \approx N(0, 1) $$

信頼区間への応用

中心極限定理の最も重要な応用の1つが 信頼区間 の構成です。

母平均の信頼区間

母分散 $\sigma^2$ が既知のとき、CLTより、

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

変形すると、母平均 $\mu$ の $100(1-\alpha)\%$ 信頼区間は、

$$ \bar{X}_n – z_{\alpha/2} \frac{\sigma}{\sqrt{n}} \leq \mu \leq \bar{X}_n + z_{\alpha/2} \frac{\sigma}{\sqrt{n}} $$

ここで $z_{\alpha/2}$ は標準正規分布の上側 $\alpha/2$ 点です。たとえば、95%信頼区間では $z_{0.025} = 1.96$ を使います。

具体例

例: サイコロの平均

サイコロを $n = 100$ 回振ったとき、出目の平均がどのような分布に従うかを考えます。

  • $\mu = 3.5$, $\sigma^2 = 35/12 \approx 2.917$
  • CLTより $\bar{X}_{100} \approx N(3.5, \, 2.917/100)$
  • $\sigma/\sqrt{n} = \sqrt{2.917/100} \approx 0.171$
  • 95%信頼区間: $3.5 \pm 1.96 \times 0.171 = [3.17, 3.83]$

Pythonでの実装

CLTの可視化: さまざまな分布に対して

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

np.random.seed(42)

# 4種類の分布で中心極限定理を可視化
distributions = {
    'Uniform(0,1)': lambda size: np.random.uniform(0, 1, size),
    'Exponential(1)': lambda size: np.random.exponential(1, size),
    'Bernoulli(0.3)': lambda size: np.random.binomial(1, 0.3, size),
    'Poisson(3)': lambda size: np.random.poisson(3, size),
}

# 各分布の期待値と分散
params = {
    'Uniform(0,1)': (0.5, 1/12),
    'Exponential(1)': (1, 1),
    'Bernoulli(0.3)': (0.3, 0.21),
    'Poisson(3)': (3, 3),
}

sample_sizes = [1, 5, 30, 100]
n_simulations = 10000

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

for row, (dist_name, sampler) in enumerate(distributions.items()):
    mu, sigma2 = params[dist_name]

    for col, n in enumerate(sample_sizes):
        # n個の標本平均をn_simulations回計算
        sample_means = np.array([
            sampler(n).mean() for _ in range(n_simulations)
        ])

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

        ax = axes[row, col]
        ax.hist(z, bins=50, density=True, alpha=0.7, color='skyblue', edgecolor='white')

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

        if col == 0:
            ax.set_ylabel(dist_name, fontsize=10)
        if row == 0:
            ax.set_title(f'n = {n}', fontsize=12)
        ax.set_xlim(-4, 4)
        if row == 0 and col == 3:
            ax.legend()

plt.suptitle('Central Limit Theorem: Standardized Sample Means', fontsize=14, y=1.01)
plt.tight_layout()
plt.savefig("clt_various_distributions.png", dpi=150, bbox_inches="tight")
plt.show()

$n = 1$ ではもとの分布の形状がそのまま現れますが、$n$ を増やすにつれて、元の分布がどんな形であっても標準化された標本平均の分布は標準正規分布(赤い曲線)に近づいていきます。$n = 30$ 程度でかなりよい近似が得られることが確認できます。

収束速度の可視化

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

np.random.seed(42)
n_simulations = 50000

# 指数分布(歪んだ分布の例)
mu_exp = 1.0
sigma_exp = 1.0

sample_sizes = [2, 5, 10, 30, 50, 100, 500]

fig, axes = plt.subplots(2, 4, figsize=(18, 8))
axes = axes.ravel()

for idx, n in enumerate(sample_sizes):
    samples = np.random.exponential(1, size=(n_simulations, n))
    sample_means = samples.mean(axis=1)
    z = (sample_means - mu_exp) / (sigma_exp / np.sqrt(n))

    ax = axes[idx]
    ax.hist(z, bins=60, density=True, alpha=0.7, color='lightgreen', edgecolor='white')
    x_grid = np.linspace(-4, 4, 200)
    ax.plot(x_grid, stats.norm.pdf(x_grid), 'r-', linewidth=2)
    ax.set_title(f'n = {n}')
    ax.set_xlim(-4, 4)
    ax.set_ylim(0, 0.55)

# 最後のパネルにKS検定統計量
axes[7].set_visible(True)
ks_stats = []
ns_for_ks = np.arange(2, 201)
for n in ns_for_ks:
    samples = np.random.exponential(1, size=(5000, n))
    z = (samples.mean(axis=1) - 1) / (1 / np.sqrt(n))
    ks_stat, _ = stats.kstest(z, 'norm')
    ks_stats.append(ks_stat)

axes[7].plot(ns_for_ks, ks_stats, 'b-', linewidth=1)
axes[7].set_xlabel('n')
axes[7].set_ylabel('KS statistic')
axes[7].set_title('Convergence Rate')
axes[7].grid(True, alpha=0.3)

plt.suptitle('CLT Convergence for Exponential Distribution', fontsize=14, y=1.01)
plt.tight_layout()
plt.savefig("clt_convergence_speed.png", dpi=150, bbox_inches="tight")
plt.show()

指数分布は右に裾が長い非対称な分布ですが、$n$ を増やすにつれて標本平均の分布が正規分布に近づいていきます。KS検定統計量(標準正規分布からのズレの指標)は $n$ の増加とともに減少しており、収束の様子を定量的に確認できます。

信頼区間のシミュレーション

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(42)

# パラメータ
mu_true = 5.0       # 真の母平均
sigma_true = 2.0    # 真の母標準偏差
n = 30              # サンプルサイズ
alpha = 0.05        # 有意水準
z_crit = 1.96       # 95%信頼区間の臨界値
n_intervals = 100   # 信頼区間の数

fig, ax = plt.subplots(figsize=(12, 8))

contains_mu = 0

for i in range(n_intervals):
    sample = np.random.normal(mu_true, sigma_true, n)
    x_bar = sample.mean()
    margin = z_crit * sigma_true / np.sqrt(n)
    ci_lower = x_bar - margin
    ci_upper = x_bar + margin

    # 母平均を含むかどうか
    if ci_lower <= mu_true <= ci_upper:
        color = 'blue'
        contains_mu += 1
    else:
        color = 'red'

    ax.plot([ci_lower, ci_upper], [i, i], color=color, linewidth=1.5)
    ax.plot(x_bar, i, 'o', color=color, markersize=3)

ax.axvline(x=mu_true, color='green', linewidth=2, linestyle='--', label=f'$\\mu$ = {mu_true}')
ax.set_xlabel('Value', fontsize=12)
ax.set_ylabel('Interval index', fontsize=12)
ax.set_title(f'95% Confidence Intervals ({contains_mu}/{n_intervals} contain $\\mu$)', fontsize=14)
ax.legend(fontsize=12)
ax.grid(True, alpha=0.3)
plt.savefig("confidence_intervals.png", dpi=150, bbox_inches="tight")
plt.show()

print(f"Coverage rate: {contains_mu}/{n_intervals} = {contains_mu/n_intervals:.1%}")

100個の95%信頼区間を生成すると、約95個が真の母平均 $\mu = 5$ を含む(青色)ことが確認できます。赤色の区間は母平均を含まないもので、理論通り約5%です。これが「95%信頼区間」の意味です。

まとめ

本記事では、中心極限定理の意味と応用について解説しました。

  • 中心極限定理は、標本平均を標準化したものが標準正規分布に分布収束することを主張します
  • 元の分布がどのような形であっても(分散が有限であれば)成り立つ普遍的な定理です
  • 特性関数のテイラー展開を利用して証明されます
  • 二項分布やポアソン分布の正規近似の理論的基礎を与えます
  • 信頼区間の構成は、CLT の最も重要な応用の1つです
  • 実用上は $n \geq 30$ 程度で十分な近似精度が得られることが多いです

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