[Python] 정규성 검정
1. 정규성이란?
정규성이란 데이터의 분포가 정규 분포를 따르는지 나타내는 통계적 개념입니다.
정규 분포란 평균을 중심으로 양쪽으로 대칭인 종 모양의 분포를 말합니다.
평균(m)이 100, 표준편차(s)가 10인 그래프
2. 정규성 검정을 하는 이유
전의 글에서 말씀드렸듯이 모수 검정에서는 정규성이 만족이 되어야하는 전재조건이 있었습니다.
이러한 이유와 같이 많은 통계적 기법들은 데이터가 정규 분포를 따른다는 가정하에 개발이 되었기 때문입니다.
정규성을 만족하는 대표적인 통계적 기법들 아래와 같습니다.
- t-검정(T-test)
- 분산분석(Analysis of Variance, ANOVA)
- 회귀분석
3. 파이썬에서 정규성 검정
파이썬의 scipy.stats라이브러리에서 정규성 검정을 지원합니다.
정규성 검정을 위해 데이터를 불러와보겠습니다.
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/scipy/normal1.csv')
print(df)
위와 같은 데이터를 통해 자주 쓰이는 정규성 검정 두가지를 실행해보겠습니다.
이때 유의 수준은 모두 5%로 보겠습니다.
가. 샤피로-월크 검정(Shapiro-Wilk test)
가설
귀무가설(H0) : 데이터가 정규분포를 따른다.
귀무가설(H0) : 데이터가 정규분포를 따르지 않는다.
장점
1.비교적 작은 표본의 크기에도 잘 검정할 수 있습니다.
2.정규성 검정 방법중 가장 민감합니다.
단점
1.표본의 크기가 5000개 이상이면 사용하기 어렵습니다.
2. 이상치에 민감합니다.
파이썬 코드
from scipy.stats import shapiro
print(shapiro(df))
# 결과
ShapiroResult(statistic=0.9981444478034973, pvalue=0.34849318861961365)
결과 해석
결과의 statistic는 검정통계량을 나타내고 pavlue는 p-value를 나타냅니다.
검정 통계량(Statistic) : 값이 1에 가까울수록 데이터의 분포가 정규분포에 가까운 것을 의미 합니다.
p-value: 값은 가설 검정에 사용되는 값으로 유의수준과 비교해 귀무가설을 기각 할지 채택 할지 선택합니다.
위의 결과는 검정통계량이 0.99로 1에 매우 가깝고,
p-값이 0.34로 유의 수준 0.05보다 크기 때문에 귀무가설을 채택합니다.
나. 앤더스-달링 검정(Anderson-Darling test)
가설
귀무가설(H0) : 데이터가 정규분포를 따른다.
귀무가설(H0) : 데이터가 정규분포를 따르지 않는다.
장점
샤피로-월크 검정(Shapiro-Wilk test) 보다 이상치에 민감하지 않습니다.
데이터의 사이즈가 커도 사용할 수 있습니다.
파이썬 코드
from scipy.stats import anderson
print(anderson(df['data']))
#결과
AndersonResult(statistic=0.41077839161039265,
critical_values=array([0.574, 0.653, 0.784, 0.914, 1.088]),
significance_level=array([15. , 10. , 5. , 2.5, 1. ]),
fit_result= params: FitParams(loc=299.76044727877553, scale=5.161675747838134)
success: True
message: '`anderson` successfully fit the distribution to the data.')
결과 해석
검정 통계량(Statistic) : 이 값이 임계값보다 클수록, 데이터가 주어진 분포를 따르지 않는다는 뜻입니다.
임계값(Critical values) : 이 값은 각 유의수준에서의 검정 통계량의 임계값입니다. 만약 검정 통계량이 어떤 유의 수준의 임계값보다 크다면, 그 유의 수준에서 귀무 가설을 기각하고 데이터가 주어진 분포를 따르지 않는다고 결론을 내릴 수 있습니다.
유의 수준(Significance levels) : 이 값은 임계값과 함께 제공되며, 보통 15%, 10%, 5%, 2.5%, 1%의 값을 가집니다. 이 값이 작을수록 귀무 가설을 기각하기 위한 기준이 더 엄격해집니다.
위의 결과를 해석해본다면 유의수준을 5%로 보고있기때문에 Critical values의 3번째에 해당하는 0.78의 값을 봐야합니다.
0.78이라는 값은 Statistic값인 0.410보다 크기 때문에 귀무가설 "데이터가 정규분포를 따른다"를 채택합니다.
정리
- 검정 통계량 > 임계값 = 귀무가설 기각(데이터가 정규 분포를 따르지 않는다)
- 검정 통계량 < 임계값 = 귀무가설 채택(데이터가 정규 분포를 따른다)