히스토그램에서 최적의 빈 수 계산


79

히스토그램에 몇 개의 빈을 사용해야하는지 결정할 수있는 최적의 방법을 찾는 데 관심이 있습니다. 내 데이터의 범위는 최대 30 개에서 350 개 사이 여야합니다. 특히 Otsu의 방법과 같이 더 적어야하고 더 많이 퍼져 야하는 "좋은"개체가 " 나쁜 "개체, 더 가치가 있어야합니다. 구체적인 값은 각 개체에 대해 1-10 점입니다. 나는 6-10 점을 가진 5-10 개의 물건과 1-4 점을 가진 20-25 개의 물건을 가졌습니다. 일반적으로 Otsu의 방법과 같은 방법으로 낮은 점수를 매기는 객체를 임계 값에서 벗어나게하는 히스토그램 비닝 패턴을 찾고 싶습니다. 그러나 내가 본 Otsu의 구현에서 bin 크기는 256이며 종종 256보다 많은 데이터 포인트가 있습니다. 나에게 256은 좋은 빈 번호가 아니라고 제안합니다. 데이터가 거의 없기 때문에 사용할 빈 수를 계산하려면 어떤 방법을 사용해야합니까?


저는 Sturges의 규칙이 n <200에 사용될 수 있다고 생각합니다. 여기서 n은 관측치 수
venkasub

답변:


94

프리드먼 - Diaconis의 규칙은 매우 강력하고 실제로 잘 작동합니다. 구간 너비는 됩니다. 따라서 Bin 개수는 이며, 여기서 은 관측치 수, max는 최대 값이고 min은 최소값입니다.h=2×IQR×n1/3(maxmin)/hn

기본 R에서는 다음을 사용할 수 있습니다.

hist(x, breaks="FD")

이 옵션이없는 다른 플로팅 라이브러리 (예 ggplot2:)의 경우 다음과 같이 binwidth를 계산할 수 있습니다.

bw <- 2 * IQR(x) / length(x)^(1/3)

### for example #####
ggplot() + geom_histogram(aes(x), binwidth = bw)

2
@ 니코. R의 기본값은 breaks = "Sturges"이며 항상 좋은 결과를 제공하지는 않습니다.
Rob Hyndman

4
어떻게 계산 IQR합니까?
커트 뮬러

1
@KurtMueller IQR은 사 분위 범위를 의미합니다. 1 분위와 3 분위를 찾으면 차이가 IQR입니다. IQR에는 이미 R이 포함되어 있으므로 사용할 수 있습니다.
xiaodai

4
내가 실수하지 않으면 대답은 다음과 같아야합니다num_bins <- diff(range(x)) / (2 * IQR(x) / length(x)^(1/3))
Jasha

1
nclass.FD9 년 전에는 존재하지 않았습니다.
Rob Hyndman

18

빈을 너무 적게 사용하면 히스토그램은 실제로 데이터를 잘 묘사하지 않습니다. 빈이 너무 많으면 빗 모양이 깨져서 분포를 알 수 없습니다.

한 가지 해결책은 모든 값을 보여주는 그래프를 만드는 것입니다. 구간이 필요없는 도트 플롯 또는 누적 주파수 분포입니다.

간격이 같은 빈으로 빈도 분포를 만들려면 빈의 수 (또는 각 너비)를 결정해야합니다. 결정은 분명히 값의 수에 달려 있습니다. 값이 많으면 빈이 많으면 그래프가 더 좋아지고 더 유익합니다. 이 위키 백과 페이지 에는 관측 수에서 빈 너비를 결정하는 몇 가지 방법 나열되어 있습니다. 가장 간단한 방법은 구간 수를 구간화할 값 수의 제곱근과 동일하게 설정하는 것입니다.

Hideaki Shimazaki의이 페이지 는 다른 방법을 설명합니다. 계산하기가 조금 더 복잡하지만 훌륭한 일을하는 것 같습니다. 페이지 상단은 Java 앱입니다. 그것을 지나서 이론과 설명을 본 다음, 계속 스크롤하여 방법을 설명하는 논문에 대한 링크를 찾으십시오.


Hideaki의 페이지에 대한 링크가 끊어졌습니다. 이것이 같은 것인지 확실하지 않습니다 : toyoizumilab.brain.riken.jp/hideaki/res/histogram.html
DarenW

9

아마도 Denby and Mallows의 " 히스토그램의 변형 "이라는 논문 이 흥미로울 것입니다.

"대각선 절단 히스토그램"이라고하는이 "디스플레이"라는 표시는 같은 너비의 막대와 같은 면적의 막대 모두의 바람직한 특징을 유지합니다. 데이터에 스파이크가있을 때 ea hist와 같이 키가 큰 좁은 구간을 표시하고 일반적인 히스토그램과 같이 고립 된 특이 치를 표시합니다.

또한 R 코드는 요청시 제공 가능하다고 언급합니다.


5

나는 이것이 엄청나게 좋은 연습으로 계산되는지 확신하지 못하지만, 빈 너비가 다른 하나 이상의 히스토그램을 생성하고 어떤 히스토그램이 내가 가장 잘 전달하려고하는 해석에 맞는 히스토그램을 사용하는 히스토그램을 선택하는 경향이 있습니다. 이것이 히스토그램 선택에 객관성을 도입하는 동안 히스토그램을 제공하는 사람보다 데이터를 이해하는 데 더 많은 시간이 있었음을 근거로 그것을 정당화하므로 매우 간결한 메시지를 제공해야합니다.

또한 각 빈에 같은 빈 너비가 아니라 같은 수의 포인트가있는 막대 그래프를 제공하는 열성 팬입니다. 나는 보통 그것들이 일정한 빈 너비보다 훨씬 나은 데이터를 나타내는 것을 발견하지만 mopre는 생산하기가 어렵습니다.


1
죄송합니다. 자동화 된 방식으로이 작업을 수행해야한다고 언급 했어야합니다. "내 목적에 가장 적합한 것을 찾을 때까지 여러 번 수행하는"옵션이 작동하지 않습니다. 계산을 수행해야합니다 ...
Tony Stark

4
동의합니다- "최적의"빈 너비가 하나라는 아이디어는 매우 단순화 된 가정입니다.
hadley

5

Shimazaki-Shinomoto 방법을 보셨습니까 ?

계산 비용이 많이 드는 것처럼 보이지만 좋은 결과를 얻을 수 있습니다. 계산 시간이 문제가 아닌 경우 시도해 볼 가치가 있습니다. 다음 링크에서 java, MATLAB 등에서이 메소드의 일부 구현이 있습니다. 웹 인터페이스는 충분히 빠르게 실행됩니다.


3

프로그래밍 방식으로 빈 수를 결정 해야하는 경우 보통 필요한 것보다 많은 빈이있는 히스토그램으로 시작합니다. 히스토그램이 채워지면 내가 사용하는 방법에 대해 빈당 충분한 항목이있을 때까지 빈을 결합합니다. 항목.


2

이 답변을 Mr. Rob Hyndman의 답변을 보완하는 내용으로 참조하십시오 .

기본 R 또는 패키지 와 함께 Freedman-Diaconis 규칙을 사용하여 정확히 동일한 간격 또는 '이진 폭'으로 히스토그램 플롯을 만들려면 함수 값 중 하나를 사용할 수 있습니다 . Freedman-Diaconis 규칙을 사용하여 데이터 에서 히스토그램을 생성한다고 가정 합니다. 기본 R에서는ggplot2hist()breaksqsecmtcars

x <- mtcars$qsec
hist(x, breaks = "FD")

한편, ggplot2패키지에서 우리는

h <- hist(x, breaks = "FD", plot = FALSE)
qplot(x, geom = "histogram", breaks = h$breaks, fill = I("red"), col = I("white"))

또는 대안 적으로

ggplot(mtcars, aes(x)) + geom_histogram(breaks = h$breaks, col = "white")

그들 모두는 의도 한 것과 정확히 같은 간격과 빈 수로 히스토그램 플롯을 생성합니다.


-5

Au g / t에 대해 600 개의 관측치가 있습니다. 빈 크기 1은 다음과 같습니다.여기에 이미지 설명을 입력하십시오

자동 선택 (빈 범위 생략)은 다음을 제공합니다.여기에 이미지 설명을 입력하십시오

데이터는 데이터 무결성에 문제가없는 것처럼 첫 번째 및 두 번째 그래프에서 O'K로 보입니다. 빈 크기 0.1 (g / t) 만 질문에 답합니다. 측정 값이 정확하지 않고 정확하지 않습니다.여기에 이미지 설명을 입력하십시오

나의 판단 : 1. 지구에는 자연 현상의 진정한 가치를 보여주는 측정 기술이 없다. 모든 측정 값은 근사치이며 일부는 실제 값에 가깝습니다. 이는 샘플링 설계, 교정, 인간의 자격 등에 따라 다릅니다. 2. 분포가 대칭이 아닌 왜곡됩니다. 그럼에도 불구하고, 분포의 형태는 적어도 "종 모양"섹션과 유사해야합니다. 한 번에 하나의 종 (지질 환경이 여러 개가 아닌 한). 4. 빈 크기 조작을 통한 주파수 분포는 측정이 얼마나 정확하고 정확하게 수행되었는지에 대한 패턴을 밝히는 데 도움이 될 수 있습니다. 그래서 돌을 규칙적으로 자르기보다는 빈 크기의 실험적인 픽업이 필요합니다.


2
이것은 당신이 도덕을 철자하지 않는 한 대답보다 더 주석입니다. 나는 도덕이 이것이라고 말하고 싶습니다 : 모든 규칙은 경험적 규칙이며, 어떤 규칙은 다른 규칙보다 통계적 기초가 더 많지만, 분포가 매우 높은 왜도 또는 첨도를 갖는 경우 대부분의 규칙은 원하는 것을 수행하지 않을 수 있습니다. 따라서 판단도 사용하십시오.
Nick Cox

2
댓글을 추가했지만 스레드에 유용한 새 세부 정보를 제공하는 것이 확실하지 않습니다. 1. 나에 의해 괜찮지 만 여기서 문제는 아닙니다. 2. 일부 분포는 거의 대칭이므로 1.를 따르지 않습니다. 3. 모호함 : 종 이외의 모양이 예상되는 상황이 많이 있습니다. 4. 또한 원래 측정의 품질이 히스토그램에서 분명하지 않지만 분포의 매우 미세한 구조에주의를 기울여 조사하는 것이 가장 좋습니다.
Nick Cox

2. 거의 대칭은 대칭이 아닙니다. 거의 임신 할 수 없습니다 : 임신 여부.
Sergo Cusiani

2
물론, 데이터의 정확한 대칭은 매우 드물기 때문에 "대칭"이라고 말하면 누군가도 그에 대해 이의를 제기 할 수 있습니다. 거의 대칭적인 것은 매우 쉽습니다. 그것이 왜 그리고 어떻게 우리가 왜도를 측정하는지입니다.
Nick Cox

1
그러나 귀하의 의견은 일반적이며 귀하가 제공 한 내용이 부족합니다. 차례로 나는 "잘못된"이 아니라 "의심스러운"이라고 말했다. 내 주요 의견은 귀하의 답변이 실제로 쓰레기통 크기 또는 동등한 수의 쓰레기통을 선택하는 방법에 대해 스레드에 많은 것을 추가하지 않는다는 것입니다. 어려운 예를 갖는 것은 실제로 대답이 아니라 질문에 대한 스핀입니다.
Nick Cox
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.