Comment identifier une distribution bimodale?

48

Je comprends qu’une fois que nous représentons les valeurs sous forme de graphique, nous pouvons identifier une distribution bimodale en observant les pics jumeaux, mais comment la trouver par programme? (Je cherche un algorithme.)

Venkasub
la source
5
Question intrigante. Je ne sais rien à ce sujet, je ne tenterai donc pas de réponse, mais googler bimodality + test donne quelques pistes prometteuses. google.co.uk/search?q=bimodality+test
onestop
un code de programmation permettant de tester la multimodalité est disponible sur www.estima.com sous le nom de MODES.SRC. Vous pouvez facilement le convertir en Matlab, R ou d’autres logiciels. Cordialement, guido.
1
Vous ne pouvez pas identifier le nombre de modes (il n'y a pas de limite au nombre de petits mouvements qu'une distribution peut avoir), mais vous pouvez obtenir une limite inférieure. voir par exemple projecteuclid.org/euclid.aos/1176351045
Glen_b

Réponses:

27

L'identification d'un mode pour une distribution continue nécessite le lissage ou le tri des données.

Le binning est généralement trop précis: les résultats dépendent souvent de l'endroit où vous placez les points de coupure.

Le lissage du noyau (en particulier, sous la forme d'une estimation de la densité du noyau ) est un bon choix. Bien que de nombreuses formes de noyau soient possibles, le résultat ne dépend généralement pas beaucoup de la forme. Cela dépend de la bande passante du noyau. Ainsi, les gens utilisent un lissage de noyau adaptatif ou effectuent une séquence de lissage de noyau pour différentes largeurs de bande fixes afin de vérifier la stabilité des modes identifiés. Bien que l’utilisation d’un lisseur adaptatif ou «optimal» soit attrayant, sachez que la plupart (tous?) Sont conçus pour atteindre un équilibre entre précision et précision moyenne: ils ne sont pas conçus pour optimiser l’estimation de la localisation des modes.

En ce qui concerne l'implémentation, les noyaux se déplacent et déplacent localement une fonction prédéterminée pour l'adapter aux données. À condition que cette fonction de base soit différentiable - les Gaussiens sont un bon choix, car vous pouvez les différencier autant de fois que vous le souhaitez - il vous suffit alors de la remplacer par sa dérivée pour obtenir la dérivée du lisse. Ensuite, il suffit d'appliquer une procédure standard de détermination du zéro pour détecter et tester les points critiques. ( La méthode de Brent fonctionne bien.) Bien sûr, vous pouvez faire la même chose avec la dérivée seconde pour obtenir un test rapide permettant de déterminer si un point critique correspond à un maximum local, c'est-à-dire un mode.

whuber
la source
2
@venkasub, vous pouvez également consulter la méthode de Muller pour la recherche de racines. C'est plus simple que la méthode de Brent et "presque" aussi efficace que la méthode de Newton, mais sans avoir besoin de connaître les dérivées de la fonction cible.
cardinal
25

Un article bien connu de Silverman traite de cette question. Il utilise une estimation de la densité du noyau. Voir

BW Silverman, Utilisation d'estimations de la densité du noyau pour étudier la multimodalité , J. Royal Stat. Soc. B , vol. 43, non. 1, 1981, pages 97-99.

Notez qu'il y a des erreurs dans les tableaux du papier. Ceci est juste un point de départ, mais un très bon. Il fournit un algorithme bien défini à utiliser, si c'est ce que vous recherchez le plus. Vous pouvez consulter sur Google Scholar des articles qui le citent pour des approches plus "modernes".

cardinal
la source
4
+1 Cet article exploite des informations sur la manière dont le nombre de modes apparents dépend de la largeur du noyau (pour les noyaux gaussiens) pour sélectionner une largeur appropriée, puis continue comme décrit dans ma réponse.
whuber
2

Je suis arrivé en retard à la fête, mais si vous voulez savoir si elle est multimodale ou non, ce qui signifie que le nombre de modes ne vous intéresse pas, vous devriez vous intéresser à diptest .

Dans Rle paquet est appelé diptest.

Kots
la source
2
Le nom complet est Hartigan's Dip Test of Unimodality. Le document d'origine décrit la description suivante: Le test d'immersion mesure la multimodalité dans un échantillon par la différence maximale, sur tous les points d'échantillonnage, entre la fonction de distribution empirique et la fonction de distribution unimodale qui minimise cette différence maximale. L'algorithme n'est pas trivial, mais vous pouvez facilement trouver des traductions C, Python, MATLAB et Fortran modernes basées sur l'implémentation Fortran originale dans Calcul de la statistique Dip pour tester l'unimodalité .
Mortehu
0

La définition de wiki me laisse un peu déroutant. La probabilité qu'un ensemble de données en continu ne comporte qu'un seul mode est égale à zéro. Un moyen simple de programmer une distribution bimodale consiste à utiliser deux distributions normales séparées, centrées différemment. Cela crée deux pics ou ce que wiki appelle des modes. Vous pouvez en réalité utiliser presque deux distributions, mais l'une des possibilités statistiques les plus difficiles consiste à déterminer comment le jeu de données a été formé après la combinaison des deux distributions de données aléatoires.

Basilic
la source
Comment allez-vous identifier les centres des deux distributions normales?
venkasub
@venkasub, le centre de la distribution normale est sa moyenne. Si vous savez que la bimodalité provient de deux distributions normales, vous pouvez ajuster le modèle de mélange pour estimer la moyenne, ce qui correspond à deux modes.
Mpiktas