Saya punya beberapa data multivariat tentang kecantikan vs usia. Usia berkisar dari 20-40 dengan interval 2 (20, 22, 24 .... 40), dan untuk setiap catatan data, mereka diberi peringkat usia dan kecantikan 1-5. Ketika saya membuat diagram kotak dari data ini (usia di sepanjang sumbu X, peringkat kecantikan di sumbu Y), ada beberapa pencilan yang diplot di luar kumis setiap kotak.
Saya ingin menghapus pencilan ini dari bingkai data itu sendiri, tetapi saya tidak yakin bagaimana R menghitung pencilan untuk plot kotaknya. Berikut adalah contoh tampilan data saya.
r
statistics
outliers
Dan Q
sumber
sumber
boxplot
mengembalikan fungsi outlier (antara statistik lainnya) tak terlihat. Cobafoo <- boxplot(...); foo
dan baca?boxplot
untuk memahami hasilnya.Jawaban:
Oke, Anda harus menerapkan sesuatu seperti ini ke dataset Anda. Jangan mengganti & menyimpan atau Anda akan menghancurkan data Anda! Dan, btw, Anda seharusnya (hampir) tidak pernah menghapus pencilan dari data Anda:
Untuk melihatnya beraksi:
Dan sekali lagi, Anda tidak boleh melakukan ini sendiri, outlier memang seharusnya begitu! =)
EDIT: Saya menambahkan
na.rm = TRUE
sebagai default.EDIT2:
quantile
Fungsi dihapus , ditambahkan langganan, karenanya membuat fungsi lebih cepat! =)sumber
boxplot
. Itu bisa diatur, dan Anda harus menandai jawaban @ Prasad kalau begitu, karena menjawab pertanyaan Anda. Jika Anda ingin mengecualikan pencilan dengan menggunakan "aturan pencilan"q +/- (1.5 * H)
, maka jalankan beberapa analisis, lalu gunakan fungsi ini. BTW, saya melakukan ini dari awal, tanpa Googling, jadi ada kemungkinan saya telah menemukan kembali roda dengan fungsi saya ini ...Tidak ada yang memposting jawaban paling sederhana:
Lihat juga ini: http://www.r-statistics.com/2011/01/how-to-label-all-the-outliers-in-a-boxplot/
sumber
result = x[!x %in% boxplot.stats(x)$out]
Gunakan
outline = FALSE
sebagai opsi saat Anda membuat plot kotak (baca bantuannya!).sumber
out
dangroup
dalam daftar).Fungsi boxplot mengembalikan nilai yang digunakan untuk melakukan plotting (yang kemudian dilakukan oleh bxp ():
Saya sengaja tidak menjawab pertanyaan tertentu karena saya menganggapnya sebagai malpraktek statistik untuk menghilangkan "pencilan". Saya menganggap praktik yang dapat diterima untuk tidak memplotnya dalam plot kotak, tetapi menghapusnya hanya karena melebihi sejumlah deviasi standar atau beberapa lebar antar-kuartil adalah pemecahan rekaman pengamatan yang sistematis dan tidak ilmiah.
sumber
Saya mencari paket yang terkait dengan penghapusan pencilan, dan menemukan paket ini (secara mengejutkan disebut "pencilan"!): Https://cran.r-project.org/web/packages/outliers/outliers.pdf
jika Anda melewatinya, Anda lihat berbagai cara untuk menghilangkan pencilan dan di antara mereka saya menemukan yang
rm.outlier
paling nyaman untuk digunakan dan seperti yang dikatakan di tautan di atas: "Jika pencilan dideteksi dan dikonfirmasi oleh uji statistik, fungsi ini dapat menghapusnya atau mengganti dengan mean sampel atau median" dan juga berikut adalah bagian penggunaan dari sumber yang sama:" Penggunaan
Argumen
x kumpulan data, paling sering berupa vektor. Jika argumen adalah kerangka data, maka pencilan dihapus dari setiap kolom dengan sapply. Perilaku yang sama diterapkan dengan menerapkan ketika matriks diberikan.
fill Jika disetel ke TRUE, median atau mean ditempatkan sebagai pengganti outlier. Jika tidak, pencilan akan dihapus begitu saja.
median Jika disetel ke TRUE, median digunakan sebagai pengganti mean dalam penggantian pencilan. berlawanan jika disetel ke TRUE, memberikan nilai berlawanan (jika nilai terbesar memiliki selisih maksimum dari mean, itu menjadi terkecil dan sebaliknya) "
sumber
Saya merasa ini sangat mudah untuk menghilangkan pencilan. Dalam contoh di atas saya hanya mengekstrak 2 persentil menjadi 98 persentil dari nilai atribut.
sumber
Tidak akan:
menyelesaikan tugas ini dengan cukup mudah?
sumber
Menambahkan ke saran @sefarkas dan menggunakan kuantil sebagai cut-off, seseorang dapat menjelajahi opsi berikut:
Ini akan menghapus poin poin di luar kuantil ke-99. Perhatian harus diberikan seperti yang dikatakan aL3Xa tentang menjaga pencilan. Ini harus dihapus hanya untuk mendapatkan pandangan konservatif alternatif dari data.
sumber
0.91
atau0.99
? seperti dalammydata$var < quantile(mydata$var, probs=c(.01, .91))[1])
ataumydata$var < quantile(mydata$var, probs=c(.01, .99))[1])
Salah satu cara untuk melakukannya adalah
atau
sumber
Pencilan sangat mirip dengan puncak, sehingga detektor puncak dapat berguna untuk mengidentifikasi pencilan. Metode yang dijelaskan di sini memiliki kinerja yang cukup baik dengan menggunakan skor-z. Bagian animasi bagian bawah halaman menggambarkan metode pensinyalan pada pencilan, atau puncak.
Puncak tidak selalu sama dengan pencilan, tetapi sering serupa.
Contoh ditunjukkan di sini: Dataset ini dibaca dari sensor melalui komunikasi serial. Kesalahan komunikasi serial sesekali, kesalahan sensor atau keduanya menyebabkan poin data yang salah dan berulang. Tidak ada nilai statistik dalam hal ini. Mereka bisa dibilang bukan pencilan, mereka adalah kesalahan. Detektor puncak skor-z mampu memberi sinyal pada titik data palsu dan menghasilkan kumpulan data yang bersih:
sumber
Coba ini. Beri makan variabel Anda di fungsi dan simpan output daya di variabel yang akan berisi pencilan yang dihapus
sumber