Як визначити бімодальний розподіл?


48

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


5
Інтригуюче питання. Я нічого не знаю про це, тому не спробую відповісти, але гугл бімодальність + тест дає досить багато перспективних результатів. google.co.uk/search?q=bimodality+test
onestop

програмний код для тестування на мультимодальність доступний на веб-сайті www.estima.com і називається MODES.SRC. Ви можете легко конвертувати його в Matlab, R або інші програмні засоби. З повагою, настанова.

1
Ви не можете визначити кількість режимів (немає обмеження кількості крихітних ворушінь, які може мати розподіл), але ви можете отримати нижню межу. Наприклад, дивіться тут projecteuclid.org/euclid.aos/1176351045
Glen_b

Відповіді:


27

Визначення режиму для безперервного розповсюдження вимагає згладжування чи обшивки даних.

Бінінг, як правило, занадто прокрутоване: результати часто залежать від місця розміщення відрізків для сміття.

Згладжування ядра (зокрема, у формі оцінки щільності ядра ) - хороший вибір. Хоча можливо багато форм ядра, як правило, результат не сильно залежить від форми. Це залежить від пропускної здатності ядра. Таким чином, люди або використовують адаптивне ядро ​​гладке, або проводять послідовність згладжування ядра для зміни фіксованої ширини смуги, щоб перевірити стабільність ідентифікованих режимів. Хоча використання пристосувального або «оптимального» плавнішого виглядає привабливо, пам’ятайте, що більшість із них (усі?) Призначені для досягнення балансу між точністю та середньою точністю: вони не розроблені для оптимізації оцінки розташування режимів.

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


2
@venkasub, ви також можете подивитися на метод Мюллера для кореневого пошуку. Це простіше, ніж метод Брента і "майже" настільки ж ефективний, як метод Ньютона, але без необхідності знати похідні цільової функції.
кардинал

25

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

BW Silverman, Використовуючи оцінки щільності ядра для дослідження багатомодальності , Дж. Роял Стат. Соц. Б , вип. 43, ні. 1, 1981, с. 97-99.

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


4
+1 У цьому документі використовується інформація про те, як кількість видимих ​​режимів залежить від ширини ядра (для ядер Гаусса) для вибору відповідної ширини, а потім продовжується, як описано у моїй відповіді.
whuber

2

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

У Rпакеті називається diptest.


2
Повне ім'я - Діп-тест Хартігана на унікальність. Оригінальний документ, що описує, надає цей опис: Тест занурення вимірює мультимодальність у вибірці за максимальною різницею у всіх точках вибірки між емпіричною функцією розподілу та функцією унімодального розподілу, яка мінімізує цю максимальну різницю. Алгоритм не є тривіальним, але ви можете легко знайти C, Python, MATLAB та сучасні переклади Fortran, засновані на оригінальній реалізації Fortran у Computation of Dip Statistic to Test for Unimodality .
mortehu


0

Визначення у вікі мене трохи бентежить. Імовірність безперервного набору даних, що має лише один режим, дорівнює нулю. Простий спосіб запрограмувати бімодальний дистрибутон - це два окремі нормальні розподіли, по центру по-різному. Це створює два піки або те, що вікі викликає режими. Насправді ви можете використовувати майже будь-які два розподіли, але однією з більш важких статистичних можливостей є пошук того, як формувався набір даних після поєднання двох випадкових розподілів даних.


Як ви визначите центри двох нормальних розподілів?
venkasub

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