Lorsque R calcule la densité (x), il utilise n = 512 (je crois) donc il essaie au hasard de choisir 512 points et interpole une fonction de densité en utilisant ces points. J'ai une liste de points (p) que j'aimerais utiliser lors du calcul de la densité (x) AU LIEU d'échantillonner au hasard 512 points. (ignorez les complications que cela peut entraîner, la validité, etc. - je cherche juste un moyen de mettre cela en œuvre)

  1. Existe-t-il un moyen de modifier la densité (x) afin que je puisse transmettre une liste de points au lieu d'utiliser un échantillonnage aléatoire ?
  2. Quel est l'algorithme utilisé par la densité (x) ?
  3. Y a-t-il une fonction différente que je devrais utiliser pour mes besoins ?
-1
Denis 15 juin 2020 à 22:18

1 réponse

Meilleure réponse

Ainsi, après quelques recherches, vous pouvez calculer l'estimation de la densité du noyau comme suit (à partir de Wikipedia) :

#` Data
set.seed(1)                                                     #Used for reproducibility
data = c(rnorm(100,-10,1),rnorm(100,10,1))                      #Two Normals mixed

#` True
phi = function(x) exp(-.5*x^2)/sqrt(2*pi)                       #Normal Density
tpdf = function(x) phi(x+10)/2+phi(x-10)/2                      #True Density

#` Kernel
h = sd(data)*(4/3/length(data))^(1/5)                           #Bandwidth estimated by Silverman's Rule of Thumb
Kernel2 = function(x) mean(phi((x-data)/h)/h)                   #Kernel Density
kpdf = function(x) sapply(x,Kernel2)                            #Elementwise application

#` Plot
x=seq(-25,25,length=1000)                                       #Linear Space
plot(x,tpdf(x),type="l",ylim=c(0,0.23),col="red")               #Plot True Density
par(new=T)
plot(x,kpdf(x),type="l",ylim=c(0,0.23),xlab="",ylab="",axes=F)  #Plot Kernel Density with Silverman's Rule of Thumb

Notez que je peux sélectionner x comme je le souhaite

0
Denis 22 juin 2020 à 19:38