🎓 レベル:発展 | 重要度:B(標準)
要点(BLUF)
- 経験ベイズは、事前分布のハイパーパラメータを「データを周辺化した周辺尤度の最大化」で点推定する方法(タイプ II の最尤)。要するに事前をデータから決める。
- 共役なら各グループの事後は閉形式で、推定した事前平均へ収縮します。小グループほど強く収縮(収縮率は事前標本サイズとデータ量の綱引き)。
- 完全ベイズとの違いは、経験ベイズがハイパーパラメータを1点に固定し、その不確実性を無視する点。やや過信になり、退化(事前が無限に集中/拡散)に陥ることもあります。
1. 経験ベイズの考え方:周辺尤度でハイパーを決める
階層モデル で、ハイパーパラメータ (事前の母数)をどう決めるか。完全ベイズなら にも事前を置いて積分しますが、経験ベイズは手早く済ませます——各 を周辺化して消し、残った の関数(周辺尤度)を最大化して を点推定します。
階層モデルの構造 で を周辺尤度最大化したのが、まさに正規モデルの経験ベイズでした。本ノートではベータ二項で「事前そのもの」を推定します。
2. ベータ二項の経験ベイズ:事前を推定して収縮させる
グループ、各 試行・ 成功。、 とすると、 を周辺化した はベータ二項分布(ベータ二項モデル)。その対数尤度の和を について最大化すれば、データが示唆する事前 が得られます。
import numpy as np
from scipy import stats, optimize
# J グループ:各 n_j 試行・y_j 成功(真の事前は Beta(3,7)・平均0.3・ばらつき大)
rng = np.random.default_rng(7)
J = 15
true_p = rng.beta(3, 7, J)
n = rng.integers(20, 100, J)
y = rng.binomial(n, true_p)
# 経験ベイズ:周辺尤度 Σ log BetaBinomial(y_j; n_j, a, b) を最大化
def neg_logmarg(params):
a, b = np.exp(params) # a,b>0 を保つため log で最適化
return -np.sum(stats.betabinom.logpmf(y, n, a, b))
res = optimize.minimize(neg_logmarg, x0=[np.log(2), np.log(5)], method="Nelder-Mead")
a_hat, b_hat = np.exp(res.x)
print(f"経験ベイズ推定: 事前 Beta({a_hat:.2f}, {b_hat:.2f}), 事前平均={a_hat/(a_hat+b_hat):.3f}, a+b={a_hat+b_hat:.1f}")
print(f"\n{'群':<3}{'n_j':>5}{'生の率':>9}{'EB事後平均':>12}{'収縮量':>9}")
for j in range(5):
raw = y[j]/n[j]
eb = (a_hat + y[j])/(a_hat + b_hat + n[j]) # 事後平均(事前平均へ収縮)
print(f"{j+1:<3}{n[j]:>5}{raw:>9.3f}{eb:>12.3f}{raw-eb:>+9.3f}")
B = (a_hat + b_hat)/(a_hat + b_hat + n) # 収縮率
print(f"\n収縮率 B=(a+b)/(a+b+n): n最小={B.max():.3f}(n={n.min()}) / n最大={B.min():.3f}(n={n.max()})")
出力:
経験ベイズ推定: 事前 Beta(11.40, 28.55), 事前平均=0.285, a+b=39.9
群 n_j 生の率 EB事後平均 収縮量
1 64 0.375 0.341 +0.034
2 55 0.255 0.267 -0.013
3 48 0.125 0.198 -0.073
4 39 0.385 0.334 +0.050
5 24 0.417 0.335 +0.082
収縮率 B=(a+b)/(a+b+n): n最小=0.666(n=20) / n最大=0.292(n=97)
出力の意味:複数グループのデータだけから、事前 (平均 )が推定されました。各グループの生の率は、この事前平均へ収縮します——群3は と大きく引き上げられ(極端な低率が穏当に)、群5( と小さめ)は 収縮。収縮率 は試行数 が小さい群ほど大きく( で 、 で )、データの乏しい群ほど「全体の事前」を借ります。事前を外から与えず、データに語らせて決めたのがポイントです。
なお推定された事前標本サイズ は、真の生成事前()よりかなり大きく出ています。 グループでは群間ばらつきの推定が不安定で、経験ベイズは事前を過度に集中させがち——これは次節の限界に繋がります。
3. 完全ベイズとの違い:ハイパーの不確実性
経験ベイズは を1点に固定して各群の事後を計算します。手早く収縮が得られる利点の裏で、ハイパーパラメータ 自体の不確実性を無視します。だから各群の事後はやや過信(区間が狭すぎ)になります。
完全(階層)ベイズは にも事前(ハイパープライアー)を置き、 と を同時に事後分布として扱います(MCMC・第4章で同時サンプリング)。 の不確実性が各群の区間に正しく伝わるので、過信を避けられます。
| 経験ベイズ | 完全(階層)ベイズ | |
|---|---|---|
| ハイパー | 周辺尤度最大化で点推定 | 事前を置いて事後分布で扱う |
| 不確実性の伝播 | 無視(やや過信) | 各群の区間に伝わる |
| 計算 | 軽い(最適化1回) | 重い(MCMC) |
| 退化リスク | / に張り付くことがある | ハイパープライアーが緩和 |
データが多く群数も多ければ両者は近づきます。少数群では完全ベイズが安全です。
⚠️ よくある誤解
- 「経験ベイズ=ベイズの一種で同じ結果」ではない:ハイパーを点推定する近似。完全ベイズより区間が狭くなりがち(過信)。
- 「周辺尤度最大化はいつも安定」ではない:群間ばらつきが小さいと (事前が無限に集中)や に張り付く退化が起こります(§2で が過大に出たのもこの兆候)。ハイパープライアーを置く完全ベイズが緩和策。
- 「事前をデータから決めるのは二重使用で反則」ではない:群をまたいで情報を共有する正当な手続き(各群は他の群のデータで事前を作る)。ただし同じ群のデータで事前と尤度を二重に使う素朴な実装は過信を生むので注意。
- 「経験ベイズより完全ベイズが常に優れる」ではない:大規模・多群では経験ベイズが高速で実用的。計算資源と群数で選びます。
関連ノート
- 収縮の数理
- 階層モデルの実例と再パラメータ化(次のトピック・完全ベイズの実装と落とし穴)
- ベータ二項モデル(ベータ二項=周辺尤度)
- 事前の選び方と感度分析(事前の決め方の全体像)
- 第5章 階層ベイズモデル 目次
- ベイズ統計テキスト 全体目次