Aire sous le «pdf» dans l'estimation de la densité du noyau dans R

15

J'essaie d'utiliser la fonction « densité » dans R pour faire des estimations de densité du noyau. J'ai de la difficulté à interpréter les résultats et à comparer divers ensembles de données car il semble que l'aire sous la courbe ne soit pas nécessairement 1. Pour toute fonction de densité de probabilité (pdf) , nous devons avoir l'aire . Je suppose que l'estimation de la densité du noyau rapporte le pdf. J'utilise integrate.xy de sfsmisc pour estimer la surface sous la courbe.- ϕ ( x ) d x = 1ϕ(X)-ϕ(X)X=1

> # generate some data
> xx<-rnorm(10000)
> # get density
> xy <- density(xx)
> # plot it
> plot(xy)

tracé de la densité

> # 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)

densité avec bw = .001

> 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)

densité avec bw = 1

> xy <- density(xx,bw=1e-6)
> integrate.xy(xy$x,xy$y)
[1] 6507.451
> plot(xy)

densité avec bw = 1e-6

L'aire sous la courbe ne doit-elle pas toujours être 1? Il semble que les petites bandes passantes soient un problème, mais parfois vous voulez afficher les détails, etc. dans les queues et de petites bandes passantes sont nécessaires.

Mise à jour / réponse:

Il semble que la réponse ci-dessous à propos de la surestimation dans les régions convexes soit correcte car l'augmentation du nombre de points d'intégration semble atténuer le problème (je n'ai pas essayé d'utiliser plus de points.)220

> xy <- density(xx,n=2^15,bw=.001)
> plot(xy)

densité avec un plus grand nombre de points à échantillonner

> 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

bande passante élevée
la source
3
Cela ressemble à une limitation en virgule flottante de la densité (): en utilisant une bande passante de 1e-6, vous créez (en théorie) une collection de 10000 pointes, chacune de masse totale 1/10000. Ces pointes finissent par être représentées principalement par leurs pics, sans que les écarts soient correctement caractérisés. Vous poussez simplement la densité () au-delà de ses limites.
whuber
@whuber, par limitation en virgule flottante, voulez-vous dire des limites de la précision, car l'utilisation de flottants entraînerait une surestimation plus grande de l'erreur par rapport à l'utilisation de doubles. Je ne pense pas voir comment cela se produirait, mais j'aimerais voir des preuves.
highBandWidth
n
1
@ Anony-Mousse, oui, c'est ce que demande cette question. Pourquoi n'est-il pas évalué à 1?
highBandWidth

Réponses:

9

Pensez aux utilisations de la règle trapézoïdale integrate.xy(). Pour la distribution normale, il sous - estimera la zone sous la courbe dans l'intervalle (-1,1) où la densité est concave (et donc l'interpolation linéaire est inférieure à la densité réelle), et la surestimera ailleurs (comme l'interpolation linéaire va au-dessus de la vraie densité). Étant donné que cette dernière région est plus grande (dans la mesure de Lesbegue, si vous le souhaitez), la règle trapézoïdale a tendance à surestimer l'intégrale. Maintenant, lorsque vous passez à des bandes passantes plus petites, la quasi-totalité de votre estimation est convexe par morceaux, avec de nombreux pics étroits correspondant aux points de données et des vallées entre eux. C'est là que la règle trapézoïdale s'effondre particulièrement mal.

StasK
la source
cela signifie que nous «suréchantillons» les pics et «sous-échantillons» les vallées, dans un certain sens ondulé à la main. Étant donné que la visualisation suit également la règle trapézoïdale (interpolation linéaire entre les échantillons), il semble qu'une bande passante du noyau trop petite soit également mauvaise pour la visualisation. De plus, si nous pouvions obtenir un plus grand nombre de points auxquels nous calculons la densité, il y aurait moins de problème.
highBandWidth
1
Cette explication ne tient pas la route. Le problème est que la densité est insuffisamment discrétisée, non pas que la règle trapézoïdale se décompose mal. integr () est impuissant à obtenir une réponse correcte car la densité () ne produit pas une représentation correcte. Pour le voir, il suffit d'inspecter xy $ x: il n'a que 512 valeurs destinées à représenter 10 000 pointes étroites!
whuber
@whuber, c'est ce que la réponse a dit. Le fait est que vous devez utiliser la règle trapézoïdale pour un nombre fini d'échantillons, et elle surestime la surface par rapport à la densité réelle sur un axe continu en fonction des noyaux. Ma mise à jour à la fin de la question s'enrichit.
highBandWidth
1
@high Non; la règle trapézoïdale fonctionne bien. Le problème est qu'il fonctionne avec une discrétisation incorrecte de l'intégrande. Vous ne pouvez pas avoir "beaucoup de pointes étroites correspondant aux points de données" quand il y a 10 000 points de données et seulement 512 valeurs dans le tableau de densité!
whuber
1
En regardant ces graphiques, je pense maintenant que le problème est avec densityplutôt qu'avec integrate.xy. Avec N = 10000 et pc = 1E6, vous avez de voir un peigne avec une hauteur de chaque dent d'environ 1e6, et les dents étant plus dense autour de 0. Au lieu de cela, vous voyez toujours une courbe en forme de cloche reconnaissable. Il en densityva de même pour vous, ou du moins il devrait être utilisé différemment avec des bandes passantes minuscules: ndevrait être de (plage de données) / (bw) plutôt que par défaut n=512. L'intergrateur doit reprendre une de ces énormes valeurs qui densityrevient par une coïncidence malheureuse.
StasK
-1

C'est bon, vous pouvez corriger le décalage et la mise à l'échelle; ajouter le plus petit nombre de sorte que la densité ne soit pas négative, puis multiplier le tout par une constante telle que l'aire soit l'unité. C'est la manière la plus simple.

L2c[ϕ(X)-c]+

Emre
la source
2
Notez que la question est plutôt de savoir pourquoi la densityfonction ne produit pas la densité "appropriée" qui s'intègre à 1 - plutôt que de savoir comment la corriger.
Tim