estimasi paket kepadatan kernel dengan kernel Epanechnikov

8

Saya sedang bekerja dengan kumpulan data "geyser" dari paket MASS dan membandingkan perkiraan kepadatan kernel dari paket np.

Masalah saya adalah untuk memahami estimasi kepadatan menggunakan cross-validasi kuadrat terkecil dan kernel Epanechnikov:

blep<-npudensbw(~geyser$waiting,bwmethod="cv.ls",ckertype="epanechnikov")
plot(npudens(bws=blep))

masukkan deskripsi gambar di sini

Untuk kernel Gaussian sepertinya baik-baik saja:

blga<-npudensbw(~geyser$waiting,bwmethod="cv.ls",ckertype="gaussian")
plot(npudens(bws=blga))

masukkan deskripsi gambar di sini

Atau jika saya menggunakan kernel Epanechnikov dan kemungkinan maksimum cv:

bmax<-npudensbw(~geyser$waiting,bwmethod="cv.ml",ckertype="epanechnikov")
plot(npudens(~geyser$waiting,bws=bmax))

Apakah ini salah saya atau ada masalah dalam paket?

Sunting: Jika saya menggunakan Mathematica untuk kernel Epanechnikov dan kuadrat terkecil cv berfungsi:

d = SmoothKernelDistribution[data, bw = "LeastSquaresCrossValidation", ker = "Epanechnikov"]
Plot[{PDF[d, x], {x, 20,110}]
TMoek
sumber

Jawaban:

6

EDIT

Ini dijelaskan dalam FAQ :

Saya menggunakan plot () (npplot ()) untuk memplot, katakanlah, densitas dan plot yang dihasilkan terlihat seperti kerapatan terbalik daripada kerapatan

Ini dapat terjadi ketika bandwidth datadriven secara dramatis undersmoothed. Prosedur pemilihan bandwidth yang digerakkan oleh data (yaitu, otomatis) tidak dijamin selalu menghasilkan hasil yang baik karena mungkin adanya pencilan atau pembulatan / diskritisasi data kontinu, antara lain. Secara default, npplot () mengambil dua ekstrem data (minimum, maksimum yaitu, titik data aktual) kemudian membuat kisi-kisi data evaluasi yang berjarak sama (yaitu, bukan titik data aktual secara umum) dan menghitung kepadatan untuk titik-titik ini. Karena bandwidth sangat kecil, estimasi kepadatan pada titik-titik evaluasi ini benar nol, sedangkan yang untuk realisasi sampel (dalam hal ini hanya dua, min dan maks) adalah tidak nol, maka kami mendapatkan dua puncak di tepi plot dan mangkuk rata sama dengan nol di tempat lain. Ini juga dapat terjadi ketika data Anda sangat banyak diskrit dan Anda memperlakukannya sebagai kontinu. Dalam kasus seperti itu, memperlakukan data sesuai pesanan dapat menghasilkan perkiraan yang lebih masuk akal

Seperti yang disarankan memperlakukan data seperti yang diperintahkan, berfungsi:

blep<-npudensbw(~ordered(geyser$waiting), 
                bwmethod="cv.ls", ckertype="epanechnikov", ckerorder=2)

masukkan deskripsi gambar di sini

Itu juga berhasil dengan pesanan kernel yang lebih tinggi, seperti dengan ckerorder=4dalam contoh ini:

masukkan deskripsi gambar di sini

hak cipta
sumber
Terima kasih, tetapi mengapa ini bekerja dengan kernel Gaussian atau di Mathematica?
TMoek