적합도 검정
IT 위키
더 많은 작업
- Goodness-of-Fit Test; 적합도 검정
- 관측된 데이터가 특정 이론 분포(또는 기대 비율)를 따르는지 검정하는 방법
"주사위가 공정한가", "이 데이터가 정규분포를 따르는가"처럼 데이터 하나와 가정한 분포를 비교한다. 귀무가설은 "관측 데이터가 가정한 분포를 따른다"이다. 따라서 p-값이 크면(기각하지 못하면) 그 분포를 따른다고 보고 분석을 진행한다.
범주형 자료에서 관측도수와 기대도수의 차이를 본다.
- : 관측도수, : 기대도수(= 전체 도수 × 가정한 비율), k : 범주 수
- m : 데이터로 추정한 모수의 수. 비율이 모두 주어져 있으면 m = 0
- 기대도수가 5 미만인 범주가 많으면 근사가 나빠지므로 범주를 합친다
| 검정 | 질문 | 자료 |
|---|---|---|
| 적합도 검정 | 한 변수의 분포가 가정한 비율과 같은가 | 변수 1개 |
| 독립성 검정 | 두 범주형 변수가 서로 독립인가 | 한 모집단, 변수 2개(분할표) |
| 동질성 검정 | 여러 모집단의 범주 비율이 같은가 | 모집단 여러 개, 변수 1개 |
독립성·동질성 검정은 카이제곱 검정을 참고한다.
t-검정, 분산분석, 선형 회귀 잔차 분석 등 정규성을 가정하는 방법을 쓰기 전에 확인한다.
| 방법 | 특징 |
|---|---|
| Shapiro-Wilk | 소표본에서 검정력이 좋아 가장 많이 쓰인다 |
| Kolmogorov-Smirnov(K-S) | 경험적 누적분포와 이론 누적분포의 최대 차이를 본다. 정규분포 외 다른 분포에도 쓸 수 있고, 두 표본 비교도 가능하다. 모수를 데이터로 추정하면 보정(Lilliefors)이 필요하다 |
| Anderson-Darling | K-S를 수정해 분포의 꼬리에 더 큰 가중치를 둔다 |
| Q-Q plot | 표본 분위수와 이론 분위수를 점으로 찍는 그래프. 점이 대각선에 가까우면 정규성을 따른다고 본다(시각적 확인) |
회귀분석에서 말하는 "적합도"는 모형이 데이터를 얼마나 잘 설명하는지를 뜻하며, 분포 검정과 다르다.
- 결정 계수 : 종속변수 변동 중 모형이 설명하는 비율(0~1)
- 수정 결정계수 : 변수 수가 늘면 가 무조건 커지는 문제를 보정한다
- 회귀모형 전체의 유의성은 F-검정으로 본다
import numpy as np
from scipy import stats
# 주사위 60번: 공정한가(기대도수 각 10)
obs = [8, 12, 9, 11, 6, 14]
chi2, p = stats.chisquare(f_obs=obs) # f_exp 생략 시 균등 기대도수
chi2, p = stats.chisquare(obs, f_exp=[10] * 6) # 같은 결과
x = np.random.default_rng(1).normal(50, 10, 40)
w, p = stats.shapiro(x) # Shapiro-Wilk
d, p = stats.kstest(x, "norm", args=(x.mean(), x.std(ddof=1))) # K-S(모수 추정 시 보수적)
res = stats.anderson(x, dist="norm") # Anderson-Darling
stats.probplot(x, dist="norm") # Q-Q plot용 좌표(plot=plt로 그림)
chisquare에f_exp를 줄 때는 관측도수 합과 기대도수 합이 같아야 한다- 모수를 추정했으면
ddof인자로 자유도를 줄인다(예:ddof=1) - SciPy 1.17부터
anderson에method인자(예:method="interpolate")를 주면 p-값을 돌려준다. 이전 버전은 통계량과 임계값(critical_values)을 비교한다
- 관측·기대도수로 카이제곱 통계량과 자유도(k − 1) 계산
- 적합도·독립성·동질성 검정 구분
- 정규성 검정 방법 이름과 귀무가설("정규분포를 따른다") 해석, 실기 작업형 3유형의
shapiro·chisquare사용