두꺼운 꼬리 분포에 해당하는 상자 그림?


13

대략 정규 분포 된 데이터의 경우 상자 그림을 사용하면 특이 치의 존재뿐만 아니라 데이터의 중앙값과 확산을 빠르게 시각화 할 수 있습니다.

그러나 더 두꺼운 꼬리 분포의 경우 특이점이 IQR의 고정 된 요인을 벗어난 것으로 정의되기 때문에 많은 점이 특이 치로 표시되며, 이는 물론 꼬리가 두꺼운 분포에서 훨씬 더 자주 발생합니다.

사람들이 이런 종류의 데이터를 시각화하기 위해 무엇을 사용합니까? 더 적응 된 것이 있습니까? R에서 ggplot을 사용합니다.


1
두꺼운 꼬리 분포의 표본은 중간 50 %에 비해 큰 범위를 갖는 경향이 있습니다. 그것에 대해 무엇을하고 싶습니까?
Glen_b-복지국 모니카

7
몇 가지 관련 스레드가 이미 있습니다 (예 : stats.stackexchange.com/questions/13086/…) 짧은 대답에는 먼저 변환이 포함됩니다! 히스토그램; 다양한 종류의 Quantile 도표; 다양한 종류의 줄거리를 제거하십시오.
닉 콕스

@ Glen_b : 정확히 내 문제입니다. 상자 그림을 읽을 수 없게 만듭니다.
static_rtti

2
건은 이상 한 가지 있어요되는 수도 당신이 무엇을 할 수 있도록 ... 할 수 싶지 는 어떻게?
Glen_b-복지국 모니카

2
1970 년대에 존 터키 (John Tukey)가 명명 한 (재) 도입으로 상자 그림을 알고 있다는 사실에 주목할 필요가있다. (그들은 수십 년 전에 기후학과 지리학에서 사용되었습니다.) 그러나 그의 1977 년 탐색 데이터 분석 (독서, MA : 애디슨-웨슬리) 에 관한 책에서 그는 두꺼운 꼬리 분포를 다루는 것에 대해 상당히 다른 생각을 가지고 있습니다. 아무도 붙 잡지 않은 것 같습니다. 그러나 Quantile 플롯은 비슷한 정신에 있습니다.
닉 콕스

답변:


8

OP가 가지고있는 핵심적인 문제는 꼬리가 많은 데이터가 있다는 것입니다. 현재 답변의 대부분이 실제로 그 문제 를 전혀 다루지 않는다고 생각 하므로 이전 의견을 답변으로 홍보하고 있습니다.

상자 그림을 유지하려는 경우 일부 옵션이 아래에 나열되어 있습니다. R에서 기본 문제를 보여주는 데이터를 만들었습니다.

 set.seed(seed=7513870)
 x <- rcauchy(80)
 boxplot(x,horizontal=TRUE,boxwex=.7)

불만족스러운 상자 그림

데이터의 중간 절반은 폭이 2mm 인 작은 스트립으로 축소됩니다. 같은 문제는 QQ 도표, 스트립 도표, 벌집 / 벌집 도표 및 바이올린 도표를 포함하여 대부분의 다른 제안에 영향을 미칩니다.

이제 몇 가지 잠재적 인 해결책 :

1) 형질 전환 ,

로그 또는 역수가 읽을 수있는 상자 그림을 생성하는 경우 매우 좋은 아이디어 일 수 있으며 원래 축척은 여전히 ​​축에 표시 될 수 있습니다.

가장 큰 문제는 때때로 '직관적 인'변환이 없다는 것입니다. 양자화 자체가 단조로운 변환으로 충분히 번역되지만 울타리는 그렇지 않은 작은 문제가 있습니다. 변환 된 데이터를 박스 플롯하면 (여기에서 한 것처럼) 수염은 원래 플롯과 다른 x 값에 있습니다.

변환 된 값의 상자 그림

여기서 나는 역 고압 -sin (asinh)을 사용했다; 꼬리에서 로그와 비슷하고 선형 0과 비슷하지만 사람들은 일반적으로 직관적 인 변환을 찾지 않으므로 일반적으로 로그와 같이 상당히 직관적 인 변환이 분명하지 않으면이 옵션을 권장하지 않습니다. 이를위한 코드 :

xlab <- c(-60,-20,-10,-5,-2,-1,0,1,2,5,10,20,40)
boxplot(asinh(x),horizontal=TRUE,boxwex=.7,axes=FALSE,frame.plot=TRUE)
axis(1,at=asinh(xlab),labels=xlab)

2) 스케일 브레이크-극단적 인 이상 값을 가져 와서 중앙보다 훨씬 더 압축 된 스케일로 각 끝에 좁은 창으로 압축합니다. 이렇게하면 전체 규모에 걸쳐 완전한 휴식을 취하는 것이 좋습니다.

스케일 구분이있는 상자 그림

opar <- par()
layout(matrix(1:3,nr=1,nc=3),heights=c(1,1,1),widths=c(1,6,1))
par(oma = c(5,4,0,0) + 0.1,mar = c(0,0,1,1) + 0.1)
stripchart(x[x< -4],pch=1,cex=1,xlim=c(-80,-5))
boxplot(x[abs(x)<4],horizontal=TRUE,ylim=c(-4,4),at=0,boxwex=.7,cex=1)
stripchart(x[x> 4],pch=1,cex=1,xlim=c(5,80))
par(opar)

3) 극단적 인 특이 치의 트리밍

4) 내가 극단적 인 "화살표"라고 부르는 것-트리밍과 비슷하지만 트림 된 값의 개수가 각 끝에 표시됩니다.

극값을 카운트하고 화살표를 가리키는 상자 그림

xout <- boxplot(x,range=3,horizontal=TRUE)$out
xin <- x[!(x %in% xout)]
noutl <- sum(xout<median(x))
nouth <- sum(xout>median(x))
boxplot(xin,horizontal=TRUE,ylim=c(min(xin)*1.15,max(xin)*1.15))
text(x=max(xin)*1.17,y=1,labels=paste0(as.character(nouth)," >"))
text(x=min(xin)*1.17,y=1,labels=paste0("< ",as.character(noutl)))

시간을내어 작성해 주셔서 감사합니다. 이것은 내가 기대했던 종류의 대답입니다. 지금은 단지 : R 이러한 플롯 구현하는 방법을 찾아야
static_rtti

1
일부 코드가 있습니다. 나는 3)에 대한 코드를주지 않았다. 왜냐하면 4의 간단한 버전이기 때문이다. 당신은 그것에서 라인을 잘라서 얻을 수 있어야합니다.
Glen_b-복지국 모니카

우연히이 아이디어의 대부분은 여기에 제안 된 다른 훌륭한 디스플레이-지터가있는 스트립 차트 및 벌집 / 벌집 플롯 및 바이올린 플롯과도 작동합니다.
Glen_b-복지 주 모니카

다시 감사합니다. 이 답변은 꽤 많은 사람들에게 유용 할 것이라고 확신합니다.
static_rtti

나는 이것이 내 대답보다 훨씬 나은 문제를 해결한다는 데 동의합니다. 좋은 물건.
TooTone

4

개인적으로 나는 적어도 데이터에 대한 느낌을 얻기 위해 지터가 있는 스트립 플롯 을 사용하고 싶습니다 . 아래 그림은 R에 격자가 있습니다 (죄송합니다 ggplot2 아님). 이 그림은 해석하기 매우 쉽기 때문에 마음에 듭니다. 당신이 말했듯이, 이것에 대한 한 가지 이유는 변환이 없기 때문입니다.

df <- data.frame(y1 = c(rnorm(100),-4:4), y2 = c(rnorm(100),-5:3), y3 = c(rnorm(100),-3:5))
df2 <- stack(df)
library(lattice)
stripplot(df2$values ~ df2$ind, jitter=T)

여기에 이미지 설명을 입력하십시오

beeswarm의 패키지 (제안에 대한 @January 덕분에) 좋은 stripplot에 대한 대안을 제공합니다.

beeswarm(df2$values ~ df2$ind)

여기에 이미지 설명을 입력하십시오

이 근사 적으로 정규 분포 것 같은 데이터로, 시도하는 또 다른 한가지는 qqplot, 수 있습니다 qqnorm 이 경우이다.

par(mfrow=c(1,3))
for(i in 1:3) { qqnorm(df[,i]); abline(c(0,0),1,col="red") }

여기에 이미지 설명을 입력하십시오


2
나도 stripplots를 좋아하지만 문제는 두꺼운 꼬리 분포로 무엇을해야하는지에 관한 것이다.
닉 콕스

1
요점은 예를 들어 qqnorm과 같은 조언이 질문과 일치하지 않는다는 것입니다. 앞서 언급했듯이 다른 종류의 Quantile-Quanttile Plot은 매우 좋은 아이디어 일 수 있습니다.
닉 콕스

1
R의 스트립 플로트보다 beeswarm패키지 의 플롯이 더 좋습니다 .
1 월

1
@ 1 월 그래, 정말 멋지다. 나는 그것을 내 대답에 추가하고있다.
TooTone

1
내 대답은 stats.stackexchange.com/questions/13086 에 게시되어 있으며이 질문의 ( 결과적으로 더 좁은) 버전으로 간주됩니다. "상자 그림 알고리즘을 변경하지 말고 데이터를 다시 표현하십시오."라고 요약했습니다. 이 질문에서 "적응 된 (adapted)"에 의해 암시 된 문제는 유용한 재 발현 변수를 찾기위한 탐색 데이터 분석의 표준 기술에 의해 해결됩니다.
whuber

2

상자 그림을 고수 할 수 있습니다. 수염을 정의하는 데는 여러 가지 가능성이 있습니다. 꼬리 두께, 샘플 수 및 특이 치에 대한 내성에 따라 두 개 이하의 극단적 인 Quantile을 선택할 수 있습니다. 귀하의 문제를 감안할 때 IQR을 통해 정의 된 수염을 피할 것입니다.
물론 데이터를 변환하려는 경우가 아니면이 경우 이해가 더 어려워집니다.


1
마지막 문장이 설명없이 통과 할 수 없습니다. 변환은 만병 통치약이 아니지만 고도로 치우친 데이터를 변환하지 않아도 이해하기가 쉽지 않습니다. 데이터가 모두 양수이면 적어도 근, 로그 또는 역수를 사용하여 시도 할 수 있습니다. 실제로 도움이되지 않으면 물러서십시오.
닉 콕스

비뚤어진 데이터를 이해하는 데 어떤 어려움이 있습니까? IQR 의존 수염을 가진 사람? 가벼운 꼬리에도 문제가 있습니다. 그리고 우리는 왜 도와 무관하게 두꺼운 꼬리에 대해 이야기하고 있지 않습니까? 변형 된 꼬리는 확실히 더 규칙적인 상자 그림을 제공하지만, 이해를 돕기 위해 해석 레이어를 추가합니다. 그러나 원하는 경우이 기능을 기능이라고 할 수 있습니다.
Quartz

2
변환은 종종 도움이됩니다. 이것이 나의 결론입니다. 로그 스케일에서 (특히) 많은 것들이 더 명확 해 보인다는 것을 배우지 않은 통계가는 가장 오래되고 가장 효과적인 트릭 중 하나에서 심각하게 빠져 있습니다. 당신은 그것을 부인하는 것처럼 보였습니다. 나는 당신을 오독하기를 바랍니다.
닉 콕스

1
동의하지 않습니다. 나는 항상 치우친 데이터를 변형시키고 내 경험은 이것이 미학의 문제 이상이라는 것입니다. 종종 작동합니다. 익명의 통계학자는 얼마 전에 로그 정규가 정규보다 더 정상이라고 썼다. 그 / 그녀는 조금 뻔뻔했지만 ​​중요한 사실도 있습니다. (많은 다른 배포판이 더 적합하지 않을 수도 있습니다.)
Nick Cox

1
나는 다른 사람들이 판단 할 수 있도록 여기서 멈춰야한다고 생각하지만, 내 견해는 편심하지 않습니다. 변환은 stats.stackexchange.com/questions/13086/ 에서 한 가지 가능성으로 논의됩니다 .… 조언이 적절 하지 않은 이유를 설명하기 위해 답변하거나 의견을 제시 할 것을 제안합니다.
닉 콕스

0

나는이 질문이 이해 데이터에 대한 가정 (그렇지 않으면 "관리"에 반대로)
데이터가 꼬리 및 / 또는 복합, 나는 이러한 "층"찾을 무거운 경우 ggplot2 목적을 위해 매우 유용 : geom_violingeom_jitter.


3
바이올린 음모 및 / 또는 지터 포인트가 왜 꼬리가 두꺼운 분포에 유용한 지 요약 할 수 있습니까?
chl
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.