Wie identifiziere ich eine bimodale Verteilung?

48

Ich verstehe, dass wir, sobald wir die Werte als Diagramm gezeichnet haben, eine bimodale Verteilung identifizieren können, indem wir die Doppelspitzen beobachten. Aber wie findet man sie programmgesteuert? (Ich suche einen Algorithmus.)

venkasub
quelle
5
Interessante Frage. Ich weiß nichts darüber und versuche daher nicht, eine Antwort zu finden, aber der Googeln-Bimodalitätstest + gibt einige vielversprechende Hinweise. google.co.uk/search?q=bimodality+test
onestop
Ein programmatischer Code zum Testen der Multimodalität ist unter www.estima.com verfügbar und heißt MODES.SRC. Sie können es leicht in Matlab, R oder andere Software konvertieren. Grüße, Guido.
1
Sie können die Anzahl der Modi nicht identifizieren (es gibt keine Begrenzung für die Anzahl der winzigen Wackelbewegungen, die eine Verteilung haben kann), aber Sie können eine Untergrenze erhalten. zB siehe hier projecteuclid.org/euclid.aos/1176351045
Glen_b

Antworten:

27

Um einen Modus für eine kontinuierliche Verteilung zu identifizieren, müssen die Daten geglättet oder gruppiert werden.

Das Binning ist in der Regel zu krustig: Die Ergebnisse hängen häufig davon ab, wo Sie die Bin-Schnittpunkte platzieren.

Die Kernel-Glättung (insbesondere in Form einer Kerneldichteschätzung ) ist eine gute Wahl. Obwohl viele Kernelformen möglich sind, hängt das Ergebnis normalerweise nicht stark von der Form ab. Dies hängt von der Kernelbandbreite ab. Daher verwenden die Benutzer entweder einen adaptiven Kernel-Smooth oder führen eine Sequenz von Kernel-Smooths für unterschiedliche feste Bandbreiten durch, um die Stabilität der identifizierten Modi zu überprüfen. Obwohl die Verwendung eines adaptiven oder "optimalen" Glätters attraktiv ist, sollten Sie sich darüber im Klaren sein, dass die meisten (alle?) Darauf ausgelegt sind, ein Gleichgewicht zwischen Präzision und durchschnittlicher Genauigkeit zu erreichen: Sie sind nicht darauf ausgelegt, die Schätzung der Position von Modi zu optimieren.

Bei der Implementierung verschieben und skalieren Kernel-Smoothers lokal eine vorgegebene Funktion, um sie an die Daten anzupassen. Vorausgesetzt, dass diese Grundfunktion differenzierbar ist - Gaußsche Werte sind eine gute Wahl, da Sie sie beliebig oft differenzieren können -, müssen Sie sie nur durch ihre Ableitung ersetzen, um die Ableitung des Glatten zu erhalten. Dann geht es einfach darum, ein Standardverfahren zur Nullsuche anzuwenden, um die kritischen Punkte zu erkennen und zu testen. ( Die Methode von Brent funktioniert gut.) Natürlich können Sie den gleichen Trick mit der zweiten Ableitung ausführen, um schnell zu testen, ob ein kritischer Punkt ein lokales Maximum ist - das heißt ein Modus.

whuber
quelle
2
@venkasub, vielleicht sehen Sie sich auch Mullers Methode zum Auffinden von Wurzeln an. Es ist einfacher als die Brent-Methode und "fast" so effizient wie die Newton-Methode, ohne dass die Ableitungen der Zielfunktion bekannt sein müssen.
Kardinal
25

Es gibt einen bekannten Artikel von Silverman, der sich mit diesem Thema befasst. Es verwendet eine Schätzung der Kerneldichte. Sehen

BW Silverman, Verwenden von Kerndichteschätzungen Multimodalität zu untersuchen , J. Königlichen Stat. Soc. B , vol. 43, nein. 1, 1981, S. 97-99.

Beachten Sie, dass die Tabellen des Papiers einige Fehler enthalten. Dies ist nur ein Ausgangspunkt, aber ein ziemlich guter. Es bietet einen genau definierten Algorithmus für den Fall, dass Sie am meisten danach suchen. In Google Scholar finden Sie möglicherweise Artikel, in denen "modernere" Ansätze beschrieben werden.

Kardinal
quelle
4
+1 Dieser Artikel nutzt Informationen darüber, wie die Anzahl der sichtbaren Modi von der Kernelbreite abhängt (für Gaußsche Kernel), um eine geeignete Breite auszuwählen, und fährt dann wie in meiner Antwort beschrieben fort.
Whuber
2

Ich bin zu spät zur Party gekommen, aber wenn Sie nur daran interessiert sind, ob es multimodal ist oder nicht, was bedeutet, dass Sie nicht an der Anzahl der Modi interessiert sind, sollten Sie sich Diptest ansehen .

Im RPaket heißt diptest.

Kots
quelle
2
Der vollständige Name ist Hartigans Dip Test of Unimodality. In der Originalarbeit wird Folgendes beschrieben: Der Dip-Test misst die Multimodalität in einer Stichprobe anhand der maximalen Differenz über alle Stichprobenpunkte zwischen der empirischen Verteilungsfunktion und der unimodalen Verteilungsfunktion, die diese maximale Differenz minimiert. Der Algorithmus ist nicht trivial, aber Sie können leicht C-, Python-, MATLAB- und moderne Fortran-Übersetzungen finden, die auf der ursprünglichen Fortran-Implementierung in der Berechnung der Dip-Statistik zum Testen auf Unimodalität basieren .
Mortehu
0

Die Definition im Wiki ist für mich etwas verwirrend. Die Wahrscheinlichkeit, dass ein kontinuierlicher Datensatz nur einen Modus aufweist, ist Null. Eine einfache Möglichkeit, eine bimodale Verteilung zu programmieren, besteht darin, zwei verschiedene Normalverteilungen zu verwenden, die unterschiedlich zentriert sind. Dies erzeugt zwei Peaks oder was Wiki Modi nennt. Sie können praktisch zwei beliebige Verteilungen verwenden. Eine der schwierigeren statistischen Möglichkeiten besteht darin, herauszufinden, wie der Datensatz nach dem Kombinieren der beiden zufälligen Datenverteilungen gebildet wurde.

Basilikum
quelle
Wie identifizieren Sie die Zentren der beiden Normalverteilungen?
Venkasub
@venkasub, das Zentrum der Normalverteilung ist sein Mittelwert. Wenn Sie wissen, dass die Bimodalität aus zwei Normalverteilungen stammt, können Sie ein Mischungsmodell anpassen, um die Mittelwerte zu schätzen, die zwei Modi sein werden.
mpiktas