일반적으로 통계학 개론에서 설명하는 (사)분위수의 결과를 R/Excel 에서 확인해 보면 사전에 짐작한 수치와 다르게 나오는 경우가 있다.
R 내에서도 fivenum과 quantile(or summary)이 다르다. 물론 Excel에서도 Quantile, Quantile.INC(EXC)가 다르다.
왜 그럴까? 궁금해서 찾아봤다. 참 쉽지 않았다, 관심 있는 사람들이 많지 않나 보다^^;
차후 필요 시 참고하기 위해 관련 링크와 간단히 정리한 내용을 적어둔다. 이 글을 읽으시는 분들에겐 친절하거나 상세한 설명은 아니니 양해해 주시고, 작게나마 통계학 개론/R 공부하시는 분들에게 도움이 되면 좋겠다 😀
우선 10:100까지 10씩 증가하는 10개의 데이터로 보면,
> (data <- seq(10, 100, by = 10)) [1] 10 20 30 40 50 60 70 80 90 100 > quantile(data) 0% 25% 50% 75% 100% 10.0 32.5 55.0 77.5 100.0 |
내가 예상했던 숫자와 다르다, 왜 그럴까? quantile()의 도움말을 보면https://www.rdocumentation.org/packages/stats/versions/3.5.0/topics/quantile
어렵다^^, 추가로 아래 자료도 참조. Table2 링크에서 알고리즘별 차이를 표로 볼 수 있고. Excel 등 다양한 설명이 포함되어 있음
https://www.tandfonline.com/doi/full/10.1080/10691898.2006.11910589
결론은 quantile() 알고리즘이 총 9가지고 있고 type 인수를 지정해서 원하는 걸 선택할 수 있다. 이는 사분위수(IQR) 등에도 영향을 미친다.
그래서 몇 가지 type에 결과를 비교해 봤다,
> #type = 7(default), S 언어/Excel/MSSQL에서 사용 > quantile(data, type = 7) 0% 25% 50% 75% 100% 10.0 32.5 55.0 77.5 100.0 > > #type = 8, Hyndman and Fan 추천 > quantile(data, type = 8) 0% 25% 50% 75% 100% 10.00000 29.16667 55.00000 80.83333 100.00000 > > #type = 5, Minitab and SPSS 사용 > quantile(data, type = 5) 0% 25% 50% 75% 100% 10 30 55 80 100 |
대충 차이점은 느껴진다, 그래도 명확히 하기 위해서 자료에 언급된 두 가지 type 알고리즘을 기록해둔다.
(참고. N은 자료의 수, k는 사분위중 특정 분위)
type = 7) (N-1) * k/4 + 1 = R.
r : R에 해당하는 원소 + ([R + 1 원소] – [R 원소]) * k/4)
(jskim: 위 식도 어렵다. 쉽게 풀어서 예를 들어, 3분위수 R = 7.75 이면 (7번째 위치값 * (1-R)) + (8번째 위치값 * 0.75). 물론, 위치가 정수로 떨어지면 그 값.
type = 5) N * k/4 = R.
r : 실수이면 round(R.r) Index로 사용해서 해당 원소 선택, 결과가 정수이면 (R + (R +1)) / 2
요약: 사분위수 구하는 알고리즘은 다양하다, 필요에 따라 조정해서 사용하되 무엇을 썼는지 꼭 언급해야한다.
끝.