데이터를 기반으로

정규성 검정(Normality Test)(2) - 통계적 검정(Shapiro-Wilk test) 본문

통계/검정

정규성 검정(Normality Test)(2) - 통계적 검정(Shapiro-Wilk test)

이노후 2023. 8. 29. 23:04
728x90
반응형

이전 글에 이어 2번째 통계적 검정에 대해 알아보고자 한다.

https://ds92.tistory.com/127

 

정규성 검정(Normality Test)(1) - 시각적 검정

통계학에서는 정규 분포를 굉장히 좋아하고 모든 분포가 정규 분포를 따르면 얼마나 좋을까? 라는 생각을 가끔 할 때도 있다. 이러한 이유는 모수적 통계 방법들을 적용하고 싶은 마음에서 나온

ds92.tistory.com

 

 

[ 통계적 검정 ]

1. 샤피로-윌크 검정(Shapiro-Wilk test)

→ 정규성 검정에서 가장 많이 쓰이는 방법 중 하나이며 생각보다 위키피디아에 정리가 잘 되어 있었다. 해당 검정법은 가장 많이 쓰이는 검정법이며 작은 표본에서도 잘 작동하며, 정확한 검정을 제공하고 큰 표본에서는 검정 결과가 민감할 수 있다. 이러한 애매한 표현들이 위키피디아에 명확한 n에 대한 정의가 나와있다.

 

https://en.wikipedia.org/wiki/Shapiro%E2%80%93Wilk_test

 

Shapiro–Wilk test - Wikipedia

From Wikipedia, the free encyclopedia Test of normality in frequentist statistics The Shapiro–Wilk test is a test of normality. It was published in 1965 by Samuel Sanford Shapiro and Martin Wilk.[1] The Shapiro–Wilk test tests the null hypothesis that

en.wikipedia.org

 

표본의 크기가 작다와 크다에 대한 모호한 표현을 해소하기 위해 위 위키피다의 문구를 빌리면 아래와 같다.

 

Royston은 표본 크기를 50에서 2,000으로 확장한 값을 계산하는 알고리즘을 제공하여 계수 벡터를 계산하는 대체 방법을 제안했습니다. [7] 이 기술은 GraphPad Prism , Stata, [8] [9] SPSS 및 SAS를 포함한 여러 소프트웨어 패키지에서 사용됩니다 . [10] Rahman과 Govidarajulu는 표본 크기를 최대 5,000개까지 확장했습니다. [11]

 

샤피로 검정은 표본이 작은 데이터에 잘 작동하는 것으로 알려져있고, 표본 크기(n)의 가장 이상적인 수치는 50 이하이다.

 

여러 논문에서는 20, 50을 번갈아가며 비교하곤 한다.

 

하지만, 위키피디아에서는 기존 방식이 아닌 몇몇 방법들을 통해 표본 크기(n)이 50에서 최대 5,000개 사이에도 사용할 수 있도록 제안한 것으로 보인다.

 

파이썬 코드 중 실제로 샤피로 검정 코드 documentation을 참고하면 아래 사진에서 보이다 싶이 5,000개 이하로 돌리기를 권장한다.

https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.shapiro.html

 

scipy.stats.shapiro — SciPy v1.11.2 Manual

[2] (1,2) Shapiro, S. S. & Wilk, M.B (1965). An analysis of variance test for normality (complete samples), Biometrika, Vol. 52, pp. 591-611. [3] Razali, N. M. & Wah, Y. B. (2011) Power comparisons of Shapiro-Wilk, Kolmogorov-Smirnov, Lilliefors and Anders

docs.scipy.org

 

하여, 직접 코드로 구현해보고자 한다.

 

먼저, 가설 검정에 대한 프로세스를 아주 간단히 정리한 것을 먼저 보고가자.

( 디테일하게 풀면 사실 틀린 표현이긴 하나, 정규성 검정에 한해서 간단하게 보고 넘어가자.)

위 코드 처럼 평균과 스케일 그리고 표본 개수에 대해 정의를 내린 뒤 정규 분포에 만족하도록 설정 한 뒤 추출하여 샤피로 테스트를 진행해보고자 한다.

 

먼저, n이 30 이하인 20으로 진행해본 결과 대부분읜 p-value들이 0.1 이상으로 나온 것을 확인할 수 있다.

(대부분 정규성을 만족한다는 가설을 채택)

30개로 돌려도 20개와 동일한 결과를 보인다.

하지만, 50개 일때 딱 1개의 값이 0.1 보다 작은 값을 도출했다.

분포는 정규분포지만 랜덤하게 생성되니, 다시 코드를 돌리며 p-value가 0.1 이하일때 그림을 직접 그려보게 했다.

완전하게 정규분포를 벗어나는 것 처럼 보이지는 않지만, 처음지정한 n의 표본수가 작기 때문에 이러한 중간에 튀는 현상이 일어나는 것으로 보인다.

 

이후에는 20부터 8000까지 한번 전체적으로 위와 같은 로직으로 돌려보았다.

 

4천개 기준으로는 그림으로도 완벽한 정규분포에 가깝지만 p-value가 0.1 이하인 것들을 확인할 수 있었다.

5천개를 넘어가는 순간 경고 문구가 뜨는 것을 볼 수 있다.

 

이제는 실제 데이터(정확히는 seaborn의 내재 데이터인 'mpg')를 활용해서 직접 정규성 검정을 진행해보자.

acceleration 컬럼은 그림과 같이 정규분포 형태를 띄며 p-value 또한 약 0.04로 유의수준 0.01 기준 정규성을 만족한다고 볼 수 있다.

 

그러나, displacement 와 mpg 컬럼은 매우 작은 수로 유의수준 0.01 보다 작은 것을 확인할 수 있었고 이는 정규성을 충족하지 못한다고 보여진다.

 

샤피로 검정의 가장 치명적인 단점이 한 가지가 있다.

우리가 흔히 쓰는 만족도 설문조사에서 사용되는 리커트 5점 척도에 해당하는 데이터는 유의하지 않다고 나온다.

 

바로, 구간 변수 타입(=등간척도)에 해당하는 데이터는 검정이 제대로 이루어지지 않는다는 것이다.

 

코드로 바로 확인해보자.

히스토그램을 보면 누가 봐도 정규분포에 유사하지만, Q-Q plot을 보면 계단 형태 처럼 보여진다.

이를 해결하기 위해서는 구간이 나뉘는 부분을 연속형 변수화 해서 진행을 하던지 아니면 샤피로 검정이 아닌 왜도, 첨도를 고려하는 다른 정규성 검정 방법을 사용하는 것을 추천한다.

728x90
반응형