히스토그램을 기반으로 데이터의 근사 분포 평가


111

히스토그램 (즉, 오른쪽으로 기울어 짐)을 기반으로 내 데이터가 지수인지 여부를보고 싶다고 가정합니다.

데이터를 그룹화하거나 비우는 방법에 따라 크게 다른 히스토그램을 얻을 수 있습니다.

히스토그램의 한 세트는 데이터가 지수적인 것처럼 보입니다. 다른 세트는 데이터가 지수 적이 지 않은 것처럼 보일 것입니다. 히스토그램에서 분포를 잘 정의하려면 어떻게해야합니까?


20
설명하는 문제가 잘 정립되어 있기 때문에 히스토그램을 잊지 말고 QQ 플롯 및 적합도 테스트와 같은 대체 도구를 고려하십시오.
whuber

답변:


163

히스토그램을 사용하여 모양을 추론하는 데 어려움

히스토그램은 종종 편리하고 때로는 유용하지만 오해의 소지가 있습니다. 빈 모양의 위치가 바뀌면 모양이 크게 바뀔 수 있습니다.

이 문제는 오래 전부터 알려져 왔지만 아마도 그렇게 넓지는 않을 것입니다. 초기 단계 토론에서 언급 된 것을 거의 볼 수 없습니다 (예외가 있음).

* 예를 들어 Paul Rubin [1]은 이런 식으로 다음과 같이 말합니다. " 히스토그램에서 끝점을 변경하면 모양이 크게 변경 될 수 있습니다 ." .

히스토그램을 도입 할 때 더 널리 논의되어야 할 문제라고 생각합니다. 몇 가지 예와 토론을하겠습니다.

데이터 세트의 단일 히스토그램에 의존해야하는 이유

이 4 가지 히스토그램을 살펴보십시오.

4 개의 히스토그램

그것은 매우 다른 네 가지 히스토그램입니다.

다음 데이터를 붙여 넣으면 (여기서 R을 사용하고 있습니다) :

Annie <- c(3.15,5.46,3.28,4.2,1.98,2.28,3.12,4.1,3.42,3.91,2.06,5.53,
5.19,2.39,1.88,3.43,5.51,2.54,3.64,4.33,4.85,5.56,1.89,4.84,5.74,3.22,
5.52,1.84,4.31,2.01,4.01,5.31,2.56,5.11,2.58,4.43,4.96,1.9,5.6,1.92)
Brian <- c(2.9, 5.21, 3.03, 3.95, 1.73, 2.03, 2.87, 3.85, 3.17, 3.66, 
1.81, 5.28, 4.94, 2.14, 1.63, 3.18, 5.26, 2.29, 3.39, 4.08, 4.6, 
5.31, 1.64, 4.59, 5.49, 2.97, 5.27, 1.59, 4.06, 1.76, 3.76, 5.06, 
2.31, 4.86, 2.33, 4.18, 4.71, 1.65, 5.35, 1.67)
Chris <- c(2.65, 4.96, 2.78, 3.7, 1.48, 1.78, 2.62, 3.6, 2.92, 3.41, 1.56, 
5.03, 4.69, 1.89, 1.38, 2.93, 5.01, 2.04, 3.14, 3.83, 4.35, 5.06, 
1.39, 4.34, 5.24, 2.72, 5.02, 1.34, 3.81, 1.51, 3.51, 4.81, 2.06, 
4.61, 2.08, 3.93, 4.46, 1.4, 5.1, 1.42)
Zoe <- c(2.4, 4.71, 2.53, 3.45, 1.23, 1.53, 2.37, 3.35, 2.67, 3.16, 
1.31, 4.78, 4.44, 1.64, 1.13, 2.68, 4.76, 1.79, 2.89, 3.58, 4.1, 
4.81, 1.14, 4.09, 4.99, 2.47, 4.77, 1.09, 3.56, 1.26, 3.26, 4.56, 
1.81, 4.36, 1.83, 3.68, 4.21, 1.15, 4.85, 1.17)

그런 다음 직접 생성 할 수 있습니다.

opar<-par()
par(mfrow=c(2,2))
hist(Annie,breaks=1:6,main="Annie",xlab="V1",col="lightblue")
hist(Brian,breaks=1:6,main="Brian",xlab="V2",col="lightblue")
hist(Chris,breaks=1:6,main="Chris",xlab="V3",col="lightblue")
hist(Zoe,breaks=1:6,main="Zoe",xlab="V4",col="lightblue")
par(opar)

이제이 스트립 차트를보십시오 :

x<-c(Annie,Brian,Chris,Zoe)
g<-rep(c('A','B','C','Z'),each=40)
stripchart(x~g,pch='|')
abline(v=(5:23)/4,col=8,lty=3)
abline(v=(2:5),col=6,lty=3)

4 개의 스트립 차트

(여전히 명확하지 않은 경우 각 세트에서 Annie의 데이터를 빼면 어떻게되는지 확인하십시오. head(matrix(x-Annie,nrow=40)))

데이터는 매번 0.25 씩 왼쪽으로 이동되었습니다.

그러나 히스토그램 (오른쪽으로 기울이기, 균일, 왼쪽으로 기울이기 및 바이 모달)에서 얻은 인상은 완전히 다릅니다. 우리의 인상은 전적으로 최초의 빈 기원의 위치에 의해 결정되었습니다.

따라서 '지수'대 '실제 비 지수'대 '오른쪽 비대칭'대 '왼쪽 비대칭'또는 '이봉형'대 '균일 성'은 휴지통이 시작되는 곳으로 이동하면됩니다.


편집 : binwidth를 변경하면 다음과 같은 일이 발생할 수 있습니다.

스큐 vs 벨

10.8

x <- c(1.03, 1.24, 1.47, 1.52, 1.92, 1.93, 1.94, 1.95, 1.96, 1.97, 1.98, 
  1.99, 2.72, 2.75, 2.78, 2.81, 2.84, 2.87, 2.9, 2.93, 2.96, 2.99, 3.6, 
  3.64, 3.66, 3.72, 3.77, 3.88, 3.91, 4.14, 4.54, 4.77, 4.81, 5.62)
hist(x,breaks=seq(0.3,6.7,by=0.8),xlim=c(0,6.7),col="green3",freq=FALSE)
hist(x,breaks=0:8,col="aquamarine",freq=FALSE)

괜찮아?

그렇습니다. 이러한 데이터는 의도적으로 그렇게하기 위해 생성되었지만 ... 교훈은 분명합니다. 히스토그램에서 보는 것은 데이터에 대한 정확한 인상이 아닐 수도 있습니다.

우리는 무엇을 할 수 있습니까?

히스토그램은 널리 사용되며, 종종 획득하기 편리하고 때로는 예상됩니다. 그러한 문제를 피하거나 완화하려면 어떻게해야합니까?

Nick Cox가 관련 질문에 대한 의견에서 지적한 바와 같이 : 경험에 의하면 항상 폭과 폭의 변화에 ​​강인한 세부 사항은 진품이어야합니다. 깨지기 쉬운 세부 사항은 가짜이거나 사소한 것일 수 있습니다 .

적어도 몇 개의 서로 다른 이진 폭 또는 빈-원점 또는 바람직하게는 둘 다에서 히스토그램을 수행해야합니다.

또는 너무 넓지 않은 대역폭에서 커널 밀도 추정값을 확인하십시오.

히스토그램의 임의성을 감소시키는 다른 방법은 평균 이동 히스토그램입니다 .

평균 이동 된 히스토그램

(이것은 가장 최근의 데이터 세트 중 하나입니다) 그러나 그 노력을 기울이면 커널 밀도 추정값을 사용할 수도 있다고 생각합니다.

히스토그램을 수행하는 경우 (문제를 심각하게 인식하고 있음에도 불구하고 사용) 거의 항상 일반적인 프로그램 기본값이 제공하는 것보다 훨씬 더 많은 빈을 사용하는 것을 선호하며 빈 너비가 다양한 여러 히스토그램을 자주 사용합니다. (때로는 원산지). 그것들이 합리적으로 인상적으로 일관성이 있다면,이 문제가 없을 가능성이 높고, 일관성이 없다면, 커널 밀도 추정, 경험적 CDF, QQ 플롯 또는 무언가를 시도해보십시오. 비슷한.

히스토그램은 때때로 오도 될 수 있지만 박스 플롯은 이러한 문제에 더 취약합니다. 상자 그림을 사용하면 "더 많은 쓰레기통 사용"이라고 말할 수 없습니다. 데이터 세트 중 하나가 상당히 치우친 경우에도 동일한 대칭 상자 그림 있는 이 게시물 에서 매우 다른 4 개의 데이터 세트를 참조하십시오 .

[1] : Rubin, Paul (2014) "히스토그램 남용!",
블로그 게시물 또는 OB 세계에서 , 2014 년 1 월 23 일
링크 ... (대체 링크)


1
실제로 모든 필요성 빈 그래프는 이와 같은 데이터를 비운다. 빈은 크기가 작기 때문에 (축을 따라 한 픽셀의 너비) 중요하지 않습니까?
AJMansfield

1
@AJMansfield 이것은 "모든 배포가 불 연속적"이라고 말하는 것과 비슷합니다. 문자 그대로 사실이지만 관련 문제를 모호하게합니다. 비닝 추정기의 일반적인 빈 수는 일반적인 픽셀 수보다 훨씬 작습니다. 앤티 앨리어싱을 사용하는 그래픽의 경우 '유효한'픽셀 수가 더 많습니다 (잠재적으로 식별 할 수 있음) 픽셀 사이의 위치 차이)
Glen_b

2
근본적인 문제는 히스토그램이 빈 크기에 크게 의존한다는 것입니다. 이것을 선험적으로 결정하기는 어렵습니다.

29

커널 밀도 또는 로그 스플라인 플롯은 히스토그램에 비해 더 나은 옵션 일 수 있습니다. 이러한 방법으로 설정할 수있는 옵션이 여전히 있지만 히스토그램보다 덜 까다 롭습니다. qqplots도 있습니다. 데이터가 이론적 분포에 충분히 가까운 지 확인하는 유용한 도구는 다음과 같습니다.

 Buja, A., Cook, D. Hofmann, H., Lawrence, M. Lee, E.-K., Swayne,
 D.F and Wickham, H. (2009) Statistical Inference for exploratory
 data analysis and model diagnostics Phil. Trans. R. Soc. A 2009
 367, 4361-4383 doi: 10.1098/rsta.2009.0120

아이디어의 짧은 버전 (여전히 자세한 내용은 논문을 읽으십시오)은 널 분포에서 데이터를 생성하고 여러 플롯을 작성하여 그 중 하나가 원본 / 실제 데이터이고 나머지는 이론적 분포에서 시뮬레이션한다는 것입니다. 그런 다음 원본 데이터를 보지 못한 사람 (아마도 자신)에게 플롯을 제시하고 실제 데이터를 선택할 수 있는지 확인합니다. 실제 데이터를 식별 할 수없는 경우 널에 대한 증거가 없습니다.

vis.testR 용 TeachingDemos 패키지 의 기능은이 테스트의 양식을 구현하는 데 도움이됩니다.

다음은 간단한 예입니다. 아래 그림 중 하나는 10 자유도 분포에서 생성 된 25 개의 점이며, 다른 8 개는 평균과 분산이 동일한 정규 분포에서 생성됩니다.

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

vis.test함수는이 플롯을 만든 다음 사용자에게 다른 플롯을 선택하라는 메시지를 표시 한 다음 프로세스를 2 번 더 반복합니다 (총 3 번).


@ScottStafford, 위의 줄거리 사본을 추가했습니다. 이것은 qqplots를 사용하지만이 기능은 히스토그램을 생성하거나 밀도 플롯을 프로그래밍 할 수 있습니다.
Greg Snow

28

누적 분포도 [ MATLAB , R ] – 값 범위 이하의 데이터 값의 비율을 도표로 표시하는 것은 경험적 데이터의 분포를 보는 가장 좋은 방법입니다. 예를 들어, 이 데이터 의 ECDF는 R로 생성됩니다.

Alice, Brian, Chris 및 Zoe의 ECDF 플롯

이는 다음 R 입력으로 생성 할 수 있습니다 (위의 데이터 포함).

plot(ecdf(Annie),xlim=c(min(Zoe),max(Annie)),col="red",main="ECDFs")
lines(ecdf(Brian),col="blue")
lines(ecdf(Chris),col="green")
lines(ecdf(Zoe),col="orange")

보시다시피,이 네 가지 분포는 단순히 서로의 번역이라는 것이 명백합니다. 일반적으로 경험적 데이터 분포를 시각화하는 ECDF의 이점은 다음과 같습니다.

  1. 누적 이외의 변환없이 실제로 발생하는 데이터를 표시하기 때문에 데이터 처리 방법으로 인해 히스토그램 및 커널 밀도 추정치와 같이 실수로 자신을 속일 가능성이 없습니다.
  2. 각 포인트가 데이터 전후에 모든 데이터에 의해 버퍼링되기 때문에 데이터 분배에 대한 명확한 시각적 의미를 제공합니다. 이것을 비누 적 밀도 시각화와 비교하십시오. 여기서 각 밀도의 정확도는 자연스럽게 버퍼링되지 않으므로 비닝 (히스토그램) 또는 스무딩 (KDE)으로 추정해야합니다.
  3. 데이터가 멋진 모수 분포, 일부 혼합 또는 지저분한 비모수 분포를 따르는 지 여부에 관계없이 동일하게 작동합니다.

유일한 요령은 ECDF를 올바르게 읽는 방법을 배우는 것입니다. 얕은 경사 영역은 희소 분포, 가파른 경사 영역은 밀도 분포를 의미합니다. 그러나 당신이 그것들을 읽는 데 어려움을 겪으면, 그것들은 경험적 데이터의 분포를 보는 훌륭한 도구입니다.


CDF를 읽을 수있는 설명서가 있습니까? 예를 들어, 만약 당신이 내 cdf 배포판이 위에서 보여준 경우 어떻게 우리가 그것을
kisquare

2

제안 : 히스토그램은 일반적으로 빈의 중간 점에서 발생하도록 x 축 데이터 만 할당하고 더 높은 정확도의 위치에 대한 x 축 측정 값을 생략합니다. 이것이 적합도 함수에 미치는 영향은 상당히 클 수 있습니다. 간단한 예를 들어 보자. Dirac 델타의 고전적인 파생물을 가져 와서 유한 한 스케일 (전폭 절반 최대)로 임의의 중간 위치에서 Cauchy 분포로 시작하도록 수정한다고 가정 해 봅시다. 그런 다음 스케일이 0이 될 때 제한을 따릅니다. 히스토그램의 고전적인 정의를 사용하고 빈 크기를 변경하지 않으면 위치 나 스케일을 캡처하지 않습니다. 그러나 고정 너비의 빈 내에서 중간 위치를 사용하는 경우, 스케일이 빈 너비에 비해 작을 때 스케일이 아닌 경우 항상 위치를 캡처합니다.

데이터가 치우친 피팅 값의 경우 고정 빈 중간 점을 사용하면 해당 영역의 전체 곡선 세그먼트를 x 축 이동하여 위의 질문과 관련이 있다고 생각합니다.

재미있는 히스 토=8각 히스토그램 범주에서 각 빈의 평균 x 축 값으로 표시했습니다. 각 히스토그램 빈의 값은 8이므로 분포가 모두 균일하게 보이므로 세로로 오프셋해야합니다. 디스플레이가 정답은 아니지만 정보가없는 것은 아닙니다. 그룹간에 x 축 오프셋이 있음을 올바르게 알려줍니다. 또한 실제 분포가 약간 U 자 모양 인 것으로 나타납니다. 왜? 평균값 사이의 거리는 중심에서 멀어지고 가장자리에서 더 가깝습니다. 따라서 이것을 더 잘 표현하려면 x 축의 모든 평균 빈 값을 등거리로 만들기 위해 각 빈 경계 샘플의 전체 샘플과 분 수량을 차용해야합니다. 이 문제를 해결하고 올바르게 표시하려면 약간의 프로그래밍이 필요합니다. 그러나, 히스토그램을 작성하여 실제 데이터를 논리적 형식으로 표시 할 수 있습니다. 데이터 범위를 포괄하는 총 구간 수를 변경하면 모양이 계속 변경되지만 아이디어는 임의로 구간 화하여 생성 된 일부 문제를 해결하는 것입니다.

2 단계 이제 빈 사이에 차용을 시작하여 평균을 더 균일하게 만듭니다.여기에 이미지 설명을 입력하십시오

이제 히스토그램의 모양이 나타나기 시작합니다. 그러나 빈 사이를 교환 할 수있는 샘플 수가 많기 때문에 평균의 차이는 완벽하지 않습니다. y 축에서 정수 값의 제한을 제거하고 등거리의 x 축 평균 값을 만드는 프로세스를 완료하려면 빈간에 샘플 분획을 공유해야합니다.

3 단계 가치와 가치의 공유. histo3

알 수 있듯이, 빈 경계에서 값의 일부를 공유하면 평균 값 사이의 거리 균일 성이 향상 될 수 있습니다. 주어진 데이터로 소수점 이하 세 자리까지이 작업을 수행했습니다. 그러나 데이터의 거칠기가 허용하지 않기 때문에 평균 값 사이의 거리를 일반적으로 정확하게 동일하게 만들 수는 없습니다.

그러나 커널 밀도 추정 사용과 같은 다른 작업을 수행 할 수 있습니다 .

여기서 우리는 가우스 평활화 0.1, 0.2 및 0.4를 사용하여 Annie의 데이터를 제한된 커널 밀도로 본다. 다른 과목은 같은 유형의 기능을 바꿨을 것입니다. 하나는 내가했던 것과 같은 일을합니다. 즉 각 데이터 세트의 하한과 상한을 사용합니다. 따라서 이것은 더 이상 히스토그램이 아니라 PDF이며 일부 사마귀가없는 히스토그램과 동일한 역할을합니다.

커널

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.