Jak znaleźć / oszacować funkcję gęstości prawdopodobieństwa na podstawie funkcji gęstości w R.

17

Załóżmy, że mam zmienną Xo nieznanym rozkładzie. W Mathematica, używając SmoothKernelDensityfunkcji, możemy mieć funkcję szacowanej gęstości. Ta szacowana funkcja gęstości może być używana wraz z PDFfunkcją do obliczania funkcji gęstości prawdopodobieństwa wartości takiej jak Xw postaci PDF[density,X]założenia, że ​​„gęstość” jest wynikiem SmoothKernelDensity. Byłoby dobrze, gdyby w R. była taka funkcja. Tak to działa w Mathematica

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

Jako przykład (na podstawie funkcji Mathematica):

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

density= SmoothKernelDistribution[data]; #estimated density

PDF[density, 2.345] returns 0.0588784 

Tutaj możesz znaleźć więcej informacji o PDF:

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

Wiem, że mogę wykreślić jego funkcję gęstości za pomocą density(X)w R i za pomocą ecdf(X)mogę uzyskać jej empiryczną funkcję rozkładu skumulowanego. Czy można zrobić to samo w R na podstawie tego, co opisałem o Mathematica?

Każda pomoc i pomysł są mile widziane.

Jestem w
źródło
density(x)daje oszacowanie pdf, jak już zauważyłeś, ale jego przydatność zależy od celu, dla którego chcesz mieć gęstość. Zauważ na przykład, że wariancja jest tendencyjna (wykonując splot, dodajesz wariancję jądra do wariancji danych, co samo w sobie jest obiektywnym oszacowaniem) - takie kompromisy wariancji odchylenia są wszechobecne. Istnieją inne alternatywy, takie jak na przykład szacowanie gęstości log-splajn - ale znowu, jego przydatność częściowo zależy od tego, co chcesz z tym zrobić.
Glen_b
@Glen_b Chcę użyć szacowanej gęstości do znalezienia prawdopodobieństwa innych wartości w rozkładzie. Na przykład mam wektor danych w zakresie od 0 do 10. Ten zestaw danych zawiera tylko 70 unikalnych wartości od 0 do 10. Mogę wykreślić gęstość. Załóżmy teraz, że jestem zainteresowany znalezieniem prawdopodobieństwa, że ​​X = 7,5, którego nie ma w obserwowanych danych, w losowym próbkowaniu. Jak mogę je uzyskać? Wiem, że ecdf(X)daje mi to równowartość percentyla 7,5, ale nie tego szukam.
Amin
znajdowanie prawdopodobieństwa, że ​​X = 7,5 ” - jest twój problem! Albo masz ciągły rozkład (w którym to przypadku rzeczywista odpowiedź to „0”), albo nie (w takim przypadku nie powinieneś używać szacowania gęstości, ponieważ nie masz gęstości).
Glen_b
1
ecdf(b)-ecdf(a)P.(za<Xb)<X P.(X=7.5)
1
Przepraszam, to był błąd. Mam na myśli proporcję próbek, które wynoszą 7,5; mój syn rozproszył mnie, gdy pisałam kilka ostatnich słów. Twoje przykładowe oszacowanie prawdopodobieństwa nieobserwowanego zdarzenia wynosi zero. Czy chcesz zgłosić wcześniej? Czy chciałeś przedział ufności dla proporcji zamiast oszacowania punktowego? Twój rzeczywisty problem nie jest jeszcze problemem R. Problem polega na prawidłowym wyjaśnieniu, czego naprawdę chcesz. Prawdopodobnie powinieneś edytować swoje pytanie lub opublikować nowe.
Glen_b

Odpowiedzi:

35

?densityzwraca uwagę, że używa approxjuż interpolacji liniowej; ?approxwskazuje, że approxfungeneruje odpowiednią funkcję:

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)

wprowadź opis zdjęcia tutaj

Używając integraterozpoczynania od odpowiedniej odległości poniżej minimum w próbce (wielokrotność - powiedzmy 4 lub 5 - być może zastosowanej szerokości pasma dfbyłaby ogólnie wystarczająca dla odpowiedniej odległości), można uzyskać dobre przybliżenie cdf odpowiadające df.

Glen_b - Przywróć Monikę
źródło
to jest interesujące. Wydaje się, że df(2.3)daje to wartość szacowanej funkcji gęstości, x=2.3ale to, co PDFrobi w Mathematica, daje obszar pod krzywą powyżej x=2.3. Nie jestem do końca tego pewien. To tylko moje przypuszczenie. Czy możecie odtworzyć to, co zrobiłem w Mathematica?
Amin
Moja funkcja powyżej wyraźnie pokazuje oparte na jądrze oszacowanie „funkcji gęstości prawdopodobieństwa” ... ”oszacowanej na x”. Albo tego chcesz, albo nie. Jeśli nie, trzeba wyjaśnić, czego nie chcą - w kategoriach statystycznych, nie tylko jako „odtworzyć to zachowanie”.
Glen_b
Myślę, że przez pomyłkę i nieumyślnie promowałem, że gęstość to prawdopodobieństwo, które nie jest. Nie chciałem wprowadzać w błąd. Jeśli myślisz, że PDFw Mathematica robi to, co opisałeś w swojej odpowiedzi (tj. Znajdowanie wartości funkcji gęstości dla danej wartości X), myślę, że dostałem swoją odpowiedź. Po prostu istnieje wiele zamieszania przy użyciu słów!
Amin
2
Z tego, co PDFmówi strona, robi, zwraca to samo, co ja, ale metody, których używa w swoich obliczeniach, w tym przypadku prawdopodobnie będą nieco dokładniejsze (dla takiego celu dodatkowa dokładność ma jednak niewielką wartość). W celu omówienia rozróżnienia prawdopodobieństwo / gęstość zobacz tutaj i tutaj .
Glen_b