다중 모달 분포 또는 단봉 분포에만 상자 및 수염 도표를 사용할 수 있습니까?
다중 모달 분포 또는 단봉 분포에만 상자 및 수염 도표를 사용할 수 있습니까?
답변:
문제는 일반적인 boxplot *이 일반적으로 모드 수를 표시 할 수 없다는 것입니다. 일부 (일반적으로 드문 경우) 상황에서 가장 적은 수의 모드가 1을 초과한다는 명확한 표시를 얻을 수 있지만,보다 일반적으로 주어진 상자 그림은 하나 이상의 더 많은 수의 모드와 일치합니다.
* 밀도의 변화를 나타 내기 위해 더 많은 것을 나타내는 일반적인 박스 플롯의 여러 가지 수정이 제안되었으며 캠은 여러 모드를 식별하는 데 사용되지만 이것이이 질문의 목적이라고 생각하지 않습니다.
예를 들어,이 그림 은 적어도 두 가지 모드 가 있음을 나타냅니다 (데이터는 정확히 두 가지를 갖도록 생성되었습니다)-
반대로,이 배포판에는 두 가지 매우 명확한 모드가 있지만 상자 그림에서 전혀 알 수 없습니다.
사실, 그림 (1) 여기 쇼 같은 상자 플롯 4 개 개의 다른 데이터 세트 (내가 믿는 나중에 [1]에 발표 된 작업 용지입니다).
나는 그 데이터를 가지고 있지 않지만, 5 개의 숫자 요약과 관련된 위의 링크에 표시된 것처럼 유사한 데이터 세트를 만드는 것은 사소한 문제입니다. 다섯 숫자 요약은 우리를 제한합니다.
다음은 논문의 데이터와 유사한 데이터를 생성하는 R 코드입니다.
x1 = qnorm(ppoints(1:100,a=-.072377))
x1 = x1/diff(range(x1))*18+10
b = fivenum(x1) # all of the data has this five number summary
x2 = qnorm(ppoints(1:48));x2=x2/diff(range(x2))*.6
x2 = c(b[1],x2+b[2],.31+b[2],b[4]-.31,x2+b[4],b[5])
d = .1183675; x3 = ((0:34)-34/2)/34*(9-d)+(5.5-d/2)
x3 = c(x3,rep(9.5,15),rep(10.5,15),20-x3)
x4 = c(1,rep(b[2],24),(0:49)/49*(b[4]-b[2])+b[2],(0:24)/24*(b[5]-b[4])+b[4])
다음은 위의 데이터에 대한 논문의 디스플레이와 유사한 표시입니다 (여기에서 네 개의 상자 그림을 모두 표시하는 것을 제외하고).
그러나 히스토그램에도 문제가있을 수 있습니다 . 실제로, 세 번째 "피크"히스토그램의 분포가 실제로 명백히 이봉이기 때문에 우리는 여기서 문제 중 하나를 본다. 히스토그램 빈 너비는 표시하기에 너무 넓습니다. 또한 Nick Cox가 의견에서 지적한 것처럼 커널 밀도 추정은 모드 수의 인상에 영향을 줄 수 있습니다 (때때로 모드 번짐 ... 또는 때로는 원래 분포에 존재하지 않는 작은 모드 제안). 많은 공통 디스플레이의 해석에주의해야합니다.
다중 양식을 더 잘 표시 할 수있는 상자 그림의 수정이 있습니다 (수많은 음모, 바이올린 음모 및 콩 음모). 어떤 상황에서는 유용 할 수 있지만 모드를 찾는 데 관심이있는 경우 일반적으로 다른 종류의 표시를 봅니다.
x4
[1] : Choonpradub, C., & McNeil, D. (2005),
"상자 그림을 개선 할 수 있습니까?"
송클라 나 카린 J. 과학 테크 놀. , 27 : 3, 649-657 쪽.
http://www.jourlib.org/paper/2081800
pdf
R을 사용한 다중 양식 탐지에는 여러 가지 옵션이 있습니다. 아래 차트의 데이터는 세 가지 모드 (-3,0,1)로 생성되었습니다. 박스 플롯은 다른 것들에 의해 분명히 성능이 뛰어납니다 (바이올린 플롯은 기본 커널 밀도 설정이 다른 것처럼 보입니다) .0과 1 모드를 구별하는 것은 없습니다. 컴퓨터 시대에 더 이상 박스 플롯을 사용해야하는 이유는 거의 없습니다. 왜 정보를 버리는가?
dat <- c(rnorm(500, -3, 1), rnorm(200, 0, 1), rnorm(300, 1, 1))
par(mfrow=c(2, 2))
boxplot(dat, horizontal=TRUE, main="Boxplot")
require(beanplot)
beanplot(dat, horizontal=TRUE, main="Beanplot")
require(viopoints)
viopoints(dat, horizontal=TRUE, main="Viopoints")
require(vioplot)
vioplot(dat, horizontal=TRUE)
title("Violin Plot")