Estou tentando usar a função ' densidade ' em R para fazer estimativas de densidade do kernel. Estou tendo alguma dificuldade em interpretar os resultados e comparar vários conjuntos de dados, pois parece que a área sob a curva não é necessariamente 1. Para qualquer função de densidade de probabilidade (pdf) , precisamos ter a área . Estou assumindo que a estimativa da densidade do kernel reporta o pdf. Estou usando o integrar.xy do sfsmisc para estimar a área sob a 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)
A área sob a curva não deve ser sempre 1? Parece que as pequenas larguras de banda são um problema, mas às vezes você deseja mostrar os detalhes etc. nas caudas e pequenas larguras de banda são necessárias.
Atualização / resposta:
> 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
alta largura de banda
fonte
fonte
Respostas:
Pense nos
integrate.xy()
usos da regra trapezoidal . Para a distribuição normal, subestimará a área sob a curva no intervalo (-1,1) em que a densidade é côncava (e, portanto, a interpolação linear está abaixo da densidade real) e a superestimará em outros lugares (conforme a interpolação linear) em cima da densidade real). Como a última região é maior (na medida de Lesbegue, se você preferir), a regra do trapézio tende a superestimar a integral. Agora, à medida que você passa para larguras de banda menores, praticamente toda a sua estimativa é convexa, com muitos picos estreitos correspondentes aos pontos de dados e vales entre eles. É aí que a regra do trapézio se rompe especialmente.fonte
density
e não comintegrate.xy
. Com N = 10000 e bw = 1e-6, você teria que ver um pente com uma altura de cada dente de cerca de 1e6, e os dentes ficarem mais densos em torno de 0. Em vez disso, você ainda verá uma curva em forma de sino reconhecível. O mesmodensity
está traindo você, ou pelo menos deve ser usado de maneira diferente com pequenas larguras de banda:n
deve ser sobre (intervalo de dados) / (bw) e não o padrãon=512
. O intergrator deve estar captando um desses valores enormes quedensity
retorna por uma infeliz coincidência.Tudo bem, você pode consertar as mudanças e redimensionamentos; adicione o menor número para que a densidade não seja negativa e multiplique a coisa toda por uma constante, de modo que a área seja unificada. Este é o caminho mais fácil.
fonte
density
função não produz a densidade "adequada" que se integra a 1 - e não sobre como corrigi-la.