正規分布(normal distribution)は、統計学において最も重要な連続型確率分布である。ガウス分布(Gaussian distribution)とも呼ばれ、その特徴的な釣鐘型の形状から「ベルカーブ」とも呼ばれる。
正規分布が重要である理由は主に二つある。一つは、自然界や社会の多くの現象が正規分布に従うことである。身長、体重、テストの得点、測定誤差、株価の対数収益率など、多くのデータが正規分布で近似できる。
もう一つは、中心極限定理の存在である。中心極限定理により、独立同一分布に従う確率変数の和(または平均)は、元の分布の形状によらず、サンプルサイズが大きくなると正規分布に近づく。この性質により、推定や検定の理論において正規分布は中心的な役割を果たす。
定義
実数 \mu と正の実数 \sigma > 0 に対して、確率変数 X が以下の確率密度関数をもつとき、X は平均 \mu、分散 \sigma^2 の正規分布に従うという。この分布を N(\mu, \sigma^2) と表記する。
ここで \mu は分布の中心(平均)を表し、\sigma は分布の広がり(標準偏差)を表す。確率密度関数は x = \mu で最大値をとり、\mu から離れるにつれて急速に減少する。
確率密度関数のグラフ
正規分布の確率密度関数は、平均 \mu を中心とした左右対称な釣鐘型の曲線である。以下は異なる標準偏差をもつ正規分布の比較である。いずれも平均 \mu = 10 で共通している。
標準偏差 \sigma が小さいほど分布は尖った形状になり、\sigma が大きいほど平らで広がった形状になる。いずれの場合も、曲線の下の面積(積分値)は1に等しい。
標準正規分布
平均 \mu = 0、分散 \sigma^2 = 1 の正規分布 N(0, 1) を標準正規分布(standard normal distribution)という。
標準正規分布の確率密度関数と累積分布関数には、それぞれ特別な記号が用いられる。
標準正規分布の確率は正規分布表を用いて求めることができる。代表的な値として以下がある。
- \Phi(0) = 0.5
- \Phi(1) \approx 0.8413
- \Phi(1.96) \approx 0.975
- \Phi(2) \approx 0.9772
標準化
任意の正規分布 N(\mu, \sigma^2) に従う確率変数 X は、以下の変換により標準正規分布に従う確率変数 Z に変換できる。この操作を標準化という。
標準化を用いると、任意の正規分布の確率を標準正規分布の累積分布関数 \Phi で表すことができる。
正規分布の確率計算は、標準化によって標準正規分布に帰着させる。X \sim N(\mu, \sigma^2) のとき
期待値と分散
正規分布 N(\mu, \sigma^2) のパラメータ \mu と \sigma^2 は、それぞれ期待値と分散に一致する。
【期待値の導出】 標準正規分布の期待値が0であることを示す。\varphi(z) は偶関数、z は奇関数なので、被積分関数 z \cdot \varphi(z) は奇関数となる。
一般の X \sim N(\mu, \sigma^2) については、X = \mu + \sigma Z と表せるので、E[X] = \mu + \sigma E[Z] = \mu となる。
【分散の導出】 標準正規分布の分散を計算する。部分積分を用いて
よって V[Z] = E[Z^2] - (E[Z])^2 = 1 - 0 = 1 となる。一般の X = \mu + \sigma Z については、V[X] = \sigma^2 V[Z] = \sigma^2 となる。
モーメント母関数
正規分布 N(\mu, \sigma^2) のモーメント母関数は次の形をとる。
この式は、正規分布の再生性を示す際に重要な役割を果たす。
再生性
正規分布には再生性(reproductive property)がある。独立な正規分布に従う確率変数の和は、再び正規分布に従う。
X_1 \sim N(\mu_1, \sigma_1^2)、X_2 \sim N(\mu_2, \sigma_2^2) が独立のとき
【証明】 モーメント母関数を用いて示す。X_1 と X_2 が独立なので
これは N(\mu_1 + \mu_2, \sigma_1^2 + \sigma_2^2) のモーメント母関数と一致する。
68-95-99.7ルール
正規分布では、平均からの距離を標準偏差の倍数で測ったとき、以下の確率が成り立つ。これを68-95-99.7ルール(または経験則)という。
- P(\mu - \sigma \leq X \leq \mu + \sigma) \approx 0.6827(約68%)
- P(\mu - 2\sigma \leq X \leq \mu + 2\sigma) \approx 0.9545(約95%)
- P(\mu - 3\sigma \leq X \leq \mu + 3\sigma) \approx 0.9973(約99.7%)
簡単な計算例
例1:テストの得点
ある試験の得点 X が N(65, 10^2) に従うとする(平均65点、標準偏差10点)。
(1)70点以上をとる確率を求める。
約31%の受験者が70点以上をとる。
(2)50点以上80点以下の確率を求める。
約87%の受験者が50点から80点の間に入る。
例2:偏差値の計算
偏差値は、平均50、標準偏差10に標準化した得点である。得点 x の偏差値は
例1の試験(\mu = 65, \sigma = 10)で85点をとった場合
練習問題
標準化して計算する。
約15.9%の人が176cm以上である。
164cmから176cmは平均±1σの範囲であり、68-95-99.7ルールの通り約68%である。
正規分布の再生性より
期待値は50、標準偏差は5の正規分布に従う。
まとめ
| 項目 | 内容 |
|---|---|
| 分布名 | 正規分布(normal distribution)、ガウス分布 |
| 表記 | N(\mu, \sigma^2) |
| 確率密度関数 | f(x) = \dfrac{1}{\sqrt{2\pi}\sigma} \exp\left( -\dfrac{(x-\mu)^2}{2\sigma^2} \right) |
| 期待値 | E[X] = \mu |
| 分散 | V[X] = \sigma^2 |
| モーメント母関数 | M(t) = \exp\left( \mu t + \dfrac{\sigma^2 t^2}{2} \right) |
| 再生性 | X_1 + X_2 \sim N(\mu_1 + \mu_2, \sigma_1^2 + \sigma_2^2) |
| 応用例 | 身長・体重、テスト得点、測定誤差、推定・検定 |
Pythonで実装する
Pythonを使って正規分布の計算やシミュレーションを行う。
import numpy as np
from scipy import stats
# パラメータ設定
mu, sigma = 65, 10 # N(65, 10²)
print("=== 正規分布 N(65, 10²) ===")
dist = stats.norm(loc=mu, scale=sigma)
print(f"期待値: E[X] = {dist.mean()}")
print(f"分散 : V[X] = {dist.var()}")
print(f"標準偏差: σ = {dist.std()}")
# 確率密度関数
print(f"\n確率密度関数:")
print(f" f(65) = {dist.pdf(65):.6f}")
print(f" f(75) = {dist.pdf(75):.6f}")
# 累積分布関数(確率計算)
print(f"\n確率計算:")
print(f" P(X ≤ 70) = {dist.cdf(70):.4f}")
print(f" P(X ≥ 70) = {1 - dist.cdf(70):.4f}")
print(f" P(50 ≤ X ≤ 80) = {dist.cdf(80) - dist.cdf(50):.4f}")
# 標準正規分布
print(f"\n=== 標準正規分布 N(0, 1) ===")
std_norm = stats.norm(0, 1)
print(f" Φ(1.96) = {std_norm.cdf(1.96):.4f}")
print(f" P(-1.96 ≤ Z ≤ 1.96) = {std_norm.cdf(1.96) - std_norm.cdf(-1.96):.4f}")
# 68-95-99.7ルール
print(f"\n68-95-99.7ルール:")
print(f" P(μ-σ ≤ X ≤ μ+σ) = {std_norm.cdf(1) - std_norm.cdf(-1):.4f}")
print(f" P(μ-2σ ≤ X ≤ μ+2σ) = {std_norm.cdf(2) - std_norm.cdf(-2):.4f}")
print(f" P(μ-3σ ≤ X ≤ μ+3σ) = {std_norm.cdf(3) - std_norm.cdf(-3):.4f}")
# シミュレーション
np.random.seed(42)
n_samples = 10000
samples = np.random.normal(mu, sigma, size=n_samples)
print(f"\nシミュレーション(n={n_samples}):")
print(f"標本平均: {np.mean(samples):.4f}")
print(f"標本標準偏差: {np.std(samples, ddof=0):.4f}")
シミュレーション結果が理論値に近い値を示している。正規分布は scipy.stats.norm で簡単に扱うことができる。