Comment trouver / estimer la fonction de densité de probabilité à partir de la fonction de densité dans R

17

Supposons que j'ai une variable comme Xavec une distribution inconnue. Dans Mathematica, en utilisant la SmoothKernelDensityfonction, nous pouvons avoir une fonction de densité estimée. Cette fonction de densité estimée peut être utilisée avec la PDFfonction pour calculer la fonction de densité de probabilité d'une valeur comme Xsous la forme de PDF[density,X]supposer que la "densité" est le résultat de SmoothKernelDensity. Ce serait bien s'il y avait une telle fonctionnalité dans R. C'est ainsi que cela fonctionne dans Mathematica

http://reference.wolfram.com/mathematica/ref/SmoothKernelDistribution.html

À titre d'exemple (basé sur les fonctions Mathematica):

data = RandomVariate[NormalDistribution[], 100]; #generates 100 values from N(0,1)

density= SmoothKernelDistribution[data]; #estimated density

PDF[density, 2.345] returns 0.0588784 

Vous trouverez ici plus d'informations sur le PDF:

http://reference.wolfram.com/mathematica/ref/PDF.html

Je sais que je peux tracer sa fonction de densité en utilisant density(X)dans R et en utilisant ecdf(X)je peux obtenir sa fonction de distribution cumulative empirique.Est-il possible de faire la même chose en R sur la base de ce que j'ai décrit à propos de Mathematica?

Toute aide et idée est appréciée.

Amin
la source
density(x)donne une estimation du pdf, comme vous l'avez déjà noté, mais sa pertinence dépend de l'objectif pour lequel vous voulez avoir la densité. Notez, par exemple, que la variance est biaisée (en effectuant la convolution, vous ajoutez la variance du noyau à la variance des données, elle-même une estimation non biaisée) - ces compromis biais-variance sont omniprésents. Il existe d'autres alternatives, telles que l'estimation de la densité log-spline, par exemple - mais encore une fois, sa pertinence dépend en partie de ce que vous voulez en faire.
Glen_b -Reinstate Monica
@Glen_b Je veux utiliser la densité estimée pour trouver la probabilité d'autres valeurs dans la distribution. Par exemple, j'ai un vecteur de données allant de 0 à 10. Cet ensemble de données contient seulement 70 valeurs uniques entre 0 et 10. Je peux tracer la densité. Supposons maintenant que je m'intéresse à trouver la probabilité d'avoir X = 7,5, qui n'est pas dans les données observées, dans un échantillonnage aléatoire. Comment puis-je l'obtenir? Je sais que cela ecdf(X)me donne le centile équivalent de 7,5 mais ce n'est pas ce que je recherche.
Amin
" trouver la probabilité d'avoir X = 7,5 " - voilà votre problème! Soit vous avez une distribution continue (dans ce cas, la réponse réelle est "0"), soit vous ne l'avez pas (dans ce cas, vous ne devriez pas utiliser l'estimation de densité, car vous n'avez pas de densité).
Glen_b -Reinstate Monica
1
ecdf(b)-ecdf(a)P(une<Xb)<X P(X=7,5)
1
Désolé, c'était une erreur. Je veux dire la proportion d'échantillon de valeurs qui sont 7,5; mon fils m'a distrait pendant que je tapais les derniers mots. Votre échantillon estimatif de la probabilité d'un événement non observé est nul. Souhaitez-vous postuler un préalable? Vouliez-vous un intervalle de confiance pour la proportion au lieu d'une estimation ponctuelle? Votre problème réel n'est pas encore un problème R, votre problème est d'expliquer correctement ce que vous voulez réellement. Vous devriez probablement modifier votre question ou en poster une nouvelle.
Glen_b -Reinstate Monica

Réponses:

35

?densitysouligne qu'il utilise déjà approxpour effectuer une interpolation linéaire; ?approxsouligne que approxfungénère une fonction appropriée:

x <- log(rgamma(150,5))
df <- approxfun(density(x))
plot(density(x))
xnew <- c(0.45,1.84,2.3)
points(xnew,df(xnew),col=2)

entrez la description de l'image ici

En utilisant à integratepartir d'une distance appropriée inférieure au minimum dans l'échantillon (un multiple - disons 4 ou 5, peut-être - de la bande passante utilisée en dfferait généralement pour une distance appropriée), on peut obtenir une bonne approximation du cdf correspondant à df.

Glen_b -Reinstate Monica
la source
c'est intéressant. Il semble que df(2.3)donne la valeur de la fonction de densité estimée à x=2.3mais ce qui PDFfait dans Mathematica donne l'aire sous la courbe ci-dessus x=2.3. Je ne suis pas sûr de cela, c'est juste ma supposition, pouvez-vous reproduire ce que j'ai fait dans Mathematica?
Amin
Ma fonction ci-dessus donne manifestement une estimation basée sur le noyau d'une "fonction de densité de probabilité" ... "évaluée à x". Soit vous le voulez, soit vous ne le souhaitez pas. Si vous ne le faites pas, vous devez expliquer ce que vous ne voulez - en termes statistiques, non seulement comme «reproduire ce comportement.
Glen_b -Reinstate Monica
Je pense que j'ai, par erreur et involontairement, promu que la densité est une probabilité qui ne l'est pas. Je ne voulais pas être trompeur. Si vous pensez que PDFdans Mathematica fait ce que vous avez décrit dans votre réponse (c'est-à-dire trouver la valeur de la fonction de densité pour une valeur X donnée) alors je pense que j'ai obtenu ma réponse. Il y a juste beaucoup de confusion sur l'utilisation des mots!
Amin
2
D'après ce que la PDFpage dit qu'elle fait, elle renvoie le même genre de chose que moi, mais les méthodes qu'elle utilise dans son calcul dans ce cas sont susceptibles d'être un peu plus précises (à cette fin, une précision supplémentaire a cependant peu de valeur). Pour une discussion de la distinction probabilité / densité, voir ici et ici .
Glen_b -Reinstate Monica