plot(density(rexp(100))
Jelas semua kepadatan di sebelah kiri nol merupakan bias.
Saya ingin meringkas beberapa data untuk non-statistik, dan saya ingin menghindari pertanyaan tentang mengapa data non-negatif memiliki kepadatan di sebelah kiri nol. Plot-plot tersebut untuk pengecekan pengacakan; Saya ingin menunjukkan distribusi variabel berdasarkan kelompok perlakuan dan kontrol. Distribusi seringkali eksponensial-ish. Histogram rumit karena berbagai alasan.
Pencarian google cepat memberi saya pekerjaan oleh ahli statistik pada kernel non-negatif, misalnya: ini .
Tetapi apakah semua itu telah diterapkan dalam R? Dari metode yang diterapkan, apakah ada di antara mereka yang "terbaik" dalam beberapa cara untuk statistik deskriptif?
EDIT: bahkan jika from
perintah tersebut dapat menyelesaikan masalah saya saat ini, akan menyenangkan untuk mengetahui apakah ada orang yang telah mengimplementasikan kernel berdasarkan literatur pada estimasi kepadatan non-negatif
sumber
plot(density(rexp(100), from=0))
?Jawaban:
Salah satu solusi, yang dipinjam dari pendekatan untuk pembobotan statistik spasial, adalah memotong kepadatan di sebelah kiri pada nol tetapi untuk menambah data yang paling dekat dengan nol. Idenya adalah bahwa setiap nilai adalah "menyebar" ke dalam kernel dari total area unit yang berpusat di x ; setiap bagian dari kernel yang akan masuk ke wilayah negatif dihapus dan kernel dinormalkan kembali ke area unit.x x
Misalnya, dengan kernel Gaussian , bobot renormalisasi adalahKh(y,x)=exp(−12((y−x)/h)2)/2π−−√
di mana adalah fungsi distribusi kumulatif dari varian Normal rata-rata x dan standar deviasi h . Formula yang sebanding tersedia untuk kernel lainnya.Φ x h
Ini lebih sederhana - dan jauh lebih cepat dalam perhitungan - daripada mencoba mempersempit bandwidth di dekat . Sulit untuk meresepkan bagaimana bandwidth harus diubah mendekati 0 . Namun demikian, metode ini juga ad hoc : masih akan ada beberapa bias dekat 0 . Tampaknya berfungsi lebih baik daripada perkiraan kepadatan default. Berikut ini perbandingan menggunakan dataset largish:0 0 0
Biru menunjukkan kerapatan default sedangkan merah menunjukkan kerapatan yang disesuaikan untuk tepi pada . Distribusi mendasar yang sebenarnya dilacak sebagai garis putus-putus untuk referensi.0
Kode r
The
density
fungsi dalamR
akan mengeluh bahwa jumlah bobot tidak kesatuan, karena ingin integral atas semua bilangan real menjadi kesatuan, sedangkan pendekatan ini membuat terpisahkan atas angka positif sama untuk persatuan. Sebagai cek, integral yang terakhir diperkirakan sebagai jumlah Riemann.sumber
Alternatifnya adalah pendekatan Kooperberg dan rekan, berdasarkan pada estimasi kepadatan menggunakan splines untuk memperkirakan kepadatan log data. Saya akan menunjukkan contoh menggunakan data dari jawaban @ whuber, yang akan memungkinkan untuk perbandingan pendekatan.
Anda perlu menginstal paket logspline untuk ini; instal jika tidak:
Memuat paket dan memperkirakan kepadatan menggunakan
logspline()
fungsi:Berikut ini, saya menganggap bahwa objek
d
dari jawaban @ whuber ada di ruang kerja.Plot yang dihasilkan ditunjukkan di bawah ini, dengan kepadatan logspline ditunjukkan oleh garis merah
Selain itu, dukungan untuk kepadatan dapat ditentukan melalui argumen
lbound
danubound
. Jika kita ingin mengasumsikan bahwa kerapatan adalah 0 di sebelah kiri 0 dan ada diskontinuitas pada 0, kita dapat menggunakanlbound = 0
dalam panggilan kelogspline()
, misalnyaMenghasilkan estimasi kepadatan berikut (ditampilkan di sini dengan
m
pas logspline asli karena gambar sebelumnya sudah mulai sibuk).Plot yang dihasilkan ditunjukkan di bawah ini
x
x
sumber
logspline
? Bagi saya, kepadatan keduanya, versi terikat dan tidak terikat pergi ke nol padax = 0
.Untuk membandingkan distribusi berdasarkan kelompok (yang Anda katakan adalah tujuan dalam salah satu komentar Anda) mengapa tidak sesuatu yang lebih sederhana? Plot kotak paralel bekerja dengan baik jika N besar; plot strip paralel berfungsi jika N kecil (dan keduanya menunjukkan outlier dengan baik, yang menurut Anda merupakan masalah dalam data Anda).
sumber
Sebagai komentar Stéphane Anda dapat menggunakan
from = 0
dan, selain itu, Anda dapat mewakili nilai Anda di bawah kurva kepadatan denganrug (x)
sumber
from=0
tampak seolah-olah hanya menekan merencanakan nilai di bawah 0; itu tidak benar perhitungan untuk fakta bahwa beberapa distribusi telah dioleskan di bawah 0.from
perintah menghasilkan plot yang tampaknya memiliki puncak tepat nol. Tetapi jika Anda melihat histogram dengan nampan yang terus menerus lebih kecil, banyak data akan menunjukkan puncak AT nol. Inifrom
hanyalah trik grafis.from=0
menekan apa pun. Itu hanya memulai "grid" di nol.density(rexp(100), from=0)
ini tidak ada hubungannya dengan grafik