베이즈 구간 (Bayesian Intervals)

신용집합·HPD 영역·공액 모형 — 등꼬리 vs HPD 최적성, 빈도주의와의 상호 평가

베이즈 구간추정은 사후분포로부터 직접 신용집합(credible set)을 구성한다. 등꼬리 신용구간과 HPD 영역의 차이, Corollary 9.3.10(HPD 최단 최적성), 정규-정규·포아송-감마·이항-베타 공액 모형 예시, 그리고 빈도주의 신뢰구간과의 해석·피복확률 상호 평가를 Casella & Berger Ch.9를 뼈대로 전개한다.

Statistics
저자

Kwangmin Kim

공개

2026년 04월 04일

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)

정의 9.2.18: 신용집합 (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)

정의: 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가 “가장 짧은 신용구간”임을 보이는 정리는 다음에 의존한다.

정리 9.3.2 (Casella & Berger, 2002)

단봉 pdf \(f(x)\) 와 구간 \([a,b]\) 가 다음 세 조건을 만족하면, \([a,b]\)\(\int_a^b f(x)dx = 1-\alpha\) 를 만족하는 모든 구간 중 가장 짧다:

  1. \(\int_a^b f(x)dx = 1-\alpha\)
  2. \(f(a) = f(b) > 0\)
  3. \(a \leq x^* \leq b\) (\(x^*\) 는 최빈값)

직관: 구간 끝 두 점에서 pdf 높이가 같아야 한다는 조건 (ii)가 핵심이다. 만약 \(f(a) < f(b)\) 라면, 왼쪽을 조금 잘라내고 오른쪽을 조금 늘려서 같은 면적에 더 짧은 구간을 만들 수 있다.

이를 사후분포에 적용하면:

Corollary 9.3.10: HPD 최단 최적성

사후분포 \(\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 관련 주제

선행 지식

후속 주제

관련 개념

Subscribe

Enjoy this blog? Get notified of new posts by email: