Kolmogorov-Smirnov test는 보통 그대로 사용하지 않고 p-value만 교정한 Lilliefors test를 더 많이 사용한다. SPSS에서도 Lilliefors 교정된 Kolmogorov-Smirnov test 결과를 보여주는 편이다.

  • KS test: 분포가 고정되어 있을 때 불변하는 분포를 가진다.
  • Lilliefors test: 데이터로부터 평균과 분산을 추정해서 사용한다.
    • 일반적인 KS 분포표를 그대로 쓸 수 없고 별도의 시뮬레이션이나 근사치를 통해 계산된 p-value 표를 사용한다.
    • sciPy 개발팀은 이러한 “특화된 검정”들을 추가하는 데 보수적. scipy 에서는 해당 테스트를 쓸 수 없다.
      • statsmodels 에서 지원한다.
from statsmodels.stats.diagnostic import lilliefors
import numpy as np
 
# 데이터 생성
data = np.random.normal(0, 1, 100)
 
# Lilliefors test 수행
# dist='norm' (정규분포), 'exp' (지수분포) 선택 가능
ks_stat, p_value = lilliefors(data, dist='norm')
 
print(f"Lilliefors Statistic: {ks_stat}, p-value: {p_value}")
특징KS Test (SciPy)Lilliefors Test (Statsmodels)
모수
(Mean, Std)
사용자가 미리 알고 있어야 함데이터에서 자동으로 추정함
용도데이터가 특정 이론적 분포와 일치하는가?데이터가 (모수를 모르는) 정규분포를 따르는가?
정확성모수를 추정해서 넣으면 p-value가 부정확해짐모수 추정치를 반영하여 p-value를 보정함

Kolmogorov-Smirnov test결과와 D statistics 값은 같게 나온다. 단지 p-value만 다르다는 것을 알 수 있다.


본 데이터의 n 수는 1,000명으로 2,000명 미만이므로 Shapiro-Wilk test의 결과를 인용해야 한다. 따라서 본 결과는 신뢰하지 않는다.

또한, QQplot과 히스토그램의 결과도 고려하여 정규성 여부를 판단해야 한다.

통계적 관례(Convention):

  • 소표본(n<2,000): Shapiro-Wilk test가 정규성을 판단하는 검정력(Power)이 가장 압도적. 이 구간에서는 Shapiro-Wilk 만 사용하는 경우가 많음.
  • 대표본(n≥2,000): Shapiro-Wilk는 너무 민감해져서 아주 작은 왜곡도 “정규분포가 아니다”라고 판정해 버리는 단점이 생김. 이때부터는 LillieforsD’Agostino’s K-squared 같은 대안을 고려.

즉, “데이터가 1,000개밖에 안 되는데, 왜 가장 정확한 Shapiro-Wilk를 두고 상대적으로 검정력이 약한 Lilliefors를 썼느냐? 혹시 Shapiro-Wilk 결과가 안 좋게 나와서(비정규로 나와서) 일부러 다른 걸 쓴 것 아니냐?” 라는 의심.

통계학적으로 Lilliefors test는 KS test를 보완한 것이긴 하지만, **Shapiro-Wilk에 비해 제2종 오류(Type II Error)**에 빠질 확률이 여전히 높다.

  • 제2종 오류: 실제로는 정규분포가 아닌데, 검정 결과 “정규분포가 맞다”라고 잘못 결론 내리는 것.

  • 비판자는 “Shapiro-Wilk로 돌렸다면 ‘정규분포가 아니다’라고 나왔을 텐데, Lilliefors를 써서 ‘정규분포다’라는 잘못된 신뢰를 주고 있다”고 지적.