中心極限定理(central limit theorem)は、統計学における最も重要な定理の一つである。この定理は、元の分布の形状によらず、独立な確率変数の和や平均は、サンプルサイズが大きくなると正規分布に近づくことを主張する。
中心極限定理の重要性は計り知れない。まず、自然界や社会の多くの現象が正規分布に従う理由を説明する。身長や体重といった形質は多数の遺伝的・環境的要因の和として決まるため、中心極限定理により正規分布に近づく。また、統計的推測において、母集団の分布が未知でも標本平均の分布を正規分布で近似できるため、推定や検定の理論的基盤となっている。
定義
確率変数列 X_1, X_2, \ldots, X_n が独立に同一の分布に従い、その期待値を \mu、分散を \sigma^2(ただし 0 < \sigma^2 < \infty)とする。このとき、標本平均
を標準化した確率変数は、n \to \infty のとき標準正規分布に分布収束する。
これは同値な表現として、\sqrt{n}(\bar{X}_n - \mu) が N(0, \sigma^2) に分布収束する、とも書ける。
また、和 S_n = \sum_{i=1}^{n} X_i については
が成り立つ。つまり、S_n は近似的に N(n\mu, n\sigma^2) に従う。
直感的理解
なぜ、元の分布の形状によらず和が正規分布に近づくのだろうか。直感的な理解として、以下のような説明ができる。
独立な確率変数を足し合わせると、それぞれの変数が取りうる値の組み合わせの数は急激に増加する。たとえば、サイコロを1回振ると6通りだが、2回振ると36通り、n 回振ると 6^n 通りになる。
このとき、和が極端な値(たとえば全て1や全て6)になる組み合わせは少なく、中央付近の値になる組み合わせは非常に多い。この「中央に集まる傾向」が、足し合わせる数が増えるにつれて強まり、やがて釣鐘型の正規分布に近づいていく。
中心極限定理が成り立つための条件は「独立」「同一分布」「有限の分散」である。コーシー分布のように分散が存在しない分布では、中心極限定理は成り立たない。
標本平均の分布の収束
一様分布 U(0, 1) からの標本平均が、サンプルサイズ n の増加とともに正規分布に近づく様子を示す。各グラフは標本平均を標準化(期待値0、分散1に変換)した分布である。
n = 2 の場合、標本平均の分布は三角形に近い形状だが、n = 30 になると標準正規分布(青線)にほぼ一致している。元の一様分布は全く正規分布とは異なる形状だが、標本平均をとることで正規分布に近づいていく。
連続修正
離散分布(二項分布など)を中心極限定理によって正規分布で近似する場合、連続修正(continuity correction)を適用すると精度が向上する。
離散型確率変数 X が整数値をとるとき、P(X \geq k) を正規近似で求める場合は P(X \geq k - 0.5) として計算する。これは、離散値 k が連続分布では区間 [k - 0.5, k + 0.5) に対応すると考えるためである。
例:連続修正の効果
X \sim \text{Bin}(100, 0.4) のとき、P(X \geq 45) を計算する。二項分布の期待値は \mu = 40、標準偏差は \sigma = \sqrt{100 \times 0.4 \times 0.6} \approx 4.90 である。
- 正確な確率(二項分布): P(X \geq 45) = 0.1789
- 連続修正なし: z = \dfrac{45 - 40}{4.90} = 1.02 より P \approx 0.1537
- 連続修正あり: z = \dfrac{44.5 - 40}{4.90} = 0.92 より P \approx 0.1792
連続修正を適用することで、近似精度が大幅に改善されている。
簡単な計算例
例1:サイコロの目の合計
サイコロを60回投げたときの目の合計 S について考える。各試行 X_i は独立に \{1, 2, 3, 4, 5, 6\} の離散一様分布に従う。
サイコロ1回の目の期待値と分散は
したがって、合計 S = \sum_{i=1}^{60} X_i について
中心極限定理より、S は近似的に N(210, 175) に従う。P(S \geq 220) を求める(連続修正を適用)。
合計が220以上になる確率は約24%である。
例2:標本平均の分布
ある製品の重量 X が期待値 500g、標準偏差 20g の分布に従うとする。100個の製品を無作為抽出したとき、標本平均 \bar{X} が 498g 以上 502g 以下になる確率を求める。
標本平均の分布は中心極限定理より
標準偏差は \sigma_{\bar{X}} = \dfrac{20}{\sqrt{100}} = 2 である。
標本平均が真の平均から±2g以内に収まる確率は約68%である。
練習問題
不良品の数 X は \text{Bin}(400, 0.3) に従う。不良品の割合 \hat{p} = \dfrac{X}{400} について、中心極限定理より
標準偏差は \sigma_{\hat{p}} = \sqrt{0.000525} \approx 0.0229 である。
不良品の割合が35%以上になる確率は約1.5%と非常に小さい。
中心極限定理より、標本平均の分布は
標準偏差は \sigma_{\bar{X}} = \frac{2}{6} = \frac{1}{3} である。
標本平均が2.5以上になる確率は約6.7%である。
X \sim \text{Bin}(100, 0.5) より、\mu = 50、\sigma = \sqrt{100 \times 0.5 \times 0.5} = 5 である。連続修正を適用して
表が45回以上55回以下出る確率は約73%である。
まとめ
| 項目 | 内容 |
|---|---|
| 定理名 | 中心極限定理(central limit theorem) |
| 主張 | 独立同一分布に従う確率変数の和・平均は正規分布に収束 |
| 条件 | 独立、同一分布、有限の分散 0 < \sigma^2 < \infty |
| 標本平均の分布 | \bar{X}_n \approx N\left( \mu, \dfrac{\sigma^2}{n} \right)(n が大きいとき) |
| 和の分布 | S_n \approx N(n\mu, n\sigma^2)(n が大きいとき) |
| 連続修正 | 離散分布の正規近似で \pm 0.5 の補正を行う |
| 応用 | 推定、検定、信頼区間、正規分布の普遍性の説明 |
Pythonで実装する
Pythonを使って中心極限定理をシミュレーションで確認する。
import numpy as np
from scipy import stats
np.random.seed(42)
# 一様分布 U(0,1) からの標本平均の分布を調べる
# U(0,1) の期待値は 0.5、分散は 1/12
mu_uniform = 0.5
var_uniform = 1/12
n_simulations = 100000
print("=== 中心極限定理のシミュレーション ===")
print("元の分布: 一様分布 U(0, 1)")
print(f"期待値: {mu_uniform}, 分散: {var_uniform:.6f}\n")
for n in [1, 2, 5, 10, 30]:
# n個の一様乱数の平均を繰り返し計算
samples = np.random.uniform(0, 1, size=(n_simulations, n))
sample_means = samples.mean(axis=1)
# 標本平均の期待値と分散(理論値)
theory_mean = mu_uniform
theory_var = var_uniform / n
# シミュレーション結果
sim_mean = sample_means.mean()
sim_var = sample_means.var()
# 標準化して正規性を確認
standardized = (sample_means - mu_uniform) / np.sqrt(var_uniform / n)
print(f"n = {n}:")
print(f" 理論値: E[X̄] = {theory_mean:.4f}, V[X̄] = {theory_var:.6f}")
print(f" 実測値: E[X̄] = {sim_mean:.4f}, V[X̄] = {sim_var:.6f}")
print(f" 標準化後の歪度: {stats.skew(standardized):.4f}")
print(f" 標準化後の尖度: {stats.kurtosis(standardized):.4f} (正規分布なら0)")
print()
# 例:サイコロ60回の合計
print("=== サイコロ60回の合計のシミュレーション ===")
n_dice = 60
dice_rolls = np.random.randint(1, 7, size=(n_simulations, n_dice))
sums = dice_rolls.sum(axis=1)
# 理論値
mu_dice = 3.5 * n_dice # = 210
sigma_dice = np.sqrt(35/12 * n_dice) # ≈ 13.23
print(f"理論値: E[S] = {mu_dice}, σ[S] = {sigma_dice:.4f}")
print(f"実測値: E[S] = {sums.mean():.4f}, σ[S] = {sums.std():.4f}")
# P(S >= 220) の計算
prob_sim = (sums >= 220).mean()
z = (219.5 - mu_dice) / sigma_dice # 連続修正
prob_theory = 1 - stats.norm.cdf(z)
print(f"\nP(S >= 220):")
print(f" シミュレーション: {prob_sim:.4f}")
print(f" 正規近似(連続修正あり): {prob_theory:.4f}")
n が増加するにつれて、尖度が0に近づいていく様子が確認できる(正規分布の尖度は0)。また、サイコロの例では、シミュレーション結果と正規近似の値がほぼ一致している。