Расчет оптимального количества бинов в гистограмме


80

Я заинтересован в поиске как можно более оптимального метода для определения количества бинов, которые я должен использовать в гистограмме. Мои данные должны быть в диапазоне от 30 до 350 объектов максимум, и в частности я пытаюсь применить пороговое значение (как метод Оцу), где "хорошие" объекты, которых у меня должно быть меньше и которые должны быть более разложены, отделены от " плохие »объекты, которые должны быть более плотными по стоимости. Конкретное значение будет иметь оценку 1-10 для каждого объекта. У меня было 5-10 объектов с оценками 6-10 и 20-25 объектов с оценками 1-4. Я хотел бы найти шаблон объединения гистограмм, который, как правило, позволяет что-то вроде метода Отсу для пороговых значений объектов с низкой оценкой. Однако, в реализации Otsu, которую я видел, размер корзины был 256, и часто у меня гораздо меньше точек данных, чем 256, что для меня предполагает, что 256 не является хорошим номером корзины. С таким небольшим количеством данных, какие подходы я должен использовать для расчета количества корзин для использования?


Я думаю, что правило Стерджеса можно использовать для n <200; где n - количество наблюдений
venkasub

Ответы:


95

Фридман-Diaconis правило очень прочное и хорошо работает на практике. Для ширины ячейки задано значение . Таким образом, количество бинов равно , где - количество наблюдений, max - максимальное значение, а min - минимальное значение.h=2×IQR×n1/3(maxmin)/hn

В базе R вы можете использовать:

hist(x, breaks="FD")

Для других библиотек ggplot2печати без этой опции (например, ), вы можете рассчитать ширину бина как:

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

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

2
@nico. По умолчанию в R это breaks = "Sturges", который не всегда дает хорошие результаты.
Роб Хиндман

4
Как рассчитать IQR?
Курт Мюллер,

1
@KurtMueller IQR означает межквартильный диапазон. Ищите 1-й квартиль и 3-й квартиль, и разница в IQR. IQR уже поставляется с R, так что вы можете использовать его.
Xiaodai

4
Если я не ошибаюсь, ответ должен гласитьnum_bins <- diff(range(x)) / (2 * IQR(x) / length(x)^(1/3))
Яша

1
nclass.FDне существовало девять лет назад.
Роб Хиндман

18

Если вы используете слишком мало бинов, гистограмма не очень хорошо отображает данные. Если у вас слишком много корзин, вы получите неправильный вид гребня, что также не дает смысла в распределении.

Одним из решений является создание графика, который показывает каждое значение. Либо точечный график, либо кумулятивное распределение частот, для которого не нужны ячейки.

Если вы хотите создать распределение частоты с одинаково разнесенными ячейками, вам нужно решить, сколько ячеек (или ширину каждой ячейки). Решение явно зависит от количества ценностей. Если у вас много значений, ваш график будет выглядеть лучше и будет более информативным, если у вас много бинов. На этой странице википедии перечислено несколько методов определения ширины бина по количеству наблюдений. Самый простой способ - установить количество бинов, равное квадратному корню из числа значений, которые вы складываете.

На этой странице Хидеаки Симадзаки объясняется альтернативный метод. Это немного сложнее вычислить, но, похоже, отлично справляется. Верхняя часть страницы представляет собой приложение Java. Пролистайте до конца, чтобы увидеть теорию и объяснение, затем продолжайте прокручивать, чтобы найти ссылки на статьи, которые объясняют метод.


Ссылка на страницу Хидеаки не работает. Я не уверен, что это одно и то же: toyoizumilab.brain.riken.jp/hideaki/res/histogram.html
DarenW

9

Возможно, статья « Вариации на гистограмме » Денби и Мэлловса будет интересна:

Это новое отображение, которое мы называем «dhist» (для гистограммы с разрезом по диагонали), сохраняет желательные свойства как одинаковой ширины, так и равной площади. Когда в данных будут всплески, будут отображаться высокие узкие ячейки, такие как история, и будут отображаться отдельные выбросы, как и обычная гистограмма.

Они также упоминают, что код на R доступен по запросу.


5

Я не уверен, что это считается строго хорошей практикой, но я склонен создавать более одной гистограммы с разной шириной бина и выбирать гистограмму, какую гистограмму использовать, исходя из того, какая гистограмма соответствует интерпретации, которую я пытаюсь передать лучше всего. Хотя это вносит некоторую объективность в выбор гистограммы, я оправдываю это тем, что у меня было гораздо больше времени для понимания данных, чем человеку, которому я даю гистограмму, поэтому мне нужно дать им очень краткое сообщение.

Я также большой поклонник представления гистограмм с одинаковым количеством точек в каждой ячейке, а не с одинаковой шириной ячейки. Я обычно нахожу, что они представляют данные намного лучше, чем постоянная ширина бина, хотя их трудно создать.


1
извините, я должен был упомянуть, что мне нужно сделать это в автоматическом режиме. вариант «делать это несколько раз, пока я не найду тот, который лучше всего подходит моей цели», не сработает для меня. должно быть сделано в вычислительном отношении ...
Тони Старк

4
Я согласен - идея, что существует одна «оптимальная» ширина корзины, является огромным упрощающим допущением.
Хэдли

5

Вы видели метод Симадзаки-Шиномото ?

Хотя это кажется вычислительно дорогим, это может дать вам хорошие результаты. Стоит попробовать, если вычислительное время не является вашей проблемой. Есть несколько реализаций этого метода в java, MATLAB и т. Д. По следующей ссылке, которая работает достаточно быстро: веб-интерфейс


3

Если мне нужно определить количество бинов программным путем, я обычно начинаю с гистограммы, в которой бинов больше, чем необходимо. После того, как гистограмма заполнена, я объединяю ячейки до тех пор, пока у меня не будет достаточно записей на ячейку для используемого мной метода, например, если я хочу смоделировать неопределенности Пуассона в эксперименте по подсчету с неопределенностями из нормального распределения, пока у меня не будет больше, чем около 10 записей.


2

Пожалуйста, рассматривайте этот ответ как дополнение к ответу мистера Роба Хиндмана .

Чтобы создать графики гистограммы с точно такими же интервалами или «ширинами бин», используя правило Фридмана – Диакониса с базовым R или ggplot2пакетом, мы можем использовать одно из значений hist()функции, а именно breaks. Предположим, мы хотим создать гистограмму qsecиз mtcarsданных, используя правило Фридмана – Диакониса. В базовом R мы используем

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

У меня 600 наблюдений за Au г / т. Размер бен 1 дает мне это:введите описание изображения здесь

Автоматический выбор (опустить диапазон корзины) дает это:введите описание изображения здесь

Данные выглядят хорошо на первом и втором графиках, как будто нет проблем с целостностью данных. На вопрос отвечает только размер бункера 0,1 (г / т): измерения были неточными и неточнымивведите описание изображения здесь

Мое суждение: 1. На Земле нет техники измерения, чтобы показать истинную ценность природного явления. Все измерения приблизительны, некоторые близки к истинному значению. Это зависит от дизайна выборки, калибровки, квалификации человека и т. Д. 2. Именно поэтому распределение искажено, а не симметрично. 3. Тем не менее, форма распределения должна напоминать «колоколообразную» секцию, по крайней мере, приблизительно. Один звонок за раз (если нет нескольких геологических условий). 4. Распределение частот с помощью манипуляций с размером бункера может помочь определить, насколько точными и точными были измерения. Так что нужен экспериментальный подбор размера мусорного ведра, а не правила, вырезанного на камне.


2
Это скорее комментарий, чем ответ, если вы не изложите мораль. Я бы сказал, что мораль такова: все правила - это эмпирические правила, некоторые из них имеют более статистическую основу, чем другие, но большинство правил могут не выполнять то, что вы хотите, если распределения имеют очень высокую асимметрию или эксцесс. Так что, используйте свое суждение тоже.
Ник Кокс

2
Вы добавили комментарии, но я не уверен, что кто-либо внесет полезную новую информацию в ветку. 1. это хорошо для меня, но не проблема здесь. 2. не следует из 1. поскольку некоторые распределения почти симметричны. 3. сомнительно: есть много ситуаций, когда ожидаются формы, отличные от колоколов. 4. также сомнительно, поскольку качество исходных измерений часто не видно из какой-либо гистограммы, но часто лучше всего исследовать с вниманием к очень тонкой структуре распределения.
Ник Кокс

2. Почти симметричный не симметричный. Вы не можете быть почти беременной: беременной или нет.
Серго Кузиани

2
Конечно, но точная симметрия в данных настолько редка, что если бы я сказал «симметричный», кто-то тоже мог бы разумно возразить против этого. Это очень легко быть почти симметричным; Вот почему и как у нас есть меры асимметрии.
Ник Кокс

1
Отмечено, но ваш комментарий носил общий характер и не соответствовал контексту, который вы сейчас даете. В свою очередь я сказал «сомнительно», а не «неправильно». Мой основной комментарий остается, что ваш ответ на самом деле мало что добавляет к теме о том, как выбрать размер корзины или эквивалентное количество корзин. Еще один пример, в котором это сложно, - это вращение вопроса, а не ответ.
Ник Кокс
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.