Estimateur à noyau gaussien

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Fabrice Morlais
Messages : 19
Enregistré le : 25 Oct 2007, 16:18

Estimateur à noyau gaussien

Messagepar Fabrice Morlais » 01 Fév 2008, 15:58

Bonjour,
Je souhaite faire une estimation de densité via un estimateur à noyau gaussien.
Pour ce faire j'utilise la fonction density de R permettant de faire cette manipulation. Lorsque je regarde le résultat celui-ci me paraît toutefois étrange, en effet l'aire de la densité dépasse 1

Code : Tout sélectionner

d <- density(faithful$eruptions, bw = "sj")
plot(d)

Si quelqu'un peut m'expliquer mon incompréhension je le remercie d'avance.
Fabrice

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Messagepar Logez Maxime » 01 Fév 2008, 16:20

Bonjour,

A priori l'aire n'est pas différente de 1, avec la méthode des trapèzes je trouve 1.000473. Après tu peux aussi jouer avec le paramètre "n"et l'augmenter. A tester.

Maxime

Stéphane Laurent
Messages : 1557
Enregistré le : 05 Déc 2006, 19:07

Messagepar Stéphane Laurent » 01 Fév 2008, 16:35

La densité peut dépasser 1, cela n'implique pas que l'aire est plus grande que 1...

Nous autres êtres humains avons beaucoup de difficulté à évaluer une aire. Si tu veux montrer des données tout en les cachant, représente-les avec des camemberts et tu auras réussi ton coup.

Prends une feuille et un crayon et fais ceci :

- trace une droite et choisis deux points A et B sur cette droite
- trace une droite (D) paralléle à la droite (AB)
- place plusieurs points M sur la droite (D), mets-en le plus loin possible
- as-tu l'impression que tous les triangles ABM ont la même aire ?

jean lobry
Messages : 733
Enregistré le : 17 Jan 2008, 20:00
Contact :

Messagepar jean lobry » 01 Fév 2008, 18:00

Bonjour,

c'est amusant que l'on évoque les méfaits du camembert, je dois justement faire un laïus dessus lundi prochain (si ça vous amuse c'est ici : http://pbil.univ-lyon1.fr/members/lobry/tmp/diaposcam.pdf).

Pour revenir à la question initiale de Fabrice je voudrais souligner tout l'intérêt de l'argument asp = 1 de la fonction plot() pour faciliter autant que faire ce peut la comparaison des entités surfaciques :

Code : Tout sélectionner

d <- density(faithful$eruptions, bw = "sj")
polycurve <- function(x, y, base.y = min(y), ...) {
polygon(x = c(min(x), x, max(x)), y = c(base.y, y, base.y),
...)
}
plot(d, asp=1, main = "square is unit")
polycurve(d$x, d$y, col = grey(0.8))
rect(3,1,4,2, col = grey(0.8))


Un petit calcul approximatif donne :

Code : Tout sélectionner

 hauteur <- d$y
 base <- diff(d$x)[1]
 sum(base*hauteur)
[1] 1.000964

qui n'est pas trop loin de l'aire attendue.

Amicalement,

Jean

Fabrice Morlais
Messages : 19
Enregistré le : 25 Oct 2007, 16:18

Messagepar Fabrice Morlais » 04 Fév 2008, 08:31

Bonjour,
Je la trouve proche de 1 mais pas égale à 1.
Avez-vous une idée pour solutionner ce problème?
Merci de vos réponses.
Fabrice

Christophe Genolini
Messages : 698
Enregistré le : 12 Juin 2006, 21:37
Contact :

Re: Estimateur à noyau gaussien

Messagepar Christophe Genolini » 04 Fév 2008, 08:46

Fabrice Morlais a écrit :celui-ci me paraît toutefois étrange, en effet la densité dépasse 1 : ce qui n'est pas compatible avec la notion de densité (aire = 1).


Au pasage, si tu traces une fonction qui part de (0,0), qui monte au point (1/n,n), qui redescent au point (2/n,0) puis qui est nulle pour toutes les valeurs plus grande que 2/b=n. Alors
- Cette fonction a pour surface (1/n x n) /2 + (1/n x n ) / 2, c'est à dire 1. C'est donc une densité.
- Le maximum de cette fonction est n. Si on pose n=100, on a une densite dont le maximum est 100...

Christophe

François Bonnot
Messages : 537
Enregistré le : 10 Nov 2004, 15:19
Contact :

Messagepar François Bonnot » 04 Fév 2008, 08:46

j'avais donc pour certaines valeurs de x une densité supérieure à 1 (ce qui pour moi n'avait pas de sens)

Bonjour,
La densité de cette courbe dépasse 1 et sa surface est 1 :

Code : Tout sélectionner

x <- seq(-1,1,length=100)
plot(x,dnorm(x,sd=0.2),type='l',asp=1)


FB

Fabrice Morlais
Messages : 19
Enregistré le : 25 Oct 2007, 16:18

Messagepar Fabrice Morlais » 04 Fév 2008, 09:02

Bonjour,
Merci pour ces retours.

Fabrice Morlais
Messages : 19
Enregistré le : 25 Oct 2007, 16:18

Messagepar Fabrice Morlais » 04 Fév 2008, 09:09

Bonjour,
Merci pour ces retours.


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité