あるコインを100回投げて65回表が出たとき、このコインの表が出る確率 $p$ をどう推定すべきでしょうか。直感的には $\hat{p} = 65/100 = 0.65$ が自然な答えです。
実はこの推定値は「尤度を最大にするパラメータ値」、すなわち最尤推定量(Maximum Likelihood Estimator, MLE)です。「データが得られる確率が最も高くなるようにパラメータを選ぶ」という原理は、R.A.フィッシャーが1920年代に体系化したもので、今日の統計学で最も広く使われている推定法です。
しかし、直感的にはもっともらしいこの推定法が、なぜ理論的にも優れているのでしょうか。
最尤推定法の理論を理解すると、以下のような問いに答えられるようになります。
- 一致性: サンプルサイズが大きければ、MLEは真のパラメータに収束するか?
- 漸近正規性: MLEの標本分布はどのような形になるか?信頼区間はどう構成するか?
- 漸近効率性: MLEは「最良」の推定量と言えるのか?他の推定量と比べてどうか?
- 情報量: パラメータに関する情報量(フィッシャー情報量)と推定精度はどう関係するか?
本記事の内容
- 尤度関数と対数尤度関数の復習
- スコア関数とフィッシャー情報量
- MLEの一致性
- MLEの漸近正規性
- MLEの漸近効率性
- Pythonによる確認と可視化
前提知識
この記事を読む前に、以下の記事を読んでおくと理解が深まります。
尤度関数の復習
尤度関数と対数尤度関数
独立同一分布(iid)の標本 $X_1, \ldots, X_n$ が確率密度関数(または確率質量関数)$f(x | \theta)$ に従うとき、尤度関数は
$$ L(\theta) = \prod_{i=1}^n f(X_i | \theta) $$
で定義されます。尤度関数は「パラメータ $\theta$ のもとで、手元のデータが得られる尤もらしさ」を表します。
実用上は積を和に変換できる対数尤度関数を使います。
$$ \begin{equation} \ell(\theta) = \ln L(\theta) = \sum_{i=1}^n \ln f(X_i | \theta) \end{equation} $$
最尤推定量(MLE)は対数尤度を最大化するパラメータ値です。
$$ \hat{\theta}_{\text{MLE}} = \arg\max_\theta \ell(\theta) $$
内点解を持つ場合、MLEは尤度方程式(スコア方程式)の解です。
$$ \frac{\partial \ell(\theta)}{\partial \theta}\bigg|_{\theta = \hat{\theta}} = 0 $$
尤度関数は推定の出発点ですが、その微分であるスコア関数とその分散であるフィッシャー情報量が、MLEの理論において本質的な役割を果たします。次にこれらを定義しましょう。
スコア関数とフィッシャー情報量
スコア関数
スコア関数(score function)は対数尤度の1階微分です。1つの観測値に対して
$$ \begin{equation} s(\theta; x) = \frac{\partial}{\partial \theta}\ln f(x | \theta) $$
$n$ 個の標本に対するスコア関数は
$$ S_n(\theta) = \sum_{i=1}^n s(\theta; X_i) = \frac{\partial \ell(\theta)}{\partial \theta} $$
スコア関数には重要な性質があります。正則条件のもとで、
$$ E[s(\theta; X)] = \int \frac{\partial \ln f(x|\theta)}{\partial \theta} f(x|\theta) dx = \int \frac{1}{f(x|\theta)}\frac{\partial f(x|\theta)}{\partial \theta} f(x|\theta) dx = \frac{\partial}{\partial \theta}\int f(x|\theta) dx = 0 $$
すなわち、スコア関数の期待値は真のパラメータのもとで常にゼロです。
フィッシャー情報量
スコア関数の期待値がゼロなので、その分散がそのまま「情報量」となります。
フィッシャー情報量(Fisher information)は1つの観測値あたり
$$ \begin{equation} I(\theta) = V[s(\theta; X)] = E[s(\theta; X)^2] \end{equation} $$
正則条件のもとで、これは対数尤度の2階微分の負の期待値としても表せます。
$$ I(\theta) = -E\left[\frac{\partial^2}{\partial \theta^2}\ln f(X | \theta)\right] $$
この等式は次のように導出できます。$\int f(x|\theta)dx = 1$ を $\theta$ で2回微分すると、
$$ \int \frac{\partial^2 f}{\partial \theta^2} dx = 0 $$
$\frac{\partial^2 \ln f}{\partial \theta^2} = \frac{1}{f}\frac{\partial^2 f}{\partial \theta^2} – \left(\frac{1}{f}\frac{\partial f}{\partial \theta}\right)^2$ を整理すると上の等式が得られます。
$n$ 個の独立な観測値からの全フィッシャー情報量は $I_n(\theta) = nI(\theta)$ です。情報量がサンプルサイズに比例することは直感に合います。
フィッシャー情報量の直感
フィッシャー情報量 $I(\theta)$ は、対数尤度のグラフが $\theta$ の近傍でどれだけ「鋭い」かを表します。
- $I(\theta)$ が大きい → 対数尤度の山が鋭い → パラメータの推定精度が高い
- $I(\theta)$ が小さい → 対数尤度の山がなだらか → パラメータの推定精度が低い
たとえば、分散が小さい正規分布はデータがパラメータの近くに集中するため、平均の推定精度が高く(情報量が大きい)なります。
フィッシャー情報量の概念を理解したところで、MLEの理論的性質を順に見ていきましょう。まずは一致性からです。
MLEの一致性
結果
正則条件のもとで、MLEは一致推定量です。
$$ \hat{\theta}_{\text{MLE}} \xrightarrow{P} \theta_0 \quad (n \to \infty) $$
ここで $\theta_0$ は真のパラメータ値です。
直感的な理解
大数の法則により、$n$ が大きいとき正規化された対数尤度は期待値に収束します。
$$ \frac{1}{n}\ell(\theta) = \frac{1}{n}\sum_{i=1}^n \ln f(X_i | \theta) \xrightarrow{P} E_{\theta_0}[\ln f(X | \theta)] $$
カルバック・ライブラー情報量の性質から、$E_{\theta_0}[\ln f(X|\theta)]$ は $\theta = \theta_0$ で一意の最大値を取ります。
$$ E_{\theta_0}[\ln f(X|\theta_0)] – E_{\theta_0}[\ln f(X|\theta)] = D_{KL}(f(\cdot|\theta_0) \| f(\cdot|\theta)) \geq 0 $$
等号は $\theta = \theta_0$ のときのみ成り立ちます。
したがって、$\ell(\theta)/n$ の最大化点(= MLE)は、$E_{\theta_0}[\ln f(X|\theta)]$ の最大化点(= $\theta_0$)に収束します。
正則条件
一致性が成り立つための正則条件として、以下が典型的です。
- 識別可能性: $\theta_1 \neq \theta_2$ ならば $f(\cdot|\theta_1) \neq f(\cdot|\theta_2)$
- コンパクト性: パラメータ空間 $\Theta$ がコンパクト(あるいは適切な条件で補完)
- 優関数条件: $|\ln f(x|\theta)|$ が可積分な関数で上界を持つ
これらは多くの実用的な分布族(指数型分布族など)で自然に満たされます。
MLEが真の値に収束することがわかりました。次の自然な問いは「収束の速さと分布はどうなるか」です。これが漸近正規性です。
MLEの漸近正規性
結果
正則条件のもとで、MLEは次の漸近正規性を持ちます。
$$ \begin{equation} \sqrt{n}(\hat{\theta}_{\text{MLE}} – \theta_0) \xrightarrow{d} N(0, I(\theta_0)^{-1}) \end{equation} $$
同値的に、
$$ \hat{\theta}_{\text{MLE}} \approx N\left(\theta_0, \frac{1}{nI(\theta_0)}\right) \quad \text{(大標本近似)} $$
導出のスケッチ
スコア方程式 $S_n(\hat{\theta}) = 0$ を真のパラメータ $\theta_0$ の周りでテイラー展開します。
$$ 0 = S_n(\hat{\theta}) \approx S_n(\theta_0) + S_n'(\theta_0)(\hat{\theta} – \theta_0) $$
ここで $S_n'(\theta) = \partial^2 \ell(\theta)/\partial \theta^2$ です。$\hat{\theta} – \theta_0$ について解くと、
$$ \hat{\theta} – \theta_0 \approx -\frac{S_n(\theta_0)}{S_n'(\theta_0)} $$
$\sqrt{n}$ を掛けて整理します。
$$ \sqrt{n}(\hat{\theta} – \theta_0) \approx -\frac{S_n(\theta_0)/\sqrt{n}}{S_n'(\theta_0)/n} $$
分子について: $S_n(\theta_0) = \sum_{i=1}^n s(\theta_0; X_i)$ は期待値ゼロ、分散 $nI(\theta_0)$ の和なので、中心極限定理により
$$ \frac{S_n(\theta_0)}{\sqrt{n}} \xrightarrow{d} N(0, I(\theta_0)) $$
分母について: 大数の法則により
$$ \frac{S_n'(\theta_0)}{n} = \frac{1}{n}\sum_{i=1}^n \frac{\partial^2 \ln f(X_i|\theta_0)}{\partial \theta^2} \xrightarrow{P} E\left[\frac{\partial^2 \ln f(X|\theta_0)}{\partial \theta^2}\right] = -I(\theta_0) $$
これらを代入すると、
$$ \sqrt{n}(\hat{\theta} – \theta_0) \approx \frac{N(0, I(\theta_0))}{I(\theta_0)} = N(0, I(\theta_0)^{-1}) $$
スラツキーの定理により、この近似は分布収束として厳密に正当化されます。
実用上の意味
漸近正規性の実用的な意味は以下の通りです。
信頼区間の構成: MLEの漸近分布を利用して、$\theta_0$ の近似的な $100(1-\alpha)\%$ 信頼区間が構成できます。
$$ \hat{\theta} \pm z_{\alpha/2} \cdot \frac{1}{\sqrt{nI(\hat{\theta})}} $$
ここで $z_{\alpha/2}$ は標準正規分布の上側 $\alpha/2$ 点です。$I(\theta_0)$ を $I(\hat{\theta})$ で置き換えても漸近的に正当化されます。
仮説検定: $H_0: \theta = \theta_0$ に対するワルド検定統計量は
$$ W = n(\hat{\theta} – \theta_0)^2 I(\hat{\theta}) \xrightarrow{d} \chi^2_1 $$
標準誤差: MLEの標準誤差は $\text{SE}(\hat{\theta}) \approx 1/\sqrt{nI(\hat{\theta})}$ で推定できます。
漸近正規性により信頼区間が構成できることがわかりました。次に、この推定量が「最良」の意味で効率的であることを見ていきましょう。
MLEの漸近効率性
クラメール・ラオの下限
不偏推定量の分散はクラメール・ラオの下限(CR下限)で制約されます。
$$ V[\hat{\theta}] \geq \frac{1}{nI(\theta)} $$
MLEの漸近分散は $1/(nI(\theta_0))$ であり、これはまさにCR下限に一致します。
漸近効率性の意味
$$ \begin{equation} \text{ARE}(\hat{\theta}_{\text{MLE}}) = \lim_{n \to \infty} \frac{1/(nI(\theta_0))}{V[\hat{\theta}_{\text{MLE}}]} = 1 \end{equation} $$
漸近相対効率(ARE)が1ということは、サンプルサイズが大きいとき、MLEは「情報を無駄にしない」推定量であることを意味します。
他の推定量(モーメント法など)のAREは1以下になることがあり、MLEは漸近的に最も効率的な推定量の一つです。
具体例:正規分布の場合
$X_1, \ldots, X_n \sim N(\mu, \sigma^2)$ で $\sigma^2$ は既知とします。
対数尤度は
$$ \ell(\mu) = -\frac{n}{2}\ln(2\pi\sigma^2) – \frac{1}{2\sigma^2}\sum_{i=1}^n (X_i – \mu)^2 $$
スコア関数: $s(\mu; x) = (x – \mu)/\sigma^2$
フィッシャー情報量: $I(\mu) = 1/\sigma^2$
MLE: $\hat{\mu} = \bar{X}$
漸近分散: $1/(nI(\mu)) = \sigma^2/n = V[\bar{X}]$
正規分布の場合、MLEは有限標本でもCR下限を達成します(漸近的だけでなく、任意の $n$ で)。このような推定量を効率的推定量と呼びます。
具体例:ベルヌーイ分布の場合
$X_1, \ldots, X_n \sim \text{Bernoulli}(p)$ のとき
フィッシャー情報量: $I(p) = 1/(p(1-p))$
MLE: $\hat{p} = \bar{X}$
漸近分散: $1/(nI(p)) = p(1-p)/n = V[\hat{p}]$
ここでもMLEは有限標本でCR下限を達成しています。
これらの例をPythonで確認し、漸近正規性が実際に成り立つことを視覚的に示しましょう。
Pythonでの確認と可視化
漸近正規性の確認
異なるサンプルサイズでのMLEの標本分布を調べ、正規分布への収束を確認します。
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
np.random.seed(42)
# 指数分布のパラメータ推定: X ~ Exp(lambda)
# MLE: lambda_hat = 1 / X_bar
# Fisher情報量: I(lambda) = 1/lambda^2
lambda_true = 2.0
n_simulations = 10000
sample_sizes = [5, 20, 50, 200]
fig, axes = plt.subplots(2, 2, figsize=(12, 10))
for idx, n in enumerate(sample_sizes):
ax = axes[idx // 2][idx % 2]
# MLE の標本分布をシミュレーション
mle_values = []
for _ in range(n_simulations):
sample = np.random.exponential(1/lambda_true, n)
mle = 1 / np.mean(sample) # lambda の MLE
mle_values.append(mle)
mle_values = np.array(mle_values)
# ヒストグラム
ax.hist(mle_values, bins=60, density=True, color='lightblue',
edgecolor='gray', linewidth=0.3, alpha=0.7)
# 漸近正規分布
fisher_info = 1 / lambda_true**2
asymp_var = 1 / (n * fisher_info)
x_grid = np.linspace(lambda_true - 4*np.sqrt(asymp_var),
lambda_true + 4*np.sqrt(asymp_var), 200)
ax.plot(x_grid, stats.norm.pdf(x_grid, lambda_true, np.sqrt(asymp_var)),
'r-', linewidth=2, label=f'$N(\\lambda_0, 1/(nI))$')
ax.axvline(lambda_true, color='green', linewidth=2, linestyle='--',
label=f'True $\\lambda = {lambda_true}$')
ax.axvline(np.mean(mle_values), color='blue', linewidth=1.5, linestyle=':',
label=f'$E[\\hat{{\\lambda}}] = {np.mean(mle_values):.3f}$')
ax.set_title(f'n = {n}', fontsize=13)
ax.set_xlabel('$\\hat{\\lambda}_{MLE}$', fontsize=11)
ax.set_ylabel('Density', fontsize=11)
ax.legend(fontsize=8)
ax.grid(True, alpha=0.3)
plt.suptitle('Asymptotic Normality of MLE (Exponential Distribution)', fontsize=14, y=1.01)
plt.tight_layout()
plt.savefig('mle_asymptotic_normality.png', dpi=150, bbox_inches='tight')
plt.show()
このグラフから、MLEの漸近正規性が確認できます。
-
$n = 5$: 標本分布は右に歪んでおり、正規分布(赤線)との乖離が見られます。小標本では漸近理論の近似精度が低いことがわかります。また、$E[\hat{\lambda}]$ が真の値からやや離れており、有限標本でのバイアスが存在します
-
$n = 20$: 正規近似が改善されていますが、まだ右裾にわずかな歪みがあります
-
$n = 50$: 正規分布との一致がかなり良くなっています。漸近理論が実用的に使える水準です
-
$n = 200$: ヒストグラムと漸近正規分布がほぼ完全に一致しています。$E[\hat{\lambda}]$ も真の値にほぼ等しくなっています
フィッシャー情報量と推定精度の関係
フィッシャー情報量が推定精度をどのように決定するかを、複数の分布で確認します。
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
np.random.seed(42)
fig, axes = plt.subplots(1, 3, figsize=(16, 5))
# (a) 正規分布: σ² の影響
ax = axes[0]
sigma_values = [0.5, 1.0, 2.0, 4.0]
n = 50
n_sim = 5000
for sigma in sigma_values:
mu_true = 5.0
mles = [np.mean(np.random.normal(mu_true, sigma, n)) for _ in range(n_sim)]
fisher_info = 1 / sigma**2
ax.hist(mles, bins=50, density=True, alpha=0.4,
label=f'$\\sigma={sigma}$, $I={fisher_info:.2f}$')
ax.axvline(mu_true, color='black', linewidth=2, linestyle='--')
ax.set_xlabel('$\\hat{\\mu}_{MLE}$', fontsize=12)
ax.set_ylabel('Density', fontsize=12)
ax.set_title('Effect of Fisher Information\n(Normal Distribution)', fontsize=13)
ax.legend(fontsize=8)
ax.grid(True, alpha=0.3)
# (b) ベルヌーイ分布: p の影響
ax = axes[1]
p_values = [0.1, 0.3, 0.5, 0.7, 0.9]
n = 100
for p in p_values:
mles = [np.mean(np.random.binomial(1, p, n)) for _ in range(n_sim)]
fisher_info = 1 / (p * (1 - p))
ax.hist(mles, bins=40, density=True, alpha=0.4,
label=f'$p={p}$, $I={fisher_info:.2f}$')
ax.set_xlabel('$\\hat{p}_{MLE}$', fontsize=12)
ax.set_ylabel('Density', fontsize=12)
ax.set_title('Effect of Fisher Information\n(Bernoulli Distribution)', fontsize=13)
ax.legend(fontsize=8)
ax.grid(True, alpha=0.3)
# (c) CR下限 vs 実際の分散
ax = axes[2]
n_range = np.arange(10, 501, 10)
p_true = 0.3
var_mle = []
cr_bound = []
for n in n_range:
mles = [np.mean(np.random.binomial(1, p_true, n)) for _ in range(2000)]
var_mle.append(np.var(mles))
cr_bound.append(p_true * (1 - p_true) / n)
ax.plot(n_range, var_mle, 'b-', linewidth=2, label='Actual $V[\\hat{p}]$')
ax.plot(n_range, cr_bound, 'r--', linewidth=2, label='CR bound $1/(nI(p))$')
ax.set_xlabel('Sample size $n$', fontsize=12)
ax.set_ylabel('Variance', fontsize=12)
ax.set_title('MLE Variance vs CR Bound\n(Bernoulli)', fontsize=13)
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('mle_fisher_info.png', dpi=150, bbox_inches='tight')
plt.show()
このグラフからフィッシャー情報量と推定精度の関係が読み取れます。
-
左図: 正規分布の $\sigma$ が小さいほどフィッシャー情報量 $I = 1/\sigma^2$ が大きく、MLEの分布が鋭くなります。$\sigma = 0.5$ のとき $I = 4$ で推定が最も精度よく、$\sigma = 4$ のとき $I = 0.0625$ で推定が最もばらつきます
-
中央図: ベルヌーイ分布では $p = 0.5$ でフィッシャー情報量 $I = 4$ が最大になり、推定が最も難しくなります。$p = 0.1$ や $p = 0.9$ のような極端な値ではデータがほぼ一定値を取るため情報量が大きく($I = 11.1$)、推定精度が高くなります
-
右図: MLEの実際の分散(青実線)がCR下限(赤破線)にほぼ一致しており、MLEが効率的推定量であることを確認しています。ベルヌーイ分布の場合、MLEは有限標本でもCR下限を達成します
対数尤度の形状とMLEの精度
最後に、対数尤度のグラフの「鋭さ」が推定精度に対応することを可視化します。
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
np.random.seed(42)
fig, axes = plt.subplots(1, 2, figsize=(14, 5.5))
# (a) 対数尤度の形状比較
ax = axes[0]
n_values = [10, 50, 200]
lambda_true = 2.0
lambda_grid = np.linspace(0.5, 4.5, 300)
for n in n_values:
sample = np.random.exponential(1/lambda_true, n)
log_lik = np.array([np.sum(np.log(lam) - lam * sample) for lam in lambda_grid])
# 最大値でシフト(見やすくするため)
log_lik_shifted = log_lik - np.max(log_lik)
ax.plot(lambda_grid, log_lik_shifted, linewidth=2, label=f'n = {n}')
ax.axvline(lambda_true, color='black', linewidth=1.5, linestyle='--',
label=f'$\\lambda_0 = {lambda_true}$')
ax.set_xlabel('$\\lambda$', fontsize=12)
ax.set_ylabel('$\\ell(\\lambda) - \\ell(\\hat{\\lambda})$', fontsize=12)
ax.set_title('Log-Likelihood Sharpness', fontsize=13)
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)
ax.set_ylim(-30, 2)
# (b) 観測情報量 vs フィッシャー情報量
ax = axes[1]
n = 100
n_sim = 2000
observed_info_list = []
mle_list = []
for _ in range(n_sim):
sample = np.random.exponential(1/lambda_true, n)
mle = 1 / np.mean(sample)
# 観測情報量: -ℓ''(λ_hat) = n/λ_hat²
obs_info = n / mle**2
observed_info_list.append(obs_info / n) # 1観測あたり
mle_list.append(mle)
fisher_info = 1 / lambda_true**2
ax.hist(observed_info_list, bins=50, density=True, color='lightblue',
edgecolor='gray', linewidth=0.5, alpha=0.7)
ax.axvline(fisher_info, color='red', linewidth=2, linestyle='--',
label=f'Fisher info $I(\\lambda_0) = {fisher_info:.2f}$')
ax.axvline(np.mean(observed_info_list), color='blue', linewidth=2,
label=f'Mean obs. info = {np.mean(observed_info_list):.3f}')
ax.set_xlabel('Observed information (per observation)', fontsize=12)
ax.set_ylabel('Density', fontsize=12)
ax.set_title('Observed vs Expected Fisher Information', fontsize=13)
ax.legend(fontsize=9)
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('mle_loglik_shape.png', dpi=150, bbox_inches='tight')
plt.show()
このグラフから、対数尤度の形状と推定精度の関係が確認できます。
-
左図: サンプルサイズが増えるにつれて、対数尤度関数の山が鋭くなっています。$n = 10$ では広い範囲のパラメータが「尤もらしい」のに対し、$n = 200$ では真の値 $\lambda_0 = 2$ の周辺に鋭いピークを持ちます。この「鋭さ」がフィッシャー情報量の幾何学的な意味です
-
右図: 観測情報量($-\ell”(\hat{\theta})/n$)の標本分布がフィッシャー情報量($I(\lambda_0) = 0.25$、赤破線)を中心に分布しています。観測情報量はフィッシャー情報量の「データ実現値版」であり、実際のデータに基づく推定精度の指標として使われます
まとめ
本記事では、最尤推定法の理論的性質について解説しました。
- スコア関数は対数尤度の微分であり、期待値がゼロという性質を持つ。その分散がフィッシャー情報量
- 一致性: MLEは正則条件のもとで真のパラメータに確率収束する。カルバック・ライブラー情報量の最小化として理解できる
- 漸近正規性: $\sqrt{n}(\hat{\theta} – \theta_0) \xrightarrow{d} N(0, I(\theta_0)^{-1})$。これにより信頼区間の構成やワルド検定が可能になる
- 漸近効率性: MLEの漸近分散はクラメール・ラオの下限に一致し、情報の無駄がない推定量である
- フィッシャー情報量は対数尤度の「鋭さ」を表し、推定精度と直接的に関係する
次のステップとして、以下の記事も参考にしてください。
- クラメール・ラオの下限 — 不偏推定量の分散の理論的限界
- モーメント法 — MLEとの比較対象としてのモーメント法
- 十分統計量 — 情報を保存する統計量の概念