Ich suche nach einer Methode zur Berechnung der Überlappungsfläche zwischen zwei Kerndichteschätzungen in R als Maß für die Ähnlichkeit zwischen zwei Stichproben. Um dies zu verdeutlichen, müsste ich im folgenden Beispiel die Fläche des violett überlappenden Bereichs quantifizieren:
library(ggplot2)
set.seed(1234)
d <- data.frame(variable=c(rep("a", 50), rep("b", 30)), value=c(rnorm(50), runif(30, 0, 3)))
ggplot(d, aes(value, fill=variable)) + geom_density(alpha=.4, color=NA)
Eine ähnliche Frage wurde hier diskutiert , mit dem Unterschied, dass ich dies eher für willkürliche empirische Daten als für vordefinierte Normalverteilungen tun muss. Das overlap
Paket behandelt diese Frage, aber anscheinend nur für Zeitstempeldaten, was bei mir nicht funktioniert. Der Bray-Curtis-Index (wie in vegan
der vegdist(method="bray")
Funktion des Pakets implementiert ) scheint ebenfalls relevant zu sein, jedoch wiederum für etwas andere Daten.
Ich interessiere mich sowohl für den theoretischen Ansatz als auch für die R-Funktionen, mit denen ich ihn implementieren könnte.
Antworten:
Der Überlappungsbereich von zwei Kerndichteschätzungen kann auf jeden gewünschten Genauigkeitsgrad angenähert werden.
1) Da die ursprünglichen KDEs wahrscheinlich über ein Raster ausgewertet wurden, kann die Übung so einfach sein, als ob man einfach an jedem Punkt und dann unter Verwendung der Trapezregel oder sogar einer Mittelpunktsregel.min(K1(x),K2(x))
Wenn sich die beiden in unterschiedlichen Gittern befinden und nicht einfach im selben Gitter neu berechnet werden können, kann Interpolation verwendet werden.
Die obigen Ausführungen von whuber sollten jedoch klar beachtet werden - dies ist nicht unbedingt eine sehr bedeutsame Sache.
quelle
Der Vollständigkeit halber habe ich Folgendes in R getan:
Wie bereits erwähnt, ist die KDE-Generation und auch die Integration mit Unsicherheit und Subjektivität verbunden.
quelle
overlapping
das den Bereich der Überlappung von 2 (oder mehr) empirischen Verteilungen schätzt. Schauen Sie sich die Dokumentation hier an: rdocumentation.org/packages/overlapping/versions/1.5.0/topics/…Erstens könnte ich mich irren, aber ich denke, Ihre Lösung würde nicht funktionieren, wenn es mehrere Punkte gibt, an denen sich die Kernel Density Estimates (KDE) überschneiden. Zweitens, obwohl das
overlap
Paket für die Verwendung mit Zeitstempeldaten erstellt wurde, können Sie es dennoch zum Schätzen des Überlappungsbereichs von zwei beliebigen KDEs verwenden. Sie müssen Ihre Daten nur so skalieren, dass sie zwischen 0 und 2π liegen.Zum Beispiel :
quelle