본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
Normality Test; 정규성 검정
표본이 정규 분포를 따르는 모집단에서 나왔는지를 판단하는 적합도 검정

T-검정, 분산분석, 선형 회귀의 잔차 분석처럼 정규성을 가정하는 모수 검정을 쓰기 전에 그 가정이 성립하는지 확인하는 단계이다. 통계량으로 판정하는 검정(Shapiro-Wilk, Kolmogorov-Smirnov, Lilliefors, Anderson-Darling)과 그림으로 판단하는 방법(Q-Q plot, 정규 확률도, 히스토그램)을 함께 쓴다. 검정 결과에 따라 모수 검정을 쓸지 비모수 검정으로 바꿀지 정한다.

  • 귀무가설 H0: 데이터는 정규 분포를 따른다.
  • 대립가설 H1: 데이터는 정규 분포를 따르지 않는다.
  • P-값이 유의수준(보통 0.05)보다 크면 H0를 기각하지 못하므로 정규성 가정을 받아들이고 분석을 진행한다. 일반적인 검정과 달리 "기각하지 못하는 것"이 분석자가 바라는 결과라는 점이 특징이다.
  • H0를 기각하지 못했다는 것이 정규 분포임을 증명한 것은 아니다. 표본이 작으면 검정력이 낮아 정규성 이탈을 잡아내지 못할 수 있다.

Shapiro-Wilk 검정은 순서통계량에 가중치를 준 선형결합으로 W 통계량을 만든다. W는 0~1 사이 값이고 작을수록 정규성에서 벗어났다는 증거이다.

W=(∑i=1naix(i))2∑i=1n(xi−x¯)2

여기서 x(i)는 크기순으로 정렬한 i번째 값이고, ai는 정규 분포 순서통계량의 평균·분산·공분산에서 구한 상수이다.

Kolmogorov-Smirnov(K-S) 검정은 경험적 누적분포함수와 이론 누적분포함수 F의 최대 거리를 통계량으로 쓴다.

D=max1≤i≤N(F(Yi)−i−1N, iN−F(Yi))

K-S 검정은 비교할 분포의 모수(평균·분산)가 미리 완전히 정해져 있어야 한다. 표본에서 평균과 분산을 추정해 넣으면 원래 임계값이 맞지 않으므로, 이를 보정한 것이 Lilliefors 검정이다.

Anderson-Darling 검정은 K-S 검정을 고친 것으로, 분포의 꼬리 부분에 더 큰 가중치를 준다. 통계량 A2가 임계값보다 크면 정규성을 기각한다.

Q-Q plot은 표본 분위수를 정규 분포의 이론 분위수에 대해 찍은 그림이다. 점들이 대각선 위에 거의 일직선으로 놓이면 정규성을 따른다고 본다. 양 끝이 직선에서 휘면 꼬리가 두껍거나 얇은 것이고, 한쪽으로 굽으면 왜도가 있는 것이다.

방법 통계량 특징 R Python
Shapiro-Wilk W 정규성 전용 검정. 비교 연구에서 검정력이 좋은 편이다. R은 표본 3~5000개만 받는다 shapiro.test() scipy.stats.shapiro
Kolmogorov-Smirnov D 분포 전반에 쓸 수 있으나 모수를 미리 알아야 한다. 분포 가운데에 더 민감하다 ks.test() scipy.stats.kstest
Lilliefors D 평균·분산을 표본에서 추정할 때의 K-S 검정 nortest::lillie.test() statsmodels.stats.diagnostic.lilliefors
Anderson-Darling A2 꼬리에 가중치를 준다. 분포마다 임계값이 다르다 nortest::ad.test() scipy.stats.anderson
Q-Q plot 그림 이탈의 모양(꼬리, 치우침)을 보여 준다. 판정은 주관적이다 qqnorm(), qqline() scipy.stats.probplot

표본 크기에 따른 선택은 다음처럼 정리할 수 있다.

  • 표본이 작을 때: 검정력이 낮으므로 Shapiro-Wilk를 기본으로 쓰고 Q-Q plot을 반드시 함께 본다.
  • 표본이 매우 클 때: 아주 작은 이탈도 유의하게 나오므로 p-값만으로 판단하지 말고 Q-Q plot, 왜도·첨도를 같이 본다. 표본이 크면 중심 극한 정리에 따라 평균 비교 검정이 정규성 위반에 덜 민감해진다는 점도 고려한다.
  • Shapiro-Wilk를 쓸 수 없는 크기(R 기준 5000개 초과)라면 Anderson-Darling이나 Lilliefors를 쓴다.

검정 선택 흐름

편집 원본 편집
정규성 결과 두 집단 비교 세 집단 이상 비교 상관
만족 독립표본 T-검정(등분산이면 Student, 아니면 Welch), 대응표본 t-검정 일원 분산분석 피어슨 상관계수
불만족 Wilcoxon 순위합(Mann-Whitney U) 검정, 대응표본이면 Wilcoxon 부호순위 검정 Kruskal-Wallis 검정 스피어만 상관계수
  • 정규성을 만족하면 다음 단계로 등분산 검정을 해서 Student t / Welch t, 분산분석 / Welch 분산분석 중 하나를 고른다.
  • 대응표본 t-검정은 두 측정값의 차이가 정규성을 만족하는지 본다. 회귀 분석은 원자료가 아니라 잔차의 정규성을 본다.
  • 로그·제곱근 같은 변수 변환으로 정규성에 가깝게 만든 뒤 모수 검정을 쓰는 방법도 있다.
set.seed(42)
x <- rnorm(40, mean = 50, sd = 10)

shapiro.test(x)                 # Shapiro-Wilk
ks.test(x, "pnorm", mean = 50, sd = 10)   # 모수를 아는 경우의 K-S
library(nortest)
lillie.test(x)                  # Lilliefors
ad.test(x)                      # Anderson-Darling

qqnorm(x); qqline(x)            # Q-Q plot
import numpy as np
from scipy import stats
from statsmodels.stats.diagnostic import lilliefors

rng = np.random.default_rng(42)
x_norm = rng.normal(loc=50, scale=10, size=40)   # 정규분포에서 뽑은 표본
x_skew = rng.exponential(scale=10, size=40)      # 오른쪽으로 치우친 표본

for name, x in [("정규", x_norm), ("지수", x_skew)]:
    w, p_sw = stats.shapiro(x)
    d, p_lf = lilliefors(x, dist="norm")
    ad = stats.anderson(x, dist="norm")
    print(f"[{name}] Shapiro-Wilk W={w:.4f}, p={p_sw:.4f}")
    print(f"[{name}] Lilliefors D={d:.4f}, p={p_lf:.4f}")
    print(f"[{name}] Anderson-Darling A2={ad.statistic:.4f}, 5% 임계값={ad.critical_values[2]:.3f}")

실행 결과:

[정규] Shapiro-Wilk W=0.9867, p=0.9109
[정규] Lilliefors D=0.0790, p=0.7589
[정규] Anderson-Darling A2=0.2342, 5% 임계값=0.726
[지수] Shapiro-Wilk W=0.7961, p=0.0000
[지수] Lilliefors D=0.1695, p=0.0054
[지수] Anderson-Darling A2=1.9284, 5% 임계값=0.726
  • 정규 표본은 세 검정 모두 p-값이 0.05보다 크고 A2도 5% 임계값보다 작으므로 정규성 가정을 기각하지 않는다. 모수 검정을 쓸 수 있다.
  • 지수 분포 표본은 W가 작고 p-값이 0.05보다 작으며, A2가 임계값을 넘으므로 정규성을 기각한다. 변환을 하거나 비모수 검정으로 바꾼다.
  • scipy의 anderson은 p-값 대신 유의수준별 임계값을 돌려준다(critical_values의 세 번째 값이 5%). 통계량과 임계값을 비교해 판정한다.
  • 정규성 검정의 귀무가설은 "정규 분포를 따른다"이다. p-값이 유의수준보다 커야 정규성을 만족한다고 판단한다.
  • K-S 검정은 모수를 아는 분포와 비교하는 검정이고, 모수를 추정해 쓰면 Lilliefors 보정을 쓴다. Anderson-Darling은 꼬리에 민감하다.
  • 실기에서는 정규성 검정 결과를 근거로 t-검정·분산분석과 비모수 검정 중 하나를 고르고, 그 근거를 서술하는 흐름이 자주 쓰인다.
  • Q-Q plot에서 점이 직선에서 벗어나는 모양으로 왜도와 꼬리 두께를 읽는 법을 익혀 둔다.