범주형 자료 분석
더 많은 작업
- Categorical Data Analysis; 범주형 자료 분석
- 성별, 지역, 구매 여부처럼 범주로 된 변수의 분포와 변수 간 관계를 분석하는 통계 기법
범주형 변수는 평균을 낼 수 없으므로 빈도(도수)를 센다. 두 범주형 변수의 빈도를 교차해 정리한 표가 분할표이며, 대부분의 분석이 여기서 출발한다.
두 범주형 변수의 범주 조합별 관측 빈도를 행과 열로 정리한 표다(교차표, Contingency Table). 행 범주가 r개, 열 범주가 c개이면 r×c 분할표다. 2×2 분할표는 다음과 같이 쓴다.
| 결과 있음 | 결과 없음 | 합계 | |
|---|---|---|---|
| 노출군 | a | b | a+b |
| 비노출군 | c | d | c+d |
관측 빈도 와 귀무가설에서 기대되는 빈도 의 차이로 검정한다.
는 i행 합계, 는 j열 합계, 은 전체 합계다. 자유도는 이다.
| 구분 | 독립성 검정 | 동질성 검정 |
|---|---|---|
| 표본 | 하나의 모집단에서 추출 | 여러 모집단에서 각각 추출(행 합계가 정해져 있음) |
| 귀무가설 | 두 변수는 서로 독립이다 | 각 모집단의 범주 비율이 같다 |
| 계산 | 통계량·자유도·기대빈도 계산 방법은 같다 | |
한 변수의 관측 분포가 특정 이론 분포와 맞는지 보는 것은 적합도 검정이다. 자세한 계산은 카이제곱 검정을 본다.
- 기대빈도가 5 미만인 칸이 전체의 20%를 넘으면 카이제곱 근사가 부정확하다. 범주를 합치거나 피셔 정확 검정을 쓴다
- 2×2 표에서는 연속성 보정(Yates 보정)을 하기도 한다
Fisher's Exact Test. 주변 합계를 고정했을 때 관측된 표 이상으로 극단적인 표가 나올 확률을 초기하분포로 정확히 계산한다. 표본이 작거나 기대빈도가 작은 2×2 표에 쓴다.
| 지표 | 공식 | 해석 |
|---|---|---|
| 상대위험도(RR, Relative Risk) | 노출군의 발생 위험이 비노출군의 몇 배인가. 전향적 코호트 연구에 쓴다 | |
| 오즈비(OR, Odds Ratio) | 노출군의 오즈가 비노출군의 몇 배인가. 환자-대조군 연구에서도 쓸 수 있다 |
둘 다 1이면 관련이 없고, 1보다 크면 노출이 위험을 높이는 방향이다. 발생률이 낮으면 OR은 RR에 가까워진다.
예: a=30, b=10, c=20, d=40이면 RR = (30/40)/(20/60) = 2.25, OR = (30×40)/(10×20) = 6이다. 기대빈도는 20, 20, 30, 30이고 보정 없는 (자유도 1)이다.
종속변수가 이진 범주형이면 로지스틱 회귀로 여러 설명변수를 함께 다룰 수 있다. 설명변수 의 계수 에 대해 는 가 1 증가할 때의 오즈비다. 설명변수가 이진 변수 하나뿐이면 는 2×2 분할표의 오즈비 ad/bc와 같다.
import numpy as np
from scipy.stats import chi2_contingency, fisher_exact
table = np.array([[30, 10],
[20, 40]])
chi2, p, dof, expected = chi2_contingency(table) # 2x2는 기본으로 Yates 보정
chi2_raw, p_raw, _, _ = chi2_contingency(table, correction=False)
odds_ratio, p_fisher = fisher_exact(table)
print(chi2, chi2_raw, dof, odds_ratio)
- 기대빈도 계산(행 합 × 열 합 ÷ 총합)과 자유도 (r−1)(c−1)
- 독립성 검정과 동질성 검정의 차이, 기대빈도가 작을 때 피셔 정확 검정
- 2×2 표에서 상대위험도·오즈비 계산, 로지스틱 회귀 계수의 exp가 오즈비라는 점
- 변수 유형 조합에 맞는 분석 기법 고르기