히스토그램 (즉, 오른쪽으로 기울어 짐)을 기반으로 내 데이터가 지수인지 여부를보고 싶다고 가정합니다.
데이터를 그룹화하거나 비우는 방법에 따라 크게 다른 히스토그램을 얻을 수 있습니다.
히스토그램의 한 세트는 데이터가 지수적인 것처럼 보입니다. 다른 세트는 데이터가 지수 적이 지 않은 것처럼 보일 것입니다. 히스토그램에서 분포를 잘 정의하려면 어떻게해야합니까?
히스토그램 (즉, 오른쪽으로 기울어 짐)을 기반으로 내 데이터가 지수인지 여부를보고 싶다고 가정합니다.
데이터를 그룹화하거나 비우는 방법에 따라 크게 다른 히스토그램을 얻을 수 있습니다.
히스토그램의 한 세트는 데이터가 지수적인 것처럼 보입니다. 다른 세트는 데이터가 지수 적이 지 않은 것처럼 보일 것입니다. 히스토그램에서 분포를 잘 정의하려면 어떻게해야합니까?
답변:
히스토그램은 종종 편리하고 때로는 유용하지만 오해의 소지가 있습니다. 빈 모양의 위치가 바뀌면 모양이 크게 바뀔 수 있습니다.
이 문제는 오래 전부터 알려져 왔지만 아마도 그렇게 넓지는 않을 것입니다. 초기 단계 토론에서 언급 된 것을 거의 볼 수 없습니다 (예외가 있음).
* 예를 들어 Paul Rubin [1]은 이런 식으로 다음과 같이 말합니다. " 히스토그램에서 끝점을 변경하면 모양이 크게 변경 될 수 있습니다 ." .
히스토그램을 도입 할 때 더 널리 논의되어야 할 문제라고 생각합니다. 몇 가지 예와 토론을하겠습니다.
데이터 세트의 단일 히스토그램에 의존해야하는 이유
이 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)
(여전히 명확하지 않은 경우 각 세트에서 Annie의 데이터를 빼면 어떻게되는지 확인하십시오. head(matrix(x-Annie,nrow=40))
)
데이터는 매번 0.25 씩 왼쪽으로 이동되었습니다.
그러나 히스토그램 (오른쪽으로 기울이기, 균일, 왼쪽으로 기울이기 및 바이 모달)에서 얻은 인상은 완전히 다릅니다. 우리의 인상은 전적으로 최초의 빈 기원의 위치에 의해 결정되었습니다.
따라서 '지수'대 '실제 비 지수'대 '오른쪽 비대칭'대 '왼쪽 비대칭'또는 '이봉형'대 '균일 성'은 휴지통이 시작되는 곳으로 이동하면됩니다.
편집 : binwidth를 변경하면 다음과 같은 일이 발생할 수 있습니다.
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 일
링크 ... (대체 링크)
커널 밀도 또는 로그 스플라인 플롯은 히스토그램에 비해 더 나은 옵션 일 수 있습니다. 이러한 방법으로 설정할 수있는 옵션이 여전히 있지만 히스토그램보다 덜 까다 롭습니다. 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.test
R 용 TeachingDemos 패키지 의 기능은이 테스트의 양식을 구현하는 데 도움이됩니다.
다음은 간단한 예입니다. 아래 그림 중 하나는 10 자유도 분포에서 생성 된 25 개의 점이며, 다른 8 개는 평균과 분산이 동일한 정규 분포에서 생성됩니다.
이 vis.test
함수는이 플롯을 만든 다음 사용자에게 다른 플롯을 선택하라는 메시지를 표시 한 다음 프로세스를 2 번 더 반복합니다 (총 3 번).
누적 분포도 [ MATLAB , R ] – 값 범위 이하의 데이터 값의 비율을 도표로 표시하는 것은 경험적 데이터의 분포를 보는 가장 좋은 방법입니다. 예를 들어, 이 데이터 의 ECDF는 R로 생성됩니다.
이는 다음 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의 이점은 다음과 같습니다.
유일한 요령은 ECDF를 올바르게 읽는 방법을 배우는 것입니다. 얕은 경사 영역은 희소 분포, 가파른 경사 영역은 밀도 분포를 의미합니다. 그러나 당신이 그것들을 읽는 데 어려움을 겪으면, 그것들은 경험적 데이터의 분포를 보는 훌륭한 도구입니다.
제안 : 히스토그램은 일반적으로 빈의 중간 점에서 발생하도록 x 축 데이터 만 할당하고 더 높은 정확도의 위치에 대한 x 축 측정 값을 생략합니다. 이것이 적합도 함수에 미치는 영향은 상당히 클 수 있습니다. 간단한 예를 들어 보자. Dirac 델타의 고전적인 파생물을 가져 와서 유한 한 스케일 (전폭 절반 최대)로 임의의 중간 위치에서 Cauchy 분포로 시작하도록 수정한다고 가정 해 봅시다. 그런 다음 스케일이 0이 될 때 제한을 따릅니다. 히스토그램의 고전적인 정의를 사용하고 빈 크기를 변경하지 않으면 위치 나 스케일을 캡처하지 않습니다. 그러나 고정 너비의 빈 내에서 중간 위치를 사용하는 경우, 스케일이 빈 너비에 비해 작을 때 스케일이 아닌 경우 항상 위치를 캡처합니다.
데이터가 치우친 피팅 값의 경우 고정 빈 중간 점을 사용하면 해당 영역의 전체 곡선 세그먼트를 x 축 이동하여 위의 질문과 관련이 있다고 생각합니다.
각 히스토그램 범주에서 각 빈의 평균 x 축 값으로 표시했습니다. 각 히스토그램 빈의 값은 8이므로 분포가 모두 균일하게 보이므로 세로로 오프셋해야합니다. 디스플레이가 정답은 아니지만 정보가없는 것은 아닙니다. 그룹간에 x 축 오프셋이 있음을 올바르게 알려줍니다. 또한 실제 분포가 약간 U 자 모양 인 것으로 나타납니다. 왜? 평균값 사이의 거리는 중심에서 멀어지고 가장자리에서 더 가깝습니다. 따라서 이것을 더 잘 표현하려면 x 축의 모든 평균 빈 값을 등거리로 만들기 위해 각 빈 경계 샘플의 전체 샘플과 분 수량을 차용해야합니다. 이 문제를 해결하고 올바르게 표시하려면 약간의 프로그래밍이 필요합니다. 그러나, 히스토그램을 작성하여 실제 데이터를 논리적 형식으로 표시 할 수 있습니다. 데이터 범위를 포괄하는 총 구간 수를 변경하면 모양이 계속 변경되지만 아이디어는 임의로 구간 화하여 생성 된 일부 문제를 해결하는 것입니다.
2 단계 이제 빈 사이에 차용을 시작하여 평균을 더 균일하게 만듭니다.
이제 히스토그램의 모양이 나타나기 시작합니다. 그러나 빈 사이를 교환 할 수있는 샘플 수가 많기 때문에 평균의 차이는 완벽하지 않습니다. y 축에서 정수 값의 제한을 제거하고 등거리의 x 축 평균 값을 만드는 프로세스를 완료하려면 빈간에 샘플 분획을 공유해야합니다.
알 수 있듯이, 빈 경계에서 값의 일부를 공유하면 평균 값 사이의 거리 균일 성이 향상 될 수 있습니다. 주어진 데이터로 소수점 이하 세 자리까지이 작업을 수행했습니다. 그러나 데이터의 거칠기가 허용하지 않기 때문에 평균 값 사이의 거리를 일반적으로 정확하게 동일하게 만들 수는 없습니다.
그러나 커널 밀도 추정 사용과 같은 다른 작업을 수행 할 수 있습니다 .
여기서 우리는 가우스 평활화 0.1, 0.2 및 0.4를 사용하여 Annie의 데이터를 제한된 커널 밀도로 본다. 다른 과목은 같은 유형의 기능을 바꿨을 것입니다. 하나는 내가했던 것과 같은 일을합니다. 즉 각 데이터 세트의 하한과 상한을 사용합니다. 따라서 이것은 더 이상 히스토그램이 아니라 PDF이며 일부 사마귀가없는 히스토그램과 동일한 역할을합니다.