1 개요
빈도주의 신뢰구간은 랜덤한 구간이 고정된 모수를 포함하는 장기 비율을 제어한다. 베이즈 구간(신용집합)은 랜덤한 모수가 고정된 집합에 속하는 사후 확률을 계산한다.
| 빈도주의 신뢰구간 | 베이즈 신용집합 | |
|---|---|---|
| 모수 \(\theta\) | 고정된 미지 상수 | 사후분포를 따르는 확률변수 |
| 랜덤 대상 | 구간 \([L(X), U(X)]\) | 모수 \(\theta\) |
| “90%” 의미 | 반복 시 90%의 구간이 \(\theta\) 포함 | 사후 믿음의 90%가 \(\theta \in A\) |
| 추가 입력 | 없음 | 사전분포 \(\pi(\theta)\) |
이 차이는 철학이 다른 것이지, 어느 쪽이 더 낫다는 게 아니다. 베이즈 방법은 사전 정보를 명시적으로 활용할 수 있고, 해석이 더 직관적이다. 빈도주의 방법은 주관적 사전분포 없이 객관적 오류율을 제어한다.
이 포스트는 구간추정량 탐색 방법의 방법 4(베이즈 구간)를 심화한다. 신용집합의 정의, 등꼬리 구간과 HPD 영역의 비교, HPD 최단 최적성(Corollary 9.3.10), 세 가지 공액 모형 예시, 그리고 빈도주의와의 상호 평가를 다룬다.
베이즈 점추정(사후 평균, MAP, 공액 사전분포 유도)은 베이즈 추정량에서 다룬다.
2 베이즈 추론 구조
사후분포는 사전 믿음이 데이터로 업데이트된 결과다:
\[\pi(\theta|\mathbf{x}) = \frac{f(\mathbf{x}|\theta)\,\pi(\theta)}{m(\mathbf{x})} \propto \underbrace{f(\mathbf{x}|\theta)}_{\text{우도}} \cdot \underbrace{\pi(\theta)}_{\text{사전}}\]
모든 베이즈 추론 — 점추정, 구간추정, 예측 — 은 이 사후분포 \(\pi(\theta|\mathbf{x})\) 로부터 나온다. 신용집합은 사후분포의 적분이 \(1-\alpha\) 이상인 집합이다.
3 신용집합 (Credible Set)
사후분포 \(\pi(\theta|x)\) 와 집합 \(A \subset \Theta\) 에 대해, \(A\) 의 신용확률(credible probability)은
\[P(\theta \in A|x) = \int_A \pi(\theta|x)\,d\theta\]
이다. \(P(\theta \in A|x) \geq 1-\alpha\) 이면 \(A\) 를 \(1-\alpha\) 신용집합이라 한다.
핵심 해석: “\(P(\theta \in A|x) = 0.90\)” 은 “데이터를 관측한 후, 모수 \(\theta\) 가 집합 \(A\) 에 속한다고 90% 확신한다”는 의미다. 이는 빈도주의 “90%의 실험에서 구간이 \(\theta\) 를 포함한다”와 완전히 다른 주장이다.
중요한 구분: 신용집합은 항상 복수 존재한다. \(P(\theta \in A|x) = 1-\alpha\) 를 만족하는 집합은 무한히 많다. 이 중 가장 좋은(가장 짧은) 것을 선택하는 기준이 HPD 영역이다.
4 신용구간 구성 방법
4.1 방법 1: 등꼬리 신용구간 (Equal-tails Credible Interval)
가장 흔히 쓰이는 방법이다. 사후분포의 \(\alpha/2\) 분위수와 \(1-\alpha/2\) 분위수를 끝점으로 한다:
\[P(\theta < \theta_L | x) = \frac{\alpha}{2}, \quad P(\theta > \theta_U | x) = \frac{\alpha}{2}\]
\[[\theta_L, \theta_U] = [Q_{\alpha/2}(\pi(\theta|x)),\; Q_{1-\alpha/2}(\pi(\theta|x))]\]
장점: 계산이 쉽다. 분위수 함수(역 CDF)만 있으면 된다. 단점: 최단 구간이 아닐 수 있다. 특히 비대칭 사후분포에서 HPD보다 길다.
4.2 방법 2: HPD 영역 (Highest Posterior Density Region)
상수 \(k\) 를 \(P(\theta \in C^*|x) = 1-\alpha\) 가 되도록 결정할 때,
\[C^* = \{\theta : \pi(\theta|x) \geq k\}\]
를 HPD 영역이라 한다. 즉, 사후 밀도가 \(k\) 이상인 모든 점의 집합이다.
직관: HPD 영역은 “사후 확률이 가장 높은 구역”을 포함한다. 같은 신용 수준에서 HPD가 가장 작은 집합이다.
단봉 vs. 다봉 사후분포: - 단봉(unimodal) 사후분포: HPD = 단일 구간 - 다봉(multimodal) 사후분포: HPD = 불연속 집합 (여러 구간의 합집합)
5 HPD 최적성 — Corollary 9.3.10
HPD가 “가장 짧은 신용구간”임을 보이는 정리는 다음에 의존한다.
단봉 pdf \(f(x)\) 와 구간 \([a,b]\) 가 다음 세 조건을 만족하면, \([a,b]\) 는 \(\int_a^b f(x)dx = 1-\alpha\) 를 만족하는 모든 구간 중 가장 짧다:
- \(\int_a^b f(x)dx = 1-\alpha\)
- \(f(a) = f(b) > 0\)
- \(a \leq x^* \leq b\) (\(x^*\) 는 최빈값)
직관: 구간 끝 두 점에서 pdf 높이가 같아야 한다는 조건 (ii)가 핵심이다. 만약 \(f(a) < f(b)\) 라면, 왼쪽을 조금 잘라내고 오른쪽을 조금 늘려서 같은 면적에 더 짧은 구간을 만들 수 있다.
이를 사후분포에 적용하면:
사후분포 \(\pi(\theta|x)\) 가 단봉이면, \(1-\alpha\) 신용 수준에서 HPD 영역이 가장 짧은 신용구간이다.
즉, \(C^* = \{\theta : \pi(\theta|x) \geq k\}\) 는 \(P(\theta \in A|x) = 1-\alpha\) 를 만족하는 모든 집합 \(A\) 중에서 크기(길이/부피)가 최소이다.
HPD 계산 방법: 1. \(\pi(\theta|x) = k\) 를 만족하는 두 점 \(\theta_L, \theta_U\) 를 찾는다 (\(\theta_L < \theta_U\)) 2. \(\int_{\theta_L}^{\theta_U} \pi(\theta|x) d\theta = 1-\alpha\) 를 동시에 만족하는 \(k\) 를 찾는다 3. 일반적으로 이 두 조건을 동시에 푸는 수치 최적화가 필요하다
대칭 사후분포에서: \(f(a) = f(b)\) 는 자동으로 \(a = \mu - c\), \(b = \mu + c\) 형태를 줌 → 등꼬리 = HPD.
6 주요 공액 모형 예시
6.1 예시 1: 정규-정규 모형 (위치 모수)
\(X_1, \ldots, X_n \overset{\text{iid}}{\sim} N(\theta, \sigma^2)\), \(\sigma^2\) 기지. 사전분포 \(\theta \sim N(\mu, \tau^2)\).
사후분포 (Casella & Berger, 2002, Ex.7.2.16):
\[\pi(\theta|\bar{x}) \sim N\!\left(\delta^B(\bar{x}),\; \mathrm{Var}(\theta|\bar{x})\right)\]
여기서
\[\delta^B(\bar{x}) = \frac{\sigma^2/n}{\sigma^2/n + \tau^2}\mu + \frac{\tau^2}{\sigma^2/n + \tau^2}\bar{x} \quad \text{(사후 평균 = MLE와 사전 평균의 가중평균)}\]
\[\mathrm{Var}(\theta|\bar{x}) = \frac{(\sigma^2/n)\tau^2}{\sigma^2/n + \tau^2} = \frac{1}{n/\sigma^2 + 1/\tau^2} \quad \text{(정밀도의 합)}\]
\(1-\alpha\) 신용구간: 사후분포가 정규이므로
\[C = \left[\delta^B(\bar{x}) - z_{\alpha/2}\sqrt{\mathrm{Var}(\theta|\bar{x})},\quad \delta^B(\bar{x}) + z_{\alpha/2}\sqrt{\mathrm{Var}(\theta|\bar{x})}\right]\]
등꼬리 = HPD: 정규분포는 단봉 대칭이므로, 등꼬리 구간이 자동으로 HPD이다 (Casella & Berger, 2002, Ex.9.3.12).
빈도주의 신뢰구간 \(\bar{x} \pm z_{\alpha/2}\sigma/\sqrt{n}\) 과의 비교: - 베이즈 구간은 사후 평균 \(\delta^B\) 를 중심으로 한다 (\(\bar{x}\) 가 아님) - 베이즈 구간의 길이 \(= 2z_{\alpha/2}\sqrt{\mathrm{Var}(\theta|\bar{x})}\) 는 항상 빈도주의 구간 \(2z_{\alpha/2}\sigma/\sqrt{n}\) 보다 짧다 (사전분포가 정보를 추가했기 때문) - \(\tau^2 \to \infty\) (무정보 사전): 베이즈 구간 → 빈도주의 구간
수치 예시 (\(n=10\), \(\sigma=2\), \(\bar{x}=5.3\), 사전 \(N(4, 1)\), \(\alpha=0.05\)):
\[\mathrm{Var}(\theta|\bar{x}) = \frac{(4/10)\cdot 1}{4/10 + 1} = \frac{0.4}{1.4} \approx 0.286\]
\[\delta^B = \frac{0.4}{1.4}\cdot 4 + \frac{1.0}{1.4}\cdot 5.3 = \frac{1.6 + 5.3}{1.4} \approx 4.929\]
\[\text{95% 신용구간: } 4.929 \pm 1.96\sqrt{0.286} = [3.879,\; 5.979]\]
반면 빈도주의 95% 구간: \(5.3 \pm 1.96 \cdot 2/\sqrt{10} = [4.060,\; 6.540]\) (더 넓고 우측으로 치우침)
6.2 예시 2: 포아송-감마 모형
\(X_1, \ldots, X_n \overset{\text{iid}}{\sim} \text{Poisson}(\lambda)\). 사전분포 \(\lambda \sim \text{Gamma}(a, b)\).
사후분포 (Casella & Berger, 2002, 9.2.19):
\[\pi\!\left(\lambda \middle| \sum x\right) = \text{Gamma}\!\left(a + \textstyle\sum x,\; \frac{b}{nb+1}\right)\]
등꼬리 신용구간: \(a\) 가 정수이면 \(\frac{2(nb+1)}{b}\lambda \sim \chi^2_{2(a+\sum x)}\) 이므로
\[\left[\frac{b\,\chi^2_{2(a+\sum x),1-\alpha/2}}{2(nb+1)},\quad \frac{b\,\chi^2_{2(a+\sum x),\alpha/2}}{2(nb+1)}\right]\]
HPD 신용구간: 단봉 감마 사후분포에 Corollary 9.3.10 적용. \(\pi(\lambda|\sum x) = k\) 를 만족하는 두 점을 수치적으로 찾는다.
수치 비교 (\(n=10\), \(\sum x = 6\), \(a=b=1\), \(\alpha=0.10\)):
| 방법 | 구간 | 길이 |
|---|---|---|
| 빈도주의 (Garwood) | \([0.261, 1.184]\) | 0.923 |
| 등꼬리 베이즈 | \([0.299, 1.077]\) | 0.778 |
| HPD | \([0.253, 1.005]\) | 0.752 |
so what: HPD가 등꼬리보다 짧다 (0.752 < 0.778). 차이가 크지 않지만, 사후분포가 더 비대칭일수록 차이가 커진다. 빈도주의 구간은 사전 정보를 활용하지 않으므로 가장 길다.
감마 분포의 비대칭성이 HPD에 미치는 영향: 감마 분포는 오른쪽 꼬리가 긴 비대칭 분포다. HPD 구간은 등꼬리 구간보다 왼쪽으로 치우쳐 있다 — 사후 밀도가 높은 영역이 평균의 왼쪽에 더 집중되기 때문이다.
6.3 예시 3: 이항-베타 모형
\(X_1, \ldots, X_n \overset{\text{iid}}{\sim} \text{Bernoulli}(p)\), \(Y = \sum X_i \sim \text{Binomial}(n, p)\). 사전분포 \(p \sim \text{Beta}(\alpha_0, \beta_0)\).
사후분포:
\[\pi(p|y) = \text{Beta}(y + \alpha_0,\; n - y + \beta_0)\]
등꼬리 신용구간:
\[[B_{\alpha/2}(y+\alpha_0, n-y+\beta_0),\quad B_{1-\alpha/2}(y+\alpha_0, n-y+\beta_0)]\]
여기서 \(B_q(a,b)\) 는 \(\text{Beta}(a,b)\) 분포의 \(q\) 분위수.
사전분포의 역할:
| 사전 | 해석 | 사후 |
|---|---|---|
| \(\text{Beta}(1,1)\) (균등) | 무정보, \(p\) 에 대한 사전 믿음 없음 | \(\text{Beta}(y+1, n-y+1)\) |
| \(\text{Beta}(5,5)\) | \(p \approx 0.5\) 라고 믿음 | 사후가 0.5 쪽으로 수축 |
| \(\text{Beta}(0.5,0.5)\) (Jeffreys) | 불변 사전분포 | 피복확률 면에서 우수 |
수치 예시 (\(n=20\), \(y=8\), \(\alpha=0.05\)):
| 사전 | 등꼬리 95% 신용구간 | 구간 길이 |
|---|---|---|
| \(\text{Beta}(1,1)\) (균등) | \([0.199, 0.598]\) | 0.399 |
| \(\text{Beta}(0.5,0.5)\) (Jeffreys) | \([0.196, 0.595]\) | 0.399 |
| \(\text{Beta}(5,5)\) | \([0.230, 0.576]\) | 0.346 |
\(\text{Beta}(5,5)\) 사전은 \(p=0.5\) 쪽으로 구간을 당기며 더 짧은 구간을 준다. Jeffreys 사전은 불변 사전분포로 여러 매력적인 성질을 가진다.
Clopper-Pearson vs 등꼬리 베이즈 (균등 사전):
이항-베타 모형에서 균등 사전 \(\text{Beta}(1,1)\) 을 쓰면, 등꼬리 베이즈 신용구간은 Clopper-Pearson 신뢰구간과 매우 유사하다. 이는 우연이 아니라 CDF 피벗팅이 PIT(확률적분변환)에 기반하고, 이항-베타 공액 구조와 연결되기 때문이다.
7 신뢰구간과 신용집합의 상호 평가
빈도주의 신뢰구간과 베이즈 신용집합은 각자의 기준에서는 최적이지만, 서로의 기준에서 보면 실패할 수 있다.
7.1 신뢰구간의 신용확률
포아송 예시(Casella & Berger, 2002, Ex.9.2.17)에서 빈도주의 90% 신뢰구간의 신용확률:
\[P\!\left(\frac{\chi^2_{2Y,0.95}}{2n} \leq \lambda \leq \frac{\chi^2_{2(Y+1),0.05}}{2n} \,\middle|\, \sum x\right)\]
이 확률은 \(\sum x_i \to \infty\) 에 따라 0으로 수렴한다 (단, \(b \neq 1/n\) 이면). 즉, 데이터가 많아질수록 빈도주의 구간은 베이즈 관점에서 점점 나쁜 구간이 된다. 빈도주의 구간이 데이터가 늘어남에 따라 우도가 가리키는 방향으로 이동하지만, 사전분포는 여전히 자신의 중심 근처에 집중하기 때문이다.
직관: 빈도주의 구간은 “표본이 어디 있는가”에 기반하고, 사전분포는 “모수가 어디 있을 것 같은가”를 반영한다. 데이터가 사전 믿음과 멀수록 두 구간은 서로 벗어난다.
7.2 신용집합의 피복확률
정규-정규 예시(Casella & Berger, 2002, Ex.9.2.18)에서 베이즈 90% 신용구간의 빈도주의 피복확률:
\[P_\theta\!\left(|\theta - \delta^B(\bar{X})| \leq z_{\alpha/2}\sqrt{\mathrm{Var}(\theta|\bar{X})}\right) = P\!\left(-\sqrt{1+\gamma}\,z_{\alpha/2} + \frac{\gamma(\theta-\mu)}{\sigma/\sqrt{n}} \leq Z \leq \sqrt{1+\gamma}\,z_{\alpha/2} + \frac{\gamma(\theta-\mu)}{\sigma/\sqrt{n}}\right)\]
여기서 \(\gamma = \sigma^2/(n\tau^2)\). \(\theta \neq \mu\) 이고 \(\sigma/\sqrt{n} \to 0\) 이면 이 확률이 0으로 수렴한다.
직관: 표본이 많아질수록 \(\bar{X} \to \theta\) 이지만, 베이즈 사후 평균 \(\delta^B\) 는 사전 평균 \(\mu\) 쪽으로 당겨진다. \(\theta \neq \mu\) 이면, 데이터가 늘어날수록 신용구간은 참값 \(\theta\) 에서 멀어진다.
7.3 결론 — 두 방법의 공존
| 상황 | 권장 방법 |
|---|---|
| 신뢰할 수 있는 사전 정보 있음 | 베이즈 신용집합 — 더 짧고 직관적 |
| 사전 정보 없음 또는 객관성 필요 | 빈도주의 신뢰구간 |
| 실험 반복 가능, 오류율 통제 중요 | 빈도주의 신뢰구간 |
| 단일 실험, 사후 믿음 표현 | 베이즈 신용집합 |
| 무정보 사전 사용 시 | 두 방법이 수치적으로 유사 |
“두 방법 중 어느 게 옳은가?”는 잘못된 질문이다. 빈도주의 신뢰구간은 반복 실험에서의 장기 오류율을 제어하고, 베이즈 신용집합은 현재 데이터와 사전 지식을 결합한 사후 믿음을 표현한다. 목적이 다르면 방법도 다르다 (Casella & Berger, 2002, Ch.9.2.4).
8 사전분포 선택과 민감도
8.1 무정보 사전분포 (Non-informative Prior)
사전 정보가 없거나 객관적 결론을 원할 때 사용한다.
| 사전분포 | 정의 | 특성 |
|---|---|---|
| 균등 사전 \(\pi(\theta) \propto 1\) | \(\theta\) 의 모든 값에 동등한 믿음 | 매개변수 변환에 불변 아님 |
| Jeffreys 사전 \(\pi(\theta) \propto \sqrt{I(\theta)}\) | 피셔 정보량 기반 | 매개변수 변환에 불변 |
Jeffreys 사전은 \(g(\theta)\) 로 재매개변수화해도 동일한 사전을 준다는 의미에서 객관적이다.
| 모형 | Jeffreys 사전 | 사후 분포 |
|---|---|---|
| \(N(\theta, \sigma^2)\) | \(\pi(\theta) \propto 1\) | \(N(\bar{x}, \sigma^2/n)\) |
| \(\text{Binomial}(n,p)\) | \(\text{Beta}(1/2, 1/2)\) | \(\text{Beta}(y+1/2, n-y+1/2)\) |
| \(\text{Poisson}(\lambda)\) | \(\pi(\lambda) \propto \lambda^{-1/2}\) | \(\text{Gamma}(y+1/2, 1/n)\) |
8.2 사전분포 민감도 분석
좋은 베이즈 분석은 사전분포 선택에 대한 민감도를 보고한다.
만약 여러 합리적 사전분포에서 신용구간이 크게 다르다면:
→ 데이터가 충분하지 않거나 사전 정보가 결과를 크게 좌우한다
만약 여러 사전분포에서 신용구간이 거의 같다면:
→ 데이터가 사전분포를 압도(dominate)하고 있다
\(n \to \infty\) 이면 사후분포가 우도에 지배되어 베이즈-빈도주의 수렴 현象이 발생한다.
9 코드 예시
9.1 Step 1: 순수 Python — 베이즈 신용구간 원리 이해
import numpy as np
from scipy import stats, optimize
rng = np.random.default_rng(42)
# ─────────────────────────────────────────────
# 예시 1: 정규-정규 모형
# ─────────────────────────────────────────────
n, sigma2, mu_prior, tau2 = 10, 4.0, 4.0, 1.0
theta_true = 5.0
x = rng.normal(theta_true, np.sqrt(sigma2), n)
x_bar = x.mean()
# 사후 모수 계산 (정밀도 = 1/분산)
post_prec = n/sigma2 + 1/tau2 # 사후 정밀도
post_var = 1 / post_prec # 사후 분산
post_mean = post_var * (n/sigma2 * x_bar + 1/tau2 * mu_prior) # 사후 평균
alpha = 0.05
z = stats.norm.ppf(1 - alpha/2)
ci_lower = post_mean - z * np.sqrt(post_var)
ci_upper = post_mean + z * np.sqrt(post_var)
print("=== 정규-정규 모형 ===")
print(f"사후 평균: {post_mean:.3f}, 사후 분산: {post_var:.3f}")
print(f"95% 신용구간 (등꼬리=HPD): [{ci_lower:.3f}, {ci_upper:.3f}]")
# 빈도주의 신뢰구간 비교
freq_lower = x_bar - z * np.sqrt(sigma2/n)
freq_upper = x_bar + z * np.sqrt(sigma2/n)
print(f"95% 빈도주의 신뢰구간: [{freq_lower:.3f}, {freq_upper:.3f}]")
print(f"참값 theta={theta_true}")# ─────────────────────────────────────────────
# 예시 2: 포아송-감마 — 등꼬리 vs HPD 비교
# ─────────────────────────────────────────────
from scipy.stats import gamma as gamma_dist, chi2
n, lam_true = 10, 0.6
x_pois = rng.poisson(lam_true, n)
y0 = x_pois.sum()
a_prior, b_prior = 1.0, 1.0 # Gamma(1,1) 사전
# 사후: Gamma(a + sum_x, b/(n*b+1))
a_post = a_prior + y0
b_post = b_prior / (n * b_prior + 1)
print(f"\n=== 포아송-감마 모형 (n={n}, Σx={y0}) ===")
print(f"사후 분포: Gamma({a_post}, {b_post:.4f})")
alpha = 0.10
# 등꼬리 신용구간
lower_et = gamma_dist.ppf(alpha/2, a=a_post, scale=b_post)
upper_et = gamma_dist.ppf(1-alpha/2, a=a_post, scale=b_post)
print(f"90% 등꼬리 신용구간: [{lower_et:.3f}, {upper_et:.3f}], 길이={upper_et-lower_et:.3f}")
# HPD 신용구간 — 수치 최적화
def neg_hpd_length(k, a, b, cred=0.9):
"""사후 밀도 >= k 인 구간의 길이를 최소화 (k 를 변수로)"""
# pi(lambda) >= k 인 구간 [lower, upper] 찾기
mode = (a - 1) * b # 감마 분포 최빈값 (a>1)
if k >= gamma_dist.pdf(mode, a=a, scale=b):
return np.inf
# lower 찾기 (mode 왼쪽)
try:
lower = optimize.brentq(lambda x: gamma_dist.pdf(x, a=a, scale=b) - k,
1e-10, mode)
upper = optimize.brentq(lambda x: gamma_dist.pdf(x, a=a, scale=b) - k,
mode, gamma_dist.ppf(0.9999, a=a, scale=b))
prob = gamma_dist.cdf(upper, a=a, scale=b) - gamma_dist.cdf(lower, a=a, scale=b)
return abs(prob - cred)
except:
return np.inf
# k 최적화로 HPD 구하기
result = optimize.minimize_scalar(neg_hpd_length, args=(a_post, b_post, 1-alpha),
bounds=(1e-10, gamma_dist.pdf((a_post-1)*b_post,
a=a_post, scale=b_post)),
method='bounded')
k_opt = result.x
mode = (a_post - 1) * b_post
lower_hpd = optimize.brentq(lambda x: gamma_dist.pdf(x, a=a_post, scale=b_post) - k_opt,
1e-10, mode)
upper_hpd = optimize.brentq(lambda x: gamma_dist.pdf(x, a=a_post, scale=b_post) - k_opt,
mode, gamma_dist.ppf(0.9999, a=a_post, scale=b_post))
print(f"90% HPD 신용구간: [{lower_hpd:.3f}, {upper_hpd:.3f}], 길이={upper_hpd-lower_hpd:.3f}")
# 빈도주의 Garwood 비교
lower_freq = chi2.ppf(alpha/2, df=2*y0) / (2*n) if y0 > 0 else 0.0
upper_freq = chi2.ppf(1-alpha/2, df=2*(y0+1)) / (2*n)
print(f"90% 빈도주의 (Garwood): [{lower_freq:.3f}, {upper_freq:.3f}], 길이={upper_freq-lower_freq:.3f}")# ─────────────────────────────────────────────
# 예시 3: 이항-베타 모형
# ─────────────────────────────────────────────
from scipy.stats import beta as beta_dist
n_binom, y_obs = 20, 8
alpha = 0.05
# 여러 사전분포 비교
priors = {
"Beta(1,1) 균등": (1, 1),
"Beta(0.5,0.5) Jeffreys": (0.5, 0.5),
"Beta(5,5) 정보적": (5, 5),
}
print("\n=== 이항-베타 모형 ===")
print(f"n={n_binom}, y={y_obs}, p_hat={y_obs/n_binom:.2f}")
print("-" * 60)
for name, (a0, b0) in priors.items():
a_post = y_obs + a0
b_post = n_binom - y_obs + b0
lo = beta_dist.ppf(alpha/2, a_post, b_post)
hi = beta_dist.ppf(1-alpha/2, a_post, b_post)
print(f"{name}: [{lo:.3f}, {hi:.3f}], 길이={hi-lo:.3f}")
# Clopper-Pearson 비교
lo_cp = beta_dist.ppf(alpha/2, y_obs, n_binom - y_obs + 1)
hi_cp = beta_dist.ppf(1-alpha/2, y_obs + 1, n_binom - y_obs)
print(f"{'Clopper-Pearson':30s}: [{lo_cp:.3f}, {hi_cp:.3f}], 길이={hi_cp-lo_cp:.3f}")9.2 Step 2: PyMC / R 구현
# PyMC를 이용한 MCMC 기반 사후분포 샘플링 (비공액 모형용)
# (실행 불필요, 개념 시연용)
import pymc as pm
import numpy as np
y_obs_data = np.array([8]) # 이항 관측값
with pm.Model() as model:
# 사전분포
p = pm.Beta("p", alpha=1, beta=1)
# 우도
obs = pm.Binomial("obs", n=20, p=p, observed=y_obs_data)
# MCMC 샘플링
trace = pm.sample(2000, return_inferencedata=True, progressbar=False)
# 등꼬리 신용구간
import arviz as az
az.hdi(trace, hdi_prob=0.95) # HPD (highest density interval)# R: 이항-베타 신용구간
n_binom <- 20; y_obs <- 8; alpha <- 0.05
# 사전분포 파라미터
a0 <- 1; b0 <- 1 # 균등 사전
# 사후 파라미터
a_post <- y_obs + a0
b_post <- n_binom - y_obs + b0
# 등꼬리 신용구간
lo <- qbeta(alpha/2, a_post, b_post)
hi <- qbeta(1 - alpha/2, a_post, b_post)
cat(sprintf("등꼬리 신용구간: [%.3f, %.3f]\n", lo, hi))
# 포아송-감마 신용구간
n_pois <- 10; y0 <- 6; a0p <- 1; b0p <- 1; alpha <- 0.10
a_ppost <- a0p + y0
b_ppost <- b0p / (n_pois * b0p + 1)
lo_p <- qgamma(alpha/2, shape = a_ppost, scale = b_ppost)
hi_p <- qgamma(1 - alpha/2, shape = a_ppost, scale = b_ppost)
cat(sprintf("포아송-감마 90%% 등꼬리: [%.3f, %.3f]\n", lo_p, hi_p))
# HPD — bayestestR 패키지
# install.packages("bayestestR")
library(bayestestR)
# 사후 분포에서 샘플링 후 HDI 계산
samples <- rgamma(100000, shape = a_ppost, scale = b_ppost)
hdi_result <- hdi(samples, ci = 0.90)
cat(sprintf("포아송-감마 90%% HPD: [%.3f, %.3f]\n", hdi_result$CI_low, hdi_result$CI_high))
# 정규-정규 신용구간 (sigma^2 기지 상황)
n_norm <- 10; sigma2 <- 4; mu_prior <- 4; tau2 <- 1
x_data <- c(5.2, 4.8, 6.1, 5.5, 4.9, 5.3, 5.7, 4.6, 5.0, 5.4)
x_bar <- mean(x_data)
post_prec <- n_norm/sigma2 + 1/tau2
post_var <- 1/post_prec
post_mean <- post_var * (n_norm/sigma2 * x_bar + 1/tau2 * mu_prior)
z_crit <- qnorm(1 - 0.05/2)
lo_n <- post_mean - z_crit * sqrt(post_var)
hi_n <- post_mean + z_crit * sqrt(post_var)
cat(sprintf("정규-정규 95%% 신용구간: [%.3f, %.3f]\n", lo_n, hi_n))10 세 구간 방법 비교 (포아송 예시 요약)
| 방법 | 90% 구간 | 길이 | 특성 |
|---|---|---|---|
| 빈도주의 (Garwood) | \([0.261, 1.184]\) | 0.923 | 피복확률 정확 보장 |
| 베이즈 등꼬리 | \([0.299, 1.077]\) | 0.778 | 계산 용이, 사전 정보 활용 |
| 베이즈 HPD | \([0.253, 1.005]\) | 0.752 | 최단 구간, 사후 밀도 기반 |
11 관련 주제
선행 지식
- 구간추정 개요 — 신뢰구간의 정의와 피복확률
- 구간추정량 탐색 방법 — 네 가지 방법의 위치
- 베이즈 추정량 — 공액 사전분포 유도, 사후 평균/MAP
- 계층모형과 혼합분포 — 베이즈 모형의 구조
후속 주제
- 구간추정 평가 — 최단 기대 길이, 비편향 구간, UMAU
관련 개념
- 피벗 양 (Pivotal Quantities) — 빈도주의 구간과의 비교
- CDF 피벗팅 — 포아송 Garwood 구간의 배경
- 손실함수 최적성 — 사후 평균이 제곱 손실 최소화