Я понимаю, что как только мы построим значения в виде диаграммы, мы сможем определить бимодальное распределение, наблюдая за двумя пиками, но как найти его программно? (Я ищу алгоритм.)
Я понимаю, что как только мы построим значения в виде диаграммы, мы сможем определить бимодальное распределение, наблюдая за двумя пиками, но как найти его программно? (Я ищу алгоритм.)
Ответы:
Идентификация режима для непрерывного распределения требует сглаживания или объединения данных.
Биннинг, как правило, слишком прокрустен: результаты часто зависят от того, где вы разместите точки среза бункера.
Сглаживание ядра (в частности, в форме оценки плотности ядра ) является хорошим выбором. Хотя возможно много форм ядра, обычно результат не сильно зависит от формы. Это зависит от пропускной способности ядра. Таким образом, люди либо используют адаптивное сглаживание ядра, либо проводят последовательность сглаживаний ядра для различных фиксированных полос пропускания, чтобы проверить стабильность идентифицированных режимов. Хотя использование адаптивного или «оптимального» сглаживания привлекательно, имейте в виду, что большинство (все?) Из них предназначены для достижения баланса между точностью и средней точностью: они не предназначены для оптимизации оценки местоположения мод.
Что касается реализации, ядро сглаживает локальное смещение и масштабирование заранее определенной функции, чтобы соответствовать данным. При условии, что эта базовая функция дифференцируема - гауссианы - хороший выбор, потому что вы можете дифференцировать их столько раз, сколько захотите - тогда все, что вам нужно сделать, это заменить ее производной, чтобы получить производную от гладкого. Тогда это просто вопрос применения стандартной процедуры обнаружения нуля для обнаружения и проверки критических точек. ( Метод Брента работает хорошо.) Конечно, вы можете проделать тот же трюк со второй производной, чтобы быстро проверить, является ли любая критическая точка локальным максимумом, то есть режимом.
Существует известная статья Сильвермана, посвященная этой проблеме. Он использует оценку плотности ядра. Видеть
Б. В. Сильверман, Использование оценок плотности ядра для исследования мультимодальности , J. Royal Stat. Soc. B , vol. 43, нет. 1, 1981, с. 97-99.
Обратите внимание, что в таблицах статьи есть некоторые ошибки. Это только отправная точка, но довольно хорошая. Он предоставляет четко определенный алгоритм для использования, если это то, что вы больше всего ищете. Вы можете посмотреть в Google Scholar статьи, которые ссылаются на более «современные» подходы.
Я опоздал на вечеринку, но если вас просто интересует, является ли он мультимодальным или нет, то есть вас не интересует количество режимов, вам стоит посмотреть на diptest .
В R
пакете это называется diptest
.
Определение в вики меня немного смущает. Вероятность того, что непрерывный набор данных будет иметь только один режим, равна нулю. Простой способ программирования бимодального диструбитона - это два отдельных нормальных распределения, центрированных по-разному. Это создает два пика или то, что вики называет режимами. На самом деле вы можете использовать практически любые два распределения, но одна из более сложных статистических возможностей состоит в том, чтобы найти способ формирования набора данных после объединения двух случайных распределений данных.