Cara menemukan / memperkirakan fungsi kerapatan peluang dari fungsi kerapatan dalam R

17

Misalkan saya punya variabel suka Xdengan distribusi tidak dikenal. Dalam Mathematica, dengan menggunakan SmoothKernelDensityfungsi kita dapat memiliki fungsi kerapatan yang diperkirakan. Perkiraan fungsi kerapatan ini dapat digunakan bersama dengan PDFfungsi untuk menghitung probabilitas fungsi kerapatan dari suatu nilai seperti Xdalam bentuk PDF[density,X]asumsi bahwa "kerapatan" adalah hasil dari SmoothKernelDensity. Akan lebih baik jika ada fitur seperti itu di R. Ini adalah cara kerjanya di Mathematica

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

Sebagai contoh (berdasarkan fungsi Mathematica):

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

density= SmoothKernelDistribution[data]; #estimated density

PDF[density, 2.345] returns 0.0588784 

Di sini Anda dapat menemukan informasi lebih lanjut tentang PDF:

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

Saya tahu bahwa saya dapat memplot fungsi kerapatan menggunakan density(X)dalam R dan dengan menggunakan ecdf(X)saya dapat memperoleh fungsi distribusi kumulatif empirisnya. Apakah mungkin untuk melakukan hal yang sama dalam R berdasarkan pada apa yang saya jelaskan tentang Mathematica?

Setiap bantuan dan ide sangat dihargai.

Amin
sumber
density(x)memberikan perkiraan pdf, seperti yang telah Anda catat, tetapi kesesuaiannya tergantung pada tujuan yang Anda inginkan memiliki kepadatan. Perhatikan, misalnya, bahwa varians menjadi bias (dalam melakukan konvolusi, Anda menambahkan varians kernel ke varians data, itu sendiri merupakan estimasi yang tidak bias) - pengorbanan varians-varians semacam itu ada di mana-mana. Ada alternatif lain, seperti estimasi kepadatan log-spline, misalnya - tetapi sekali lagi, kesesuaiannya sebagian tergantung pada apa yang ingin Anda lakukan dengannya.
Glen_b -Reinstate Monica
@ Glen_b Saya ingin menggunakan estimasi kerapatan untuk menemukan probabilitas nilai-nilai lain dalam distribusi. Misalnya, saya memiliki vektor data mulai dari 0 hingga 10. Kumpulan data ini hanya berisi 70 nilai unik antara 0 dan 10. Saya dapat memplot kerapatan. Sekarang anggaplah saya tertarik untuk menemukan probabilitas memiliki X = 7,5, yang tidak ada dalam data yang diamati, dalam sampel acak. Bagaimana saya bisa mendapatkannya? Saya tahu itu ecdf(X)memberi saya persentil setara 7,5 tetapi bukan itu yang saya cari.
Amin
" menemukan probabilitas memiliki X = 7,5 " - ada masalah Anda! Entah Anda memiliki distribusi berkelanjutan (dalam hal ini jawaban sebenarnya adalah "0"), atau tidak (dalam hal ini Anda tidak boleh menggunakan estimasi kepadatan, karena Anda tidak memiliki kepadatan).
Glen_b -Reinstate Monica
1
ecdf(b)-ecdf(a)P(Sebuah<Xb)<X P(X=7.5)
1
Maaf, itu kesalahan. Maksud saya proporsi sampel nilai yang 7,5; anak saya mengganggu saya ketika saya mengetik beberapa kata terakhir. Perkiraan sampel Anda tentang kemungkinan suatu peristiwa yang tidak teramati adalah nol. Apakah Anda ingin menerapkan prior? Apakah Anda menginginkan interval kepercayaan untuk proporsi alih-alih estimasi titik? Masalah Anda yang sebenarnya belum merupakan masalah R, masalah Anda dengan benar menjelaskan apa yang sebenarnya Anda inginkan. Anda mungkin harus mengedit pertanyaan Anda, atau memposting pertanyaan baru.
Glen_b -Reinstate Monica

Jawaban:

35

?densitymenunjukkan bahwa yang digunakan approxuntuk melakukan interpolasi linier sudah; ?approxmenunjukkan bahwa approxfunmenghasilkan fungsi yang sesuai:

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)

masukkan deskripsi gambar di sini

Dengan menggunakan integratemulai dari jarak yang sesuai di bawah minimum dalam sampel (beberapa - katakanlah 4 atau 5, mungkin - dari bandwidth yang digunakan pada dfumumnya akan melakukan untuk jarak yang sesuai), seseorang dapat memperoleh perkiraan yang baik dari cdf sesuai dengan df.

Glen_b -Reinstate Monica
sumber
ini menarik. Tampaknya df(2.3)memberikan nilai estimasi fungsi kerapatan pada x=2.3tetapi apa yang PDFdilakukan di Mathematica adalah memberikan area di bawah kurva di atas x=2.3. Saya tidak begitu yakin tentang ini. Ini hanya dugaan saya. Bisakah Anda membuat ulang apa yang saya lakukan di Mathematica?
Amin
Fungsi saya di atas terbukti memberikan estimasi berbasis kernel dari "fungsi kepadatan probabilitas" ... "yang dievaluasi pada x". Entah Anda menginginkannya, atau tidak. Jika Anda tidak, Anda harus menjelaskan apa yang Anda lakukan inginkan - dalam hal statistik, bukan hanya sebagai 'mereproduksi perilaku ini'.
Glen_b -Reinstate Monica
Saya berpikir bahwa saya secara keliru dan tidak sengaja telah mempromosikan bahwa kepadatan adalah probabilitas yang bukan. Saya tidak bermaksud menyesatkan. Jika Anda berpikir bahwa PDFdalam Mathematica melakukan apa yang Anda jelaskan dalam jawaban Anda (yaitu menemukan nilai fungsi kerapatan untuk diberi nilai X) maka saya berpikir bahwa saya mendapatkan jawaban saya. Hanya ada banyak kebingungan dalam menggunakan kata-kata!
Amin
2
Dari apa yang PDFdikatakan laman itu, ia mengembalikan hal yang sama dengan yang saya lakukan, tetapi metode yang digunakannya dalam perhitungannya dalam kasus ini cenderung agak lebih akurat (untuk tujuan semacam itu, akurasi tambahan memiliki nilai yang kecil, namun). Untuk beberapa diskusi tentang perbedaan probabilitas / kepadatan, lihat di sini dan di sini .
Glen_b -Reinstate Monica