Python에서 shapiro-wilk 테스트를 수행하는 방법


Shapiro-Wilk 테스트는 정규성 테스트입니다. 표본이 정규 분포 에서 나오는지 여부를 확인하는 데 사용됩니다.

Python에서 Shapiro-Wilk 테스트를 수행하려면 다음 구문을 사용하는 scipy.stats.shapiro() 함수를 사용할 수 있습니다.

scipy.stats.shapiro(x)

금:

  • x: 샘플 데이터 테이블입니다.

이 함수는 검정 통계량과 해당 p-값을 반환합니다.

p-값이 특정 유의 수준보다 낮으면 표본 데이터가 정규 분포에서 나오지 않는다고 말할 수 있는 충분한 증거가 있는 것입니다.

이 튜토리얼에서는 실제로 이 기능을 사용하는 방법에 대한 몇 가지 예를 보여줍니다.

예 1: 정규 분포 데이터에 대한 Shapiro-Wilk 테스트

다음과 같은 샘플 데이터가 있다고 가정합니다.

 from numpy.random import seed
from numpy.random import randn

#set seed (eg make this example reproducible)
seed(0)

#generate dataset of 100 random values that follow a standard normal distribution
data = randn(100)

다음 코드는 이 100개의 데이터 값 샘플에 대해 Shapiro-Wilk 테스트를 수행하여 해당 값이 정규 분포에서 나온 것인지 확인하는 방법을 보여줍니다.

 from scipy.stats import shapiro

#perform Shapiro-Wilk test
shapiro(data)

ShapiroResult(statistic=0.9926937818527222, pvalue=0.8689165711402893)

결과에서 검정 통계량은 0.9927 이고 해당 p-값은 0.8689 임을 알 수 있습니다.

p-값이 0.05 이상이므로 귀무가설을 기각할 수 없습니다. 표본 데이터가 정규 분포에서 나오지 않는다고 말할 수 있는 충분한 증거가 없습니다.

표준 정규 분포를 따르는 임의의 값을 생성하는 randn() 함수를 사용하여 샘플 데이터를 생성했기 때문에 이 결과는 놀라운 일이 아닙니다.

예 2: 비정규 분포 데이터에 대한 Shapiro-Wilk 테스트

이제 다음과 같은 샘플 데이터가 있다고 가정합니다.

 from numpy.random import seed
from numpy.random import fish

#set seed (eg make this example reproducible)
seed(0)

#generate dataset of 100 values that follows a Poisson distribution with mean=5
data = fish(5, 100)

다음 코드는 이 100개의 데이터 값 샘플에 대해 Shapiro-Wilk 테스트를 수행하여 해당 값이 정규 분포에서 나온 것인지 확인하는 방법을 보여줍니다.

 from scipy.stats import shapiro

#perform Shapiro-Wilk test
shapiro(data)

ShapiroResult(statistic=0.9581913948059082, pvalue=0.002994443289935589)

결과에서 검정 통계량은 0.9582 이고 해당 p-값은 0.00299 임을 알 수 있습니다.

p-값이 0.05보다 작으므로 귀무가설을 기각합니다. 표본 데이터가 정규 분포에서 나오지 않는다고 말할 수 있는 충분한 증거가 있습니다.

Poisson 분포를 따르는 임의의 값을 생성하는 Poisson() 함수를 사용하여 샘플 데이터를 생성했기 때문에 이 결과는 놀라운 일이 아닙니다.

추가 리소스

다음 자습서에서는 다양한 통계 소프트웨어에서 기타 정규성 테스트를 수행하는 방법을 설명합니다.

R에서 Shapiro-Wilk 테스트를 수행하는 방법
Python에서 Anderson-Darling 테스트를 수행하는 방법
Python에서 Kolmogorov-Smirnov 테스트를 수행하는 방법

의견을 추가하다

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다