Estoy tratando de usar la función ' densidad ' en R para hacer estimaciones de densidad del núcleo. Tengo algunas dificultades para interpretar los resultados y comparar varios conjuntos de datos, ya que parece que el área bajo la curva no es necesariamente 1. Para cualquier función de densidad de probabilidad (pdf) , necesitamos tener el área ∫ ∞ - ∞ ϕ ( x ) d x = 1 . Supongo que la estimación de densidad del núcleo informa el pdf. Estoy usando integrate.xy de sfsmisc para estimar el área bajo la curva.
> # generate some data
> xx<-rnorm(10000)
> # get density
> xy <- density(xx)
> # plot it
> plot(xy)
> # load the library
> library(sfsmisc)
> integrate.xy(xy$x,xy$y)
[1] 1.000978
> # fair enough, area close to 1
> # use another bw
> xy <- density(xx,bw=.001)
> plot(xy)
> integrate.xy(xy$x,xy$y)
[1] 6.518703
> xy <- density(xx,bw=1)
> integrate.xy(xy$x,xy$y)
[1] 1.000977
> plot(xy)
> xy <- density(xx,bw=1e-6)
> integrate.xy(xy$x,xy$y)
[1] 6507.451
> plot(xy)
¿No debería ser el área bajo la curva siempre 1? Parece que los pequeños anchos de banda son un problema, pero a veces desea mostrar los detalles, etc. en las colas y se necesitan pequeños anchos de banda.
Actualización / respuesta:
> xy <- density(xx,n=2^15,bw=.001)
> plot(xy)
> integrate.xy(xy$x,xy$y)
[1] 1.000015
> xy <- density(xx,n=2^20,bw=1e-6)
> integrate.xy(xy$x,xy$y)
[1] 2.812398
r
estimation
pdf
kernel-smoothing
auc
highBandWidth
fuente
fuente
Respuestas:
Piensa en los
integrate.xy()
usos de la regla trapezoidal . Para la distribución normal, subestimará el área debajo de la curva en el intervalo (-1,1) donde la densidad es cóncava (y, por lo tanto, la interpolación lineal está por debajo de la densidad real), y la sobreestimará en otra parte (como va la interpolación lineal encima de la verdadera densidad). Como la última región es más grande (en la medida de Lesbegue, si lo desea), la regla trapezoidal tiende a sobreestimar la integral. Ahora, a medida que avanza a anchos de banda más pequeños, casi toda su estimación es convexa por partes, con muchos picos estrechos correspondientes a los puntos de datos y valles entre ellos. Ahí es donde la regla trapezoidal se rompe especialmente mal.fuente
density
más que conintegrate.xy
. Con N = 10 000 y BW = 1E6, sería tener para ver un peine con una altura de cada diente de aproximadamente 1E6, y siendo más densa alrededor de 0. En lugar de los dientes, todavía ver una curva en forma de campana reconocible. Entonces, tedensity
está engañando, o al menos debería usarse de manera diferente con anchos de banda pequeños:n
debería ser sobre (rango de datos) / (bw) en lugar del valor predeterminadon=512
. El integrador debe estar recogiendo uno de estos enormes valores quedensity
regresa por una infeliz coincidencia.Está bien, puedes arreglarlo cambiando y escalando; agregue el número más pequeño de modo que la densidad no sea negativa, luego multiplique todo por una constante tal que el área sea la unidad. Este es el camino fácil.
fuente
density
función no produce la densidad "adecuada" que se integra a 1, en lugar de cómo solucionarla.