ヘロログ
統計学

中心極限定理

中心極限定理(central limit theorem)は、統計学における最も重要な定理の一つである。この定理は、元の分布の形状によらず、独立な確率変数の和や平均は、サンプルサイズが大きくなると正規分布に近づくことを主張する。

中心極限定理の重要性は計り知れない。まず、自然界や社会の多くの現象が正規分布に従う理由を説明する。身長や体重といった形質は多数の遺伝的・環境的要因の和として決まるため、中心極限定理により正規分布に近づく。また、統計的推測において、母集団の分布が未知でも標本平均の分布を正規分布で近似できるため、推定や検定の理論的基盤となっている。

定義

確率変数列 X_1, X_2, \ldots, X_n が独立に同一の分布に従い、その期待値を \mu、分散を \sigma^2(ただし 0 < \sigma^2 < \infty)とする。このとき、標本平均

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

を標準化した確率変数は、n \to \infty のとき標準正規分布に分布収束する。

中心極限定理
\dfrac{\sqrt{n}(\bar{X}_n - \mu)}{\sigma} \xrightarrow{d} N(0, 1) \quad (n \to \infty)

これは同値な表現として、\sqrt{n}(\bar{X}_n - \mu)N(0, \sigma^2) に分布収束する、とも書ける。

また、和 S_n = \sum_{i=1}^{n} X_i については

\dfrac{S_n - n\mu}{\sigma\sqrt{n}} \xrightarrow{d} N(0, 1) \quad (n \to \infty)

が成り立つ。つまり、S_n は近似的に N(n\mu, n\sigma^2) に従う。

直感的理解

なぜ、元の分布の形状によらず和が正規分布に近づくのだろうか。直感的な理解として、以下のような説明ができる。

独立な確率変数を足し合わせると、それぞれの変数が取りうる値の組み合わせの数は急激に増加する。たとえば、サイコロを1回振ると6通りだが、2回振ると36通り、n 回振ると 6^n 通りになる。

このとき、和が極端な値(たとえば全て1や全て6)になる組み合わせは少なく、中央付近の値になる組み合わせは非常に多い。この「中央に集まる傾向」が、足し合わせる数が増えるにつれて強まり、やがて釣鐘型の正規分布に近づいていく。

ポイント

中心極限定理が成り立つための条件は「独立」「同一分布」「有限の分散」である。コーシー分布のように分散が存在しない分布では、中心極限定理は成り立たない。

標本平均の分布の収束

一様分布 U(0, 1) からの標本平均が、サンプルサイズ n の増加とともに正規分布に近づく様子を示す。各グラフは標本平均を標準化(期待値0、分散1に変換)した分布である。

f(z) 0.5 0.4 0.3 0.2 0.1 0 z -4 -3 -2 -1 0 1 2 3 4 n = 2 n = 30 N(0,1)
図1: 一様分布 U(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) に対応すると考えるためである。

連続修正
\begin{aligned} P(X \geq k) &\approx P\left( Z \geq \dfrac{k - 0.5 - \mu}{\sigma} \right) \\[8pt] P(X \leq k) &\approx P\left( Z \leq \dfrac{k + 0.5 - \mu}{\sigma} \right) \end{aligned}

例:連続修正の効果

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回の目の期待値と分散は

E[X] = \dfrac{1+2+3+4+5+6}{6} = 3.5, \quad V[X] = \dfrac{35}{12}

したがって、合計 S = \sum_{i=1}^{60} X_i について

E[S] = 60 \times 3.5 = 210, \quad V[S] = 60 \times \dfrac{35}{12} = 175, \quad \sigma_S = \sqrt{175} \approx 13.23

中心極限定理より、S は近似的に N(210, 175) に従う。P(S \geq 220) を求める(連続修正を適用)。

z = \dfrac{219.5 - 210}{13.23} \approx 0.72
P(S \geq 220) \approx 1 - \Phi(0.72) \approx 1 - 0.7642 = 0.2358

合計が220以上になる確率は約24%である。

例2:標本平均の分布

ある製品の重量 X が期待値 500g、標準偏差 20g の分布に従うとする。100個の製品を無作為抽出したとき、標本平均 \bar{X} が 498g 以上 502g 以下になる確率を求める。

標本平均の分布は中心極限定理より

\bar{X} \sim N\left( 500, \dfrac{20^2}{100} \right) = N(500, 4)

標準偏差は \sigma_{\bar{X}} = \dfrac{20}{\sqrt{100}} = 2 である。

\begin{aligned} P(498 \leq \bar{X} \leq 502) &= \Phi\left( \dfrac{502 - 500}{2} \right) - \Phi\left( \dfrac{498 - 500}{2} \right) \\[5pt] &= \Phi(1) - \Phi(-1) = 0.6827 \end{aligned}

標本平均が真の平均から±2g以内に収まる確率は約68%である。

練習問題

問1. ある工場で生産される部品の不良率は30%である。400個の部品を検査したとき、不良品の割合が35%以上になる確率を求めよ。

不良品の数 X\text{Bin}(400, 0.3) に従う。不良品の割合 \hat{p} = \dfrac{X}{400} について、中心極限定理より

\hat{p} \sim N\left( 0.3, \dfrac{0.3 \times 0.7}{400} \right) = N(0.3, 0.000525)

標準偏差は \sigma_{\hat{p}} = \sqrt{0.000525} \approx 0.0229 である。

z = \dfrac{0.35 - 0.3}{0.0229} \approx 2.18
P(\hat{p} \geq 0.35) \approx 1 - \Phi(2.18) \approx 0.0146

不良品の割合が35%以上になる確率は約1.5%と非常に小さい。

問2. 確率変数 X_1, X_2, \ldots, X_{36} が独立に指数分布 \text{Exp}(0.5)(期待値2、分散4)に従うとき、\bar{X} = \frac{1}{36}\sum_{i=1}^{36} X_i が 2.5 以上になる確率を求めよ。

中心極限定理より、標本平均の分布は

\bar{X} \sim N\left( 2, \dfrac{4}{36} \right) = N\left( 2, \dfrac{1}{9} \right)

標準偏差は \sigma_{\bar{X}} = \frac{2}{6} = \frac{1}{3} である。

z = \dfrac{2.5 - 2}{1/3} = 1.5
P(\bar{X} \geq 2.5) = 1 - \Phi(1.5) \approx 1 - 0.9332 = 0.0668

標本平均が2.5以上になる確率は約6.7%である。

問3. コインを100回投げて表が出る回数を X とする。P(45 \leq X \leq 55) を連続修正を用いて計算せよ。

X \sim \text{Bin}(100, 0.5) より、\mu = 50\sigma = \sqrt{100 \times 0.5 \times 0.5} = 5 である。連続修正を適用して

\begin{aligned} P(45 \leq X \leq 55) &\approx P(44.5 \leq Y \leq 55.5) \quad (Y \sim N(50, 25)) \\[5pt] &= \Phi\left( \dfrac{55.5 - 50}{5} \right) - \Phi\left( \dfrac{44.5 - 50}{5} \right) \\[5pt] &= \Phi(1.1) - \Phi(-1.1) \\[5pt] &= 0.8643 - 0.1357 = 0.7286 \end{aligned}

表が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を使って中心極限定理をシミュレーションで確認する。

central_limit_theorem.py
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}")
=== 中心極限定理のシミュレーション === 元の分布: 一様分布 U(0, 1) 期待値: 0.5, 分散: 0.083333 n = 1: 理論値: E[X̄] = 0.5000, V[X̄] = 0.083333 実測値: E[X̄] = 0.4997, V[X̄] = 0.083396 標準化後の歪度: -0.0024 標準化後の尖度: -1.1983 (正規分布なら0) n = 2: 理論値: E[X̄] = 0.5000, V[X̄] = 0.041667 実測値: E[X̄] = 0.4999, V[X̄] = 0.041657 標準化後の歪度: 0.0010 標準化後の尖度: -0.5958 (正規分布なら0) n = 5: 理論値: E[X̄] = 0.5000, V[X̄] = 0.016667 実測値: E[X̄] = 0.5001, V[X̄] = 0.016658 標準化後の歪度: -0.0016 標準化後の尖度: -0.2357 (正規分布なら0) n = 10: 理論値: E[X̄] = 0.5000, V[X̄] = 0.008333 実測値: E[X̄] = 0.5001, V[X̄] = 0.008360 標準化後の歪度: 0.0082 標準化後の尖度: -0.1199 (正規分布なら0) n = 30: 理論値: E[X̄] = 0.5000, V[X̄] = 0.002778 実測値: E[X̄] = 0.5000, V[X̄] = 0.002774 標準化後の歪度: -0.0017 標準化後の尖度: -0.0463 (正規分布なら0) === サイコロ60回の合計のシミュレーション === 理論値: E[S] = 210.0, σ[S] = 13.2288 実測値: E[S] = 210.0256, σ[S] = 13.2340 P(S >= 220): シミュレーション: 0.2360 正規近似(連続修正あり): 0.2363

n が増加するにつれて、尖度が0に近づいていく様子が確認できる(正規分布の尖度は0)。また、サイコロの例では、シミュレーション結果と正規近似の値がほぼ一致している。