검정 도출 방법 — 합집합-교집합 검정과 교집합-합집합 검정

Union-Intersection and Intersection-Union Tests: 복합 가설을 단순 가설로 분해하는 두 가지 전략

복잡한 귀무가설을 단순한 하위 가설들로 분해하여 검정을 구성하는 두 가지 방법, 합집합-교집합 검정(UIT)과 교집합-합집합 검정(IUT)을 직관과 수식으로 체계적으로 설명한다. 크기(size) 보정 방법과 실무 응용까지 다룬다.

Statistics
저자

Kwangmin Kim

공개

2026년 04월 09일

#| echo: false
#| eval: true
import warnings
warnings.filterwarnings('ignore')

1 개요

귀무가설이 복잡한 구조를 가질 때, 예를 들어 여러 조건이 동시에 성립해야 하거나 적어도 하나가 성립해야 하는 경우, 전체 검정을 한 번에 구성하기 어렵다. 이 때 유용한 전략이 Casella & Berger (2002, Ch.8) §8.2.3에서 소개하는 합집합-교집합 검정(Union-Intersection Test, UIT)교집합-합집합 검정(Intersection-Union Test, IUT)이다.

두 방법 모두 핵심 아이디어는 같다. 복잡한 가설을 단순한 하위 가설들로 분해하고, 하위 가설에 대한 검정을 조합하여 전체 검정을 구성한다. 차이는 귀무가설이 어떤 구조를 갖느냐에 있다.

방법 귀무가설 구조 기각 전략 검정 통계량
UIT 교집합 ( \(\bigcap\) ) 하나라도 기각되면 전체 기각 \(\sup_\gamma T_\gamma(\mathbf{x})\)
IUT 합집합 ( \(\bigcup\) ) 모두 기각될 때만 전체 기각 \(\inf_\gamma T_\gamma(\mathbf{x})\)

이 구조는 집합론의 드모르간 법칙과 직결된다.


2 합집합-교집합 검정 (UIT)

2.1 직관: “하나라도 무너지면 전체가 무너진다”

귀무가설이 여러 조건의 교집합으로 표현될 때 UIT를 사용한다.

\[H_0: \theta \in \bigcap_{\gamma \in \Gamma} \Theta_\gamma\]

\(H_0\) 가 참이려면 모든 \(\gamma\) 에 대해 \(\theta \in \Theta_\gamma\) 여야 한다. 따라서 어느 하나라도 \(\theta \notin \Theta_\gamma\) 임이 확인되면, 즉 하위 귀무가설 \(H_{0\gamma}\) 가 기각되면, 전체 \(H_0\) 도 기각한다.

비유: 제품이 “강도도 기준 이상이고, 내열성도 기준 이상이고, 방수도 기준 이상이어야 한다”는 요구를 만족해야 한다고 하자. 강도 검사에서 실패하면 나머지를 볼 필요 없이 전체 요구가 충족되지 않는다. 이것이 UIT의 논리다.

2.2 기각 영역 구성

각 하위 문제 \(H_{0\gamma}: \theta \in \Theta_\gamma\) 에 대해 기각 영역 \(\{\mathbf{x}: T_\gamma(\mathbf{x}) \in R_\gamma\}\) 가 주어진다고 하자. UIT의 기각 영역은 이들의 합집합이다.

\[\text{기각 영역 (UIT)} = \bigcup_{\gamma \in \Gamma} \{\mathbf{x}: T_\gamma(\mathbf{x}) \in R_\gamma\} \tag{8.2.4}\]

단순화: 각 하위 검정의 기각 영역이 \(\{T_\gamma(\mathbf{x}) > c\}\) (임계값 \(c\)\(\gamma\) 에 무관)라면,

\[\bigcup_{\gamma \in \Gamma} \{T_\gamma(\mathbf{x}) > c\} = \left\{\sup_{\gamma \in \Gamma} T_\gamma(\mathbf{x}) > c\right\}\]

따라서 UIT의 검정 통계량은 \(T(\mathbf{x}) = \sup_\gamma T_\gamma(\mathbf{x})\) 이다.

왜 sup(최솟값이 아닌 최댓값)인가

합집합( \(\cup\) )으로 연결된 기각 영역에서 “하나라도 기각 영역에 들어오면” 기각하므로, 개별 검정 통계량 중 최댓값이 임계값을 넘으면 전체가 기각된다. 최댓값이 임계값을 넘지 못하면 모든 하위 검정에서 기각 실패 → \(H_0\) 채택.

2.3 예시: 정규분포 양측 t 검정 (Example 8.2.8)

\(X_1, \ldots, X_n \sim N(\mu, \sigma^2)\) 에서 \(H_0: \mu = \mu_0\) vs \(H_1: \mu \neq \mu_0\) 를 검정한다.

\(H_0: \mu = \mu_0\) 를 두 하위 가설의 교집합으로 분해한다.

\[H_0: \{\mu \leq \mu_0\} \cap \{\mu \geq \mu_0\}\]

각각에 대한 단측 LRT는:

  • \(H_{0L}: \mu \leq \mu_0\) vs \(H_{1L}: \mu > \mu_0\) → 기각 영역: \(\frac{\bar{X} - \mu_0}{S/\sqrt{n}} \geq t_L\)
  • \(H_{0U}: \mu \geq \mu_0\) vs \(H_{1U}: \mu < \mu_0\) → 기각 영역: \(\frac{\bar{X} - \mu_0}{S/\sqrt{n}} \leq t_U\)

UIT는 둘 중 하나라도 기각되면 전체를 기각한다:

\[\text{기각}: \frac{\bar{X} - \mu_0}{S/\sqrt{n}} \geq t_L \quad \text{또는} \quad \frac{\bar{X} - \mu_0}{S/\sqrt{n}} \leq t_U\]

대칭 경우 \(t_L = -t_U \geq 0\) 이면:

\[\text{기각}: \frac{|\bar{X} - \mu_0|}{S/\sqrt{n}} \geq t_L\]

이 UIT는 곧 양측 t 검정이며, 동시에 이 문제의 LRT이기도 하다 (Exercise 8.38). 즉 양측 t 검정을 “두 단측 검정의 교집합 분해 → UIT”로 도출할 수 있다.

직관: \(\mu\)\(\mu_0\) 와 같으려면 “\(\mu \leq \mu_0\) 도 성립”하고 “\(\mu \geq \mu_0\) 도 성립”해야 한다. 이 중 하나라도 깨지면 \(\mu = \mu_0\) 는 거짓이다. UIT는 이 구조를 그대로 검정으로 변환한다.


3 교집합-합집합 검정 (IUT)

3.1 직관: “모두 통과해야 최종 합격”

귀무가설이 여러 조건의 합집합으로 표현될 때 IUT를 사용한다.

\[H_0: \theta \in \bigcup_{\gamma \in \Gamma} \Theta_\gamma \tag{8.2.5}\]

\(H_0\) 가 거짓이려면 모든 \(\gamma\) 에 대해 \(\theta \notin \Theta_\gamma\) 여야 한다. 따라서 \(H_0\) 를 기각하려면 모든 하위 귀무가설 \(H_{0\gamma}\) 를 기각해야 한다. 하나라도 기각 실패하면 전체 \(H_0\) 를 기각할 수 없다.

비유: 어떤 약의 효과가 “부작용이 크거나, 효과가 약하거나” 하면 \(H_0\) (불합격)가 참이다. 반대로 “부작용도 작고, 효과도 충분한” 증거가 모두 확인될 때만 \(H_0\) 를 기각하고 약을 승인한다. 이것이 IUT의 논리다.

3.2 기각 영역 구성

IUT의 기각 영역은 하위 검정 기각 영역들의 교집합이다.

\[\text{기각 영역 (IUT)} = \bigcap_{\gamma \in \Gamma} \{\mathbf{x}: T_\gamma(\mathbf{x}) \in R_\gamma\} \tag{8.2.6}\]

단순화: 기각 영역이 모두 \(\{T_\gamma(\mathbf{x}) \geq c\}\) 형태이면,

\[\bigcap_{\gamma \in \Gamma} \{T_\gamma(\mathbf{x}) \geq c\} = \left\{\inf_{\gamma \in \Gamma} T_\gamma(\mathbf{x}) \geq c\right\}\]

따라서 IUT의 검정 통계량은 \(T(\mathbf{x}) = \inf_\gamma T_\gamma(\mathbf{x})\) 이다. 가장 약한 증거가 임계값을 넘을 때 전체를 기각한다.

왜 inf(최솟값)인가

교집합( \(\cap\) )으로 연결된 기각 영역에서 “모두 기각 영역에 들어와야” 기각하므로, 개별 통계량 중 최솟값이 임계값을 넘으면 모두가 넘는다. 최솟값이 임계값에 미달하면 적어도 하나가 기각 실패 → \(H_0\) 채택.

3.3 예시: 품질 검수 (Acceptance Sampling, Example 8.2.9)

천 소재가 두 가지 기준을 모두 만족해야 합격으로 판정한다.

  • \(\theta_1\): 평균 인장 강도 (기준: \(> 50\) 파운드)
  • \(\theta_2\): 난연성 통과 확률 (기준: \(> 0.95\))

가설 구조:

\[H_0: \{\theta_1 \leq 50 \text{ or } \theta_2 \leq 0.95\} \quad \text{vs} \quad H_1: \{\theta_1 > 50 \text{ and } \theta_2 > 0.95\}\]

\(H_0\) (불합격)은 적어도 하나가 기준 미달인 경우의 합집합이다. 제품이 “좋다(\(H_1\))”고 판정하려면 두 기준을 동시에 통과해야 한다.

하위 검정별 기각 영역:

  • \(H_{01}: \theta_1 \leq 50\)\(\frac{\bar{X} - 50}{S/\sqrt{n}} > t\) 이면 기각
  • \(H_{02}: \theta_2 \leq 0.95\)\(\sum_{i=1}^m Y_i > b\) 이면 기각

IUT 기각 영역 (전체 합격 판정):

\[\left\{(\mathbf{x}, \mathbf{y}): \frac{\bar{x} - 50}{s/\sqrt{n}} > t \quad \text{and} \quad \sum_{i=1}^m y_i > b\right\}\]

두 조건을 모두 통과할 때만 제품을 합격으로 판정한다. 강도 검사는 통과했지만 난연성이 미달이면 불합격이다.

직관: 불합격의 이유가 여러 가지 중 하나라도 해당하면 충분하지만(\(H_0\)의 합집합 구조), 합격을 판정하기 위해서는 모든 불합격 사유를 동시에 배제해야 한다(IUT의 교집합 기각).


4 크기(Size) 보정

UIT와 IUT의 크기를 정확히 계산하기 어려운 경우가 많다. 이 때 상한(upper bound) 을 이용하여 보수적으로 level \(\alpha\) 검정을 구성한다.

4.1 UIT의 크기 상한 (Theorem 8.3.21)

\(\Theta_0 = \bigcap_{\gamma \in \Gamma} \Theta_\gamma\) 에서 각 하위 LRT 통계량을 \(\lambda_\gamma(\mathbf{x})\) 라 하고 \(T(\mathbf{x}) = \inf_\gamma \lambda_\gamma(\mathbf{x})\) 로 정의된 UIT를 고려하자.

Theorem 8.3.21 (Casella & Berger)

\(T(\mathbf{x}) \geq \lambda(\mathbf{x})\) 가 모든 \(\mathbf{x}\) 에서 성립하고, 따라서:

  1. \(T(\mathbf{x}) \geq \lambda(\mathbf{x})\) (UIT 통계량이 전체 LRT 통계량보다 항상 크거나 같다)

  2. \(\beta_T(\theta) \leq \beta_\lambda(\theta)\) for all \(\theta \in \Theta\) (UIT의 검정력이 전체 LRT보다 낮다)

  3. LRT가 level \(\alpha\) 검정이면 UIT도 level \(\alpha\) 검정이다

왜 UIT가 LRT보다 검정력이 낮은가?

\(\lambda_\gamma(\mathbf{x})\)\(\Theta_\gamma\) 에서 최대화하고, \(\lambda(\mathbf{x})\) 는 더 큰 집합 \(\Theta_0 = \bigcap_\gamma \Theta_\gamma \subset \Theta_\gamma\) 에서 최대화하므로 \(\lambda_\gamma \geq \lambda\) 이다. 따라서 \(T(\mathbf{x}) = \inf_\gamma \lambda_\gamma \geq \lambda\), 즉 UIT는 전체 LRT보다 “덜 극단적”인 통계량을 사용하게 된다. 기각 영역이 LRT보다 좁아지므로 검정력이 낮아진다.

그렇다면 왜 UIT를 사용하는가?

  1. 낮은 Type I Error: \(H_0\) 내에서 UIT의 오류 확률이 LRT보다 작다
  2. 진단 가능성: \(H_0\) 가 기각될 때 어떤 하위 가설 \(H_{0\gamma}\) 때문인지 알 수 있어 추가 분석이 가능하다

예시: 예제 8.3.22에서 정규분포 양측 t 검정은 UIT이면서 동시에 LRT이다. 이 경우 \(T(\mathbf{x}) = \lambda(\mathbf{x})\) 로 검정력 손실 없이 UIT의 장점을 얻는다.

4.2 UIT 크기 결정: 정규분포 양측 검정 (Example 8.3.8)

\(H_0: \mu = \mu_0\) 에서 검정 통계량 \((\bar{X} - \mu_0)/(S/\sqrt{n}) \sim t_{n-1}\) 이므로, size \(\alpha\) UIT는 \(t_U = t_{n-1, 1-\alpha_1}\), \(t_L = t_{n-1, \alpha_2}\) 로 설정하되 \(\alpha_1 + \alpha_2 = \alpha\) 를 만족하면 된다. 표준 선택은 \(t_L = -t_U = t_{n-1, \alpha/2}\) 이다.

4.3 IUT의 크기 상한 (Theorem 8.3.23)

Theorem 8.3.23 (Casella & Berger)

각 하위 검정 \(H_{0\gamma}\) 의 크기를 \(\alpha_\gamma\) 라 하면, IUT (기각 영역 \(R = \bigcap_\gamma R_\gamma\))의 크기는

\[\text{size}(\text{IUT}) \leq \sup_{\gamma \in \Gamma} \alpha_\gamma\]

따라서 각 하위 검정이 level \(\alpha\) 이면 IUT도 level \(\alpha\) 검정이다.

증명 직관: 임의의 \(\theta \in \Theta_0\) 에 대해 \(\theta \in \Theta_\gamma\) 인 어떤 \(\gamma\) 가 존재한다. 이 때

\[P_\theta(X \in R) \leq P_\theta(X \in R_\gamma) \leq \alpha_\gamma \leq \alpha\]

교집합 기각 영역 \(R\) 은 각 \(R_\gamma\) 보다 좁으므로 Type I Error가 더 작다.

핵심: IUT는 각 하위 검정의 크기를 개별 제어하면 자동으로 전체가 level \(\alpha\) 가 된다. Bonferroni 보정 없이도 가능하다.

보수성(Conservativeness): IUT의 실제 크기는 \(\alpha\) 보다 훨씬 작을 수 있다. IUT가 “지나치게 엄격한” 검정이 될 수 있다는 의미다.

4.4 IUT의 정확한 크기 (Theorem 8.3.24)

보수적이지 않고 크기가 정확히 \(\alpha\) 인 조건이 존재한다.

Theorem 8.3.24

\(H_0: \theta \in \bigcup_{j=1}^k \Theta_j\) 에서 각 \(R_j\) 가 level \(\alpha\) 검정이라 하자. 어떤 \(i\) 에 대해 파라미터 수열 \(\theta_l \in \Theta_i\) 가 존재하여

  1. \(\lim_{l \to \infty} P_{\theta_l}(X \in R_i) = \alpha\)
  2. \(j \neq i\) 인 모든 \(j\) 에 대해 \(\lim_{l \to \infty} P_{\theta_l}(X \in R_j) = 1\)

이면, IUT (기각 영역 \(R = \bigcap_{j=1}^k R_j\))의 크기는 정확히 \(\alpha\) 이다.

직관: 조건 (i)는 경계 \(\Theta_i\) 에서 하위 검정의 Type I Error가 \(\alpha\) 에 수렴함을 의미하고, 조건 (ii)는 나머지 하위 검정들이 이 경계에서 검정력이 1로 수렴함을 의미한다. 이 경우 병목(bottleneck)이 되는 검정 \(i\) 가 IUT의 크기를 결정한다.

품질 검수 예제 적용: \(n = m = 58\), \(t = 1.672\), \(b = 57\) 로 설정하면 각 하위 검정의 크기 \(\approx 0.05\). 파라미터 수열 \(\theta_l = (\theta_{1l}, 0.95)\) 에서 \(\theta_{1l} \to \infty\) 로 보내면:

  • \(P_{\theta_l}(X \in R_2) = 0.05\) (상수, \(\theta_2 = 0.95\) 로 고정)
  • \(P_{\theta_l}(X \in R_1) \to 1\) (\(\theta_{1l} \to \infty\))

따라서 IUT의 크기 = 0.05 이다. 병목은 난연성 검정이다.


5 UIT와 IUT 비교

항목 UIT IUT
\(H_0\) 구조 교집합 \(\bigcap_\gamma \Theta_\gamma\) 합집합 \(\bigcup_\gamma \Theta_\gamma\)
기각 영역 합집합 \(\bigcup_\gamma R_\gamma\) 교집합 \(\bigcap_\gamma R_\gamma\)
기각 조건 하나라도 기각 모두 기각
검정 통계량 \(\sup_\gamma T_\gamma\) \(\inf_\gamma T_\gamma\)
Size 상한 LRT와 동일 (LRT 기반 시) \(\sup_\gamma \alpha_\gamma\)
검정력 vs LRT \(\leq\) LRT (보통 낮음)
보수성 일반적으로 덜 보수적 보수적일 수 있음
적합 상황 동시 기각이 필요한 복합 귀무 동시 입증이 필요한 합성 귀무

5.1 실무적 선택 기준

  • \(H_0\) 가 “A이면서 B이면서 C”인 경우 → UIT (하나라도 깨지면 기각)
  • \(H_0\) 가 “A이거나 B이거나 C”인 경우 → IUT (모두 깨져야 기각)
  • 임상시험 비열등성(non-inferiority) 검정: “부작용도 안전하고, 효과도 충분한” → IUT
  • 다변량 평균 검정: “모든 성분이 \(\mu_0\)” → 분해 후 UIT
  • ANOVA F 검정: UIT의 일종 (모든 대비에 대한 t 검정의 UIT로 유도 가능)

6 코드 구현

6.1 Python

import numpy as np
from scipy import stats


def union_intersection_test(
    data: np.ndarray,
    mu0: float = 0.0,
    alpha: float = 0.05,
) -> dict:
    """
    정규분포 UIT 예시: H0: mu = mu0 vs H1: mu != mu0
    두 단측 t 검정의 UIT = 양측 t 검정
    """
    n = len(data)
    x_bar = np.mean(data)
    s = np.std(data, ddof=1)
    t_stat = (x_bar - mu0) / (s / np.sqrt(n))

    # 하위 검정 1: H0L: mu <= mu0 vs H1L: mu > mu0
    t_L = stats.t.ppf(1 - alpha / 2, df=n - 1)
    reject_H0L = t_stat >= t_L

    # 하위 검정 2: H0U: mu >= mu0 vs H1U: mu < mu0
    t_U = -stats.t.ppf(1 - alpha / 2, df=n - 1)
    reject_H0U = t_stat <= t_U

    # UIT: 하나라도 기각되면 전체 기각
    reject_overall = reject_H0L or reject_H0U
    p_value_two_sided = 2 * stats.t.sf(abs(t_stat), df=n - 1)

    return {
        "t_statistic": t_stat,
        "reject_H0L (mu <= mu0)": reject_H0L,
        "reject_H0U (mu >= mu0)": reject_H0U,
        "UIT reject H0": reject_overall,
        "p_value (양측)": p_value_two_sided,
        "critical_value (±)": t_L,
    }


def intersection_union_test(
    strength_data: np.ndarray,
    flammability_data: np.ndarray,
    strength_threshold: float = 50.0,
    flame_threshold: float = 0.95,
    alpha: float = 0.05,
) -> dict:
    """
    IUT 예시: 인장 강도 AND 난연성 동시 검정 (Acceptance Sampling)
    H0: {theta1 <= 50 or theta2 <= 0.95}
    H1: {theta1 > 50 and theta2 > 0.95}
    모두 통과해야 합격(H0 기각)
    """
    # 하위 검정 1: 인장 강도 (단측 t 검정)
    n = len(strength_data)
    x_bar = np.mean(strength_data)
    s = np.std(strength_data, ddof=1)
    t_stat = (x_bar - strength_threshold) / (s / np.sqrt(n))
    t_crit = stats.t.ppf(1 - alpha, df=n - 1)
    reject_strength = t_stat > t_crit
    p_strength = stats.t.sf(t_stat, df=n - 1)

    # 하위 검정 2: 난연성 (이항 검정)
    m = len(flammability_data)
    successes = int(np.sum(flammability_data))
    # 귀무가설: theta2 <= 0.95 → 이항 검정 (우측)
    p_flame = stats.binom_test(successes, m, flame_threshold, alternative="greater")
    reject_flame = p_flame < alpha

    # IUT: 모두 기각해야 전체 기각
    reject_overall = reject_strength and reject_flame

    return {
        "인장 강도 t통계량": t_stat,
        "인장 강도 p값": p_strength,
        "인장 강도 기각": reject_strength,
        "난연성 성공 횟수": successes,
        "난연성 p값": p_flame,
        "난연성 기각": reject_flame,
        "IUT 합격 판정 (H0 기각)": reject_overall,
    }


# 시뮬레이션 예시
np.random.seed(42)

print("=== UIT 예시: 양측 t 검정 ===")
data = np.random.normal(loc=2.0, scale=1.0, size=30)
result_uit = union_intersection_test(data, mu0=0.0, alpha=0.05)
for k, v in result_uit.items():
    print(f"  {k}: {v:.4f}" if isinstance(v, float) else f"  {k}: {v}")

print("\n=== IUT 예시: 품질 검수 ===")
strength = np.random.normal(loc=52, scale=5, size=20)   # 기준 50, mu=52
flame = np.random.binomial(1, 0.97, size=30)            # 기준 0.95, p=0.97
result_iut = intersection_union_test(strength, flame)
for k, v in result_iut.items():
    print(f"  {k}: {v:.4f}" if isinstance(v, float) else f"  {k}: {v}")

6.2 Python: 크기 시뮬레이션 (보수성 확인)

import numpy as np
from scipy import stats


def simulate_iut_size(
    n_sim: int = 10000,
    n: int = 30,
    m: int = 30,
    alpha: float = 0.05,
    seed: int = 42,
) -> dict:
    """
    H0 경계에서 IUT의 실제 Type I Error를 시뮬레이션으로 추정
    H0: {mu <= 50 or p <= 0.95}
    경계점 (50, 0.95): H0 내에서 Type I Error가 최대화되는 지점
    """
    rng = np.random.default_rng(seed)
    rejections = 0
    t_crit = stats.t.ppf(1 - alpha, df=n - 1)

    for _ in range(n_sim):
        # 경계점에서 생성
        strength = rng.normal(50.0, 5.0, n)
        flame = rng.binomial(1, 0.95, m)

        # 하위 검정 1: 인장 강도
        t_stat = (np.mean(strength) - 50.0) / (np.std(strength, ddof=1) / np.sqrt(n))
        reject_s = t_stat > t_crit

        # 하위 검정 2: 난연성
        p_val_f = stats.binom_test(int(np.sum(flame)), m, 0.95, alternative="greater")
        reject_f = p_val_f < alpha

        if reject_s and reject_f:
            rejections += 1

    empirical_size = rejections / n_sim
    return {
        "시뮬레이션 횟수": n_sim,
        "실제 Type I Error (IUT)": empirical_size,
        "명목 수준 alpha": alpha,
        "보수성 비율": empirical_size / alpha,
    }


result = simulate_iut_size()
for k, v in result.items():
    print(f"  {k}: {v:.4f}" if isinstance(v, float) else f"  {k}: {v}")
# 예상: 실제 Type I Error << 0.05 → IUT의 보수성 확인

6.3 R

library(stats)

# UIT 예시: 정규분포 양측 t 검정
uit_normal <- function(data, mu0 = 0, alpha = 0.05) {
  n <- length(data)
  t_stat <- (mean(data) - mu0) / (sd(data) / sqrt(n))
  t_crit <- qt(1 - alpha / 2, df = n - 1)

  cat("=== UIT: 양측 t 검정 ===\n")
  cat(sprintf("  t 통계량: %.4f\n", t_stat))
  cat(sprintf("  임계값 (±): %.4f\n", t_crit))
  cat(sprintf("  H0L (mu <= mu0) 기각: %s\n", t_stat >= t_crit))
  cat(sprintf("  H0U (mu >= mu0) 기각: %s\n", t_stat <= -t_crit))
  cat(sprintf("  UIT H0 기각: %s\n", abs(t_stat) >= t_crit))
  cat(sprintf("  p값 (양측): %.4f\n", 2 * pt(-abs(t_stat), df = n - 1)))
}

# IUT 예시: 품질 검수
iut_acceptance <- function(strength, flame_pass, s_thresh = 50, f_thresh = 0.95,
                           alpha = 0.05) {
  n <- length(strength)
  m <- length(flame_pass)

  # 인장 강도 단측 t 검정
  t_stat <- (mean(strength) - s_thresh) / (sd(strength) / sqrt(n))
  t_crit <- qt(1 - alpha, df = n - 1)
  reject_s <- t_stat > t_crit
  p_s <- pt(t_stat, df = n - 1, lower.tail = FALSE)

  # 난연성 이항 검정
  x_flame <- sum(flame_pass)
  p_f <- binom.test(x_flame, m, f_thresh, alternative = "greater")$p.value
  reject_f <- p_f < alpha

  cat("=== IUT: 품질 검수 ===\n")
  cat(sprintf("  인장 강도 t통계량: %.4f, p값: %.4f, 기각: %s\n",
              t_stat, p_s, reject_s))
  cat(sprintf("  난연성 성공: %d/%d, p값: %.4f, 기각: %s\n",
              x_flame, m, p_f, reject_f))
  cat(sprintf("  IUT 합격 판정 (H0 기각): %s\n", reject_s & reject_f))
}

# UIT 실행
set.seed(42)
data <- rnorm(30, mean = 2, sd = 1)
uit_normal(data, mu0 = 0)

# IUT 실행
strength <- rnorm(20, mean = 52, sd = 5)
flame <- rbinom(30, 1, 0.97)
iut_acceptance(strength, flame)

7 관련 주제

(Casella & Berger, 2002, Ch.8)

Subscribe

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