Оцінка приблизного розподілу даних на основі гістограми


111

Припустимо, я хочу перевірити, чи мої дані експоненціальні на основі гістограми (тобто перекошені праворуч).

Залежно від того, як я групую або обробляю дані, я можу отримати різко різні гістограми.

Один набір гістограм зробить здається, що дані експоненціальні. З іншого набору буде здаватися, що дані не є експоненціальними. Як зробити чітко визначені розподіли з гістограм?


20
Чому б не забути про гістограми, оскільки описані вами проблеми добре встановлені, і розглянути альтернативні інструменти, такі як графіки qq та корисність тестів на придатність?
whuber

Відповіді:


163

Труднощі з використанням гістограм для виведення форми

Хоча гістограми часто зручні, а іноді й корисні, вони можуть вводити в оману. Їх зовнішній вигляд може досить сильно змінитись із змінами в місцях розташування кордонів.

Ця проблема давно відома *, хоча, можливо, не настільки широко, як це має бути - ви рідко зустрічаєте її в обговоренні на початковому рівні (хоча є винятки).

* наприклад, Пол Рубін [1] висловив це так: " Добре відомо, що зміна кінцевих точок в гістограмі може значно змінити її зовнішній вигляд ". .

Я думаю, що це питання, яке слід ширше обговорювати при впровадженні гістограм. Наведу кілька прикладів та обговорення.

Чому слід насторожено покладатися на одну гістограму набору даних

Погляньте на ці чотири гістограми:

Чотири гістограми

Це чотири дуже різні за своїм виглядом гістограми.

Якщо вставити такі дані в (я тут використовую 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 смугові діаграми

(Якщо це все ще не очевидно, подивіться, що станеться, коли ви віднімаєте дані Анні з кожного набору head(matrix(x-Annie,nrow=40)):)

Дані просто зміщуються вліво кожного разу на 0,25.

Однак враження, які ми отримуємо від гістограм - правий косий, рівномірний, лівий косий та бімодальний - були абсолютно різними. Наше враження цілком регулювалося розташуванням першого джерела сміття відносно мінімального.

Тож не просто "експоненціальний" проти "не дуже-справжній", але "правий косий" проти "лівий косий" або "бімодальний" проти "рівномірний", просто рухаючись там, де починаються ваші бункери.


Редагувати: Якщо ви змінюєте ширину binwidth, ви можете отримати такі речі, як це відбувається:

Skew vs bell

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)

Ніфт, так?

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

Що ми можемо зробити?

Гістограми широко використовуються, часто зручні для отримання та іноді очікувані. Що ми можемо зробити, щоб уникнути або пом'якшити подібні проблеми?

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

Принаймні, завжди слід робити гістограми з кількома різними ширинами бін або джерелами біна, або бажано обома.

Крім того, перевірте оцінку щільності ядра на не надто широкій смузі пропускання.

Ще один підхід, що зменшує довільність гістограм, - це усереднені зміщені гістограми ,

Усереднена зміщена гістограма

(це один із останніх наборів даних), але якщо ви докладете цих зусиль, я думаю, ви також можете використовувати оцінку щільності ядра.

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

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

[1]: Рубін, Пол (2014) "Зловживання гістограмою!",
Публікація в блозі АБО у світі ОВ , 23 січня 2014
посилання ... (альтернативне посилання)


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.testФункція в пакеті TeachingDemos для R допомогти реалізувати форму цього тесту.

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

введіть тут опис зображення

vis.testФункція створив цю ділянку , а потім пропонує користувачу вибрати , який з ділянок , по їх думку, відрізняється, то процес повторюється ще 2 рази (3 всього).


@ScottStafford, я додав копію сюжету вище. У цьому використовується qqplots, але функція також генерує гістограми або графіки щільності, які можуть бути запрограмовані.
Грег Сноу

28

Діаграми накопичувального розподілу [ MATLAB , R ] - де ви розміщуєте частку значень даних, меншу або рівну діапазону значень, - це безумовно найкращий спосіб переглянути розподіл емпіричних даних. Тут, наприклад, є ECDFs з цих даних , вироблених в R:

Сюжети Еліс, Брайана, Кріса та Зої про 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? наприклад, що якщо мій дистрибутив у форматі PDF, як ви показали вище, то як ми можемо класифікувати його \ "оцінити" на чіске, нормальне чи інше розповсюдження на основі вигляду
stats101

2

Пропозиція: Гістограми зазвичай призначають лише дані осі x, що відбулися в середині точки бункера, і опускають міри розташування більшої точності по осі x. Ефект, який це має на похідні придатності, може бути досить великим. Візьмемо тривіальний приклад. Припустимо, ми беремо класичне виведення дельти Дірака, але модифікуємо його так, щоб ми почали з розподілу Коші в деякому довільному середньому місці з кінцевою шкалою (повна ширина наполовину максимуму). Тоді ми беремо межу, коли шкала іде до нуля. Якщо ми будемо використовувати класичне визначення гістограми і не змінити розміри бін, ми не будемо фіксувати ні місце, ні масштаб. Якщо ж ми будемо використовувати посереднє розташування в бункерах рівномірної фіксованої ширини, ми завжди будемо фіксувати розташування, якщо не масштаб, коли масштаб невеликий відносно ширини відростка.

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

кумедний гістоn=8у кожній категорії гістограм, і щойно відображає їх як середнє значення осі x з кожного контейнера. Оскільки кожен контейнер з гістограмою має значення 8, всі розподіли виглядають рівномірно, і мені довелося їх змістити вертикально, щоб показати. Дисплей не є правильною відповіддю, але це не без інформації. Це правильно говорить про те, що між групами є зміщення осі x. Це також говорить нам, що фактичний розподіл має вигляд трохи U. Чому? Зауважте, що відстань між середніми значеннями далі розташовується в центрах та ближче по краях. Отже, щоб зробити це кращим представленням, нам слід запозичити цілі вибірки та дробові кількості кожного граничного зразка біна, щоб зробити всі середні значення біна на осі x на рівновіддаленій відстані. Для їх виправлення та правильного відображення знадобиться трохи програмування. Але, це може бути просто спосіб зробити гістограми, щоб вони фактично відображали основні дані в якомусь логічному форматі. Форма все одно зміниться, якщо ми змінимо загальну кількість бункерів, що охоплюють діапазон даних, але ідея полягає в тому, щоб вирішити деякі проблеми, створені шляхом бінінгу.

КРОК 2 Отже, почнемо запозичувати між бункерами, щоб спробувати зробити кошти більш рівномірними.введіть тут опис зображення

Тепер ми можемо побачити форму гістограм, які починають формуватися. Але різниця між засобами не є ідеальною, оскільки у нас є лише ціла кількість зразків для обміну між бункерами. Щоб зняти обмеження цілих значень на осі y та завершити процес складання рівновіддалених середніх значень осі x, ми повинні розпочати поділ дробів вибірки між бінами.

Крок 3 Обмін значеннями та частинами значень. гісто3

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

Однак можна робити і інші речі, такі як оцінка щільності ядра .

Тут ми бачимо дані Енні як обмежену щільність ядра за допомогою гауссових згладжувань 0,1, 0,2 та 0,4. Інші суб'єкти будуть зміщені функції одного типу за умови, що один робить те саме, що і я, а саме використовувати нижню та верхню межі кожного набору даних. Отже, це вже не гістограма, а PDF, і вона виконує ту саму роль, що і гістограма без деяких бородавок.

ядра гладкі

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.