Come trovare / stimare la funzione di densità di probabilità dalla funzione di densità in R


17

Supponiamo che io abbia una variabile come Xcon una distribuzione sconosciuta. In Mathematica, usando la SmoothKernelDensityfunzione possiamo avere una funzione di densità stimata. Questa funzione di densità stimata può essere usata insieme alla PDFfunzione per calcolare la funzione di densità di probabilità di un valore come Xnella forma di PDF[density,X]assumere che la "densità" sia il risultato SmoothKernelDensity. Sarebbe bello se ci fosse una tale caratteristica in R. Ecco come funziona in Mathematica

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

Ad esempio (basato sulle funzioni di Mathematica):

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

density= SmoothKernelDistribution[data]; #estimated density

PDF[density, 2.345] returns 0.0588784 

Qui puoi trovare maggiori informazioni sul PDF:

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

So che posso tracciare la sua funzione di densità usando density(X)in R e usando ecdf(X)posso ottenere la sua funzione di distribuzione cumulativa empirica. È possibile fare la stessa cosa in R in base a ciò che ho descritto su Mathematica?

Qualsiasi aiuto e idea è apprezzato.


density(x)fornisce una stima del pdf, come già notato, ma la sua idoneità dipende dallo scopo per il quale si desidera avere la densità. Si noti, ad esempio, che la varianza è distorta (nell'esecuzione della convoluzione, si aggiunge la varianza del kernel alla varianza dei dati, di per sé una stima imparziale) - tali compromessi di bias-varianza sono onnipresenti. Esistono altre alternative, ad esempio la stima della densità di log-spline, ma ancora una volta, la sua idoneità dipende in parte da ciò che si desidera farne.
Glen_b

@Glen_b Voglio usare la densità stimata per trovare la probabilità di altri valori nella distribuzione. Ad esempio, ho un vettore di dati che va da 0 a 10. Questo set di dati contiene solo 70 valori univoci tra 0 e 10. Posso tracciare la densità. Ora supponiamo che io sia interessato a trovare la probabilità di avere X = 7.5, che non è nei dati osservati, in un campionamento casuale. Come posso ottenerlo? So che ecdf(X)mi dà il percentile equivalente di 7.5 ma non è quello che sto cercando.
Amin,

" trovare la probabilità di avere X = 7.5 " - c'è il tuo problema! O hai una distribuzione continua (nel qual caso la risposta effettiva è "0"), oppure no (nel qual caso non dovresti usare la stima della densità, perché non hai una densità).
Glen_b

1
ecdf(b)-ecdf(a)P(un'<XB)<X P(X=7.5)

1
Siamo spiacenti, è stato un errore. Intendo la proporzione del campione di valori che sono 7.5; mio figlio mi distrasse mentre scrivevo le ultime due parole. La stima del campione della probabilità di un evento non osservato è zero. Volevi applicare un precedente? Volevi un intervallo di confidenza per la proporzione anziché una stima puntuale? Il tuo vero problema non è ancora un problema di R, il tuo problema è quello di spiegare correttamente ciò che vuoi effettivamente. Probabilmente dovresti modificare la tua domanda o pubblicarne una nuova.
Glen_b

Risposte:


35

?densitysottolinea che utilizza approxgià l'interpolazione lineare; ?approxsottolinea che approxfungenera una funzione adatta:

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)

inserisci qui la descrizione dell'immagine

Usando a integratepartire da una distanza appropriata al di sotto del minimo nel campione (un multiplo - diciamo 4 o 5, forse - della larghezza di banda utilizzata dfgeneralmente farebbe per una distanza appropriata), si può ottenere una buona approssimazione del cdf corrispondente a df.


questo è interessante. Sembra che df(2.3)dia il valore della funzione di densità stimata a x=2.3ma ciò che PDFfa in Mathematica è dare l'area sotto la curva sopra x=2.3. Non ne sono del tutto sicuro. Questa è solo la mia ipotesi. Puoi ri-produrre quello che ho fatto in Mathematica?
Amin,

La mia funzione sopra mostra in modo dimostrabile una stima basata sul kernel di una "funzione di densità di probabilità" ... "valutata in x". O lo vuoi o no. Se non lo fai, devi spiegare quello che non vuole - in termini statistici, non solo come 'riprodurre questo comportamento'.
Glen_b

Penso di aver promosso erroneamente e involontariamente che la densità è probabilità che non lo è. Non intendevo essere fuorviante.Se pensi che PDFin Mathematica faccia quello che hai descritto nella tua risposta (cioè trovare il valore della funzione di densità per un dato valore X), allora penso di aver ottenuto la mia risposta. Solo ci sono molte confusioni sull'uso delle parole!
Amin,

2
Da quello che la PDFpagina dice di fare, restituisce lo stesso tipo di cosa che faccio, ma i metodi che usa nel suo calcolo in questo caso sono probabilmente un po 'più accurati (a tale scopo, tuttavia, un'accuratezza aggiuntiva ha poco valore). Per alcune discussioni sulla distinzione probabilità / densità, vedere qui e qui .
Glen_b
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.