Saya mencoba menggunakan fungsi ' density ' di R untuk melakukan estimasi kepadatan kernel. Saya mengalami beberapa kesulitan menafsirkan hasil dan membandingkan berbagai dataset karena tampaknya area di bawah kurva belum tentu 1. Untuk setiap fungsi kepadatan probabilitas (pdf) , kita perlu memiliki area ∫ ∞ - ∞ ϕ ( x ) d x = 1 . Saya berasumsi bahwa estimasi kepadatan kernel melaporkan pdf. Saya menggunakan integrate.xy dari sfsmisc untuk memperkirakan daerah di bawah kurva.
> # generate some data
> xx<-rnorm(10000)
> # get density
> xy <- density(xx)
> # plot it
> plot(xy)
> # load the library
> library(sfsmisc)
> integrate.xy(xy$x,xy$y)
[1] 1.000978
> # fair enough, area close to 1
> # use another bw
> xy <- density(xx,bw=.001)
> plot(xy)
> integrate.xy(xy$x,xy$y)
[1] 6.518703
> xy <- density(xx,bw=1)
> integrate.xy(xy$x,xy$y)
[1] 1.000977
> plot(xy)
> xy <- density(xx,bw=1e-6)
> integrate.xy(xy$x,xy$y)
[1] 6507.451
> plot(xy)
Bukankah seharusnya area di bawah kurva selalu 1? Tampaknya bandwidth kecil adalah masalah, tetapi kadang-kadang Anda ingin menunjukkan detail dll di bagian ekor dan bandwidth kecil diperlukan.
Perbarui / Jawab:
> xy <- density(xx,n=2^15,bw=.001)
> plot(xy)
> integrate.xy(xy$x,xy$y)
[1] 1.000015
> xy <- density(xx,n=2^20,bw=1e-6)
> integrate.xy(xy$x,xy$y)
[1] 2.812398
r
estimation
pdf
kernel-smoothing
auc
highBandWidth
sumber
sumber
Jawaban:
Pikirkan tentang penggunaan aturan trapesium
integrate.xy()
. Untuk distribusi normal, itu akan meremehkan area di bawah kurva dalam interval (-1,1) di mana kepadatannya cekung (dan karenanya interpolasi linier di bawah kepadatan sebenarnya), dan melebih - lebihkannya di tempat lain (saat interpolasi linier berjalan di atas kepadatan sebenarnya). Karena wilayah yang terakhir lebih besar (dalam ukuran Lesbegue, jika Anda suka), aturan trapesium cenderung melebih-lebihkan integral. Sekarang, saat Anda pindah ke bandwidth yang lebih kecil, hampir semua perkiraan Anda sedikit demi sedikit cembung, dengan banyak lonjakan sempit yang terkait dengan titik data, dan lembah di antaranya. Di situlah aturan trapesium rusak parah.sumber
density
bukan denganintegrate.xy
. Dengan N = 10.000 dan bw = 1e-6, Anda harus melihat sisir dengan tinggi masing-masing gigi sekitar 1e6, dan gigi lebih padat sekitar 0. Sebagai gantinya, Anda masih melihat kurva berbentuk lonceng yang dapat dikenali. Jadidensity
menipu Anda, atau setidaknya itu harus digunakan secara berbeda dengan bandwidth kecil:n
harus tentang (rentang data) / (bw) daripada defaultn=512
. Intergrator harus mengambil salah satu dari nilai-nilai besar yangdensity
dihasilkan oleh suatu kebetulan yang tidak bahagia.Tidak apa-apa, Anda bisa memperbaikinya dengan menggeser dan mengubah skala; tambahkan angka terkecil sedemikian rupa sehingga densitasnya adalah non-negatif, lalu gandakan semuanya dengan konstanta sehingga area tersebut adalah satu. Ini cara yang mudah.
sumber
density
fungsi tidak menghasilkan kepadatan "tepat" yang terintegrasi ke 1 - ketimbang pada bagaimana untuk memperbaikinya.