검정 평가 방법 — 오류 확률과 검정력 함수

Error Probabilities and the Power Function: 좋은 검정을 선택하는 기준

가설검정에서 발생하는 두 종류의 오류와 이를 하나의 함수로 통합하는 검정력 함수(power function)를 직관과 수식으로 설명한다. 크기(size), 수준(level), 불편 검정, 최강력 검정(UMP), Neyman-Pearson 보조정리, 단조 우도비(MLR), Karlin-Rubin 정리까지 체계적으로 다룬다.

Statistics
저자

Kwangmin Kim

공개

2026년 04월 09일

1 개요

검정을 도출하는 방법(LRT, UIT, IUT, 베이즈 검정)을 배웠다면, 이제 “어떤 검정이 더 좋은가?”를 평가해야 한다. Casella & Berger (2002, Ch.8) §8.3은 이 질문에 답하는 기준을 체계적으로 제시한다.

핵심 아이디어는 단순하다. 검정의 품질은 오류 확률로 평가한다. 그리고 오류 확률 전체를 하나의 함수, 즉 검정력 함수(power function) 로 요약한다.

이 포스트에서 다루는 내용은 다음과 같다.

개념 역할
Type I / II Error 두 종류의 실수 정의
검정력 함수 \(\beta(\theta)\) 모든 \(\theta\) 에서 오류 확률을 하나로 통합
Size와 Level Type I Error를 제어하는 두 기준
불편 검정 최소한의 합리성 조건
UMP 검정 최강력(최적) 검정
Neyman-Pearson 보조정리 UMP 검정의 존재·구성 조건
MLR과 Karlin-Rubin 정리 단측 복합 가설에서 UMP의 존재 보장

2 두 종류의 오류

\(H_0: \theta \in \Theta_0\) vs \(H_1: \theta \in \Theta_0^c\) 검정에서 기각 영역을 \(R\) 이라 하면 두 종류의 실수가 가능하다.

\(H_0\) 채택 \(H_0\) 기각
\(H_0\) 참 (\(\theta \in \Theta_0\)) 옳은 결정 Type I Error (거짓 양성)
\(H_1\) 참 (\(\theta \in \Theta_0^c\)) Type II Error (거짓 음성) 옳은 결정

Type I Error (1종 오류): \(H_0\) 가 참인데 기각하는 오류. 유죄가 아닌 사람을 유죄 선고하는 것. 확률: \(P_\theta(X \in R)\) for \(\theta \in \Theta_0\)

Type II Error (2종 오류): \(H_1\) 이 참인데 \(H_0\) 를 채택하는 오류. 실제 유죄인 사람을 무죄 방면하는 것. 확률: \(P_\theta(X \in R^c) = 1 - P_\theta(X \in R)\) for \(\theta \in \Theta_0^c\)

왜 두 오류를 동시에 최소화할 수 없는가

고정된 표본 크기 \(n\) 에서 기각 영역 \(R\) 을 크게 하면(더 자주 기각) Type I Error가 증가하고 Type II Error가 감소한다. 반대로 \(R\) 을 작게 하면 Type I Error가 감소하고 Type II Error가 증가한다. 두 오류는 트레이드오프 관계에 있다.

해결책은 두 가지다:

  1. \(n\) 을 늘린다 → 두 오류 모두 감소 가능
  2. Type I Error를 먼저 제어하고, 그 안에서 Type II Error를 최소화한다 (고전적 접근)

\(P_\theta(X \in R)\) 하나의 함수가 모든 정보를 담는다.

  • \(\theta \in \Theta_0\) 이면: Type I Error 확률
  • \(\theta \in \Theta_0^c\) 이면: $1 - $ (Type II Error 확률) = 검정력(Power)

3 검정력 함수

Definition 8.3.1 (검정력 함수)

기각 영역 \(R\) 을 갖는 가설검정의 검정력 함수(power function)

\[\beta(\theta) = P_\theta(X \in R)\]

이상적인 검정력 함수는 \(\theta \in \Theta_0\) 에서 0, \(\theta \in \Theta_0^c\) 에서 1이다. 현실에서 이 이상은 달성 불가능하다.

직관: \(\beta(\theta)\) 는 “파라미터가 \(\theta\) 일 때 이 검정이 얼마나 잘 기각하는가”를 나타낸다.

  • \(\theta \in \Theta_0\) (귀무가설 영역): \(\beta(\theta)\) 가 작아야 한다 (잘못된 기각을 피해야 함)
  • \(\theta \in \Theta_0^c\) (대립가설 영역): \(\beta(\theta)\) 가 커야 한다 (옳은 기각을 잘 해야 함)

좋은 검정의 검정력 함수: \(\Theta_0\) 에서 낮고, \(\Theta_0^c\) 에서 높으며, 경계에서 날카롭게 전환된다.

3.1 예시 1: 이항 검정력 함수 (Example 8.3.2)

\(X \sim \text{Binomial}(5, \theta)\), \(H_0: \theta \leq 1/2\) vs \(H_1: \theta > 1/2\)

검정 1: \(X = 5\) 이면 기각 (매우 엄격)

\[\beta_1(\theta) = P_\theta(X = 5) = \theta^5\]

  • \(\theta = 1/2\) 에서 \(\beta_1(1/2) = 1/32 \approx 0.031\) → Type I Error 매우 작음
  • \(\theta = 0.7\) 에서 \(\beta_1(0.7) = 0.168\) → 0.7이어도 16.8%만 기각 → Type II Error 크다

검정 2: \(X \geq 3\) 이면 기각 (덜 엄격)

\[\beta_2(\theta) = \binom{5}{3}\theta^3(1-\theta)^2 + \binom{5}{4}\theta^4(1-\theta) + \theta^5\]

  • \(\theta = 1/2\) 에서 \(\beta_2(1/2) = 0.5\) → Type I Error가 크다
  • \(\theta = 0.7\) 에서 \(\beta_2(0.7) \approx 0.84\) → 84% 기각 → Type II Error 작다

해석: 검정 2가 \(\theta > 1/2\) 에서 기각을 더 잘 하지만(\(\beta_2 > \beta_1\)), \(\theta \leq 1/2\) 에서도 더 자주 잘못 기각한다(\(\beta_2 > \beta_1\)). 어느 검정이 더 나은지는 연구자가 어떤 오류를 더 심각하게 여기는지에 달려 있다.

3.2 예시 2: 정규분포 검정력 함수 (Example 8.3.3)

\(X_1, \ldots, X_n \sim N(\theta, \sigma^2)\), \(\sigma^2\) 알려짐, \(H_0: \theta \leq \theta_0\) vs \(H_1: \theta > \theta_0\)

LRT: \((\bar{X} - \theta_0)/(\sigma/\sqrt{n}) > c\) 이면 기각. 검정력 함수:

\[\beta(\theta) = P_\theta\left(\frac{\bar{X} - \theta_0}{\sigma/\sqrt{n}} > c\right) = P\left(Z > c + \frac{\theta_0 - \theta}{\sigma/\sqrt{n}}\right)\]

여기서 \(Z \sim N(0,1)\).

  • \(\theta \to -\infty\): \(c + (\theta_0 - \theta)/(\sigma/\sqrt{n}) \to \infty\)\(\beta(\theta) \to 0\) (옳게 채택)
  • \(\theta = \theta_0\): \(\beta(\theta_0) = P(Z > c) = \alpha\) (Size가 정확히 \(\alpha\))
  • \(\theta \to \infty\): \(\beta(\theta) \to 1\) (옳게 기각)

직관: \(\theta\)\(\theta_0\) 보다 클수록 \(\bar{X}\) 의 분포가 오른쪽으로 이동하고, 기각 영역에 들어올 확률이 높아진다. S자 형태의 증가 함수.

3.3 예시 3: 표본 크기 결정 (Example 8.3.4)

위 정규분포 검정에서 두 가지 요구사항을 동시에 만족시키고 싶다:

  • Type I Error: \(\beta(\theta_0) \leq 0.1\)
  • \(\theta \geq \theta_0 + \sigma\) 에서 검정력: \(\beta(\theta_0 + \sigma) \geq 0.8\)

\[\beta(\theta_0) = P(Z > c) = 0.1 \implies c = z_{0.1} = 1.28\]

\[\beta(\theta_0 + \sigma) = P\left(Z > 1.28 - \sqrt{n}\right) = 0.8 \implies 1.28 - \sqrt{n} = -z_{0.8} = -0.84\]

\[\sqrt{n} = 1.28 + 0.84 = 2.12 \implies n = 4.49 \implies n = 5\]

해석: \(c = 1.28\), \(n = 5\) 로 설정하면 두 오류 요구를 동시에 충족한다. 표본 크기는 두 오류를 동시에 제어하는 설계 변수다.


4 크기(Size)와 수준(Level)

Section 8.2의 방법들(LRT 등)은 기각 영역의 형태를 주지만, 임계값 \(c\) 를 특정하지 않는다. Type I Error를 \(\alpha\) 이하로 제한한다는 조건이 \(c\) 를 결정한다.

Definition 8.3.5 (크기, Size)

검정력 함수 \(\beta(\theta)\) 를 갖는 검정이 크기 \(\alpha\) 검정(size \(\alpha\) test) 이면

\[\sup_{\theta \in \Theta_0} \beta(\theta) = \alpha\]

Definition 8.3.6 (수준, Level)

검정력 함수 \(\beta(\theta)\) 를 갖는 검정이 수준 \(\alpha\) 검정(level \(\alpha\) test) 이면

\[\sup_{\theta \in \Theta_0} \beta(\theta) \leq \alpha\]

차이: 크기 \(\alpha\) 검정은 \(\Theta_0\) 에서 Type I Error의 최댓값이 정확히 \(\alpha\). 수준 \(\alpha\) 검정은 최댓값이 \(\alpha\) 이하. 수준 \(\alpha\) 검정 집합 \(\supset\) 크기 \(\alpha\) 검정 집합.

왜 수준이 크기보다 더 유연한 개념인가

복잡한 모델에서는 크기가 정확히 \(\alpha\) 인 검정을 구성하기 어려운 경우가 많다. 이때 “\(\alpha\) 이하면 충분하다”는 수준 \(\alpha\) 조건이 실용적이다. UI/IU 검정이 대표적 사례다(→ UI/IU 검정 포스트 참조).

실무: 연구자는 수준(보통 \(\alpha = 0.05\))을 먼저 지정하고, 이 조건 안에서 Type II Error를 최소화하는 검정을 찾는다. Type I Error(귀무가설이 참인데 기각하는 오류)를 엄격히 제어하는 것이 우선이다.


5 불편 검정 (Unbiased Test)

Definition 8.3.9 (불편 검정)

검정력 함수 \(\beta(\theta)\) 를 갖는 검정이 불편(unbiased) 이면 모든 \(\theta' \in \Theta_0^c\)\(\theta'' \in \Theta_0\) 에 대해

\[\beta(\theta') \geq \beta(\theta'')\]

직관: “대립가설 영역에서의 기각 확률 \(\geq\) 귀무가설 영역에서의 기각 확률”. 즉, 진짜로 기각해야 할 때 기각할 확률이, 잘못 기각하는 확률보다 항상 높다. 불편 검정은 최소한의 합리성 조건이다.

왜 편향 검정(biased test)이 나쁜가: \(\theta \in \Theta_0^c\) 인데도 \(\beta(\theta') < \beta(\theta_0)\) 라면, 이 검정은 실제 대립이 맞을 때 귀무가설이 맞을 때보다 더 낮은 확률로 기각한다. 거꾸로 된 검정이다.

예시: 정규 단측 LRT에서 \(\beta(\theta)\)\(\theta\) 의 순증가 함수이므로 \(\theta > \theta_0\) 이면 항상 \(\beta(\theta) > \beta(\theta_0)\). 따라서 이 검정은 불편이다.


6 최강력 검정 (UMP Test)

검정 평가의 최종 목표: Type I Error를 level \(\alpha\) 로 제한하면서 Type II Error를 최소화하는 검정 = 검정력을 최대화하는 검정.

Definition 8.3.11 (UMP 검정)

클래스 \(\mathcal{C}\) 에 속하는 검정 중, 검정력 함수 \(\beta(\theta)\) 가 모든 \(\theta \in \Theta_0^c\)\(\mathcal{C}\) 에 속하는 모든 검정의 검정력 함수 \(\beta'(\theta)\) 에 대해

\[\beta(\theta) \geq \beta'(\theta)\]

를 만족하는 검정을 균일 최강력(Uniformly Most Powerful, UMP) 클래스 \(\mathcal{C}\) 검정이라 한다.

\(\mathcal{C}\) = (모든 level \(\alpha\) 검정)이면, 이를 UMP level \(\alpha\) 검정이라 한다.

직관: “어떤 \(\theta \in \Theta_0^c\) 를 가정하더라도 다른 검정보다 더 잘 기각한다.” UMP 검정이 존재하면 최적 검정이다. 그러나 현실에서는 UMP가 존재하지 않는 경우도 많다.


7 Neyman-Pearson 보조정리

단순 가설 vs 단순 가설(\(H_0: \theta = \theta_0\) vs \(H_1: \theta = \theta_1\))에서 UMP 검정의 존재와 구성 방법을 완전히 해결한다.

Theorem 8.3.12 (Neyman-Pearson Lemma)

\(H_0: \theta = \theta_0\) vs \(H_1: \theta = \theta_1\) 에서 다음을 만족하는 기각 영역 \(R\) 을 갖는 검정을 고려한다:

\[\mathbf{x} \in R \text{ if } f(\mathbf{x}|\theta_1) > k f(\mathbf{x}|\theta_0) \tag{8.3.1}\] \[\mathbf{x} \in R^c \text{ if } f(\mathbf{x}|\theta_1) < k f(\mathbf{x}|\theta_0)\]

for some \(k \geq 0\), and

\[\alpha = P_{\theta_0}(X \in R) \tag{8.3.2}\]

그러면:

(a) 충분성: (8.3.1)과 (8.3.2)를 만족하는 모든 검정은 UMP level \(\alpha\) 검정이다.

(b) 필요성: \(k > 0\) 으로 (8.3.1)과 (8.3.2)를 만족하는 검정이 존재하면, 모든 UMP level \(\alpha\) 검정은 size \(\alpha\) 검정이고 (8.3.1)을 (거의) 만족한다.

7.1 직관: 왜 우도비가 기준인가

\(H_1\) 하에서의 가능도가 \(H_0\) 하에서보다 \(k\) 배 이상 크면 기각한다.” 이 기준이 최적인 이유는 다음과 같다.

같은 Type I Error(\(\alpha\))를 쓰면서 Type II Error를 최소화하려면, 기각 영역을 \(H_1\) 의 우도가 \(H_0\) 에 비해 높은 데이터 점들로 채워야 한다. 어떤 데이터가 \(H_1\) 을 더 강하게 지지하는지를 우도비가 정확히 측정하기 때문이다.

비유: 한정된 예산(\(\alpha\))으로 범죄 수사에서 유죄 증거를 최대한 확보하려면, 무죄 가능성이 낮고 유죄 가능성이 높은 단서에 자원을 집중해야 한다. 우도비는 “이 단서가 유죄(\(\theta_1\))를 얼마나 무죄(\(\theta_0\))보다 더 강하게 가리키는가”를 수치화한다.

7.2 증명 직관

임의의 level \(\alpha\) 검정 \(\phi'\) 와 NP 검정 \(\phi\) 에 대해:

\[0 \leq \int [\phi(\mathbf{x}) - \phi'(\mathbf{x})][f(\mathbf{x}|\theta_1) - k f(\mathbf{x}|\theta_0)] d\mathbf{x}\]

왜 이 피적분 함수가 비음(非負)인가? \(f(\mathbf{x}|\theta_1) > kf(\mathbf{x}|\theta_0)\) 이면 \(\phi = 1 \geq \phi'\) 이므로 두 인수의 부호가 같다. 반대 경우도 마찬가지. 전개하면:

\[0 \leq \beta(\theta_1) - \beta'(\theta_1) - k(\underbrace{\beta(\theta_0) - \beta'(\theta_0)}_{\geq 0, \text{ since both} \leq \alpha})\]

\(k \geq 0\) 이고 괄호 안이 \(\geq 0\) 이므로 \(\beta(\theta_1) \geq \beta'(\theta_1)\). NP 검정이 임의의 level \(\alpha\) 검정보다 검정력이 크다.

7.3 예시: 이항 UMP 검정 (Example 8.3.14)

\(X \sim \text{Binomial}(2, \theta)\), \(H_0: \theta = 1/2\) vs \(H_1: \theta = 3/4\)

\[\frac{f(x|\theta = 3/4)}{f(x|\theta = 1/2)} = \begin{cases} 1/4 & x = 0 \\ 3/4 & x = 1 \\ 9/4 & x = 2 \end{cases}\]

  • \(3/4 < k < 9/4\) 이면: \(x = 2\) 일 때만 기각 → UMP level \(\alpha = P(X=2|1/2) = 1/4\)
  • \(1/4 < k < 3/4\) 이면: \(x = 1, 2\) 이면 기각 → UMP level \(\alpha = 3/4\)

해석: \(k\) 를 조절하면 다양한 \(\alpha\) 수준에서의 UMP를 구성할 수 있다. 이산 분포에서는 원하는 \(\alpha\) 를 정확히 달성하지 못할 수 있다.


8 단조 우도비 (MLR)와 Karlin-Rubin 정리

단순 vs 단순 가설에서 NP 보조정리는 완전한 해답을 준다. 실무에서는 복합 가설(특히 단측 가설)이 더 흔하다. 이를 위해 MLR이 핵심 역할을 한다.

Definition 8.3.16 (단조 우도비, MLR)

일변량 확률변수 \(T\) 의 분포족 \(\{g(t|\theta)\}\)단조 우도비(monotone likelihood ratio, MLR) 를 가지면, 모든 \(\theta_2 > \theta_1\) 에 대해 \(g(t|\theta_2)/g(t|\theta_1)\)\(t\) 의 단조함수이다.

직관: \(\theta\) 가 커질수록 \(T\) 가 커지는 경향이 강해진다는 의미다. 정규분포(알려진 분산), 포아송, 이항 분포 등 지수족은 모두 MLR을 가진다.

Theorem 8.3.17 (Karlin-Rubin)

\(T\)\(\theta\) 의 충분통계량이고, \(\{g(t|\theta)\}\) 가 MLR을 가지면, \(H_0: \theta \leq \theta_0\) vs \(H_1: \theta > \theta_0\) 에서

\[\text{기각}: T > t_0 \quad \text{(어떤 }t_0\text{에 대해)}\]

인 검정은 UMP level \(\alpha = P_{\theta_0}(T > t_0)\) 검정이다.

직관: MLR 조건 덕분에 단측 복합 가설에서도 “충분통계량이 임계값을 넘으면 기각”이라는 단순한 형태의 UMP가 존재한다.

왜 MLR이 충분한가: 검정 대상을 \(H_0: \theta \leq \theta_0\) vs \(H_1: \theta = \theta'\) (임의의 \(\theta' > \theta_0\))로 축소하면, MLR로 인해 NP 보조정리의 기각 조건이 항상 \(T > t_0\) 와 동치가 된다. 따라서 하나의 검정이 모든 \(\theta' > \theta_0\) 에서 동시에 UMP가 된다.

8.1 예시: 정규분포 단측 UMP

\(X_1, \ldots, X_n \sim N(\theta, \sigma^2)\), \(H_0: \theta \leq \theta_0\) vs \(H_1: \theta > \theta_0\)

\(\bar{X}\) 는 충분통계량이고 \(N(\theta, \sigma^2/n)\) 분포족은 MLR을 가진다. 따라서 Karlin-Rubin 정리에 의해

\[\text{기각}: \bar{X} > \frac{\sigma z_\alpha}{\sqrt{n}} + \theta_0\]

이 UMP level \(\alpha\) 검정이다.

검정력 함수:

\[\beta(\theta) = P\left(Z > z_\alpha + \frac{\theta_0 - \theta}{\sigma/\sqrt{n}}\right)\]

이 함수는 \(\theta\) 의 순증가 함수이고, \(\beta(\theta_0) = \alpha\), \(\theta > \theta_0\) 에서 \(\beta(\theta) > \alpha\) 이므로 불편 검정이기도 하다.


9 UMP가 존재하지 않는 경우

양측 복합 가설 \(H_0: \theta = \theta_0\) vs \(H_1: \theta \neq \theta_0\) 에서는 UMP level \(\alpha\) 검정이 존재하지 않는다.

이유: NP 보조정리의 필요성 조건에 의해, \(\theta_1 < \theta_0\) 에서 UMP가 되려면 좌측 단측 검정이어야 하고, \(\theta_2 > \theta_0\) 에서는 우측 단측 검정이어야 하다. 두 조건을 동시에 만족하는 단일 검정은 존재하지 않는다.

대안: 클래스를 불편 검정으로 제한하면 UMP 불편(UMPU) 검정이 존재한다. 양측 t 검정:

\[\text{기각}: |\bar{X} - \theta_0| > \frac{\sigma z_{\alpha/2}}{\sqrt{n}}\]

은 UMPU level \(\alpha\) 검정이다.

검정력 비교:

  • 좌측 단측 검정 \(\beta_1\): \(\theta < \theta_0\) 에서 최강, \(\theta > \theta_0\) 에서 매우 낮음
  • 우측 단측 검정 \(\beta_2\): \(\theta > \theta_0\) 에서 최강, \(\theta < \theta_0\) 에서 매우 낮음
  • 양측 검정 \(\beta_3\) (UMPU): 양쪽 모두에서 균형 잡힌 검정력

양쪽 대립이 모두 관심 대상일 때는 \(\beta_3\) 이 전반적으로 우수하다.


10 코드 구현

10.1 Python

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


def power_function_normal(
    theta_values: np.ndarray,
    theta0: float,
    sigma: float,
    n: int,
    alpha: float = 0.05,
    alternative: str = "greater",
) -> np.ndarray:
    """
    H0: theta <= theta0 (단측) 또는 H0: theta = theta0 (양측)의 검정력 함수 계산
    """
    z_crit = stats.norm.ppf(1 - alpha)

    if alternative == "greater":
        # 단측 (우측): 기각 = Xbar > theta0 + sigma*z_alpha/sqrt(n)
        c = theta0 + sigma * z_crit / np.sqrt(n)
        return stats.norm.sf(c, loc=theta_values, scale=sigma / np.sqrt(n))

    elif alternative == "two-sided":
        # 양측: 기각 = |Xbar - theta0| > sigma*z_{alpha/2}/sqrt(n)
        z_half = stats.norm.ppf(1 - alpha / 2)
        c_upper = theta0 + sigma * z_half / np.sqrt(n)
        c_lower = theta0 - sigma * z_half / np.sqrt(n)
        p_upper = stats.norm.sf(c_upper, loc=theta_values, scale=sigma / np.sqrt(n))
        p_lower = stats.norm.cdf(c_lower, loc=theta_values, scale=sigma / np.sqrt(n))
        return p_upper + p_lower

    else:
        raise ValueError("alternative must be 'greater' or 'two-sided'")


def power_function_binomial(
    theta_values: np.ndarray,
    n_trials: int,
    threshold: int,
    direction: str = "upper",
) -> np.ndarray:
    """
    이항 검정의 검정력 함수
    direction='upper': X >= threshold 이면 기각
    """
    powers = []
    for theta in theta_values:
        if direction == "upper":
            # P(X >= threshold | theta)
            power = stats.binom.sf(threshold - 1, n_trials, theta)
        else:
            power = stats.binom.cdf(threshold, n_trials, theta)
        powers.append(power)
    return np.array(powers)


def sample_size_for_power(
    theta0: float,
    theta1: float,
    sigma: float,
    alpha: float = 0.05,
    target_power: float = 0.80,
) -> dict:
    """
    단측 정규 검정에서 목표 검정력을 달성하는 최소 표본 크기 계산
    H0: theta <= theta0, 관심 대립: theta = theta1 > theta0
    """
    z_alpha = stats.norm.ppf(1 - alpha)
    z_beta = stats.norm.ppf(target_power)
    n_exact = ((z_alpha + z_beta) * sigma / (theta1 - theta0)) ** 2
    n = int(np.ceil(n_exact))

    # 확인: n에서의 실제 검정력
    actual_power = stats.norm.sf(
        theta0 + sigma * z_alpha / np.sqrt(n),
        loc=theta1,
        scale=sigma / np.sqrt(n),
    )
    return {
        "n (이론)": n_exact,
        "n (정수)": n,
        "목표 검정력": target_power,
        "실제 검정력 (n에서)": actual_power,
        "alpha": alpha,
        "임계값 c = z_alpha + z_beta": z_alpha + z_beta,
    }


# 검정력 함수 시각화
theta_range = np.linspace(-3, 3, 300)
theta0 = 0.0
sigma = 1.0

for n in [5, 20, 50]:
    beta_one = power_function_normal(theta_range, theta0, sigma, n, alpha=0.05,
                                     alternative="greater")
    beta_two = power_function_normal(theta_range, theta0, sigma, n, alpha=0.05,
                                     alternative="two-sided")
    print(f"n={n}: beta_one(theta0+0.5)={beta_one[np.argmin(np.abs(theta_range-0.5))]:.3f}, "
          f"beta_two(theta0+0.5)={beta_two[np.argmin(np.abs(theta_range-0.5))]:.3f}")

print()
print("=== 표본 크기 결정 (alpha=0.1, power=0.8 at theta0+sigma) ===")
result = sample_size_for_power(0.0, 1.0, 1.0, alpha=0.1, target_power=0.8)
for k, v in result.items():
    print(f"  {k}: {v:.4f}" if isinstance(v, float) else f"  {k}: {v}")

10.2 Python: NP 보조정리 기각 영역 시각화

import numpy as np
from scipy import stats


def neyman_pearson_binomial(
    n_trials: int,
    theta0: float,
    theta1: float,
    target_alpha: float = 0.25,
) -> dict:
    """
    이항 분포에서 NP 보조정리로 UMP 검정 구성
    H0: theta = theta0 vs H1: theta = theta1 (theta1 > theta0)
    """
    x_values = np.arange(n_trials + 1)
    pmf0 = stats.binom.pmf(x_values, n_trials, theta0)
    pmf1 = stats.binom.pmf(x_values, n_trials, theta1)
    likelihood_ratio = pmf1 / pmf0

    # 우도비 내림차순으로 기각 영역 구성
    sorted_idx = np.argsort(-likelihood_ratio)
    cumulative_alpha = 0
    rejection_set = []

    for idx in sorted_idx:
        cumulative_alpha += pmf0[idx]
        rejection_set.append(x_values[idx])
        if cumulative_alpha >= target_alpha:
            break

    actual_alpha = sum(pmf0[x] for x in rejection_set)
    power = sum(pmf1[x] for x in rejection_set)

    return {
        "우도비 테이블": {x: lr for x, lr in zip(x_values, likelihood_ratio)},
        "기각 영역": sorted(rejection_set),
        "실제 alpha (Type I Error)": actual_alpha,
        "검정력 (1 - Type II Error)": power,
    }


result = neyman_pearson_binomial(n_trials=2, theta0=0.5, theta1=0.75, target_alpha=0.25)
print("우도비:")
for x, lr in result["우도비 테이블"].items():
    print(f"  f({x}|theta=3/4) / f({x}|theta=1/2) = {lr:.4f}")
print(f"기각 영역: {result['기각 영역']}")
print(f"실제 alpha: {result['실제 alpha (Type I Error)']:.4f}")
print(f"검정력: {result['검정력 (1 - Type II Error)']:.4f}")

10.3 R

library(stats)

# 검정력 함수 계산 — 정규분포 단측 검정
power_normal_one_sided <- function(theta, theta0, sigma, n, alpha = 0.05) {
  z_alpha <- qnorm(1 - alpha)
  c <- theta0 + sigma * z_alpha / sqrt(n)
  pnorm(c, mean = theta, sd = sigma / sqrt(n), lower.tail = FALSE)
}

# 검정력 함수 계산 — 정규분포 양측 검정
power_normal_two_sided <- function(theta, theta0, sigma, n, alpha = 0.05) {
  z_half <- qnorm(1 - alpha / 2)
  c_upper <- theta0 + sigma * z_half / sqrt(n)
  c_lower <- theta0 - sigma * z_half / sqrt(n)
  pnorm(c_lower, mean = theta, sd = sigma / sqrt(n)) +
    pnorm(c_upper, mean = theta, sd = sigma / sqrt(n), lower.tail = FALSE)
}

# 이항 검정력 함수 (검정 1: X=5, 검정 2: X>=3)
theta_vals <- seq(0, 1, by = 0.01)
beta1 <- theta_vals^5
beta2 <- pbinom(2, 5, theta_vals, lower.tail = FALSE)

cat("이항 검정력 비교 (theta = 0.7):\n")
cat(sprintf("  beta1(0.7) = %.4f\n", 0.7^5))
cat(sprintf("  beta2(0.7) = %.4f\n", pbinom(2, 5, 0.7, lower.tail = FALSE)))

# 표본 크기 결정 (power.t.test 활용)
cat("\n표본 크기 결정 (alpha=0.1, power=0.8, delta=sigma):\n")
result <- power.t.test(
  delta = 1,     # theta1 - theta0 = sigma
  sd = 1,
  sig.level = 0.1,
  power = 0.8,
  alternative = "one.sided",
  type = "one.sample"
)
print(result)

# NP 보조정리: X~Binomial(2, theta)
cat("\nNP 보조정리 우도비 (n=2, theta0=1/2, theta1=3/4):\n")
x_vals <- 0:2
lr <- dbinom(x_vals, 2, 3/4) / dbinom(x_vals, 2, 1/2)
for (i in seq_along(x_vals)) {
  cat(sprintf("  f(%d|3/4)/f(%d|1/2) = %.4f\n", x_vals[i], x_vals[i], lr[i]))
}
cat(sprintf("  기각 영역 {2}: alpha=%.4f, power=%.4f\n",
            dbinom(2, 2, 1/2), dbinom(2, 2, 3/4)))

11 핵심 정리

검정력 함수 \(\beta(\theta) = P_\theta(X \in R)\) 은 가설검정의 핵심 평가 도구다.

\[\beta(\theta) = \begin{cases} \text{Type I Error 확률} & \theta \in \Theta_0 \\ 1 - \text{Type II Error 확률} & \theta \in \Theta_0^c \end{cases}\]

좋은 검정의 조건은 위계적으로 다음과 같다.

  1. Level \(\alpha\) 조건: \(\sup_{\theta \in \Theta_0} \beta(\theta) \leq \alpha\) (Type I Error 제어)
  2. 불편 조건: \(\beta(\theta') \geq \beta(\theta'')\) for \(\theta' \in \Theta_0^c\), \(\theta'' \in \Theta_0\)
  3. UMP 조건: 모든 \(\theta \in \Theta_0^c\) 에서 검정력 최대화

단순 가설에서는 NP 보조정리(우도비 기반)로 UMP를 구성한다. 단측 복합 가설에서는 MLR + Karlin-Rubin 정리가 보장한다. 양측 복합 가설에서는 UMP가 존재하지 않으며, UMPU(불편 UMP)로 대체한다.

12 관련 주제

(Casella & Berger, 2002, Ch.8)

Subscribe

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