Szukam metody do obliczenia obszaru nakładania się dwóch oszacowań gęstości jądra w R, jako miary podobieństwa między dwiema próbkami. Aby to wyjaśnić, w poniższym przykładzie musiałbym określić ilościowo obszar pokrywającego się regionu fioletowo:
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)
Omówiono tutaj podobne pytanie , z tą różnicą, że muszę to zrobić dla arbitralnych danych empirycznych, a nie dla predefiniowanych rozkładów normalnych. Te overlap
adresy pakietów to pytanie, ale najwyraźniej tylko dla danych datownika, który nie działa dla mnie. Indeks Bray-Curtis (zaimplementowany w funkcji vegan
pakietu vegdist(method="bray")
) również wydaje się istotny, ale znowu dla nieco innych danych.
Interesuje mnie zarówno podejście teoretyczne, jak i funkcje R, które mogę wykorzystać do jego wdrożenia.
Odpowiedzi:
Obszar nakładania się dwóch oszacowań gęstości jądra może być przybliżony do dowolnego pożądanego stopnia dokładności.
Jeśli oba są na różnych siatkach i nie można ich łatwo przeliczyć na tej samej siatce, można zastosować interpolację.
2) Możesz znaleźć punkt (punkty) przecięcia i zintegrować dolne z dwóch KDE w każdym przedziale, gdzie każdy jest niższy. Na powyższym diagramie zintegrowałbyś niebieską krzywą po lewej stronie skrzyżowania i różową po prawej w dowolny sposób, jaki chcesz / masz do dyspozycji. Można to zrobić zasadniczo dokładnie, biorąc pod uwagę obszar pod każdym z nich1hK(x−xih)
jednak pamiętać o powyższych uwagach Whubera - niekoniecznie jest to bardzo znacząca rzecz.
źródło
Dla kompletności, oto jak skończyłem robić to w R:
Jak wspomniano, generowanie KDE, a także integracja, wiąże się z nieodłączną niepewnością i podmiotowością.
źródło
overlapping
który szacuje obszar nakładania się 2 (lub więcej) rozkładów empirycznych. Sprawdź dokumentację tutaj: rdocumentation.org/packages/overlapping/versions/1.5.0/topics/…Po pierwsze, mogę się mylić, ale myślę, że twoje rozwiązanie nie zadziałałoby w przypadku, gdy istnieje wiele punktów, w których przecinają się szacunki gęstości jądra (KDE). Po drugie, chociaż
overlap
pakiet został stworzony do użytku z danymi znaczników czasu, nadal możesz go użyć do oszacowania obszaru nakładania się dowolnych dwóch KDE. Musisz po prostu przeskalować dane, aby zawierały się w przedziale od 0 do 2π.Na przykład :
źródło