Saya memiliki kumpulan data dengan banyak nol yang terlihat seperti ini:
set.seed(1)
x <- c(rlnorm(100),rep(0,50))
hist(x,probability=TRUE,breaks = 25)
Saya ingin menggambar garis untuk kepadatannya, tetapi density()
fungsinya menggunakan jendela bergerak yang menghitung nilai negatif x.
lines(density(x), col = 'grey')
Ada density(... from, to)
argumen, tetapi ini tampaknya hanya memotong perhitungan, tidak mengubah jendela sehingga kepadatan pada 0 konsisten dengan data seperti yang dapat dilihat oleh plot berikut:
lines(density(x, from = 0), col = 'black')
(jika interpolasi diubah, saya akan berharap bahwa garis hitam akan memiliki kepadatan lebih tinggi pada 0 daripada garis abu-abu)
Apakah ada alternatif untuk fungsi ini yang akan memberikan perhitungan kepadatan yang lebih baik pada nol?
sumber
Saya setuju dengan Rob Hyndman bahwa Anda perlu berurusan dengan nol secara terpisah. Ada beberapa metode untuk menangani estimasi kerapatan kernel dari suatu variabel dengan dukungan terbatas, termasuk 'refleksi', 'rernormalisasi' dan 'kombinasi linear'. Ini tampaknya tidak diimplementasikan dalam
density
fungsi R , tetapi tersedia dalam paket Benn Jannkdens
untuk Stata .sumber
Opsi lain ketika Anda memiliki data dengan batas bawah logis (seperti 0, tetapi bisa menjadi nilai lain) yang Anda tahu data tidak akan di bawah dan estimasi kepadatan kernel biasa menempatkan nilai di bawah batas itu (atau jika Anda memiliki batas atas , atau keduanya) adalah dengan menggunakan estimasi logspline. Paket logspline untuk R mengimplementasikan ini dan fungsi memiliki argumen untuk menentukan batas sehingga estimasi akan pergi ke batas, tetapi tidak melampaui dan masih skala ke 1.
Ada juga metode (
oldlogspline
fungsi) yang akan memperhitungkan sensor interval akun, jadi jika 0 itu tidak tepat 0, tetapi dibulatkan sehingga Anda tahu mereka mewakili nilai antara 0 dan beberapa angka lainnya (misalnya batas deteksi) maka Anda dapat memberikan informasi itu ke fungsi pemasangan.Jika 0 ekstra benar 0 (tidak bulat) maka memperkirakan lonjakan atau titik massa adalah pendekatan yang lebih baik, tetapi juga dapat dikombinasikan dengan estimasi logspline.
sumber
Anda dapat mencoba menurunkan bandwidth (garis biru adalah untuk
adjust=0.5
),tapi mungkin KDE bukan metode terbaik untuk menangani data seperti itu.
sumber