1 왜 카이제곱 분포인가
카이제곱 분포는 “표준정규 확률변수의 제곱합” 의 분포이다. 이 단순한 정의에서 통계적 추론 전반에 걸쳐 핵심적인 역할을 하는 분포가 탄생한다.
카이제곱 분포가 중요한 세 가지 이유:
- 표본분산의 분포: 정규 모집단 \(N(\mu, \sigma^2)\) 에서 표본을 뽑을 때, \((n-1)S^2/\sigma^2 \sim \chi^2(n-1)\) 이다. 이 관계가 없으면 \(\sigma^2\) 에 대한 추론(구간추정, 가설검정)이 불가능하다.
- 가설검정의 도구: 분류형 데이터의 적합도 검정, 분할표 독립성 검정, 우도비 검정의 점근 분포 — 모두 카이제곱 분포를 사용한다.
- t, F 분포의 재료: Student \(t\) 분포와 Snedecor \(F\) 분포는 정규 확률변수와 카이제곱 확률변수의 조합으로 정의된다.
2 정의
자유도(degrees of freedom) \(p > 0\) 인 카이제곱 분포 \(X \sim \chi^2(p)\) 의 PDF:
\[ f(x \mid p) = \frac{1}{\Gamma(p/2)\, 2^{p/2}} x^{(p/2)-1} e^{-x/2}, \quad x > 0 \]
이는 감마 분포의 특수 케이스 \(\text{Gamma}(\alpha = p/2,\; \beta = 2)\) 이다.
\[ \chi^2(p) = \text{Gamma}\!\left(\frac{p}{2},\; 2\right) \]
표준정규 \(Z \sim N(0,1)\) 에 대해 \(Z^2\) 의 분포를 구하면 \(f(x) = \frac{1}{\sqrt{2\pi}} x^{-1/2} e^{-x/2}\) 로, 이를 정규화하면 \(\Gamma(1/2) = \sqrt{\pi}\) 를 사용하여 \(\text{Gamma}(1/2, 2)\) = \(\chi^2(1)\) 이 된다. \(p\) 개의 독립 표준정규 제곱합은 가산성에 의해 \(\chi^2(p)\) 가 된다. 따라서 \(\beta = 2\) 는 표준정규의 제곱에서 자연스럽게 등장하는 척도이다.
3 평균, 분산, MGF
감마 분포 공식 \((\alpha = p/2,\; \beta = 2)\) 을 직접 대입한다:
| 성질 | 값 | 유도 |
|---|---|---|
| \(E[X]\) | \(p\) | \(\alpha\beta = (p/2) \cdot 2\) |
| \(E[X^2]\) | \(p(p+2)\) | \(\alpha(\alpha+1)\beta^2 = (p/2)(p/2+1) \cdot 4\) |
| \(\text{Var}(X)\) | \(2p\) | \(\alpha\beta^2 = (p/2) \cdot 4\) |
| 왜도 | \(\sqrt{8/p}\) | \(2\sqrt{2/\alpha}\) |
| 첨도(초과) | \(12/p\) | \(6/\alpha\) |
| MGF \(M_X(t)\) | \((1-2t)^{-p/2}\), \(t < 1/2\) | \((1-\beta t)^{-\alpha}\big|_{\alpha=p/2,\, \beta=2}\) |
해석: 자유도 \(p\) 가 커질수록 평균과 분산이 함께 커지고, 분포는 대칭에 가까워진다. \(p \to \infty\) 이면 정규 분포에 수렴한다(CLT).
4 핵심 성질 1 — 표준정규의 제곱: \(Z^2 \sim \chi^2(1)\)
\(Z \sim N(0, 1)\) 이면 \(Z^2 \sim \chi^2(1)\) 이다.
증명 (변수 변환법):
\(Y = Z^2\) 으로 정의한다. \(g(z) = z^2\) 는 \((-\infty, 0)\) 에서 감소, \((0, \infty)\) 에서 증가한다. 두 구간 각각에 변수변환 정리를 적용하면:
\[ f_Y(y) = \frac{1}{\sqrt{2\pi}} e^{-(-\sqrt{y})^2/2} \cdot \frac{1}{2\sqrt{y}} + \frac{1}{\sqrt{2\pi}} e^{-(\sqrt{y})^2/2} \cdot \frac{1}{2\sqrt{y}} \]
\[ = \frac{1}{\sqrt{2\pi}} \frac{1}{\sqrt{y}} e^{-y/2} = \frac{1}{\Gamma(1/2)\, 2^{1/2}} y^{(1/2)-1} e^{-y/2}, \quad y > 0 \]
이는 \(\text{Gamma}(1/2, 2) = \chi^2(1)\) 의 PDF이다. \(\square\)
의미: 표준정규 하나를 제곱하면 자유도 1인 카이제곱이 된다. 정규-카이제곱 관계의 출발점이다.
\(Z \sim N(0,1)\) 의 밀도는 \(-3\) 에서 \(+3\) 사이에 집중되어 있다. \(Z^2\) 은 이 값들을 \([0, 9]\) 구간으로 “접어 올린다”.
- \(Z = +0.5\) 와 \(Z = -0.5\) 는 모두 \(Z^2 = 0.25\) 로 매핑된다 → 작은 값의 확률이 두 배로 집중된다.
- \(Z = \pm 3\) 은 \(Z^2 = 9\) 로 매핑된다 → 큰 값은 희박하다.
- “양쪽에서 접어 올린다”는 구조가 \(f_Y(y)\) 에서 야코비안 \(\frac{1}{2\sqrt{y}}\) 가 나오는 이유이다 — 두 역함수 \(\pm\sqrt{y}\) 의 기여를 합산한다.
결과적으로 \(\chi^2(1)\) 의 PDF는 \(y = 0\) 근방에서 발산하고 꼬리가 오른쪽으로 길게 늘어진다. 표준정규의 양쪽 꼬리가 합쳐져 오른쪽으로 쌓인 형태다.
5 핵심 성질 2 — 독립 카이제곱의 가산성
\(X_1, \ldots, X_n\) 이 독립이고 \(X_i \sim \chi^2(p_i)\) 이면:
\[ X_1 + X_2 + \cdots + X_n \sim \chi^2(p_1 + p_2 + \cdots + p_n) \]
독립 카이제곱 확률변수의 합은 자유도가 합산된 카이제곱이다.
증명 (MGF 방법):
\(X_i \sim \chi^2(p_i)\) 의 MGF는 \(M_{X_i}(t) = (1-2t)^{-p_i/2}\) 이다.
\(X_i\) 들이 독립이므로 합의 MGF는:
\[ M_{X_1+\cdots+X_n}(t) = \prod_{i=1}^n M_{X_i}(t) = \prod_{i=1}^n (1-2t)^{-p_i/2} = (1-2t)^{-(p_1+\cdots+p_n)/2} \]
이는 \(\chi^2(p_1 + \cdots + p_n)\) 의 MGF이다. MGF의 유일성에 의해 증명된다. \(\square\)
직관: \(p\) 개의 독립 표준정규 \(Z_1, \ldots, Z_p\) 의 제곱합 \(Z_1^2 + \cdots + Z_p^2 \sim \chi^2(p)\) 이다. 각각의 \(Z_i^2 \sim \chi^2(1)\) 이 독립이므로 가산성에 의해 자유도가 더해진다.
자유도 \(p\) 는 “독립적으로 변화할 수 있는 방향의 수”이다. \(Z_i^2\) 을 하나 추가할 때마다 새로운 독립 방향이 하나 더해지고 자유도가 1씩 증가한다.
MGF로 본 구조: \((1-2t)^{-p/2}\) 는 \((1-2t)^{-1/2}\) 를 \(p\) 번 곱한 것이다. 각 \(Z_i^2\) 의 MGF \((1-2t)^{-1/2}\) 가 독립성 때문에 단순히 곱해지고, 지수가 \(p\) 배가 된다.
가산성이 없으면: \(X \sim \chi^2(p)\), \(Y \sim \chi^2(q)\) 가 독립이어도 \(X + Y\) 의 분포를 합성곱(convolution)으로 매번 계산해야 한다. 가산성 덕분에 \(X + Y \sim \chi^2(p+q)\) 를 즉시 알 수 있다.
6 핵심 성질 3 — 표본분산의 분포
\(X_1, \ldots, X_n \overset{\text{iid}}{\sim} N(\mu, \sigma^2)\) 이고 \(\bar{X} = \frac{1}{n}\sum X_i\), \(S^2 = \frac{1}{n-1}\sum(X_i - \bar{X})^2\) 이면:
(a) \(\bar{X}\) 와 \(S^2\) 은 독립이다.
(b) \(\bar{X} \sim N(\mu,\; \sigma^2/n)\)
(c) \(\frac{(n-1)S^2}{\sigma^2} \sim \chi^2(n-1)\)
증명 개요 (귀납법, Casella & Berger, 2002, Ch.5.3):
독립성(a): 변환 \(Y_1 = \bar{X}\), \(Y_i = X_i - \bar{X}\) (\(i = 2, \ldots, n\)) 을 적용하면 결합 PDF가 \(Y_1\) 과 \((Y_2, \ldots, Y_n)\) 의 곱으로 인수분해된다. \(S^2\) 은 \(Y_2, \ldots, Y_n\) 의 함수이므로 \(\bar{X}\) 와 독립이다.
표본분산 분포(c): \(n = 2\) 부터 귀납법으로 증명한다.
기초: \(n = 2\) 일 때 \(S_2^2 = \frac{1}{2}(X_2 - X_1)^2\). \((X_2 - X_1)/\sqrt{2} \sim N(0,1)\) 이므로 성질 1에 의해 \(S_2^2 \sim \chi^2(1)\), 즉 \((2-1)S_2^2/\sigma^2 \sim \chi^2(1)\). ✓
귀납 가정: \((k-1)S_k^2/\sigma^2 \sim \chi^2(k-1)\).
귀납 단계: \(n = k+1\) 에서 다음 항등식이 성립한다 (Casella & Berger, 2002, 식 5.3.1):
\[ kS_{k+1}^2 = (k-1)S_k^2 + \frac{k}{k+1}(X_{k+1} - \bar{X}_k)^2 \]
- \((k-1)S_k^2/\sigma^2 \sim \chi^2(k-1)\) (귀납 가정)
- \(X_{k+1} - \bar{X}_k \sim N(0, \sigma^2(k+1)/k)\) 이므로 \(\frac{k}{k+1}(X_{k+1} - \bar{X}_k)^2/\sigma^2 \sim \chi^2(1)\)
- 두 항은 독립 → 가산성에 의해 \(kS_{k+1}^2/\sigma^2 \sim \chi^2(k)\)
따라서 \((n-1)S^2/\sigma^2 \sim \chi^2(n-1)\). \(\square\)
\(\sum_{i=1}^n (X_i - \bar{X}) = 0\) 이라는 선형 제약 때문이다. \(n\) 개의 편차 \((X_1 - \bar{X}), \ldots, (X_n - \bar{X})\) 는 이 제약에 의해 하나의 자유도를 잃는다. 따라서 자유롭게 움직일 수 있는 방향의 수는 \(n - 1\) 개이고, 이것이 카이제곱의 자유도가 된다.
7 Student’s \(t\) 와 Snedecor’s \(F\) — 파생 분포
카이제곱 분포에서 두 중요한 파생 분포가 정의된다 (Casella & Berger, 2002, Ch.5.3).
7.1 Student’s \(t\) 분포
\(U \sim N(0,1)\) 와 \(V \sim \chi^2(p)\) 가 독립이면:
\[ T = \frac{U}{\sqrt{V/p}} \sim t(p) \]
표본 적용: \(X_1, \ldots, X_n \overset{\text{iid}}{\sim} N(\mu, \sigma^2)\) 에서:
\[ \frac{\bar{X} - \mu}{S/\sqrt{n}} = \frac{(\bar{X} - \mu)/(\sigma/\sqrt{n})}{\sqrt{S^2/\sigma^2}} \sim t(n-1) \]
분자 \((\bar{X}-\mu)/(\sigma/\sqrt{n}) \sim N(0,1)\), 분모 \(\sqrt{(n-1)S^2/\sigma^2/(n-1)} = S/\sigma\) 이고 두 항이 독립이므로 \(t(n-1)\) 에 따른다. \(\sigma\) 를 모를 때 \(\mu\) 를 추론하는 데 \(t\) 분포가 사용되는 이유이다.
\(t\) 통계량은 “표준화된 오차를 데이터로 추정된 표준편차로 나눈 것”이다.
- 분자 \(\bar{X} - \mu\): 추정량의 오차. \(\sigma\) 를 알면 \((\bar{X}-\mu)/(\sigma/\sqrt{n}) \sim N(0,1)\) 이다.
- 분모 \(S/\sqrt{n}\): \(\sigma\) 를 모르므로 표본 표준편차 \(S\) 로 대체한다.
\(\sigma\) 를 알 때: 분모가 고정된 상수이므로 전체가 정규 분포를 따른다.
\(\sigma\) 를 모를 때: 분모도 랜덤 — 분모의 불확실성이 분포의 꼬리를 더 두껍게 만든다. 이것이 정규 분포보다 꼬리가 두꺼운 \(t\) 분포가 되는 이유이다.
자유도 \(n-1\) 이 커질수록 \(S \to \sigma\) 에 수렴하고, \(t(n-1) \to N(0,1)\) 에 수렴한다. \(n \ge 30\) 이면 실용적으로 정규에 가깝다.
7.2 Snedecor’s \(F\) 분포
\(U \sim \chi^2(p)\) 와 \(V \sim \chi^2(q)\) 가 독립이면:
\[ F = \frac{U/p}{V/q} \sim F(p, q) \]
표본 적용: 두 정규 모집단의 분산비 검정에 사용된다. \[ \frac{S_1^2/\sigma_1^2}{S_2^2/\sigma_2^2} = \frac{(n_1-1)S_1^2/\sigma_1^2/(n_1-1)}{(n_2-1)S_2^2/\sigma_2^2/(n_2-1)} \sim F(n_1-1, n_2-1) \]
\(F\) 통계량은 “두 카이제곱을 각각의 자유도로 정규화하여 비교한 것”이다.
- \(U/p\): 자유도 \(p\) 의 카이제곱을 자유도로 나눈 값. \(\chi^2(p)\) 의 평균이 \(p\) 이므로 \(U/p\) 의 기댓값은 1이다.
- \(V/q\): 역시 기댓값이 1.
- 두 모집단의 분산이 같으면(\(\sigma_1^2 = \sigma_2^2\)) 분자·분모가 같은 분포이므로 비율이 1 근방의 값을 가진다.
귀무가설 \(\sigma_1^2 = \sigma_2^2\) 하에서 \(F\) 통계량은 \(F(n_1-1, n_2-1)\) 을 따른다. \(F\) 가 1에서 크게 벗어날수록 두 모집단의 분산이 다르다는 증거가 된다.
\(t^2 \sim F(1, n-1)\) 이므로 \(t\) 검정과 \(F\) 검정은 단일 모집단에서 같은 결론을 준다.
8 카이제곱 검정 — 실무 응용
카이제곱 분포는 범주형 데이터 분석의 핵심 도구이다.
8.1 적합도 검정 (Goodness-of-Fit Test)
관측 빈도 \(O_i\) 와 이론적 기대 빈도 \(E_i\) 사이의 차이를 검정한다:
\[ \chi^2 = \sum_{i=1}^k \frac{(O_i - E_i)^2}{E_i} \overset{\text{approx}}{\sim} \chi^2(k-1) \]
\(n \to \infty\) 이면 이 통계량은 \(\chi^2(k-1)\) 에 수렴한다 (Pearson의 정리).
- \((O_i - E_i)^2\): 관측과 기대의 차이를 제곱한 것. 부호를 없애고 큰 차이를 강조한다.
- \(E_i\) 로 나누기: “기대 빈도 대비 상대적 오차”를 측정한다. 기대가 100일 때 차이 10과, 기대가 5일 때 차이 10은 심각성이 완전히 다르다.
- 합산: 모든 범주에 걸친 오차를 누적한다.
\(E_i\) 가 충분히 크면 \(Z_i = (O_i - E_i)/\sqrt{E_i} \approx N(0,1)\) 이고 \(Z_i^2 \approx \chi^2(1)\) 이다. \(k\) 개의 합이 \(\chi^2(k)\) 가 되어야 하지만, 주변합 제약 \(\sum O_i = \sum E_i\) 로 자유도가 1 감소하여 \(\chi^2(k-1)\) 이 된다.
예시: 주사위 600번 던져 각 면이 100번씩 나와야 하는데, 실제 관측이 다르면 \(\chi^2\) 로 균일분포 적합 여부를 검정한다.
8.2 독립성 검정 (Test of Independence)
\(r \times c\) 분할표에서 두 범주형 변수의 독립성 검정:
\[ \chi^2 = \sum_{i=1}^r \sum_{j=1}^c \frac{(O_{ij} - E_{ij})^2}{E_{ij}} \overset{\text{approx}}{\sim} \chi^2\bigl((r-1)(c-1)\bigr) \]
자유도: \((r-1)(c-1)\) — 주변합 제약에 의해 잃는 자유도.
\(r \times c\) 분할표에서 \(rc\) 개의 셀이 있지만, 모든 셀이 자유롭게 변할 수는 없다.
- 각 행의 합이 고정되면 마지막 열은 자동으로 결정된다 → 열 방향으로 \(c-1\) 개의 자유도
- 각 열의 합이 고정되면 마지막 행은 자동으로 결정된다 → 행 방향으로 \(r-1\) 개의 자유도
- 따라서 독립적으로 변할 수 있는 셀의 수: \((r-1)(c-1)\) 개
예: \(2 \times 3\) 표에서 자유도 = \((2-1)(3-1) = 2\). 처음 2개 셀만 자유롭게 채우면 나머지 4개는 주변합에 의해 자동 결정된다.
8.3 점근 우도비 검정 (Asymptotic LRT)
일반 모수 추정에서 우도비 통계량의 점근 분포 (Casella & Berger, 2002, Ch.10):
\[ -2\log\lambda(\mathbf{X}) = -2\log\frac{\sup_{\theta \in \Theta_0} L(\theta)}{\sup_{\theta \in \Theta} L(\theta)} \xrightarrow{d} \chi^2(q) \]
\(q\) 는 귀무가설 하에서의 자유도 감소량이다. 왈드 검정, 스코어 검정도 모두 점근적으로 \(\chi^2\) 분포를 따른다.
\(-2\log\lambda(\mathbf{X})\) 가 \(\chi^2(q)\) 에 수렴하는 직관:
- 로그우도 \(\ell(\theta)\) 를 MLE \(\hat{\theta}\) 주변에서 테일러 2차 전개하면 이차 형식(quadratic form)이 된다.
- 이 이차 형식은 정규 근사에 의해 (표준정규의 제곱합으로 이루어지므로) 카이제곱 분포를 따른다.
- 귀무가설이 \(q\) 개의 등호 제약을 가하면 MLE 공간이 \(q\) 차원만큼 줄어들고, 이 축소량이 자유도가 된다.
\(q\) 가 클수록 귀무가설이 강한 제약을 가한다. 같은 데이터에서 제약된 MLE와 비제약 MLE의 우도 차이가 클수록 \(-2\log\lambda\) 가 커지고 귀무가설을 기각한다.
9 지수족 표현
\(\chi^2(p)\) 는 지수족(exponential family)에 속한다:
\[ f(x \mid p) = \underbrace{x^{(p/2)-1}}_{T(x) = \log x,\; \eta = p/2 - 1} \cdot \exp\!\left(-\frac{x}{2}\right) \cdot \frac{1}{\Gamma(p/2)\, 2^{p/2}} \]
자연 모수 \(\eta = p/2 - 1\), 충분통계량 \(T(x) = \log x + x\) 형태이다. 지수족이므로: - MLE가 완비 충분통계량의 함수 → UMVUE 존재 가능 - 정규 조건 하에서 일치성·점근 정규성 자동 보장
10 코드 예시
10.1 Step 1: 순수 Python — 정규 제곱합이 카이제곱임을 직접 검증
import math
import random
import statistics
random.seed(42)
def chi2_pdf(x, p):
"""카이제곱 PDF — 감마(p/2, 2) 공식 직접 계산"""
if x <= 0:
return 0.0
alpha = p / 2
beta = 2
log_val = (alpha - 1) * math.log(x) - x / beta \
- math.lgamma(alpha) - alpha * math.log(beta)
return math.exp(log_val)
# ── 검증 1: Z^2 ~ chi^2(1) ──────────────────────────────────────
n_sim = 200_000
p = 1
zz = [random.gauss(0, 1)**2 for _ in range(n_sim)]
mean_th = p # 이론 평균
var_th = 2 * p # 이론 분산
print(f"=== Z^2 ~ chi^2(p={p}) 검증 ===")
print(f"이론 평균={mean_th:.4f}, 분산={var_th:.4f}")
print(f"시뮬 평균={statistics.mean(zz):.4f}, 분산={statistics.variance(zz):.4f}")
# ── 검증 2: p개 독립 Z^2 합 ~ chi^2(p) ──────────────────────────
for p in [3, 5, 10]:
samples = [sum(random.gauss(0,1)**2 for _ in range(p)) for _ in range(n_sim)]
print(f"\n=== sum(Z_i^2, i=1..{p}) ~ chi^2({p}) ===")
print(f"이론 평균={p}, 분산={2*p}")
print(f"시뮬 평균={statistics.mean(samples):.4f}, 분산={statistics.variance(samples):.4f}")=== Z^2 ~ chi^2(p=1) 검증 ===
이론 평균=1.0000, 분산=2.0000
시뮬 평균=1.0002, 분산=2.0017
=== sum(Z_i^2, i=1..3) ~ chi^2(3) ===
이론 평균=3, 분산=6
시뮬 평균=3.0005, 분산=5.9984
=== sum(Z_i^2, i=1..5) ~ chi^2(5) ===
이론 평균=5, 분산=10
시뮬 평균=4.9978, 분산=9.9893
=== sum(Z_i^2, i=1..10) ~ chi^2(10) ===
이론 평균=10, 분산=20
시뮬 평균=9.9986, 분산=19.9977
10.2 Step 2: scipy.stats — 표본분산 분포 및 카이제곱 검정
import numpy as np
from scipy import stats
np.random.seed(0)
N = 100_000
# ── 검증: (n-1)S^2/sigma^2 ~ chi^2(n-1) ─────────────────────────
mu, sigma = 5.0, 3.0
n = 20
pivot_vals = []
for _ in range(N):
samp = np.random.normal(mu, sigma, size=n)
s2 = np.var(samp, ddof=1)
pivot = (n - 1) * s2 / sigma**2
pivot_vals.append(pivot)
pivot_vals = np.array(pivot_vals)
# KS test: 시뮬레이션 vs chi^2(n-1)
ks_stat, p_val = stats.kstest(pivot_vals, 'chi2', args=(n-1,))
print(f"=== (n-1)S^2/sigma^2 ~ chi^2({n-1}) 검증 ===")
print(f"이론 평균={n-1}, 분산={2*(n-1)}")
print(f"시뮬 평균={pivot_vals.mean():.4f}, 분산={pivot_vals.var():.4f}")
print(f"KS 검정: stat={ks_stat:.4f}, p-value={p_val:.4f}",
"→ chi^2 분포 확인됨 (p>0.05)" if p_val > 0.05 else "→ FAIL")
# ── 적합도 검정 예시: 주사위 600번 ──────────────────────────────
print(f"\n=== 주사위 적합도 검정 ===")
observed = np.array([95, 102, 98, 105, 97, 103]) # 관측
expected = np.full(6, 100.0) # 균일 기대
chi2_stat = np.sum((observed - expected)**2 / expected)
p_val_fit = 1 - stats.chi2.cdf(chi2_stat, df=5)
print(f"관측: {observed}")
print(f"chi^2 통계량 = {chi2_stat:.4f}, df=5, p-value={p_val_fit:.4f}")
print(f"결론: {'귀무가설 채택 (균일분포 지지)' if p_val_fit > 0.05 else '귀무가설 기각'}")
# scipy 검정 (결과 동일해야 함)
chi2_sp, p_sp = stats.chisquare(observed, expected)
print(f"scipy 결과: chi^2={chi2_sp:.4f}, p={p_sp:.4f}")
# ── 독립성 검정 예시: 성별 x 선호 음료 ─────────────────────────
print(f"\n=== 성별 × 선호 음료 독립성 검정 ===")
# 관측 분할표 (2×3): 남성/여성 × 커피/차/주스
contingency = np.array([[60, 30, 10],
[40, 50, 20]])
chi2_ind, p_ind, dof, expected_ind = stats.chi2_contingency(contingency)
print(f"관측표:\n{contingency}")
print(f"기대빈도:\n{np.round(expected_ind, 2)}")
print(f"chi^2={chi2_ind:.4f}, df={dof}, p-value={p_ind:.4f}")
print(f"결론: {'독립' if p_ind > 0.05 else '독립 아님 (성별과 선호 음료 연관)'}")=== (n-1)S^2/sigma^2 ~ chi^2(19) 검증 ===
이론 평균=19, 분산=38
시뮬 평균=18.9984, 분산=37.9910
KS 검정: stat=0.0024, p-value=0.6731 → chi^2 분포 확인됨 (p>0.05)
=== 주사위 적합도 검정 ===
관측: [ 95 102 98 105 97 103]
chi^2 통계량 = 1.1600, df=5, p-value=0.9478
결론: 귀무가설 채택 (균일분포 지지)
scipy 결과: chi^2=1.1600, p=0.9478
=== 성별 × 선호 음료 독립성 검정 ===
관측표:
[[60 30 10]
[40 50 20]]
기대빈도:
[[42.86 34.29 12.86]
[57.14 45.71 17.14]]
chi^2=12.3077, df=2, p-value=0.0021
결론: 독립 아님 (성별과 선호 음료 연관)
10.3 Step 3: 신뢰구간과 가설검정 — \(\sigma^2\) 추론
import numpy as np
from scipy import stats
np.random.seed(1)
# ── sigma^2에 대한 신뢰구간: chi^2 피벗 ──────────────────────────
n = 25
mu, sigma_true = 0.0, 2.0
data = np.random.normal(mu, sigma_true, size=n)
s2 = np.var(data, ddof=1)
alpha = 0.05
# 피벗: (n-1)S^2/sigma^2 ~ chi^2(n-1)
# CI: [ (n-1)S^2 / chi^2_{alpha/2}, (n-1)S^2 / chi^2_{1-alpha/2} ]
chi2_lo = stats.chi2.ppf(alpha/2, df=n-1)
chi2_hi = stats.chi2.ppf(1 - alpha/2, df=n-1)
ci_lo = (n-1) * s2 / chi2_hi
ci_hi = (n-1) * s2 / chi2_lo
print(f"=== sigma^2의 95% 신뢰구간 (chi^2 피벗) ===")
print(f"n={n}, S^2={s2:.4f}, sigma_true^2={sigma_true**2:.1f}")
print(f"chi^2_{{0.025}}={chi2_lo:.4f}, chi^2_{{0.975}}={chi2_hi:.4f}")
print(f"95% CI: ({ci_lo:.4f}, {ci_hi:.4f})")
print(f"sigma_true^2 포함: {'YES' if ci_lo < sigma_true**2 < ci_hi else 'NO'}")
# ── sigma^2에 대한 가설검정: H0: sigma^2 = 4 ─────────────────────
sigma0_sq = 4.0 # 귀무가설 값
chi2_obs = (n-1) * s2 / sigma0_sq
p_val_2side = 2 * min(stats.chi2.cdf(chi2_obs, n-1),
1 - stats.chi2.cdf(chi2_obs, n-1))
print(f"\n=== sigma^2 가설검정: H0: sigma^2 = {sigma0_sq} ===")
print(f"검정통계량: (n-1)S^2/sigma_0^2 = {chi2_obs:.4f}")
print(f"p-value (양측): {p_val_2side:.4f}")
print(f"결론 (alpha=0.05): {'H0 기각' if p_val_2side < 0.05 else 'H0 채택'}")
# ── 점근 LRT: 자유도 확인 ─────────────────────────────────────────
print(f"\n=== 점근 우도비 검정 — chi^2 자유도 시뮬 ===")
n_sim = 100_000
# 정규 분포에서 mu, sigma^2 동시 추정 vs H0: mu=0
# LRT 통계량 -2logLambda ~ chi^2(1) (H0 제약: 1개)
lrt_stats = []
for _ in range(n_sim):
x = np.random.normal(0, 1, size=20)
# H0 (mu=0): log L(0, sigma_MLE_0)
s2_0 = np.mean(x**2)
ll_0 = -20/2 * np.log(s2_0) - 20/2
# H1 (unrestricted): log L(mu_MLE, sigma_MLE)
mu_1 = np.mean(x)
s2_1 = np.mean((x - mu_1)**2)
ll_1 = -20/2 * np.log(s2_1) - 20/2
lrt_stats.append(-2 * (ll_0 - ll_1))
lrt_stats = np.array(lrt_stats)
ks_lrt, p_lrt = stats.kstest(lrt_stats, 'chi2', args=(1,))
print(f"-2logLambda: 시뮬 평균={lrt_stats.mean():.4f} (이론: 1.0)")
print(f"KS p-value={p_lrt:.4f}",
"→ chi^2(1) 확인됨" if p_lrt > 0.05 else "→ FAIL")=== sigma^2의 95% 신뢰구간 (chi^2 피벗) ===
n=25, S^2=3.8147, sigma_true^2=4.0
chi^2_{0.025}=12.4012, chi^2_{0.975}=39.3641
95% CI: (2.4128, 7.6713)
sigma_true^2 포함: YES
=== sigma^2 가설검정: H0: sigma^2 = 4 ===
검정통계량: (n-1)S^2/sigma_0^2 = 22.8881
p-value (양측): 0.5850
결론 (alpha=0.05): H0 채택
=== 점근 우도비 검정 — chi^2 자유도 시뮬 ===
-2logLambda: 시뮬 평균=0.9998 (이론: 1.0)
KS p-value=0.2143 → chi^2(1) 확인됨
11 성질 요약
| 성질 | 값 |
|---|---|
| 지지 | \((0, \infty)\) |
| 모수 | 자유도 \(p > 0\) |
| 감마와의 관계 | \(\text{Gamma}(p/2,\; 2)\) |
| \(E[X]\) | \(p\) |
| \(\text{Var}(X)\) | \(2p\) |
| 왜도 | \(\sqrt{8/p}\) |
| 첨도(초과) | \(12/p\) |
| MGF | \((1-2t)^{-p/2}\), \(t < 1/2\) |
| \(p=1\) | \(Z^2\), \(Z \sim N(0,1)\) |
| \(p = 2\) | \(\text{Exp}(2) = \text{Exp}(\text{rate}=1/2)\) |
| 합산성 | 독립 \(\chi^2(p_i)\) 의 합 → \(\chi^2(\sum p_i)\) |
| 표본분산 | \((n-1)S^2/\sigma^2 \sim \chi^2(n-1)\) |
| \(t\) 분포 | \(N(0,1) / \sqrt{\chi^2(p)/p}\) |
| \(F\) 분포 | \(\chi^2(p)/p \div \chi^2(q)/q\) |
12 응용 분야
| 분야 | 활용 | 이유 |
|---|---|---|
| 정규 추론 | \(\sigma^2\) 신뢰구간·검정 | \((n-1)S^2/\sigma^2 \sim \chi^2(n-1)\) |
| 범주형 분석 | 적합도 검정, 독립성 검정 | Pearson 통계량 점근 분포 |
| GLM | 이탈도(deviance) 검정 | \(-2\log\lambda \sim \chi^2\) |
| 베이지안 | 정밀도(precision) 사전분포 | \(\text{Normal-}\chi^2\) 켤레 |
| 머신러닝 | 특성 선택 (chi^2 특성 중요도) | 범주형 독립성 측도 |
| 다변량 통계 | Hotelling \(T^2\) 점근 분포 | \(F\) → \(\chi^2\) 극한 |
13 관련 주제
선행 지식
- 감마 분포 (Gamma Distribution) — \(\chi^2(p) = \text{Gamma}(p/2, 2)\)
- 정규 분포 (Normal Distribution) — \(Z^2 \sim \chi^2(1)\)
후속 주제
관련 개념