카이제곱 분포 (Chi-Squared Distribution)

Casella & Berger Ch.3.3, Ch.5.3 — 표본분산 분포, 정규-카이제곱 연결, 가산성

카이제곱 분포는 감마 분포의 특수 케이스(α=p/2, β=2)이자, 정규 모집단에서의 통계적 추론의 핵심이다. Z² ~ χ²(1) 관계, 독립 카이제곱의 가산성, 표본분산 분포 (n-1)S²/σ² ~ χ²(n-1) 증명, 카이제곱 검정(적합도, 독립성)까지 다룬다.

Statistics
저자

Kwangmin Kim

공개

2026년 03월 29일

1 왜 카이제곱 분포인가

카이제곱 분포는 “표준정규 확률변수의 제곱합” 의 분포이다. 이 단순한 정의에서 통계적 추론 전반에 걸쳐 핵심적인 역할을 하는 분포가 탄생한다.

카이제곱 분포가 중요한 세 가지 이유:

  1. 표본분산의 분포: 정규 모집단 \(N(\mu, \sigma^2)\) 에서 표본을 뽑을 때, \((n-1)S^2/\sigma^2 \sim \chi^2(n-1)\) 이다. 이 관계가 없으면 \(\sigma^2\) 에 대한 추론(구간추정, 가설검정)이 불가능하다.
  2. 가설검정의 도구: 분류형 데이터의 적합도 검정, 분할표 독립성 검정, 우도비 검정의 점근 분포 — 모두 카이제곱 분포를 사용한다.
  3. t, F 분포의 재료: Student \(t\) 분포와 Snedecor \(F\) 분포는 정규 확률변수와 카이제곱 확률변수의 조합으로 정의된다.

2 정의

정의: 카이제곱 분포 (Casella & Berger, 2002, Ch.3.3)

자유도(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) \]

직관: 왜 α=p/2, β=2인가

표준정규 \(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)\)

Example 2.1.9 (Casella & Berger, 2002, Ch.2)

\(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^2 \sim \chi^2(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 — 독립 카이제곱의 가산성

Lemma 5.3.2(b) (Casella & Berger, 2002, Ch.5.3)

\(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)\) 이 독립이므로 가산성에 의해 자유도가 더해진다.

직관: 가산성 — “독립 방향이 하나 추가될 때마다 자유도가 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 — 표본분산의 분포

Theorem 5.3.1 (Casella & Berger, 2002, Ch.5.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\)

왜 자유도가 \(n-1\) 인가

\(\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\) 분포

정의: \(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)/(S/\sqrt{n})\) 의 구조

\(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\) 분포

정의: \(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)/(V/q)\) 의 구조

\(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의 정리).

직관: 적합도 통계량 \(\sum (O_i - E_i)^2 / E_i\) 읽기
  • \((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-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\) 분포를 따른다.

직관: 우도비 통계량이 \(\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 관련 주제

선행 지식

후속 주제

관련 개념

Subscribe

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