Mímisbrunnr知恵の泉

← ベイズ統計 一覧

🎓 レベル:標準 | 重要度:A(必須)

📎 前提:事後分布の要約 | 関連:頻度論とベイズの違い

要点(BLUF)

1. 定義の違い:何を固定して何を動かすか

頻度論とベイズの違い で触れた区別を、ここでシミュレーションまで踏み込んで確かめます。違いは「何を確率変数とみなすか」に尽きます。

flowchart LR
  subgraph F["信頼区間(頻度論)"]
    FT["θ は固定・真値"] --> FD["データを取り直すと区間が動く"]
    FD --> FC["区間の95%が真値を覆う(被覆率)"]
  end
  subgraph B["信用区間(ベイズ)"]
    BD["データは固定・観測済み"] --> BT["θ が確率変数(事後分布)"]
    BT --> BC["θ が区間に入る確率が95%"]
  end

2. 信頼区間の意味は「被覆率」:シミュレーションで見る

頻度論の 95%95\% は、同じ真値からデータを何度も取り直し、毎回区間を作ると、その約 95%95\% が真値を含むという意味です。特定の1区間についての確率ではありません。これを実験で確かめます。

import numpy as np

# 真の μ を固定し、データセットを何度も生成 → 毎回CIを作り、真値を含む割合を数える
rng = np.random.default_rng(1)
true_mu, sigma, n = 5.0, 2.0, 10
z = 1.96
M = 20000

covered = 0
for _ in range(M):
    x = rng.normal(true_mu, sigma, size=n)        # データを取り直す
    xbar = x.mean()
    lo, hi = xbar - z*sigma/np.sqrt(n), xbar + z*sigma/np.sqrt(n)
    if lo <= true_mu <= hi:                        # この区間は真値を覆ったか
        covered += 1
print(f"頻度論95%CIが真値を含んだ割合 = {covered/M:.4f}  (手続きの被覆率≒0.95)")

出力:

頻度論95%CIが真値を含んだ割合 = 0.9537  (手続きの被覆率≒0.95)

出力の意味:2万回データを取り直すと、作った区間の約 95%95\%0.9540.954)が真値 μ=5\mu=5 を含みました。これが「95%95\% 信頼」の正体——区間を作る手続きの長期的な成績です。いま手元の1区間が真値を含むかは、含むか含まないかのどちらかで、そこに「95%95\%」という確率は付きません。

3. 信用区間の意味は「この1データでの確率」

ベイズは観測した1データを固定し、θ\theta の事後分布から区間を取ります。読み方は「θ\theta がこの区間に入る確率が 95%95\%」。平坦事前なら正規モデルでは数値が信頼区間と一致しますが、意味は別です。情報事前を入れると区間そのものが動きます。

import numpy as np
from scipy import stats

rng = np.random.default_rng(7)
true_mu, sigma, n, z = 5.0, 2.0, 10, 1.96
x = rng.normal(true_mu, sigma, size=n)
xbar = x.mean()

# 頻度論の信頼区間
ci = (xbar - z*sigma/np.sqrt(n), xbar + z*sigma/np.sqrt(n))
# ベイズ:平坦事前 → 事後 N(x̄, σ²/n)
cred_flat = stats.norm(xbar, sigma/np.sqrt(n)).interval(0.95)
print(f"x̄={xbar:.4f}")
print(f"頻度論 95%信頼区間          = [{ci[0]:.4f}, {ci[1]:.4f}]")
print(f"ベイズ 95%信用区間(平坦事前) = [{cred_flat[0]:.4f}, {cred_flat[1]:.4f}]  ← 数値一致")

# ベイズ:情報事前 N(3, 0.5²) を入れると信用区間はずれる(精度の加重平均)
mu0, s0 = 3.0, 0.5
tau0, tau = 1/s0**2, 1/(sigma**2/n)
mu_post = (tau0*mu0 + tau*xbar)/(tau0 + tau)
sd_post = np.sqrt(1/(tau0 + tau))
cred_info = stats.norm(mu_post, sd_post).interval(0.95)
print(f"ベイズ 95%信用区間(情報事前) = [{cred_info[0]:.4f}, {cred_info[1]:.4f}]  ← 事前で移動・縮小")

出力:

x̄=4.5953
頻度論 95%信頼区間          = [3.3557, 5.8349]
ベイズ 95%信用区間(平坦事前) = [3.3557, 5.8349]  ← 数値一致
ベイズ 95%信用区間(情報事前) = [2.8448, 4.3823]  ← 事前で移動・縮小

出力の意味:平坦事前では信用区間 [3.36,5.83][3.36, 5.83] が信頼区間とぴったり同じ数値。だから両者は混同されがちですが、読みは別物——信用区間は「μ\mu がこの範囲に入る確率が 95%95\%」とこの1データについて言えます。情報事前 N(3,0.52)\mathcal N(3,0.5^2) を入れると区間は [2.84,4.38][2.84, 4.38] へ事前側に動き、幅も縮みます(正規正規モデル の精度の加重平均)。頻度論の区間は事前を持たないので動きません。数値の一致は平坦事前という特殊条件の産物にすぎないと分かります。

4. なぜ混同されるのか

平坦(無情報)事前のベイズが、正規・二項などで頻度論の区間と数値的に一致しやすいからです。しかしそれは「ベイズの信用区間を頻度論的に解釈してよい」という意味ではありません。

⚠️ よくある誤解

関連ノート