Summary
범주형 변수의 빈도(frequency)를 분석하는 비모수 검정. 관측 빈도와 기대 빈도의 차이를 검정하며, 세 가지 유형이 있다: 적합도(goodness-of-fit), 독립성(independence), 동질성(homogeneity).
용어 설명
- 교차표 (Contingency table, 분할표): 두 범주형 변수의 빈도를 행과 열로 정리한 표. 예: 성별(행) × 찬반(열)
- 관측 빈도 (Observed frequency, O): 실제로 데이터에서 관찰된 각 셀의 빈도
- 기대 빈도 (Expected frequency, E): 두 변수가 독립이라면 기대되는 이론적 빈도
- 자유도 (df): 적합도에서는 (범주 수 − 1), 독립성/동질성에서는 (행 수 − 1) × (열 수 − 1)
- 범주형 변수 (Categorical variable): 숫자가 아닌 범주로 나뉘는 변수 (예: 성별, 혈액형, 선호도)
Chi-square Test (카이제곱 검정)
기본 수식
수식 변수 풀이
- : 카이제곱 통계량 — 관측값과 기대값의 괴리가 클수록 커짐
- : 각 셀의 관측 빈도 — 실제 데이터에서 세어진 값
- : 각 셀의 기대 빈도 — “차이가 없다(H₀)“고 가정했을 때 기대되는 값
- : 차이를 제곱 → 방향 무관하게 괴리 크기 측정
- 로 나눔: 상대적 괴리 측정 (기대값이 작은 셀에서의 차이를 더 크게 반영)
- 직관: “관측 빈도가 기대 빈도에서 얼마나 벗어났는가?”
- : 관측 빈도 (Observed)
- : 기대 빈도 (Expected)
- df: 유형에 따라 다름
유형별 비교
| 유형 | 질문 | 변수 | df |
|---|---|---|---|
| 적합도 (Goodness-of-fit) | 관측 분포가 이론 분포와 일치하는가? | 범주형 1개 | k - 1 |
| 독립성 (Independence) | 두 범주형 변수가 독립인가? | 범주형 2개 | (r-1)(c-1) |
| 동질성 (Homogeneity) | 여러 모집단의 분포가 같은가? | 범주형 2개 | (r-1)(c-1) |
1. 적합도 검정
“주사위가 공정한가?” — 관측 빈도 vs 기대 빈도
Example
주사위 120회 → 각 눈의 기대 빈도 = 20
눈 1 2 3 4 5 6 관측 25 17 15 23 22 18 기대 20 20 20 20 20 20
2. 독립성 검정
“성별과 선호도가 관련이 있는가?” — 교차표(contingency table) 분석
기대 빈도:
수식 변수 풀이
- : 행 i, 열 j 셀의 기대 빈도
- : 행 i의 합계 (해당 행의 전체 빈도)
- : 열 j의 합계 (해당 열의 전체 빈도)
- : 전체 관측치 수
- 직관: “행과 열이 독립이면, 각 셀의 빈도는 행 비율 × 열 비율 × 전체 수”
Example
찬성 반대 합계 남 40 60 100 여 55 45 100 합계 95 105 200
3. 동질성 검정
독립성 검정과 수식은 동일하지만, 연구 설계가 다름:
- 독립성: 하나의 모집단에서 표본 추출 → 두 변수 관계
- 동질성: 여러 모집단에서 각각 표본 추출 → 분포 비교
가정 및 제약
| 가정 | 설명 |
|---|---|
| 기대 빈도 ≥ 5 | 모든 셀의 기대 빈도가 5 이상 (80% 이상의 셀) |
| 독립 관측 | 각 관측치는 독립적 |
| 범주형 변수 | 연속형 변수는 범주화 필요 |
기대 빈도 < 5일 때
- 2×2 표: Fisher’s exact test 사용
- 더 큰 표: 범주 합치기 또는 시뮬레이션 기반 검정
Effect Size: Cramer’s V
수식 변수 풀이
- : Cramer’s V — 0~1 범위의 연관성 강도 지표
- : 전체 표본 크기
- : 행 수와 열 수 중 작은 쪽 − 1. 표의 차원에 따라 보정
- 직관: “교차표에서 두 변수의 관계가 얼마나 강한가?”
| V 값 (df*=1) | 해석 |
|---|---|
| 0.1 | Small |
| 0.3 | Medium |
| 0.5 | Large |
df = min(r-1, c-1). df가 클수록 같은 V에서 연관성이 더 강하게 해석됨.
Phi coefficient (φ) — 2×2 표 전용
2×2에서는 V = φ.
Fisher’s Exact Test
소표본/기대빈도 < 5일 때 카이제곱의 대안:
수식 변수 풀이
- : 2×2 교차표의 네 셀 빈도
- : 조합(combination) — n개 중 k개를 뽑는 경우의 수
- Fisher’s exact test는 가능한 모든 표의 확률을 직접 계산하므로, 소표본에서도 정확한 p-value를 제공
- 정확한 p-value (근사 아님)
- 2×2에서 주로 사용, 더 큰 표에서도 가능 (계산 비용↑)
Implementation
from scipy import stats import numpy as np # === 적합도 검정 === observed = [25, 17, 15, 23, 22, 18] expected = [20, 20, 20, 20, 20, 20] chi2, p = stats.chisquare(observed, f_exp=expected) print(f"χ²={chi2:.2f}, p={p:.4f}") # === 독립성 검정 === contingency = np.array([[40, 60], [55, 45]]) chi2, p, dof, expected = stats.chi2_contingency(contingency) print(f"χ²={chi2:.2f}, p={p:.4f}, df={dof}") # Cramer's V n = contingency.sum() min_dim = min(contingency.shape) - 1 v = np.sqrt(chi2 / (n * min_dim)) print(f"Cramer's V = {v:.3f}") # === Fisher's exact test (2×2) === odds_ratio, p = stats.fisher_exact(contingency) print(f"Fisher's exact: OR={odds_ratio:.2f}, p={p:.4f}") # === pingouin === import pingouin as pg expected_arr, observed_arr, stats_result = pg.chi2_independence( data=df, x='gender', y='preference') print(stats_result)
관련 문서
- 통계 검정법 개요 — 검정법 선택 플로우차트
- Effect Size 개요 — Cramer’s V의 위치
- Sample Size Determination — 카이제곱 표본 크기 계산