データの分散を計算するとき、n で割るべきか n-1 で割るべきか、迷ったことはないだろうか?
実は、統計ソフトの多くは n-1 で割る。その理由は「n で割ると真の値より小さめに推定してしまう」からである。この「系統的なズレ」をバイアス(偏り)と呼ぶ。バイアスがゼロの推定量を不偏推定量という。
本記事では、推定量の良さを評価する基準として、バイアス、分散(バリアンス)、そしてこれらを統合した平均二乗誤差とバイアス・バリアンス分解について解説する。なお、バイアスをデータから推定して補正する手法としてジャックナイフ法がある。
推定量の良さとは
パラメータ \theta を推定したい。標本 X_1, \ldots, X_n から計算される推定量を \hat{\theta} とする。\hat{\theta} は標本に依存するので確率変数である。
「良い推定量」とは何か? 直感的には、真の値 \theta に近い値を返す推定量が良い。これを定量化する指標がいくつかある。
バイアス(偏り)
推定量 \hat{\theta} のバイアス(bias, 偏り)は、推定量の期待値と真の値との差として定義される。
バイアスは「平均的にどれだけズレているか」を表す。正ならば過大推定、負ならば過小推定の傾向がある。
不偏推定量
バイアスがゼロの推定量、すなわち
を満たす推定量を不偏推定量(unbiased estimator)という。「平均的には正しい値を返す」推定量である。
推定量の期待値が真のパラメータに等しいとき、その推定量を不偏推定量という。
平均二乗誤差(MSE)
推定量の良さを総合的に評価する指標として、平均二乗誤差(Mean Squared Error, MSE)がある。
MSE は「推定量と真の値のズレの二乗」の期待値であり、値が小さいほど良い推定量である。
バイアス・バリアンス分解
MSE は、バイアスの二乗と分散(バリアンス)の和に分解できる。これをバイアス・バリアンス分解(bias-variance decomposition)という。
導出
\mu = E[\hat{\theta}] とおく。\hat{\theta} - \theta を (\hat{\theta} - \mu) + (\mu - \theta) と分解すると
ここで E[\hat{\theta} - \mu] = E[\hat{\theta}] - \mu = 0 なので、中央の項は消える。また E[(\hat{\theta} - \mu)^2] = V[\hat{\theta}]、\mu - \theta = E[\hat{\theta}] - \theta = \text{Bias}(\hat{\theta}) より
つまり、MSE は「分散」と「バイアスの二乗」の和である。
推定の誤差は、ばらつき(分散)と系統的なズレ(バイアス)の2つの要因から生じる。不偏推定量ではバイアス項がゼロになるので、MSE = 分散 となる。
例1:標本平均
期待値 \mu、分散 \sigma^2 の分布から独立に得た標本 X_1, \ldots, X_n に対して、標本平均
が \mu の不偏推定量であることを示す。
期待値の計算
よって \text{Bias}(\bar{X}) = E[\bar{X}] - \mu = 0 となり、標本平均は母平均の不偏推定量である。
分散の計算
X_i が独立なので
不偏なので MSE は分散に等しい:\text{MSE}(\bar{X}) = \dfrac{\sigma^2}{n}。
例2:標本分散
次に、分散 \sigma^2 の推定量を考える。2つの推定量を比較しよう。
n で割る標本分散のバイアス
\sum_{i=1}^{n} (X_i - \bar{X})^2 の期待値を計算すると
となる(導出は下記(参考)を確認)。よって
これは \sigma^2 より小さい。バイアスは
n で割る標本分散は、分散を過小推定する傾向がある(負のバイアス)。
n-1 で割る不偏分散
n-1 で割る不偏分散は、分散の不偏推定量である。これが統計ソフトで n-1 で割る理由である。
\bar{X} を計算する際に1つの自由度を「使ってしまう」ため、偏差の二乗和の自由度は n-1 になる。これを自由度の概念で説明することもある。
(参考)期待値の導出
\sum (X_i - \bar{X})^2 = \sum X_i^2 - n\bar{X}^2 を使う。E[X_i^2] = V[X_i] + (E[X_i])^2 = \sigma^2 + \mu^2、E[\bar{X}^2] = V[\bar{X}] + (E[\bar{X}])^2 = \dfrac{\sigma^2}{n} + \mu^2 より
バイアスとバリアンスのトレードオフ
「不偏推定量が常に最良か?」というと、そうとは限らない。バイアス・バリアンス分解から、MSE を小さくするには
- バイアスを小さくする
- 分散を小さくする
の両方が必要だが、これらはしばしばトレードオフの関係にある。
例:一様分布の上端の推定
一様分布 U(0, \theta) から標本を得たとき、\theta の推定量として以下の2つを考える。
\hat{\theta}_1 = 2\bar{X} は不偏(E[\hat{\theta}_1] = 2 \cdot \dfrac{\theta}{2} = \theta)だが、分散が大きい。\hat{\theta}_2 = X_{(n)} はバイアスがある(E[X_{(n)}] = \dfrac{n}{n+1}\theta < \theta)が、分散が小さい。
MSE を比較すると、サンプルサイズが大きいときは最大値の方が MSE が小さくなる場合がある。不偏性にこだわりすぎると、かえって精度が落ちることがある。
一様最小分散不偏推定量(UMVUE)
不偏推定量の中で分散が最小のものを一様最小分散不偏推定量(Uniformly Minimum Variance Unbiased Estimator, UMVUE)という。
不偏推定量ではバイアス項がゼロなので、MSE は分散に等しくなる。したがって UMVUE は、不偏推定量の中で MSE を最小化する推定量でもある。
すべての不偏推定量の中で、どのパラメータ値に対しても分散が最小となる推定量を UMVUE という。
正規分布 N(\mu, \sigma^2) からの標本に対して、標本平均 \bar{X} は \mu の UMVUE であることが知られている。推定量が UMVUE であるかを判定する方法として、クラメール・ラオの不等式が有用である。
練習問題
(2) どちらの分散が小さいか。
(1) E[\hat{\mu}_1] = \dfrac{E[X_1] + E[X_2]}{2} = \dfrac{\mu + \mu}{2} = \mu
E[\hat{\mu}_2] = \dfrac{2E[X_1] + E[X_2]}{3} = \dfrac{2\mu + \mu}{3} = \mu
よって両方とも不偏推定量である。
(2) X_1, X_2 は独立なので
V[\hat{\mu}_1] = \dfrac{V[X_1] + V[X_2]}{4} = \dfrac{2\sigma^2}{4} = \dfrac{\sigma^2}{2}
V[\hat{\mu}_2] = \dfrac{4V[X_1] + V[X_2]}{9} = \dfrac{5\sigma^2}{9}
\dfrac{\sigma^2}{2} = \dfrac{4.5\sigma^2}{9} < \dfrac{5\sigma^2}{9} なので、\hat{\mu}_1 の方が分散が小さい。
バイアス・バリアンス分解より
ポアソン分布では E[X_i] = \lambda、V[X_i] = \lambda である。
E[\bar{X}] = \lambda なので不偏推定量である。
X_i は独立なので、例1と同様に
V[\bar{X}] = \dfrac{V[X_i]}{n} = \dfrac{\lambda}{n}
不偏なので \text{MSE}(\bar{X}) = V[\bar{X}] = \dfrac{\lambda}{n}
まとめ
| 概念 | 定義 |
|---|---|
| バイアス | \text{Bias}(\hat{\theta}) = E[\hat{\theta}] - \theta |
| 不偏推定量 | E[\hat{\theta}] = \theta(バイアス = 0) |
| MSE | \text{MSE}(\hat{\theta}) = E[(\hat{\theta} - \theta)^2] |
| バイアス・バリアンス分解 | \text{MSE} = V[\hat{\theta}] + (\text{Bias})^2 |
| UMVUE | 不偏推定量の中で分散が最小 |
| 推定量 | 対象 | 不偏性 |
|---|---|---|
| 標本平均 \bar{X} | 母平均 \mu | ○ 不偏 |
| n で割る標本分散 | 母分散 \sigma^2 | × バイアスあり(過小推定) |
| n-1 で割る不偏分散 | 母分散 \sigma^2 | ○ 不偏 |
Pythonで検証する
シミュレーションで、n で割る標本分散と n-1 で割る不偏分散のバイアスを検証する。
import numpy as np
np.random.seed(42)
# 真のパラメータ
true_mu = 5.0
true_sigma2 = 4.0 # σ² = 4
n = 10 # サンプルサイズ
n_sim = 10000 # シミュレーション回数
# 推定量を格納
sample_means = []
biased_vars = [] # n で割る
unbiased_vars = [] # n-1 で割る
for _ in range(n_sim):
data = np.random.normal(true_mu, np.sqrt(true_sigma2), n)
sample_means.append(data.mean())
biased_vars.append(data.var(ddof=0)) # n で割る
unbiased_vars.append(data.var(ddof=1)) # n-1 で割る
print("=== シミュレーション結果 ===")
print(f"サンプルサイズ: n = {n}")
print(f"シミュレーション回数: {n_sim}")
print(f"真の母平均: μ = {true_mu}")
print(f"真の母分散: σ² = {true_sigma2}")
print()
# 標本平均の検証
print("【標本平均(μの推定)】")
print(f" E[X̄] の推定値: {np.mean(sample_means):.4f}")
print(f" バイアス: {np.mean(sample_means) - true_mu:.4f}")
print(f" 分散: {np.var(sample_means):.4f}")
print(f" 理論値: σ²/n = {true_sigma2/n:.4f}")
print()
# n で割る標本分散の検証
print("【n で割る標本分散(σ²の推定)】")
print(f" 期待値: {np.mean(biased_vars):.4f}")
print(f" 理論値: (n-1)/n × σ² = {(n-1)/n * true_sigma2:.4f}")
print(f" バイアス: {np.mean(biased_vars) - true_sigma2:.4f}")
print(f" 理論値: -σ²/n = {-true_sigma2/n:.4f}")
print()
# n-1 で割る不偏分散の検証
print("【n-1 で割る不偏分散(σ²の推定)】")
print(f" 期待値: {np.mean(unbiased_vars):.4f}")
print(f" 理論値: σ² = {true_sigma2:.4f}")
print(f" バイアス: {np.mean(unbiased_vars) - true_sigma2:.4f}")
print()
# MSE の比較
mse_biased = np.mean((np.array(biased_vars) - true_sigma2)**2)
mse_unbiased = np.mean((np.array(unbiased_vars) - true_sigma2)**2)
print("【MSE の比較】")
print(f" n で割る標本分散の MSE: {mse_biased:.4f}")
print(f" n-1 で割る不偏分散の MSE: {mse_unbiased:.4f}")
シミュレーション結果から、n で割る標本分散は確かに負のバイアス(約 -0.4)をもち、n-1 で割る不偏分散はほぼバイアスがゼロであることが確認できた。興味深いことに、MSE は n で割る標本分散の方が小さい。これはバイアス・バリアンスのトレードオフの例である。