Обчислення оптимальної кількості бункерів в гістограмі


79

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


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

Відповіді:


94

Фрідман-Diaconis правило дуже міцне і добре працює на практиці. Ширина bin задається . Отже, кількість бункерів дорівнює , де - кількість спостережень, 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 є break = "Штурми", що не завжди дає хороші результати.
Роб Хайндман

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

Якщо ви використовуєте занадто мало бункерів, гістограма не дуже добре відображає дані. Якщо у вас занадто багато бункерів, ви отримуєте зламаний вигляд гребінця, що також не дає відчуття розподілу.

Одне рішення - створити графік, який показує кожне значення. Або крапковий графік, або кумулятивний розподіл частоти, який не вимагає жодних бін.

Якщо ви хочете створити розподіл частоти з однаково розташованими бінками, вам потрібно визначити, скільки бункерів (або ширини кожного). Рішення чітко залежить від кількості значень. Якщо у вас багато значень, ваш графік буде виглядати краще та більш інформативним, якщо у вас багато бункерів. На цій сторінці вікіпедії перелічено декілька методів визначення ширини відрізка за кількістю спостережень. Найпростіший метод - встановити кількість бункерів, рівну квадратному кореню кількості значень, які ви поширюєте.

На цій сторінці від Hideaki Shimazaki пояснюється альтернативний метод. Трохи складніше обчислити, але, здається, це чудово справляється. У верхній частині сторінки - додаток Java. Прокрутіть повз це, щоб побачити теорію та пояснення, а потім продовжуйте прокручування, щоб знайти посилання на документи, що пояснюють метод.


Посилання на сторінку Хідеакі порушено. Я не впевнений, чи це те саме: toyoizumilab.brain.riken.jp/hideaki/res/histogram.html
DarenW

9

Можливо, стаття " Варіації на гістограмі " Денбі та Маллоуса зацікавить:

Цей новий дисплей, який ми називаємо "dhist" (для гістограми, вирізаної по діагоналі), зберігає бажані особливості як історії однакової ширини, так і історії рівних площ. Він відображатиме високі вузькі відрізки, як ea hist, коли є шипи в даних, і показуватиме відокремлені виходи, як звичайна гістограма.

Вони також згадують, що код на R доступний на запит.


5

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

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


1
вибачте, я повинен був зазначити, що мені потрібно робити це в автоматизованому вигляді. варіант "робити це кілька разів, поки я не знайду той, який найкраще відповідає моїй меті" не буде працювати для мене. треба робити обчислювально ...
Тоні Старк

4
Я згоден - думка про існування однієї "оптимальної" ширини відростка є величезним спрощенням припущення.
Хадлі

5

Ви бачили метод Шимазакі-Сіномото ?

Хоча це здається обчислювально дорогим, це може дати вам хороші результати. Варто спробувати, якщо обчислювальний час не є вашою проблемою. Є кілька реалізацій цього методу в java, MATLAB тощо, за наступним посиланням, яке працює досить швидко: веб-інтерфейс


3

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


2

Будь ласка, розгляньте цю відповідь як доповнення до відповіді містера Роб Хайндмана .

Для того, щоб створити графіки гістограми з точно однаковими інтервалами або 'binwidths' за допомогою правила Freedman – Diaconis або з базовим R або ggplot2пакетом, ми можемо використовувати одне зі значень hist()функції, а саме breaks. Припустимо, ми хочемо створити гістограму qsecз mtcarsданих за допомогою правила Freedman – Diaconis. В основному 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 g / t. Розмір 1 контейнера дає мені таке:введіть тут опис зображення

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

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

Моє судження: 1. На Землі немає методики вимірювання, яка б відображала справжнє значення природного явища. Усі вимірювання є приблизними, деякі близькі до справжнього значення. Це залежить від конструкції вибірки, калібрування, кваліфікації людини та ін. 2. Ось чому розподіл є скошеним, а не симетричним. 3. Тим не менш, форма розподілу повинна, як мінімум, приблизно нагадувати "дзвіночку". По одному дзвону (якщо не існує декількох геологічних середовищ). 4.Часто розподіл за допомогою маніпулювання розміром відрізка може допомогти виявити схему того, наскільки точними та точними були проведені вимірювання. Так що потрібно експериментально підібрати розмір відро, а не правило, вирізане на камені.


2
Це скоріше коментар, ніж відповідь, якщо ви не викладете мораль. Я б сказав, що мораль полягає в наступному: усі правила - це правила, деякі мають більшу статистичну основу, ніж інші, але більшість правил можуть не робити те, що ви хочете, якщо дистрибуції мають дуже високу косоту або куртоз. Отже, використовуйте і ваше судження.
Нік Кокс

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

2.Несиметричний не симетричний. Не можна бути майже вагітною: ні вагітна, ні ні.
Sergo Cusiani

2
Зрозуміло, але точна симетрія даних настільки рідкісна, що якби я сказав "симетричний", хтось теж може розумно заперечити проти цього. Це дуже легко бути майже симетричним; саме тому і як у нас є заходи косості.
Нік Кокс

1
Помічено, але ваш коментар був загальним і не вистачало контексту, який ви даєте зараз. У свою чергу я сказав "сумнівно", а не "неправильно". Моє основне зауваження залишається, що ваша відповідь насправді не додає великої кількості потоку щодо того, як вибрати розмір контейнера чи еквівалентну кількість бункерів. Ще один приклад, в якому важко - це спіна на запитання, а не насправді відповідь.
Нік Кокс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.