정규성 검토 - Q-Q(Quantile - Quantile) Plot

2020. 5. 20. 13:09통계 빠개기/Statistics

https://m.blog.naver.com/PostView.nhn?blogId=kjihoon0914&logNo=221214498142&proxyReferer=https:%2F%2Fwww.google.com%2F

 

20. (R) 통계 - 정규성 검토 (Q-Q plot)

Q-Q plot (Quantile-Quantile Plot)통계 추론은 대부분이 모집단이 정규분포를 따른다는 가정하에 진...

blog.naver.com

 

20. (R) 통계 - 정규성 검토 (Q-Q plot)



Q-Q plot (Quantile-Quantile Plot)

통계 추론은 대부분이 모집단이 정규분포를 따른다는 가정하에 진행이 됩니다.
이 이유로 통계적 추론의 방법을 적용하기 전 데이터에 대한 정규모집단의 가정에 대한 검토가 필요합니다.

이번 글에서는 이 정규분포 가정을 하는 방법 중 QQplot(정규분포 분위수 대조도)를 그리는 방법과 이에 대한 원리에 대해 이야기해보려 합니다.

Q-Q plot 이란

qqplot은 분위수대조도로 불리며 정규모집단 가정을 하는 방법 중 하나이며 수집 데이터를 표준정규분포의 분위수와 비교하여 그리는 그래프입니다.

는 간단하게 데이터의 정규성 가정에 대한 검토를 가능하게 해줍니다.
아래의 그림이 qqplot의 일종으로 모집단이 정규성을 따른다면 아래와 같이 직선의 형태로 그려지게 됩니다.

지금부터 이 그래프를 그리는 방법과 이를 통해 정규성을 검토하는 방법에 대해 알아보겠습니다.

분위수(Quantile)에 대한 개념이 먼저 필요합니다.
분위수란 데이터의 분포에서 전체 넓이를 일정 비로 나누어 위치에 있는 값을 의미합니다.

* 많은 분들이 사분위수(quartile)과 분위수(quantile)의 발음이 유사하여 개념을 혼동하는 분들이 계십니다.
사분위수는 통계학에서
Min(최솟값) - Q1(제1 분위수 ) - Median(중위수) - Q3(제3 분위수) - Max(최댓값)을 의미하는 개념으로 각 0분 위수, 1/4 분위수, 2/4 분위수, 3/4 분위수, 4/4 분위수를 의미합니다.
개념과 발음이 유사하여 혼동하시는 분들이 많으니 혼동에 유의하시는 게 좋습니다!

위 사분위수에 대한 개념이 분위수 사용의 예라고 볼 수 있을 것 같습니다.

qqplot에서도 마찬가지로 위와 같은 분위수 개념이 적용됩니다.
이는 표준정규분포의 분위수와 이에 대응하는 분포의 분위수를 x, y 좌표평면에 plotting 하는 개념입니다.

확률 표본(X1, X2, X3, X4.... X100)이 평균이 mu, 표준편차가 std인 정규모집단을 따르는 모집단에서 추출된 표본인지에 대한 검토를 예로 들어보겠습니다.

표준정규분포의 분위수는 1~n(표본의 수)의 백분율 값만큼의 표준정규분포 X좌표 value가 됩니다.
예제의 분위수는 Z
0.01Z0.02Z0.03 ....Z1의 값이 됩니다.
이를 qnorm(quantile, mu, sd) 함수를 이용하여 각 백분율 값의 분위수를 구하면 아래와 같이 산출됩니다.

Quantile<-c(1:100)/100 z<-qnorm(Quantile,0,1) z [1] -2.32634787 -2.05374891 -1.88079361 -1.75068607 -1.64485363 -1.55477359 -1.47579103 [8] -1.40507156 -1.34075503 -1.28155157 -1.22652812 -1.17498679 -1.12639113 -1.08031934 [15] -1.03643339 -0.99445788 -0.95416525 -0.91536509 -0.87789630 -0.84162123 -0.80642125 [22] -0.77219321 -0.73884685 -0.70630256 -0.67448975 -0.64334541 -0.61281299 -0.58284151 [29] -0.55338472 -0.52440051 -0.49585035 -0.46769880 -0.43991317 -0.41246313 -0.38532047 [36] -0.35845879 -0.33185335 -0.30548079 -0.27931903 -0.25334710 -0.22754498 -0.20189348 [43] -0.17637416 -0.15096922 -0.12566135 -0.10043372 -0.07526986 -0.05015358 -0.02506891 [50] 0.00000000 0.02506891 0.05015358 0.07526986 0.10043372 0.12566135 0.15096922 [57] 0.17637416 0.20189348 0.22754498 0.25334710 0.27931903 0.30548079 0.33185335 [64] 0.35845879 0.38532047 0.41246313 0.43991317 0.46769880 0.49585035 0.52440051 [71] 0.55338472 0.58284151 0.61281299 0.64334541 0.67448975 0.70630256 0.73884685 [78] 0.77219321 0.80642125 0.84162123 0.87789630 0.91536509 0.95416525 0.99445788 [85] 1.03643339 1.08031934 1.12639113 1.17498679 1.22652812 1.28155157 1.34075503 [92] 1.40507156 1.47579103 1.55477359 1.64485363 1.75068607 1.88079361 2.05374891 [99] 2.32634787 Inf

하지만 이 분위수에서 찾아 볼 수 있는 문제가 하나 있습니다. Inf 값입니다.
정규분포는 -Inf < Z< Inf 값을 갖기 때문에 100%에 대한 표현은 무한대가 될 수밖에 없습니다.
 이 이유로 표준정규분포의 분위수는 보정이 필요합니다.
이 값에 대한 정의는 표준이 없지만 흔히 아래와 같이 보정을 합니다.

이 보정 방법을 이용하여 위 값을 다시 산출하겠습니다.

Quantile2<-(c(1:100)-3/8)/(100+1/4) z2<-qnorm(Quantile2,0,1) z2 [1] -2.49859056 -2.13920644 -1.94008733 -1.79710343 -1.68354660 -1.58829587 -1.50560122 [8] -1.43208429 -1.36558319 -1.30462682 -1.24816654 -1.19542711 -1.14581834 -1.09887991 [15] -1.05424541 -1.01161808 -0.97075394 -0.93144979 -0.89353437 -0.85686193 -0.82130718 [22] -0.78676158 -0.75313038 -0.72033023 -0.68828739 -0.65693619 -0.62621784 -0.59607939 [29] -0.56647295 -0.53735497 -0.50868567 -0.48042856 -0.45254999 -0.42501884 -0.39780617 [36] -0.37088499 -0.34423001 -0.31781741 -0.29162473 -0.26563063 -0.23981482 -0.21415788 [43] -0.18864117 -0.16324671 -0.13795711 -0.11275545 -0.08762521 -0.06255020 -0.03751446 [50] -0.01250221 0.01250221 0.03751446 0.06255020 0.08762521 0.11275545 0.13795711 [57] 0.16324671 0.18864117 0.21415788 0.23981482 0.26563063 0.29162473 0.31781741 [64] 0.34423001 0.37088499 0.39780617 0.42501884 0.45254999 0.48042856 0.50868567 [71] 0.53735497 0.56647295 0.59607939 0.62621784 0.65693619 0.68828739 0.72033023 [78] 0.75313038 0.78676158 0.82130718 0.85686193 0.89353437 0.93144979 0.97075394 [85] 1.01161808 1.05424541 1.09887991 1.14581834 1.19542711 1.24816654 1.30462682 [92] 1.36558319 1.43208429 1.50560122 1.58829587 1.68354660 1.79710343 1.94008733 [99] 2.13920644 2.49859056

위와 같이 1.0 분위수의 값이 -2.4985로 보정 되었습니다.
우리는 지금 산출한 표준정규분포의 분위수 값과 표본 데이터를 크기순으로 정렬(X1<X2<X3... Xn) 한 값을 가지고 plotting 하게 되면 qqplot을 얻을 수 있게 됩니다.

Quantile2<-(c(1:100)-3/8)/(100+1/4) z2<-qnorm(Quantile2,0,1) x<-rnorm(100,30,5) # 평균 30, 표준편차 5의 정규분포에서 랜덤샘플링 x<-sort(x) # 표본 크기순으로 정렬 mean(x) #표본의 평균 [1] 30.12469 sd(x) # 표본의 분산 [1] 5.303162 plot(z2,x)

위 표본 데이터는 실제 평균 30, 표준편차 5 인 정규분포에서 랜덤 샘플링을 했기 때문에 직선 형태를 갖추어 표본의 정규성을 만족시킬 수 있었습니다.

이를 간단하게 사용하기 위하여 R function으로 소스 코드를 만들어 보겠습니다.

QQplot<-function(x){ Quantile<-(c(1:length(x))-3/8)/(length(x)+1/4) z<-qnorm(Quantile,0,1) x<-sort(x) return(plot(z,x,main="QQplot")) }

R 기본 내장 패키지인 stats에도 qqplot을 그려주는 함수가 내장되어 있습니다. 이와 비교해보겠습니다.
데이터는 R에서 기본으로 제공하는 iris의 Sepal.Length를 이용하였습니다,

data(iris) x<-iris$Sepal.Length par(mfrow=c(1,2)) qqnorm(x) QQplot(x)

왼쪽이 R의 기본 내장함 수로 제공되는 qqnorm을 이용하였고 오른쪽이 QQplot()을 이용한 plot입니다.
동일한 형태의 plot을 얻을 수 있을 것을 확인할 수 있습니다.

여기서 짚고 넘어가야 할 부분은 위 qqplot을 정식으로 해석하는 방법입니다.
가장 일반적으로 qqplot 내 점들이 기울기가 45도인 직선에 점들이 밀집되어있어야 정규분포를 가정할 수 있습니다.
qqnorm과 마찬가지로 qqline이라는 R 기본 내장함수가 이 직선을 그려줍니다.
지금 그려지는 직선 주위에 데이터가 밀집되어 있다면 그 가정을 만족한다고 볼 수 있습니다.

qqnorm(x) qqline(x,col="red",lwd=2)

 

정규성 검토의 다른 방법

정규성 검토에는 qqplot을 그려 검토하는 방법 말고도 여러 가지 방법이 존재합니다.

가장 간단하게 확인하려 한다면 히스토그램을 그려 그 자료의 분포를 살피는 방법이 있습니다.
표본의 분포를 histogram이나 density plot을 그려 정규분포와 유사한가 살피는 방법입니다.

hist(x,breaks = 15,probability = T,ylim =c(0,0.7),xlim=c(3,9));par(new=T) plot(density(x),ylim =c(0,0.7),xlim=c(3,9),main="",col="red",lwd=2);par(new=T)

마지막으로 소개드릴 방법은 shapiro-test입니다.  (* R에서 내장함수로 제공하여 추가합니다.)
(통계추론과 검정에 대해 포스팅 하지 않았으니 간단히 소개 정도만 하겠습니다.)

shapiro.test(x)는 R에서 기본으로 제공하는 내장 함수입니다.
이는 정규성 검토를 통계적 검정을 통해 결과를 제공합니다.

shapiro.test(x) Shapiro-Wilk normality test data: x W = 0.97609, p-value = 0.01018

추후 통계적 추정과 검정에 대해 이야기하면서 좀더 깊게 설명 드리겠습니다.

*qqplot에 해석에 대한 부분은 다음에 시간내서 좀 더 추가 할 예정입니다.
(데이터 분포형태에 따른 해석)

여기까지 정규성 검토에 대한 글을 마치겠습니다.