Mímisbrunnr知恵の泉

← ベイズ統計 一覧

🎓 レベル:発展 | 重要度:B(標準)

📎 前提:収縮の数理 | 関連:ベータ二項モデル

要点(BLUF)

1. 経験ベイズの考え方:周辺尤度でハイパーを決める

階層モデル θjp(θη), yjp(yθj)\theta_j\sim p(\theta\mid\boldsymbol\eta),\ y_j\sim p(y\mid\theta_j) で、ハイパーパラメータ η\boldsymbol\eta(事前の母数)をどう決めるか。完全ベイズなら η\boldsymbol\eta にも事前を置いて積分しますが、経験ベイズは手早く済ませます——各 θj\theta_j周辺化して消し、残った η\boldsymbol\eta の関数(周辺尤度)を最大化して η^\hat{\boldsymbol\eta} を点推定します。

η^=argmaxη jp(yjθ)p(θη)dθ\hat{\boldsymbol\eta}=\arg\max_{\boldsymbol\eta}\ \prod_j \int p(y_j\mid\theta)\,p(\theta\mid\boldsymbol\eta)\,d\theta

階層モデルの構造μ,τ\mu,\tau を周辺尤度最大化したのが、まさに正規モデルの経験ベイズでした。本ノートではベータ二項で「事前そのもの」を推定します。

2. ベータ二項の経験ベイズ:事前を推定して収縮させる

JJ グループ、各 njn_j 試行・yjy_j 成功。pjBeta(a,b)p_j\sim\mathrm{Beta}(a,b)yjBinom(nj,pj)y_j\sim\mathrm{Binom}(n_j,p_j) とすると、pjp_j を周辺化した yjy_jベータ二項分布ベータ二項モデル)。その対数尤度の和を (a,b)(a,b) について最大化すれば、データが示唆する事前 Beta(a^,b^)\mathrm{Beta}(\hat a,\hat b) が得られます。

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)

出力の意味:複数グループのデータだけから、事前 Beta(11.4,28.6)\mathrm{Beta}(11.4,28.6)(平均 0.2850.285)が推定されました。各グループの生の率は、この事前平均へ収縮します——群3は 0.1250.1980.125\to0.198 と大きく引き上げられ(極端な低率が穏当に)、群5(n=24n=24 と小さめ)は +0.082+0.082 収縮。収縮率 B=(a+b)/(a+b+n)B=(a+b)/(a+b+n) は試行数 nn が小さい群ほど大きくn=20n=200.670.67n=97n=970.290.29)、データの乏しい群ほど「全体の事前」を借ります。事前を外から与えず、データに語らせて決めたのがポイントです。

なお推定された事前標本サイズ a+b=39.9a+b=39.9 は、真の生成事前(a+b=10a+b=10)よりかなり大きく出ています。J=15J=15 グループでは群間ばらつきの推定が不安定で、経験ベイズは事前を過度に集中させがち——これは次節の限界に繋がります。

3. 完全ベイズとの違い:ハイパーの不確実性

経験ベイズは η^\hat{\boldsymbol\eta}1点に固定して各群の事後を計算します。手早く収縮が得られる利点の裏で、ハイパーパラメータ η\boldsymbol\eta 自体の不確実性を無視します。だから各群の事後はやや過信(区間が狭すぎ)になります。

完全(階層)ベイズは η\boldsymbol\eta にも事前(ハイパープライアー)を置き、θj\theta_jη\boldsymbol\eta同時に事後分布として扱います(MCMC・第4章で同時サンプリング)。η\boldsymbol\eta の不確実性が各群の区間に正しく伝わるので、過信を避けられます。

経験ベイズ完全(階層)ベイズ
ハイパー η\boldsymbol\eta周辺尤度最大化で点推定事前を置いて事後分布で扱う
不確実性の伝播無視(やや過信)各群の区間に伝わる
計算軽い(最適化1回)重い(MCMC)
退化リスクτ0\tau\to0/\infty に張り付くことがあるハイパープライアーが緩和

データが多く群数も多ければ両者は近づきます。少数群では完全ベイズが安全です。

⚠️ よくある誤解

関連ノート