Estoy buscando un método para calcular el área de superposición entre dos estimaciones de densidad del núcleo en R, como una medida de similitud entre dos muestras. Para aclarar, en el siguiente ejemplo, necesitaría cuantificar el área de la región superpuesta púrpura:
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)
Aquí se discutió una pregunta similar , la diferencia es que necesito hacer esto para datos empíricos arbitrarios en lugar de distribuciones normales predefinidas. El overlap
paquete aborda esta pregunta, pero aparentemente solo para datos de marca de tiempo, que no funciona para mí. El índice Bray-Curtis (como se implementa en vegan
la vegdist(method="bray")
función del paquete ) también parece relevante, pero nuevamente para datos algo diferentes.
Estoy interesado tanto en el enfoque teórico como en las funciones R que podría emplear para implementarlo.
Respuestas:
El área de superposición de dos estimaciones de densidad de grano puede aproximarse a cualquier grado de precisión deseado.
1) Dado que los KDE originales probablemente se han evaluado en alguna cuadrícula, si la cuadrícula es la misma para ambos (o se puede hacer fácilmente lo mismo), el ejercicio podría ser tan fácil como simplemente tomar en cada punto y luego usando la regla trapezoidal, o incluso una regla de punto medio.min ( K1( x ) , K2( x ) )
Si los dos están en cuadrículas diferentes y no se pueden volver a calcular fácilmente en la misma cuadrícula, se podría utilizar la interpolación.
2) Puede encontrar el punto (o puntos) de intersección e integrar el más bajo de los dos KDE en cada intervalo donde cada uno es más bajo. En su diagrama anterior, integraría la curva azul a la izquierda de la intersección y la rosa a la derecha por cualquier medio que desee / tenga disponible. Esto puede hacerse esencialmente exactamente considerando el área debajo de cada componente del núcleo a la izquierda o derecha de ese punto de corte.1hK( x - xyoh)
Sin embargo , los comentarios anteriores de Whuber deben tenerse claramente en cuenta; esto no es necesariamente algo muy significativo.
fuente
En aras de la exhaustividad, así es como terminé haciendo esto en R:
Como se señaló, existe una incertidumbre y subjetividad inherentes en la generación de KDE y también en la integración.
fuente
overlapping
que estima el área de la superposición de 2 (o más) distribuciones empíricas. Consulte la documentación aquí: rdocumentation.org/packages/overlapping/versions/1.5.0/topics/…Primero, podría estar equivocado, pero creo que su solución no funcionaría en caso de que haya múltiples puntos en los que se cruzan las Estimaciones de densidad del núcleo (KDE). En segundo lugar, aunque el
overlap
paquete se creó para usar con datos de marca de tiempo, aún puede usarlo para estimar el área de superposición de dos KDE. Simplemente tiene que reescalar sus datos para que oscilen entre 0 y 2π.Por ejemplo :
fuente