Q-Q Plot

작성자안재형|작성시간13.09.18|조회수1,044 목록 댓글 0

Q-Q는 Quantile vs Quantile을 그린 그림입니다.

즉 두 분포의 quantile를 x-y에 놓고 비교한 그림입니다.


다음 데이터를 정규분포에서 하나 만들지요.

x=rnorm(1000)


### 제 책 33page에 나오는 Q-Q normality plot를 그려보죠.


데이터 x와 정규분포에서 나오는 이론적인 quantile을 비교한겁니다.


데이터 x의 quantile은 그냥 sort를 하면 된다고 이해하면 됩니다. empirical quantile이라고 생각하죠.

sort(x)


정규분포에서 나오는 이론적인 quantile은 위의 데이터가 1000개 이므로 1/10000, 2/1000, 3/1000, .... 1000/1000의 확률에 해당되는 정규분포값을 구합니다.

qnorm((1:1000)/1000)


복잡해보이지만

Pr(Z < 1.96) = 0.975의 1.96을 qnorm(0.975)로 구하는걸 기억하기 바랍니다. 정규분포의 누적분포에서 0.975에 확률에 해당되는 Z값은 1.96입니다.


qnorm((1:1000)/1000) 은 1/10000, 2/1000, 3/1000, .... 1000/1000에 해당되는 Z값을 구합니다.


이것을 sort(x)와 그리면 됩니다.

plot(sort(x) ~ qnorm((1:1000)/1000))


위의 그래프가 

qqnorm(x) 와 동일함을 확인해보세요.


# 참고로 같은 수만큼 정규분포에서 표본을 뽑은 sort(rnorm(1000))와 비교하면 이론적인 Quantile은 아니지만 그래도 이론적 Quantile과 비스름하게 구할수도 있겠죠.

plot(sort(x) ~ sort(rnorm(1000)))


이 방법의 단점은 돌릴 때마다 약간씩 모양이 다르다는 거죠.

이 방법을 Monte-Carlo 방법이라고 할수 있는데 위와같이 이론적인 값을 구할 수 있을 때는 사용되지않겠지만

이론적인 값을 구하기 불가능한 경우에는 Monte-Carlo 방법이 아주 효과적입니다.



#### Uniform과 비교

uniform과 비교하려면 더 쉽습니다.


plot(sort(x)) 라고 하면 끝입니다.

plot(sort(x))라고 하면 x축이 1:1000으로 자동으로 책정됩니다.

이건 plot(sort(x) ~ (u=1:1000))와 동일합니다.


1:1000까지 그냥 쭉 나열한게 (1, 10000)인 uniform 분포입니다.

이건 discrete한 uniform이죠. 그러나 데이터가 많아서 연속형하고 큰 차이는 없습니다.


(1:1000)/1000로 1000으로 나눠줘야 (0, 1)사이의 값을 갖으나

1000으로 나눈다고 달라지는건 x축의 scale뿐이니 중요하지않습니다.


### 실제 통계패키지

위의 경우 n=1000이어서 1:1000을 단순히 1000으로 나눠서 확률 1/1000, 2/1000, 3/1000,..., 1000/1000에 해당되는 quantile을 구했습니다. 그러나 이런 식으로 하면 n=1000같이 테이터가 클때는 문제가 없으니, 데이터가 작을 때 연속성이 문제가 되므로 

실제 통계패키지는 

i/n, i=1,2,3,..., n  대신

(i- 작은수) / (n+작은수) , i=1,2,3... n 으로 약간의 변형을 줍니다.




다음검색
현재 게시글 추가 기능 열기

댓글

댓글 리스트
맨위로

카페 검색

카페 검색어 입력폼