¿Cómo identificar una distribución bimodal?

48

Entiendo que una vez que graficamos los valores como un gráfico, podemos identificar una distribución bimodal observando los picos gemelos, pero ¿cómo se encuentra programáticamente? (Estoy buscando un algoritmo).

venkasub
fuente
55
Pregunta intrigante. No sé nada sobre esto, así que no intentaré una respuesta, pero googlear bimodalidad + prueba da bastantes pistas prometedoras. google.co.uk/search?q=bimodality+test
onestop
un código programático para probar la multimodalidad está disponible en www.estima.com y se llama MODES.SRC. Puede convertirlo fácilmente a Matlab, R u otros softwares. Saludos, guido.
1
No puede identificar la cantidad de modos (no hay límite para la cantidad de pequeños movimientos que podría tener una distribución), pero puede obtener un límite inferior. Por ejemplo, ver aquí projecteuclid.org/euclid.aos/1176351045
Glen_b

Respuestas:

27

Identificar un modo para una distribución continua requiere suavizar o agrupar los datos.

El binning suele ser demasiado procrustean: los resultados a menudo dependen de dónde coloque los puntos de corte del bin.

El suavizado del núcleo (específicamente, en forma de estimación de densidad del núcleo ) es una buena opción. Aunque son posibles muchas formas de grano, típicamente el resultado no depende mucho de la forma. Depende del ancho de banda del kernel. Por lo tanto, las personas usan un kernel smooth adaptable o realizan una secuencia de kernel smooth para diferentes anchos de banda fijos con el fin de verificar la estabilidad de los modos identificados. Aunque el uso de un suavizador adaptativo u "óptimo" es atractivo, tenga en cuenta que la mayoría (¿todos?) Están diseñados para lograr un equilibrio entre la precisión y la precisión promedio: no están diseñados para optimizar la estimación de la ubicación de los modos.

En cuanto a la implementación, los suavizadores de kernel cambian y escalan localmente una función predeterminada para adaptarse a los datos. Siempre que esta función básica sea diferenciable, los gaussianos son una buena opción porque puede diferenciarlos tantas veces como lo desee, entonces todo lo que tiene que hacer es reemplazarla por su derivada para obtener la derivada de la suavidad. Entonces se trata simplemente de aplicar un procedimiento estándar de búsqueda de cero para detectar y probar los puntos críticos. ( El método de Brent funciona bien). Por supuesto, puede hacer el mismo truco con la segunda derivada para obtener una prueba rápida de si algún punto crítico es un máximo local, es decir, un modo.

whuber
fuente
2
@venkasub, también puedes mirar el método de Muller para encontrar raíces. Es más simple que el método de Brent y "casi" tan eficiente como el método de Newton, pero sin necesidad de conocer las derivadas de la función objetivo.
cardenal
25

Existe un artículo bien conocido de Silverman que trata este tema. Emplea la estimación de la densidad del núcleo. Ver

BW Silverman, Utilizando estimaciones de densidad del núcleo para investigar la multimodalidad , J. Royal Stat. Soc. B , vol. 43, no. 1, 1981, pp. 97-99.

Tenga en cuenta que hay algunos errores en las tablas del documento. Este es solo un punto de partida, pero bastante bueno. Proporciona un algoritmo bien definido para usar, en el caso de que sea lo que más estás buscando. Puede buscar en Google Scholar documentos que lo citan para enfoques más "modernos".

cardenal
fuente
44
+1 Este documento explota información sobre cómo la cantidad de modos aparentes depende del ancho del núcleo (para los núcleos gaussianos) para seleccionar un ancho apropiado y luego continúa como se describe en mi respuesta.
whuber
2

Llegué tarde a la fiesta, pero si solo estás interesado en si es multimodal o no, lo que significa que no estás interesado en la cantidad de modos, deberías mirar diptest .

En Rel paquete se llama diptest.

Kots
fuente
2
El nombre completo es Hartigan's Dip Test of Unimodality. El artículo original describe esta descripción: La prueba de inmersión mide la multimodalidad en una muestra por la diferencia máxima, sobre todos los puntos de muestra, entre la función de distribución empírica y la función de distribución unimodal que minimiza esa diferencia máxima. El algoritmo no es trivial, pero puede encontrar fácilmente C, Python, MATLAB y las traducciones modernas de Fortran basadas en la implementación original de Fortran en Cálculo de la estadística de inmersión para probar la unimodalidad .
mortehu
0

La definición en wiki es un poco confusa para mí. La probabilidad de que un conjunto de datos continuo tenga solo un modo es cero. Una manera simple de programar una distribución bimodal es con dos distribuciones normales separadas centradas de manera diferente. Esto crea dos picos o lo que la wiki llama modos. En realidad, puede usar casi dos distribuciones, pero una de las oportunidades estadísticas más difíciles es encontrar cómo se formó el conjunto de datos después de combinar las dos distribuciones de datos al azar.

Albahaca
fuente
¿Cómo identificará los centros de las dos distribuciones normales?
venkasub
@venkasub, el centro de distribución normal es su media. Si sabe que la bimodalidad proviene de dos distribuciones normales, puede ajustar el modelo de mezcla para estimar las medias, que serán dos modos.
mpiktas