Ich wunderte mich, zwei Normalverteilungen mit und
- Wie kann ich den Prozentsatz überlappender Bereiche zweier Verteilungen berechnen?
- Ich nehme an, dieses Problem hat einen bestimmten Namen. Kennen Sie einen bestimmten Namen, der dieses Problem beschreibt?
- Ist Ihnen eine Implementierung davon bekannt (z. B. Java-Code)?
normal-distribution
similarities
metric
bhattacharyya
Ali Salehi
quelle
quelle
Antworten:
Dies wird auch oft als "Überlappungskoeffizient" (OVL) bezeichnet. Wenn du dafür googelst, erhältst du viele Treffer. Ein Nomogramm für den Bi-Normalfall finden Sie hier . Ein nützliches Papier kann sein:
Bearbeiten
Jetzt hast du mich mehr dafür interessiert, also habe ich R-Code erstellt, um dies zu berechnen (es ist eine einfache Integration). Ich habe eine Darstellung der beiden Verteilungen, einschließlich der Schattierung des überlappenden Bereichs, eingefügt:
Für dieses Beispiel lautet das Ergebnis:
0.6099324
mit absolutem Fehler< 1e-04
. Abbildung unten.quelle
Dies ist durch den Bhattacharyya-Koeffizienten gegeben . Für andere Distributionen siehe auch die verallgemeinerte Version, der Hellinger-Abstand zwischen zwei Distributionen.
Ich kenne keine Bibliotheken, um dies zu berechnen, aber angesichts der expliziten Formulierung in Bezug auf Mahalanobis-Abstände und Determinante von Varianzmatrizen sollte die Implementierung kein Problem sein.
quelle
Ich weiß nicht, ob es dafür einen offensichtlichen Standard gibt, aber:
Zunächst finden Sie die Schnittpunkte zwischen den beiden Dichten. Dies kann leicht erreicht werden, indem beide Dichten gleichgesetzt werden, was für die Normalverteilung zu einer quadratischen Gleichung für x führen sollte.
Dies kann mit der Grundrechnung gelöst werden.
Sie haben also entweder Null, einen oder zwei Schnittpunkte. Diese Schnittpunkte teilen nun die reale Linie in 1, 2 oder drei Teile, wobei eine der beiden Dichten die niedrigste ist. Wenn Ihnen nichts Mathematischeres einfällt, versuchen Sie einfach einen beliebigen Punkt in einem der Teile, um herauszufinden, welcher der niedrigste ist.
Ihr interessierender Wert ist jetzt die Summe der Bereiche unter der Kurve mit der niedrigsten Dichte in jedem Teil. Dieser Bereich kann nun über die kumulative Verteilungsfunktion ermittelt werden (subtrahieren Sie einfach den Wert an beiden Kanten des 'Teils'.
quelle
Für die Nachwelt hat die Lösung von wolfgang bei mir nicht funktioniert - ich bin auf Fehler in der
integrate
Funktion gestoßen. Also habe ich es mit der Antwort von Nick Staubbe kombiniert, um die folgende kleine Funktion zu entwickeln. Sollte schneller und weniger fehleranfällig sein als die numerische Integration:quelle
(l+r)/2
?Hier ist die Java-Version, Apache Commons Mathematics Library :
quelle
Ich denke, so etwas könnte die Lösung in MATLAB sein:
Zumindest konnte ich den Wert 0,8026, der unten in Abb.1 angegeben ist, in diesem PDF reproduzieren .
Sie müssen nur Start- und End- sowie Intervallwerte anpassen, um genau zu sein, da dies nur eine numerische Lösung ist.
quelle