推定量の評価基準


1. はじめに

私たちは、日常生活においてつねに推定をしています。
例えば明日の天気を予想したり、料理の味を想像したりする時、私たちは無意識のうちに推定を行っています。
統計学はこの「推定」をより科学的かつ数学的に扱います。

統計学における推定の重要性は、データから未知の真の値(パラメータ)を導くことにあります。
例えばある国の平均身長を知りたい場合、全国民の身長を測ることは現実的ではありません。
そこで一部の国民のデータから全体の平均身長を推定します。

この記事では、統計学における推定量の性質、特に不偏性、有効性、頑健性について深く掘り下げていきます。

2. 推定量の主要概念

2.1 推定量とは

推定量とは、観測データから母集団のパラメータ(例:平均、分散)を推定するための数です。
例えば「サンプルの平均値」は「母集団の平均値」を推定するための推定量の一つです。

推定量はふつう、$\hat{\theta}(Y)$ と表記されます。
ここで、$\theta$ は推定したいパラメータ、$Y$ は観測データを表します。

2.2 不偏性

不偏性はパラメータ $\theta$ を系統的に偏って推定していないことを言います。
つまり、推定量の期待値がパラメータの真の値に等しいという性質です。
数学的には以下のように表されます。

$$ E[\hat{\theta}(Y)] = \theta $$

不偏推定量は、真の値を過大評価も過小評価もしない推定量です。

2.3 有効性(効率)

有効性は推定量の分散の大きさを表す概念で、研究や測定を繰り返したときに推定量の誤差のばらつきが小さいことを指します。
分散が小さいほど推定値のばらつきが小さく、より信頼性が高いと言えます。

数学的には、推定量の分散 $Var[\hat{\theta}(Y)]$ が小さいほど有効性が高いと判断します。

不偏推定量のうち, \theta がどのような値であっても分散を最小にするものを一様最小分散不偏推定量(uniformly minimum variance unbiased estimator)といいます。

2.4 頑健性

頑健性は、データに外れ値や想定外の分布が含まれていても、推定量の性能が大きく低下しない性質を指します。
頑健な推定量は、理想的な条件が満たされない現実世界のデータ分析において特に重要です。

3. Cramér-Raoの下限

推定量の分散にはある下限が存在し、これをCramér-Raoの下限と呼びます。
この定理は、推定量の精度に関する理論的な基盤となります。

任意の不偏推定量 $\hat{\theta}$ の分散は、Fisher情報量 $I(\theta)$ の逆数以上になります:
$$ Var(\hat{\theta}) \geq \frac{1}{I(\theta)} $$
ここで、Fisher情報量は以下のように定義されます:
$$ I(\theta) = E[U^2(\theta)] $$
$U(\theta)$ はスコア関数で、対数尤度関数の $\theta$ に関する導関数です:
$$ U(\theta) = \frac{d}{d\theta} \log[p(y;\theta)] $$

【証明】
Cauchy-Schwarz (コーシー・シュワルツ)の不等式$\operatorname{Cov}^2(Y, X) \leq \operatorname{Var}(Y) \operatorname{Var}(X)$から導かれます。

不偏推定量の定義から,以下の関係が成り立ちます.
$$ \mathrm{E}[\widehat{\theta}]=\int \widehat{\theta} p(y ; \theta) d y=\theta $$
左辺を $\theta$ で微分します.
対数微分の公式をから、一般に$\frac{d}{dx} \log f(x) = \frac{f'(x)}{f(x)}$ です。
これを $p(y;\theta)$ に適用すると、
$$\frac{d}{d\theta} \log p(y;\theta) = \frac{\frac{d}{d\theta}p(y;\theta)}{p(y;\theta)}$$
となります。

微分と積分の順序交換と期待値の定義から、
$$\frac{d}{d \theta} \int \widehat{\theta} p(y ; \theta) d y = \int \widehat{\theta} \frac{d}{d \theta}p(y ; \theta) d y = \int \widehat{\theta} U(\theta) p(y ; \theta) d y$$
これは $\widehat{\theta}$ と $U(\theta)$ の積の期待値の定義そのものです。

従って微分と積分が交換可能なら$$\begin{aligned}\frac{d}{d \theta} p(y ; \theta)=p(y ; \theta) \frac{d}{d \theta} \log [p(y ; \theta)]=p(y ; \theta) U(\theta)\end{aligned}$$ですから、$$\begin{aligned}\frac{d}{d \theta} \int \widehat{\theta} p(y ; \theta) d y=\int \widehat{\theta} U(\theta) p(y ; \theta) d y=\mathrm{E}[\widehat{\theta} U(\theta)]\end{aligned}$$が成り立ちます.
確率分布の性質として全確率は1であることから、
$$E[U(\theta)] = \int U(\theta)p(y;\theta)dy = \int \frac{d}{d\theta}p(y;\theta)dy = \frac{d}{d\theta}\int p(y;\theta)dy = \frac{d}{d\theta}1 = 0$$
となります。
つまりスコア関数の期待値はゼロとなるので、共分散の定義$$\text{Cov}[X, Y] = \mathrm{E}[XY] – \mathrm{E}[X]\mathrm{E}[Y]$$から、$$\text{Cov}[\hat{\theta}, U(\theta)] = \mathrm{E}[\hat{\theta}U(\theta)] – \mathrm{E}[\hat{\theta}]\mathrm{E}[U(\theta)]$$であるので、
$$\mathrm{E}[\widehat{\theta} U(\theta)]=\operatorname{Cov}[\widehat{\theta} U(\theta)]$$となります。
右辺を $\theta$ で微分した結果を考えると$\begin{aligned}\frac{d}{d \theta} \theta=1\end{aligned}$なので、$\operatorname{Cov}[\widehat{\theta} U(\theta)]=1$であることがわかります.
ここで Cauchy-Schwarz の不等式により$\operatorname{Var}(\widehat{\theta}) I(\theta)=\operatorname{Var}(\widehat{\theta}) \operatorname{Var}[U(\theta)] \geq \operatorname{Cov}^2[\widehat{\theta} U(\theta)]=1$なので、$ Var(\hat{\theta}) \geq \frac{1}{I(\theta)} $が成り立ちます.

要約すると、任意の不偏推定量の分散と Fisher 情報量 $I(\theta)$ には$\begin{aligned}\operatorname{Var}(\widehat{\theta}) \geq \frac{1}{I(\theta)}\end{aligned}$という関係があり, Fisher 情報量の逆数より分散が小さい不偏推定量は存在しないということになります。

import numpy as np
import matplotlib.pyplot as plt

# パラメータ設定
true_mean = 0
true_std = 1
sample_sizes = np.logspace(1, 3, 100).astype(int)  # 細かいサンプルサイズの範囲
n_simulations = 10000  # シミュレーション回数を増やす

# シミュレーション関数
def simulate_mean_estimator(size):
    samples = np.random.normal(true_mean, true_std, (n_simulations, size))
    return np.mean(samples, axis=1)

# 理論値とシミュレーション結果の計算
cr_lower_bounds = true_std**2 / sample_sizes
simulated_variances = [np.var(simulate_mean_estimator(size)) for size in sample_sizes]

# プロットの設定
plt.figure(figsize=(3, 2))
plt.plot(sample_sizes, cr_lower_bounds, 'r-', linewidth=0.3, label="Cramér-Rao Lower Bound")
plt.plot(sample_sizes, simulated_variances, 'b-', linewidth=0.3, alpha=0.7, label="Simulated Variance")
plt.xscale('log')
plt.yscale('log')
plt.xlabel('Sample Size', fontsize=4)
plt.ylabel('Variance', fontsize=4)
plt.title('Cramér-Rao Lower Bound vs Simulated Variance\nfor Normal Distribution Mean Estimation', fontsize=4)
plt.legend(fontsize=4)
plt.grid(True, which="both", ls="-", alpha=0.2)

# 軸のtickを調整
plt.tick_params(axis='both', which='major', labelsize=4)

# 余白を調整
plt.tight_layout()

plt.show()

4. 正規分布の平均の推定

具体的な例として、正規分布 $N(\mu, \sigma^2)$ からのサンプル $X_1, X_2, …, X_n$ に基づいて、平均 $\mu$ を推定する場合を考えます。

4.1 標本平均

標本平均 $\bar{X} = \frac{1}{n}\sum_{i=1}^n X_i$ は $\mu$ の不偏推定量として広く用いられます。

  • 不偏性:$E[\bar{X}] = \mu$
  • 分散:$Var(\bar{X}) = \frac{\sigma^2}{n}$

正規分布の対数尤度関数は$$ l(\mu) = -\frac{n}{2}\log(2\pi\sigma^2) – \frac{1}{2\sigma^2}\sum_{i=1}^n (X_i – \mu)^2 $$です。

これからスコア関数を計算すると$$ U(\mu) = \frac{1}{\sigma^2}\sum_{i=1}^n (X_i – \mu) $$となります。

Fisher 情報量は$$ I(\mu) = E[U^2(\mu)] = \frac{n}{\sigma^2} $$ですから、Cramér-Raoの下限は$$ \frac{1}{I(\mu)} = \frac{\sigma^2}{n} $$となります。
これは標本平均の分散と一致します。
つまり、標本平均は Cramér-Raoの下限を達成する最適な推定量であることがわかります。

4.2 中央値

サンプルの中央値も $\mu$ の推定量として使用できます。

  • 不偏性:大標本では近似的に不偏となります
  • 分散:$Var(中央値) \approx \frac{\pi\sigma^2}{2n}$ (大標本近似)

4.3 比較

正規分布の場合、標本平均は中央値よりも分散が小さいという意味で効率的です。
しかし外れ値がある場合、中央値の方が頑健な推定となります。

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

# パラメータ設定
true_mean = 5
true_std = 2
sample_sizes = [10, 50, 100, 500]
n_simulations = 10000

# 推定量の計算
def estimate_mean(data):
    return np.mean(data)

def estimate_median(data):
    return np.median(data)

# シミュレーション
results = {size: {'mean': [], 'median': []} for size in sample_sizes}

for size in sample_sizes:
    for _ in range(n_simulations):
        sample = np.random.normal(true_mean, true_std, size)
        results[size]['mean'].append(estimate_mean(sample))
        results[size]['median'].append(estimate_median(sample))

# プロットのスタイル設定
plt.style.use('seaborn')
plt.rcParams['font.size'] = 2
plt.rcParams['axes.labelsize'] = 2
plt.rcParams['axes.titlesize'] = 2
plt.rcParams['xtick.labelsize'] = 2
plt.rcParams['ytick.labelsize'] = 2
plt.rcParams['legend.fontsize'] = 2
plt.rcParams['figure.titlesize'] = 2

# プロット
fig, axs = plt.subplots(2, 2, figsize=(6, 6))
fig.suptitle('Sample Mean vs Sample Median as Estimators of Population Mean', fontsize=6)

for i, size in enumerate(sample_sizes):
    ax = axs[i//2, i%2]
    ax.hist(results[size]['mean'], bins=50, alpha=0.5, label='Sample Mean', color='skyblue', edgecolor='black')
    ax.hist(results[size]['median'], bins=50, alpha=0.5, label='Sample Median', color='lightgreen', edgecolor='black')
    ax.axvline(true_mean, color='red', linestyle='dashed', linewidth=0.5, label='True Mean')
    ax.set_title(f'Sample Size: {size}', fontsize=4)
    ax.set_xlabel('Estimated Value', fontsize=4)
    ax.set_ylabel('Frequency', fontsize=4)
    ax.legend(loc='upper left', fontsize=4)
    
    # x軸とy軸の範囲を設定
    ax.set_xlim(true_mean - 3*true_std/np.sqrt(size), true_mean + 3*true_std/np.sqrt(size))
    ax.set_ylim(0, n_simulations/8)  # ヒストグラムの最大高さを調整

    # グリッドを追加
    ax.grid(True, linestyle='--', alpha=0.7)

    # 軸のtickを調整
    ax.tick_params(axis='both', which='major', labelsize=4)
    
    
# サブプロット間の間隔を調整
plt.subplots_adjust(left=0.9, right=0.9, top=0.9, bottom=0.9, wspace=0.1, hspace=0.1)


plt.tight_layout(rect=[0, 0.1, 1, 0.85])  # タイトルのためのスペースを確保

# 統計量の計算と出力
print("\nEstimator Statistics:")
print("=====================")
for size in sample_sizes:
    print(f"\nSample Size: {size}")
    for estimator in ['mean', 'median']:
        estimates = results[size][estimator]
        bias = np.mean(estimates) - true_mean
        variance = np.var(estimates)
        mse = bias**2 + variance
        print(f"{estimator.capitalize()}:")
        print(f"  Bias: {bias:.4f}")
        print(f"  Variance: {variance:.4f}")
        print(f"  MSE: {mse:.4f}")

plt.show()

5. 限界

  • 不偏性と効率性はトレードオフ
    不偏推定量が常に最良とは限りません。
    バイアスがあっても分散が小さい推定量が有用な場合があります。
  • 頑健性の重要性
    理論的に優れた推定量でも、実データには外れ値や想定外の分布が含まれることがあり、頑健な推定量の重要性が高まっています。
  • モデルの妥当性
    推定量の性質は特定の確率モデルを仮定して導出されます。
    現実のデータがこの仮定に従わない場合、推定量の性能が低下する可能性があります。

6. 結論

推定量の性質を理解することは、データ分析の信頼性を高める上で非常に重要です。
不偏性、有効性、頑健性という3つの主要な概念は、それぞれ推定量の異なる側面を評価します。
実際のデータ分析では、これらの性質のバランスを考慮しつつ、問題に適した推定方法を選択することが求められます。

統計学の理論は、Cramér-Raoの下限のような数学的な基盤を提供し、推定の限界を明らかにします。
一方で臨床試験の例が示すように、実践的な場面では適切なモデリングと解析手法の選択が重要です。

参考文献

医学のための因果推論Ⅰ 一般化線形モデル

最終更新: