1 개요
이전 포스트 (159)에서 검정력 함수 \(\beta(\theta)\), Size/Level, 불편 검정, UMP의 정의를 소개했다. 이 포스트에서는 최강력 검정을 실제로 어떻게 구성하는가에 집중한다.
핵심 질문: “level \(\alpha\) 를 유지하면서 검정력을 최대화하는 검정은 어떻게 찾는가?”
이 질문에 답하는 도구가 Neyman-Pearson (NP) 보조정리다. 단순 가설에서 출발하여, 단측 복합 가설로 확장하는 Karlin-Rubin 정리까지 이어지는 논리 사슬을 따라간다.
전략 개요
단순 vs 단순 (H0: θ=θ0 vs H1: θ=θ1)
→ Neyman-Pearson 보조정리: 우도비 기각이 UMP
↓ (충분통계량으로 단순화)
→ Corollary 8.3.13: T(X) 기반 검정으로 환원 가능
↓ (복합 가설로 확장)
단측 복합 (H0: θ≤θ0 vs H1: θ>θ0)
→ MLR 조건 확인
→ Karlin-Rubin 정리: T>t₀가 UMP
↓ (양측으로?)
양측 복합 (H0: θ=θ0 vs H1: θ≠θ0)
→ UMP 비존재 → UMPU로 대체
2 Neyman-Pearson 보조정리 — 완전한 이해
2.1 문제 설정: 최적 기각 영역이란
\(H_0: \theta = \theta_0\) vs \(H_1: \theta = \theta_1\) 에서 level \(\alpha\) 를 만족하면서 검정력을 최대화하려 한다. 기각 영역 \(R\) 의 크기는 고정(\(P_{\theta_0}(X \in R) = \alpha\)), 검정력 \(P_{\theta_1}(X \in R)\) 은 최대화.
기하학적 직관: 확률 분포 \(f(\mathbf{x}|\theta_0)\) 와 \(f(\mathbf{x}|\theta_1)\) 이 겹치는 영역이 있다. Type I Error 예산 \(\alpha\) 는 \(H_0\) 분포에서 \(R\) 에 할당된 확률 질량이다. 이 예산을 가장 효율적으로 써서 \(H_1\) 의 확률 질량을 최대한 포함하려면 어떻게 해야 하는가?
답: \(H_1\) 의 pdf가 \(H_0\) 의 pdf에 비해 상대적으로 높은 곳, 즉 우도비 \(f(\mathbf{x}|\theta_1)/f(\mathbf{x}|\theta_0)\) 가 큰 곳을 기각 영역으로 선택해야 한다.
\(H_0: \theta = \theta_0\) vs \(H_1: \theta = \theta_1\) 에서, 어떤 \(k \geq 0\) 에 대해
\[\mathbf{x} \in R \iff f(\mathbf{x}|\theta_1) > k f(\mathbf{x}|\theta_0) \tag{8.3.1}\]
이고 \(\alpha = P_{\theta_0}(X \in R)\) 인 검정은:
(a) 충분성: UMP level \(\alpha\) 검정이다.
(b) 필요성: \(k > 0\) 이면 모든 UMP level \(\alpha\) 검정은 (8.3.1)을 거의 모든 곳에서 만족하며, size \(\alpha\) 검정이다.
2.2 증명: 단계별 해설 (a의 증명)
임의의 다른 level \(\alpha\) 검정 \(\phi'\) (test function \(\phi'(\mathbf{x}) \in [0,1]\))와 NP 검정 \(\phi\) (\(\phi = 1_{R}\))를 비교한다.
Step 1: 핵심 부등식 수립
(8.3.1)에 의해, \(\phi(\mathbf{x}) = 1\) 이면 \(f(\mathbf{x}|\theta_1) \geq k f(\mathbf{x}|\theta_0)\) 이고 \(\phi(\mathbf{x}) = 0\) 이면 \(f(\mathbf{x}|\theta_1) \leq k f(\mathbf{x}|\theta_0)\) 이다. 따라서:
\[(\phi(\mathbf{x}) - \phi'(\mathbf{x}))(f(\mathbf{x}|\theta_1) - k f(\mathbf{x}|\theta_0)) \geq 0 \quad \forall \mathbf{x}\]
이 부등식이 핵심이다. \(\phi = 1\) 이고 \(\phi' \leq 1\) 이면 첫 인수 \(\geq 0\), 두 번째 인수 \(\geq 0\). \(\phi = 0\) 이고 \(\phi' \geq 0\) 이면 첫 인수 \(\leq 0\), 두 번째 인수 \(\leq 0\). 어떤 경우든 곱은 \(\geq 0\).
Step 2: 적분
\[0 \leq \int [\phi - \phi'][f(\mathbf{x}|\theta_1) - k f(\mathbf{x}|\theta_0)] d\mathbf{x} = (\beta(\theta_1) - \beta'(\theta_1)) - k(\beta(\theta_0) - \beta'(\theta_0)) \tag{8.3.3}\]
Step 3: 결론
\(\phi\) 는 size \(\alpha\) 검정이므로 \(\beta(\theta_0) = \alpha\). \(\phi'\) 는 level \(\alpha\) 검정이므로 \(\beta'(\theta_0) \leq \alpha\). 따라서 \(\beta(\theta_0) - \beta'(\theta_0) \geq 0\).
\(k \geq 0\) 이고 \(\beta(\theta_0) - \beta'(\theta_0) \geq 0\) 이므로 (8.3.3)에서:
\[\beta(\theta_1) - \beta'(\theta_1) \geq k(\beta(\theta_0) - \beta'(\theta_0)) \geq 0\]
\[\therefore \beta(\theta_1) \geq \beta'(\theta_1)\]
\(\phi'\) 는 임의의 level \(\alpha\) 검정이었으므로 \(\phi\) (NP 검정)가 UMP이다. \(\square\)
왜 이것이 “경계에서 예산을 최대한 효율적으로 쓴다”는 직관과 일치하는가: (8.3.3)의 두 번째 항 \(k(\beta(\theta_0) - \beta'(\theta_0))\) 은 \(\phi\) 가 \(\phi'\) 보다 더 많이 쓴 Type I Error 예산이다. 첫 번째 항 \(\beta(\theta_1) - \beta'(\theta_1)\) 은 \(\phi\) 가 얻은 추가 검정력이다. NP 검정은 이 교환 비율을 최적화한다.
3 단계별 적용: NP 검정 구성법
NP 보조정리를 실제 문제에 적용하는 절차:
- 우도비 \(\Lambda(\mathbf{x}) = f(\mathbf{x}|\theta_1) / f(\mathbf{x}|\theta_0)\) 를 계산한다
- \(\Lambda(\mathbf{x}) > k\) 를 충분통계량 \(T(\mathbf{x})\) 의 부등식으로 변환한다
- \(P_{\theta_0}(T(\mathbf{x}) \in R) = \alpha\) 를 만족하는 임계값 \(c\) 를 결정한다
3.1 예시 1: 이항 분포 UMP (Example 8.3.14)
\(X \sim \text{Binomial}(2, \theta)\), \(H_0: \theta = 1/2\) vs \(H_1: \theta = 3/4\)
Step 1: 우도비 계산
\[\Lambda(x) = \frac{f(x|3/4)}{f(x|1/2)} = \frac{\binom{2}{x}(3/4)^x(1/4)^{2-x}}{\binom{2}{x}(1/2)^x(1/2)^{2-x}} = \left(\frac{3/4}{1/2}\right)^x \left(\frac{1/4}{1/2}\right)^{2-x} = \frac{3^x}{4^2/(4^x)} = \left(\frac{3}{2}\right)^x \cdot \left(\frac{1}{2}\right)^{2-x}\]
계산하면:
\[\Lambda(0) = (1/2)^2 = 1/4, \quad \Lambda(1) = (3/2)(1/2) = 3/4, \quad \Lambda(2) = (3/2)^2 = 9/4\]
Step 2: \(\Lambda(x) > k\) 조건 → \(x\) 의 조건으로
\(\Lambda(x)\) 는 \(x\) 의 순증가 함수. 따라서 \(\Lambda(x) > k\) 는 “\(x > c\) (어떤 임계값)”로 단순화된다.
Step 3: \(\alpha\) 별 UMP
| \(k\) 구간 | 기각 영역 | \(\alpha = P_{1/2}(\text{기각})\) | 검정력 \(\beta(3/4)\) |
|---|---|---|---|
| \((9/4, \infty)\) | \(\emptyset\) | 0 | 0 |
| \((3/4, 9/4)\) | \(\{2\}\) | \(1/4\) | \(9/16\) |
| \((1/4, 3/4)\) | \(\{1, 2\}\) | \(3/4\) | \(15/16\) |
| \((0, 1/4)\) | \(\{0, 1, 2\}\) | \(1\) | \(1\) |
이산 분포에서는 연속 \(\alpha\) 값을 달성할 수 없다. 예를 들어 \(\alpha = 0.10\) 에 대한 NP 검정을 정확하게 구성하려면 랜덤화 검정이 필요하다.
이산 분포에서 원하는 \(\alpha\) 를 정확히 맞추기 위해, 경계 점 \(x^*\) 에 대해 확률 \(\gamma\) 로 기각하는 검정을 정의한다.
\[\phi(x) = \begin{cases} 1 & \Lambda(x) > k \\ \gamma & \Lambda(x) = k \\ 0 & \Lambda(x) < k \end{cases}\]
여기서 \(\gamma \in [0,1]\) 은 \(E_{\theta_0}[\phi(X)] = \alpha\) 를 만족하도록 결정한다. 이론적으로 완전한 UMP가 존재하지만, 실무에서는 재현 불가능한 랜덤화 때문에 잘 사용되지 않는다.
3.2 예시 2: 정규분포 UMP — 단순 가설 (Example 8.3.15)
\(X_1, \ldots, X_n \sim N(\theta, \sigma^2)\), \(\sigma^2\) 알려짐, \(H_0: \theta = \theta_0\) vs \(H_1: \theta = \theta_1\) (\(\theta_1 > \theta_0\))
Step 1: 우도비
\[\Lambda(\mathbf{x}) = \frac{\prod f(x_i|\theta_1)}{\prod f(x_i|\theta_0)} = \exp\left[\frac{n(\theta_1 - \theta_0)}{\sigma^2}\bar{x} - \frac{n(\theta_1^2 - \theta_0^2)}{2\sigma^2}\right]\]
Step 2: \(\Lambda(\mathbf{x}) > k\) 를 \(\bar{x}\) 조건으로
\(\theta_1 > \theta_0\) 이므로 지수 인수 \(n(\theta_1 - \theta_0)/\sigma^2 > 0\). 따라서:
\[\Lambda(\mathbf{x}) > k \iff \bar{x} > c = \frac{\sigma^2 \log k}{n(\theta_1 - \theta_0)} + \frac{\theta_0 + \theta_1}{2}\]
오른쪽의 \(c\) 는 \(k\) 에 따라 \((-\infty, \infty)\) 를 자유롭게 이동한다.
Step 3: 임계값 결정
\(H_0\) 에서 \(\bar{X} \sim N(\theta_0, \sigma^2/n)\) 이므로, size \(\alpha\) 조건:
\[P_{\theta_0}(\bar{X} > c) = \alpha \implies c = \theta_0 + \frac{\sigma z_\alpha}{\sqrt{n}}\]
중요한 관찰: \(c\) 의 값이 \(\theta_1\) 에 의존하지 않는다! 즉, 이 검정은 \(\theta_1 > \theta_0\) 인 모든 \(\theta_1\) 에 대해 동시에 UMP가 된다. 이것이 단순 vs 단순에서 출발하여 단측 복합 가설로 자연스럽게 넘어가는 이유다.
4 충분통계량과 UMP
\(T(\mathbf{X})\) 가 \(\theta\) 의 충분통계량이고, \(g(t|\theta_i)\) 가 \(T\) 의 pdf/pmf이면, \(T\) 에 기반한 검정으로서
\[t \in S \iff g(t|\theta_1) > k g(t|\theta_0)\]
이고 \(\alpha = P_{\theta_0}(T \in S)\) 를 만족하는 검정은 UMP level \(\alpha\) 검정이다.
왜 충분통계량으로 충분한가: 인수분해 정리에 의해 \(f(\mathbf{x}|\theta_i) = g(T(\mathbf{x})|\theta_i) h(\mathbf{x})\). \(h(\mathbf{x})\) 는 \(\theta\) 에 무관하므로 우도비에서 상쇄된다:
\[\frac{f(\mathbf{x}|\theta_1)}{f(\mathbf{x}|\theta_0)} = \frac{g(T(\mathbf{x})|\theta_1)}{g(T(\mathbf{x})|\theta_0)}\]
원본 데이터의 우도비 = 충분통계량의 우도비. 따라서 NP 기각 조건도 \(T(\mathbf{x})\) 만으로 결정된다.
실용적 의미: 고차원 데이터 \(\mathbf{x} = (x_1, \ldots, x_n)\) 의 복잡한 우도비 계산 대신, 충분통계량 \(T\) (보통 스칼라)의 우도비만 계산하면 된다.
5 단조 우도비 (MLR) — 심층 분석
5.1 정의와 직관
분포족 \(\{g(t|\theta)\}\) 가 단조 우도비(Monotone Likelihood Ratio, MLR) 를 가지면, 모든 \(\theta_2 > \theta_1\) 에 대해 \(g(t|\theta_2)/g(t|\theta_1)\) 이 \(t\) 의 단조함수이다.
직관: MLR은 “\(\theta\) 가 커질수록 \(T\) 가 커지는 경향이 강해진다”는 확률론적 정렬(stochastic ordering) 개념이다. 정확히는, \(\theta_2 > \theta_1\) 이면 \(g(t|\theta_2)/g(t|\theta_1)\) 이 \(t\) 에서 비감소이므로, 큰 \(T\) 값이 큰 \(\theta\) 를 더 지지한다.
5.2 지수족에서 MLR 확인
정규 지수족 \(g(t|\theta) = h(t) c(\theta) e^{w(\theta)t}\) 에서:
\[\frac{g(t|\theta_2)}{g(t|\theta_1)} = \frac{c(\theta_2)}{c(\theta_1)} e^{(w(\theta_2) - w(\theta_1))t}\]
\(w(\theta)\) 가 \(\theta\) 의 비감소 함수이면 \(\theta_2 > \theta_1 \implies w(\theta_2) \geq w(\theta_1)\), 따라서 우도비가 \(t\) 의 비감소 함수 → MLR 성립.
MLR을 갖는 주요 분포족:
| 분포 | 충분통계량 \(T\) | \(w(\theta)\) | MLR 방향 |
|---|---|---|---|
| \(N(\theta, \sigma^2)\) (\(\sigma^2\) 알려짐) | \(\bar{X}\) | \(\theta/\sigma^2\) | 비감소 → \(T \uparrow\) 로 MLR |
| \(\text{Poisson}(\lambda)\) | \(\sum X_i\) | \(\log\lambda\) | 비감소 |
| \(\text{Binomial}(n, p)\) | \(\sum X_i\) | \(\log[p/(1-p)]\) | 비감소 |
| \(\text{Exponential}(\lambda)\) | \(\sum X_i\) | \(-\lambda\) | 비감소 (\(T\) 에서) |
| \(\text{Gamma}(\alpha, \beta)\) (\(\alpha\) 알려짐) | \(\sum X_i\) | \(-1/\beta\) | 비감소 |
5.3 포아송 분포 MLR 확인
\(X_1, \ldots, X_n \sim \text{Poisson}(\lambda)\), 충분통계량 \(T = \sum X_i \sim \text{Poisson}(n\lambda)\)
\[\frac{g(t|\lambda_2)}{g(t|\lambda_1)} = \frac{e^{-n\lambda_2}(n\lambda_2)^t / t!}{e^{-n\lambda_1}(n\lambda_1)^t / t!} = e^{n(\lambda_1 - \lambda_2)} \left(\frac{\lambda_2}{\lambda_1}\right)^t\]
\(\lambda_2 > \lambda_1\) 이면 \((\lambda_2/\lambda_1)^t\) 는 \(t\) 의 순증가 함수 → MLR 성립.
직관: 포아송 모수 \(\lambda\) 가 클수록 관측 합이 클 가능성이 높다. \(T\) 가 크면 \(\lambda\) 가 크다는 증거.
6 Karlin-Rubin 정리 — 단측 복합 가설의 UMP
\(T\) 가 \(\theta\) 의 충분통계량이고, \(\{g(t|\theta)\}\) 가 MLR을 가지면:
\(H_0: \theta \leq \theta_0\) vs \(H_1: \theta > \theta_0\) 에서, 어떤 \(t_0\) 에 대해
\[\text{기각}: T > t_0\]
인 검정은 UMP level \(\alpha = P_{\theta_0}(T > t_0)\) 검정이다.
6.1 증명 전략
임의의 \(\theta' > \theta_0\) 를 고정한다. 복합 귀무 \(H_0: \theta \leq \theta_0\) 대신 단순 귀무 \(H_0': \theta = \theta_0\) 를 고려한다.
MLR로 인해 \(\beta(\theta) = P_\theta(T > t_0)\) 는 \(\theta\) 의 비감소 함수 → \(\sup_{\theta \leq \theta_0} \beta(\theta) = \beta(\theta_0) = \alpha\) → level \(\alpha\) 검정
MLR로 인해 기각 영역 \(\{T > t_0\}\) 는 다음과 동치:
\[T > t_0 \iff \frac{g(t|\theta')}{g(t|\theta_0)} > k'\]
이는 NP 보조정리의 기각 조건 (8.3.1)을 만족한다.
Corollary 8.3.13에 의해 \(T > t_0\) 는 \(H_0': \theta = \theta_0\) vs \(H_1': \theta = \theta'\) 의 UMP level \(\alpha\) 검정이다.
\(H_0\) 의 level \(\alpha\) 검정은 자동으로 \(H_0'\) 의 level \(\alpha\) 검정이다 (\(\Theta_0' \subset \Theta_0\)). 따라서 \(T > t_0\) 가 \(H_0'\) 에서 UMP이면 \(H_0\) 에서도 다른 level \(\alpha\) 검정보다 검정력이 크다.
\(\theta'\) 가 임의적이었으므로 \(T > t_0\) 가 모든 \(\theta' > \theta_0\) 에 대해 동시에 UMP. \(\square\)
핵심 통찰: MLR이 “NP 보조정리의 기각 조건이 \(T > t_0\) 와 동치”라는 것을 보장한다. 이것이 \(\theta_1\) 에 무관한 단일 검정 형태가 가능한 이유다.
6.2 예시 1: 정규분포 단측 UMP
\(H_0: \theta \leq \theta_0\) vs \(H_1: \theta > \theta_0\), \(X_i \sim N(\theta, \sigma^2)\)
\(T = \bar{X}\), 분포족 MLR 가짐. UMP: \(\bar{X} > \theta_0 + \sigma z_\alpha/\sqrt{n}\)
검정력 함수 (단조증가하는 S자 형태):
\[\beta(\theta) = P\left(Z > z_\alpha + \frac{\theta_0 - \theta}{\sigma/\sqrt{n}}\right) = 1 - \Phi\left(z_\alpha + \frac{\theta_0 - \theta}{\sigma/\sqrt{n}}\right)\]
- \(\theta = \theta_0\): \(\beta(\theta_0) = 1 - \Phi(z_\alpha) = \alpha\) (크기)
- \(\theta = \theta_0 + \sigma/\sqrt{n}\): \(\beta = 1 - \Phi(0) = 0.5\) (효과 크기 1 표준오차에서 검정력 50%)
- \(n \to \infty\): \(\beta(\theta) \to 1\) for any \(\theta > \theta_0\) (일치성)
6.3 예시 2: 포아송 단측 UMP
\(X_1, \ldots, X_n \sim \text{Poisson}(\lambda)\), \(H_0: \lambda \leq \lambda_0\) vs \(H_1: \lambda > \lambda_0\)
\(T = \sum X_i \sim \text{Poisson}(n\lambda)\), MLR 가짐. 카를린-루빈 정리에 의해:
\[\text{UMP}: T = \sum_{i=1}^n X_i > c\]
임계값 \(c\): \(P_{\lambda_0}(\sum X_i > c) = \alpha\) 에서 포아송 분포표/정규 근사로 결정.
검정력:
\[\beta(\lambda) = P_\lambda\left(\sum X_i > c\right) = 1 - F_{\text{Pois}(n\lambda)}(c)\]
\(\lambda > \lambda_0\) 에서 \(\beta(\lambda) > \alpha\), \(\lambda \to \infty\) 에서 \(\beta(\lambda) \to 1\).
6.4 예시 3: 이항 분포 단측 UMP
\(X_1, \ldots, X_n \sim \text{Bernoulli}(p)\), \(H_0: p \leq p_0\) vs \(H_1: p > p_0\)
\(T = \sum X_i \sim \text{Binomial}(n, p)\), MLR 가짐:
\[\frac{g(t|p_2)}{g(t|p_1)} = \left(\frac{p_2(1-p_1)}{p_1(1-p_2)}\right)^t \cdot \text{const}\]
\(p_2 > p_1\) 이면 \([p_2(1-p_1)]/[p_1(1-p_2)] > 1\) 이므로 \(t\) 의 순증가 함수.
UMP: \(T = \sum X_i > c\), 임계값은 \(P_{p_0}(T > c) = \alpha\) 에서 결정.
7 좌측 단측 UMP
Karlin-Rubin 정리는 \(H_0: \theta \geq \theta_0\) vs \(H_1: \theta < \theta_0\) 에도 적용된다.
결론: \(T < t_0\) 이면 기각. \(\alpha = P_{\theta_0}(T < t_0)\).
예시: \(H_0: \theta \geq \theta_0\) vs \(H_1: \theta < \theta_0\) (\(N(\theta, \sigma^2)\))
UMP: \(\bar{X} < \theta_0 - \sigma z_\alpha/\sqrt{n}\)
검정력 (단조감소):
\[\beta(\theta) = P\left(Z < -z_\alpha + \frac{\theta_0 - \theta}{\sigma/\sqrt{n}}\right) = \Phi\left(-z_\alpha + \frac{\theta_0 - \theta}{\sigma/\sqrt{n}}\right)\]
8 UMP의 비존재 — 양측 가설
\(H_0: \theta = \theta_0\) vs \(H_1: \theta \neq \theta_0\) (\(N(\theta, \sigma^2)\), \(\sigma^2\) 알려짐)
비존재 증명 (Example 8.3.19):
level \(\alpha\) 검정 중에서 \(\theta_1 < \theta_0\) 에서 최강력인 검정을 구성하면 (NP 보조정리 이용):
\[\text{Test 1 (좌측)}: \bar{X} < \theta_0 - \sigma z_\alpha/\sqrt{n}\]
그런데 \(\theta_2 > \theta_0\) 에서 Test 1의 검정력 \(\beta_1(\theta_2)\) 는 0에 수렴한다. 반면 우측 단측 검정:
\[\text{Test 2 (우측)}: \bar{X} > \theta_0 + \sigma z_\alpha/\sqrt{n}\]
은 \(\theta_2\) 에서 더 높은 검정력을 갖는다. 즉, Test 1은 \(\theta_1 < \theta_0\) 에서 최강이지만 \(\theta_2 > \theta_0\) 에서 최강이 아니다.
NP 보조정리 필요성 조건에 의해, UMP가 존재한다면 Test 1과 동일해야 하지만 Test 1은 \(\theta_2\) 에서 UMP가 아니므로 UMP는 존재하지 않는다. \(\square\)
근본 이유: 양측 대립에서는 \(\theta < \theta_0\) 를 잘 잡는 검정(좌측 기각)과 \(\theta > \theta_0\) 를 잘 잡는 검정(우측 기각)이 충돌한다. 한 검정이 두 방향을 동시에 최강으로 잡을 수 없다.
9 UMPU — 불편 클래스로의 제한
UMP가 없으면 클래스를 불편 검정으로 제한하여 UMPU를 찾는다.
불편 level \(\alpha\) 검정 클래스 내에서 모든 \(\theta \in \Theta_0^c\) 에 대해 검정력이 최대인 검정.
9.1 예시: 정규분포 양측 UMPU (Example 8.3.20)
\(H_0: \theta = \theta_0\) vs \(H_1: \theta \neq \theta_0\), \(X_i \sim N(\theta, \sigma^2)\)
양측 검정:
\[\text{Test 3 (UMPU)}: |\bar{X} - \theta_0| > \sigma z_{\alpha/2}/\sqrt{n}\]
검정력 함수:
\[\beta_3(\theta) = 1 - \Phi\left(z_{\alpha/2} + \frac{\theta_0 - \theta}{\sigma/\sqrt{n}}\right) + \Phi\left(-z_{\alpha/2} + \frac{\theta_0 - \theta}{\sigma/\sqrt{n}}\right)\]
비교: Test 1 (좌측), Test 2 (우측), Test 3 (양측, UMPU)
| \(\theta\) 위치 | Test 1 검정력 | Test 2 검정력 | Test 3 검정력 |
|---|---|---|---|
| \(\theta \ll \theta_0\) | 높음 | 낮음 (~0) | 중간 (높음) |
| \(\theta = \theta_0\) | \(\alpha\) | \(\alpha\) | \(\alpha\) |
| \(\theta \gg \theta_0\) | 낮음 (~0) | 높음 | 중간 (높음) |
결론: Test 3가 대립이 양방향일 때 전반적으로 가장 균형 잡혀 있다. \(\theta \gg \theta_0\) 에서 \(\beta_3 \approx 1\) 인 반면 \(\beta_1 \approx 0\).
10 UMP 존재 조건 체계표
| 가설 구조 | 분포 조건 | UMP 존재? | 검정 형태 |
|---|---|---|---|
| \(H_0: \theta = \theta_0\) vs \(H_1: \theta = \theta_1\) | 임의 | 항상 존재 (NP 보조정리) | 우도비 기반 기각 |
| \(H_0: \theta \leq \theta_0\) vs \(H_1: \theta > \theta_0\) | MLR 있음 | 존재 (Karlin-Rubin) | \(T > t_0\) |
| \(H_0: \theta \geq \theta_0\) vs \(H_1: \theta < \theta_0\) | MLR 있음 | 존재 (Karlin-Rubin) | \(T < t_0\) |
| \(H_0: \theta = \theta_0\) vs \(H_1: \theta \neq \theta_0\) | 임의 | 비존재 | UMPU 사용 |
| \(H_0: \theta \leq \theta_1\) or \(\theta \geq \theta_2\) vs \(H_1\) | 임의 | 드물게 존재 | 문제별 판단 |
11 코드 구현
11.1 Python: NP 검정 구성 및 검정력 비교
import numpy as np
from scipy import stats
def np_test_binomial(
n_trials: int,
theta0: float,
theta1: float,
alpha_target: float = 0.05,
) -> dict:
"""
이항 분포에서 Neyman-Pearson UMP 검정 구성
H0: theta = theta0 vs H1: theta = theta1 (theta1 > theta0)
"""
x_vals = np.arange(n_trials + 1)
pmf0 = stats.binom.pmf(x_vals, n_trials, theta0)
pmf1 = stats.binom.pmf(x_vals, n_trials, theta1)
lr = pmf1 / pmf0
# 우도비 내림차순으로 기각 영역 결정
sorted_idx = np.argsort(-lr)
cum_alpha = 0.0
rejection_region = []
for idx in sorted_idx:
if cum_alpha + pmf0[idx] <= alpha_target + 1e-10:
cum_alpha += pmf0[idx]
rejection_region.append(int(x_vals[idx]))
else:
break
rejection_region = sorted(rejection_region)
actual_alpha = sum(pmf0[x] for x in rejection_region)
power = sum(pmf1[x] for x in rejection_region)
return {
"기각 영역": rejection_region,
"실제 alpha": actual_alpha,
"검정력 β(θ1)": power,
"우도비 테이블": {x: round(lr[x], 4) for x in range(n_trials + 1)},
}
def compare_tests_normal(
theta_range: np.ndarray,
theta0: float = 0.0,
sigma: float = 1.0,
n: int = 25,
alpha: float = 0.05,
) -> dict:
"""
세 가지 검정의 검정력 함수 비교
Test 1: 좌측 단측 (UMP for theta < theta0)
Test 2: 우측 단측 (UMP for theta > theta0)
Test 3: 양측 (UMPU)
"""
se = sigma / np.sqrt(n)
z_alpha = stats.norm.ppf(1 - alpha)
z_half = stats.norm.ppf(1 - alpha / 2)
# Test 1: 좌측 단측
c1 = theta0 - sigma * z_alpha / np.sqrt(n)
beta1 = stats.norm.cdf(c1, loc=theta_range, scale=se)
# Test 2: 우측 단측
c2 = theta0 + sigma * z_alpha / np.sqrt(n)
beta2 = stats.norm.sf(c2, loc=theta_range, scale=se)
# Test 3: 양측 UMPU
c_upper = theta0 + sigma * z_half / np.sqrt(n)
c_lower = theta0 - sigma * z_half / np.sqrt(n)
beta3 = (stats.norm.cdf(c_lower, loc=theta_range, scale=se) +
stats.norm.sf(c_upper, loc=theta_range, scale=se))
return {
"theta": theta_range,
"beta1 (좌측)": beta1,
"beta2 (우측)": beta2,
"beta3 (양측, UMPU)": beta3,
}
# 이항 NP 검정
print("=== 이항 NP 검정 (n=10, θ0=0.5, θ1=0.7) ===")
result = np_test_binomial(10, 0.5, 0.7, alpha_target=0.05)
for k, v in result.items():
if isinstance(v, dict):
print(f" {k}: {v}")
else:
print(f" {k}: {v:.4f}" if isinstance(v, float) else f" {k}: {v}")
print()
# 정규분포 세 검정 비교
print("=== 정규분포 세 검정 검정력 비교 (n=25, theta0=0, sigma=1, alpha=0.05) ===")
thetas = np.array([-1.0, -0.5, 0.0, 0.5, 1.0])
results = compare_tests_normal(thetas)
print(f"{'theta':>8} {'beta1':>10} {'beta2':>10} {'beta3':>10}")
for i, theta in enumerate(thetas):
print(f"{theta:>8.1f} {results['beta1 (좌측)'][i]:>10.4f} "
f"{results['beta2 (우측)'][i]:>10.4f} "
f"{results['beta3 (양측, UMPU)'][i]:>10.4f}")11.2 Python: Karlin-Rubin — 포아송 UMP 검정력 곡선
import numpy as np
from scipy import stats
def poisson_ump_power(
lambda_range: np.ndarray,
lambda0: float,
n: int,
alpha: float = 0.05,
) -> dict:
"""
H0: lambda <= lambda0 vs H1: lambda > lambda0 (포아송)
Karlin-Rubin: T = sum(Xi) > c 가 UMP
임계값 c 결정: P_{lambda0}(T > c) = alpha
"""
# H0 경계에서의 T 분포: Poisson(n * lambda0)
mu0 = n * lambda0
# 임계값 c: P(Poisson(mu0) > c) <= alpha 를 만족하는 최소 c
c = stats.poisson.ppf(1 - alpha, mu0)
actual_alpha = stats.poisson.sf(c, mu0) # P(T > c | lambda0)
# 각 lambda에서의 검정력
powers = []
for lam in lambda_range:
mu = n * lam
power = stats.poisson.sf(c, mu)
powers.append(power)
return {
"임계값 c": int(c),
"실제 alpha": actual_alpha,
"lambda_range": lambda_range,
"검정력": np.array(powers),
}
# 포아송 UMP 검정력
n = 10
lambda0 = 5.0
lambda_vals = np.linspace(0.5, 10.0, 100)
result = poisson_ump_power(lambda_vals, lambda0, n, alpha=0.05)
print(f"임계값 c: {result['임계값 c']}")
print(f"실제 alpha: {result['실제 alpha']:.4f}")
print()
# 특정 lambda에서 검정력 출력
for lam in [3.0, 5.0, 6.0, 7.0, 8.0]:
idx = np.argmin(np.abs(lambda_vals - lam))
print(f" lambda={lam:.1f}: beta={result['검정력'][idx]:.4f}")11.3 Python: MLR 검증
import numpy as np
from scipy import stats
def verify_mlr(
distribution: str,
theta1: float,
theta2: float,
t_range: np.ndarray,
n: int = 1,
) -> dict:
"""
분포족의 MLR 여부를 우도비의 단조성으로 검증
theta2 > theta1 에서 g(t|theta2)/g(t|theta1) 이 t의 비감소함수인지 확인
"""
assert theta2 > theta1
if distribution == "normal":
# T = Xbar ~ N(theta, sigma^2/n) (sigma=1 가정)
pmf1 = stats.norm.pdf(t_range, theta1, 1 / np.sqrt(n))
pmf2 = stats.norm.pdf(t_range, theta2, 1 / np.sqrt(n))
elif distribution == "poisson":
# T = sum(Xi) ~ Poisson(n*theta)
t_int = t_range.astype(int)
pmf1 = stats.poisson.pmf(t_int, n * theta1)
pmf2 = stats.poisson.pmf(t_int, n * theta2)
elif distribution == "binomial":
# T = sum(Xi) ~ Binomial(n, theta)
t_int = t_range.astype(int)
pmf1 = stats.binom.pmf(t_int, n, theta1)
pmf2 = stats.binom.pmf(t_int, n, theta2)
else:
raise ValueError("Unknown distribution")
lr = np.where(pmf1 > 0, pmf2 / pmf1, np.inf)
diffs = np.diff(lr)
is_monotone = np.all(diffs >= -1e-10)
return {
"분포": distribution,
"theta1": theta1,
"theta2": theta2,
"MLR 성립": is_monotone,
"우도비 (처음 5개)": lr[:5].round(4),
}
print("=== MLR 검증 ===")
for dist, t, n in [("normal", np.linspace(-3, 3, 50), 1),
("poisson", np.arange(0, 30), 1),
("binomial", np.arange(0, 21), 20)]:
result = verify_mlr(dist, theta1=2.0, theta2=3.0, t_range=t, n=n)
print(f" {result['분포']}: MLR 성립 = {result['MLR 성립']}")11.4 R
library(stats)
# NP 검정: 이항 분포
np_binomial <- function(n_trials, theta0, theta1, alpha_target = 0.05) {
x_vals <- 0:n_trials
pmf0 <- dbinom(x_vals, n_trials, theta0)
pmf1 <- dbinom(x_vals, n_trials, theta1)
lr <- pmf1 / pmf0
# 우도비 내림차순 정렬
ord <- order(-lr)
cum_alpha <- 0
rejection <- c()
for (idx in ord) {
if (cum_alpha + pmf0[idx] <= alpha_target + 1e-10) {
cum_alpha <- cum_alpha + pmf0[idx]
rejection <- c(rejection, x_vals[idx])
}
}
rejection <- sort(rejection)
actual_alpha <- sum(pmf0[rejection + 1])
power <- sum(pmf1[rejection + 1])
cat(sprintf("기각 영역: {%s}\n", paste(rejection, collapse=", ")))
cat(sprintf("실제 alpha: %.4f\n", actual_alpha))
cat(sprintf("검정력 beta(theta1=%.2f): %.4f\n", theta1, power))
}
# 정규분포 세 검정 검정력 비교
compare_tests <- function(theta_vals, theta0 = 0, sigma = 1, n = 25, alpha = 0.05) {
se <- sigma / sqrt(n)
z_alpha <- qnorm(1 - alpha)
z_half <- qnorm(1 - alpha / 2)
beta1 <- pnorm(theta0 - sigma * z_alpha / sqrt(n), mean = theta_vals, sd = se)
beta2 <- pnorm(theta0 + sigma * z_alpha / sqrt(n), mean = theta_vals, sd = se,
lower.tail = FALSE)
beta3 <- pnorm(theta0 - sigma * z_half / sqrt(n), mean = theta_vals, sd = se) +
pnorm(theta0 + sigma * z_half / sqrt(n), mean = theta_vals, sd = se,
lower.tail = FALSE)
data.frame(theta = theta_vals, beta1_left = beta1,
beta2_right = beta2, beta3_UMPU = beta3)
}
# 포아송 UMP 검정력
poisson_ump <- function(lambda_vals, lambda0, n, alpha = 0.05) {
mu0 <- n * lambda0
c <- qpois(1 - alpha, mu0) # 임계값
actual_alpha <- ppois(c, mu0, lower.tail = FALSE)
cat(sprintf("임계값 c = %d, 실제 alpha = %.4f\n", c, actual_alpha))
powers <- sapply(lambda_vals, function(lam) ppois(c, n * lam, lower.tail = FALSE))
data.frame(lambda = lambda_vals, power = powers)
}
cat("=== NP 검정 (Binomial, n=10, theta0=0.5, theta1=0.7) ===\n")
np_binomial(10, 0.5, 0.7)
cat("\n=== 검정력 비교 (Normal, theta0=0, sigma=1, n=25) ===\n")
theta_grid <- c(-1, -0.5, 0, 0.5, 1)
print(compare_tests(theta_grid))
cat("\n=== 포아송 UMP (lambda0=5, n=10) ===\n")
result_pois <- poisson_ump(c(3, 5, 6, 7, 8), lambda0 = 5, n = 10)
print(result_pois)12 핵심 요약
최강력 검정의 존재와 구성은 다음 논리 사슬로 완결된다.
단순 vs 단순 → NP 보조정리: \(f(\mathbf{x}|\theta_1)/f(\mathbf{x}|\theta_0) > k\) 이면 기각.
\[\text{UMP 기각 영역} = \left\{\mathbf{x}: \frac{f(\mathbf{x}|\theta_1)}{f(\mathbf{x}|\theta_0)} > k\right\}\]
단측 복합 → MLR + Karlin-Rubin: 충분통계량 \(T\) 의 임계값 기각.
\[\text{UMP 기각 영역} = \{T > t_0\} \quad (H_1: \theta > \theta_0)\]
양측 복합 → UMP 비존재 → 불편 클래스 제한 → UMPU.
\[\text{UMPU 기각 영역} = \{|T - \theta_0| > c'\}\]
이 계층 구조에서 MLR이 핵심 연결 고리다. MLR은 “NP 조건이 단조 임계값과 동치”라는 것을 보장하여, 단순 가설에서 얻은 최적성을 복합 가설로 확장한다.
13 관련 주제
- 검정 평가 — 오류 확률과 검정력 함수 — 검정력 함수, Size/Level, UMP 정의
- 우도비 검정 (LRT) — 검정 도출 방법
- 베이즈 검정 — 손실함수 기반 최적 검정
- 합집합-교집합 검정 — 복합 귀무가설 처리
(Casella & Berger, 2002, Ch.8 §8.3.2)