Mímisbrunnr知恵の泉

← ベイズ統計 一覧

🎓 レベル:基礎 | 重要度:A(必須)

📎 数理:事前分布・事後分布・ベイズ更新(統計)・最尤法・モーメント法(推定量の作り方と最尤推定量の漸近論)(統計)

要点(BLUF)

1. 確率の解釈が違う

同じ「確率」という言葉を、2つの流派は違う意味で使います。

この違いが、推論の組み立て方すべてに効いてきます。

flowchart LR
  subgraph F["頻度論"]
    D1["データ"] --> E1["点推定: 最尤など"]
    E1 --> C1["信頼区間"]
  end
  subgraph B["ベイズ"]
    PR["事前分布 P(θ)"] --> PO["事後分布 P(θ|D)"]
    LK["データ: 尤度 P(D|θ)"] --> PO
    PO --> C2["信用区間・事後予測"]
  end

2. ベイズの定理:信念をデータで更新する

ベイズ推論の心臓部はベイズの定理です。パラメータ θ\theta、観測データ DD について:

P(θD)=P(Dθ)P(θ)P(D)P(\theta \mid D) = \frac{P(D \mid \theta)\,P(\theta)}{P(D)}

各項の名前と役割:

分母 P(D)P(D)θ\theta を含まないので、形だけ見るなら次の比例関係で十分です。

P(θD)    P(Dθ)P(θ)P(\theta \mid D) \;\propto\; P(D \mid \theta)\,P(\theta)

要するに:「事後 ∝ 尤度 × 事前」。手持ちの信念(事前)に、データの証拠(尤度)を掛けて、更新した信念(事後)を得る——これがベイズ推論のすべての出発点です。

3. コインの例:最尤推定 vs ベイズ事後分布

具体例で違いを体感します。コインを nn 回投げて kk 回表が出たとき、表の確率 pp を推定します。

実際に動かして比べてみましょう。

import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
import japanize_matplotlib  # 日本語ラベル用

# コインを n 回投げて k 回表が出たデータ
n, k = 20, 14

# --- 頻度論:最尤推定(点推定) ---
p_mle = k / n
print(f"最尤推定  p_hat = {p_mle:.3f}")

# --- ベイズ:一様事前 Beta(1,1) × 二項尤度 → 事後 Beta(1+k, 1+n-k) ---
a_post, b_post = 1 + k, 1 + (n - k)
posterior = stats.beta(a_post, b_post)
lo, hi = posterior.interval(0.95)  # 95% 信用区間
print(f"事後平均  E[p|D] = {posterior.mean():.3f}")
print(f"95%信用区間 = [{lo:.3f}, {hi:.3f}]")

# 事後分布を描く
p_grid = np.linspace(0, 1, 300)
plt.figure(figsize=(7, 4))
plt.plot(p_grid, posterior.pdf(p_grid), lw=2, label=f"事後分布 Beta({a_post},{b_post})")
plt.axvline(p_mle, color="crimson", ls="--", label=f"最尤推定 {p_mle:.2f}")
plt.fill_between(p_grid, posterior.pdf(p_grid),
                 where=(p_grid >= lo) & (p_grid <= hi), alpha=0.2, label="95%信用区間")
plt.xlabel("表の確率 p"); plt.ylabel("事後密度")
plt.title("頻度論の点推定 vs ベイズの事後分布")
plt.legend(); plt.tight_layout(); plt.show()

出力はおよそ次のようになります。

最尤推定  p_hat = 0.700
事後平均  E[p|D] = 0.682
95%信用区間 = [0.478, 0.854]

出力の意味:頻度論は p^=0.70\hat p = 0.70 という1点を返すだけですが、ベイズは pp分布全体を返します。事後分布の山の位置(平均 0.68)が「もっともらしい値」、裾の広がりが「まだ残る不確実性」を表します。95%信用区間 [0.48,0.85][0.48, 0.85] は「pp がこの区間に入る確率が 95%」とそのまま読めます——頻度論の信頼区間が「区間を作る手続きが 95% の確率で真値を含む」という回りくどい意味だったのと対照的です。

4. データが増えると信念が尖る(ベイズ更新の予告)

ベイズの自然さは、データが増えるほど事後分布が尖って(不確実性が減って)いく様子に現れます。同じコインで投げる回数を増やしてみます。

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

p_grid = np.linspace(0, 1, 300)
plt.figure(figsize=(7, 4))

# 真の確率 0.7 のコインを、観測数を増やしながら事後を描く
true_p = 0.7
rng = np.random.default_rng(0)
for n in [5, 20, 100, 500]:
    k = rng.binomial(n, true_p)              # n 回中 k 回表
    post = stats.beta(1 + k, 1 + n - k)      # 一様事前からの事後
    plt.plot(p_grid, post.pdf(p_grid), lw=2, label=f"n={n}, k={k}")

plt.axvline(true_p, color="black", ls=":", label="真の p = 0.7")
plt.xlabel("表の確率 p"); plt.ylabel("事後密度")
plt.title("観測数が増えると事後分布が真値の周りに尖る")
plt.legend(); plt.tight_layout(); plt.show()

出力の意味:観測数 nn が小さいうちは事後分布は幅広く(不確実性が大きい)、nn が増えるほど真値 p=0.7p=0.7 の周りに鋭く集中します。これがベイズ更新——データが増えるほど事前の影響は薄れ、事後はデータに語らせた形へ収束していく(ベイズ更新と逐次推論 で詳述)。頻度論の点推定も p^0.7\hat p\to 0.7 に近づきますが、ベイズは「どれくらい確信しているか」を分布の幅として常に持ち続ける点が違います。

5. どちらを使うのか

優劣ではなく道具の違いです。

⚠️ よくある誤解

関連ノート