Mendeteksi pencilan dalam data hitungan

21

Saya memiliki apa yang saya anggap naif sebagai masalah yang cukup lurus ke depan yang melibatkan deteksi outlier untuk banyak set data penghitungan yang berbeda. Secara khusus, saya ingin menentukan apakah satu atau lebih nilai dalam serangkaian data jumlah lebih tinggi atau lebih rendah dari yang diharapkan relatif terhadap sisa jumlah dalam distribusi.

Faktor perancu adalah bahwa saya perlu melakukan ini untuk 3.500 distribusi dan kemungkinan beberapa dari mereka akan cocok dengan poisson overdispersed nol yang meningkat, sementara yang lain mungkin paling cocok dengan binomial negatif atau ZINB, sementara yang lain mungkin terdistribusi secara normal. Karena alasan ini, skor-Z sederhana atau plot distribusi tidak sesuai untuk sebagian besar dataset. Berikut ini adalah contoh data penghitungan yang ingin saya deteksi outlier.

counts1=[1 1 1 0 2 1 1 0 0 1 1 1 1 1 0 0 0 0 1 2 1 1 2 1 1 1 1 0 0 1 0 1 1 1 1 0 
         0 0 0 0 1 2 1 1 1 1 1 1 0 1 1 2 0 0 0 1 0 1 2 1 1 0 2 1 1 1 0 0 1 0 0 0 
         2 0 1 1 0 2 1 0 1 1 0 0 2 1 0 1 1 1 1 2 0 3]
counts2=[0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 
         0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
         0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 
         1 1 0 0 0]
counts3=[14 13 14 14 14 14 13 14 14 14 14 14 15 14 14 14 14 14 14 15 14 13 14 14 
         15 12 13 17 13 14 14 14 14 15 14 14 13 14 13 14 14 14 14 13 14 14 14 15 
         15 14 14 14 14 14 15 14 1414 14 15 14 14 14 14 14 14 14 14 14 14 14 14 13 16]
counts4=[0 3 1.......]
and so on up to counts3500.

Awalnya saya pikir saya perlu menulis loop dengan Python atau R yang akan menerapkan satu set model untuk setiap distribusi dan memilih model pas terbaik menurut AIC atau yang lain (mungkin fitdistrplus dalam R?). Saya kemudian bisa bertanya apa yang ekstrem untuk distribusi yang diberikan (jumlah yang jatuh di ekor misalnya akankah jumlah "4" menjadi pencilan dalam distribusi jumlah1 di atas?). Namun, saya tidak yakin ini adalah strategi yang valid, dan terpikir oleh saya mungkin ada metodologi sederhana untuk menentukan pencilan dalam data jumlah yang saya tidak sadari. Saya telah mencari secara luas dan tidak menemukan apa pun yang tampaknya sesuai untuk masalah saya mengingat jumlah distribusi yang ingin saya lihat.

Tujuan utama saya adalah untuk mendeteksi kenaikan atau penurunan yang signifikan dalam hitungan untuk setiap distribusi jumlah, menggunakan metodologi yang paling sesuai secara statistik.

Joe Gomphus
sumber

Jawaban:

23

Anda tidak dapat menggunakan jarak pengamatan dari kecocokan klasik data Anda untuk mendeteksi outlier dengan andal karena prosedur pemasangan yang Anda gunakan sendiri cenderung ditarik ke arah outlier (ini disebut efek masking). Salah satu cara sederhana untuk mendeteksi outlier secara andal adalah dengan menggunakan ide umum yang Anda sarankan (jarak dari fit) tetapi mengganti estimator klasik dengan yang kuat jauh lebih rentan untuk diombang-ambingkan oleh outlier. Di bawah ini saya sajikan ilustrasi umum tentang ide tersebut dan kemudian diskusikan solusi untuk masalah spesifik Anda.

Ilustrasi: pertimbangkan 20 pengamatan berikut yang diambil dari (dibulatkan ke digit kedua):N(0,1)

x<-c(-2.21,-1.84,-.95,-.91,-.36,-.19,-.11,-.1,.18,
.3,.31,.43,.51,.64,.67,.72,1.22,1.35,8.1,17.6)

(dua yang terakhir seharusnya adalah .81 dan 1.76 tetapi telah salah ketik secara tidak sengaja).

Menggunakan aturan deteksi pencilan berdasarkan perbandingan statistik

|xsaya-ave(xsaya)|sd(xsaya)

sdsd

Seandainya Anda menggunakan statistik yang kuat sebagai gantinya:

|xsaya-med(xsaya)|gila(xsaya)

dan membandingkan skor- kuat yang dihasilkan dengan kuantil normal, Anda akan menandai dengan benar dua pengamatan terakhir sebagai outlier (dan memperkirakan dari seri yang dipangkas menjadi 0,96).zsd

(untuk kepentingan kelengkapan Aku harus menunjukkan bahwa beberapa orang, bahkan di usia ini dan hari, lebih memilih untuk berpegang teguh estimasi --untrimmed-- baku dari 4,35 daripada menggunakan estimasi yang lebih tepat berdasarkan pemangkasan tapi ini tidak jelas bagi saya )

Untuk distribusi lain situasinya tidak jauh berbeda, hanya bahwa Anda harus mengubah data Anda terlebih dahulu. Misalnya, dalam kasus Anda:

Misalkan adalah data jumlah asli Anda. Salah satu triknya adalah menggunakan transformasi:X

Y=2X

dan untuk mengecualikan pengamatan sebagai outlier jika (aturan ini tidak simetris dan I untuk satu akan sangat berhati-hati tentang tidak termasuk pengamatan dari 'ekor' kiri dari variabel jumlah menurut suatu ambang berbasis data Pengamatan negatif, Jelas, harus cukup aman untuk dihapus)Y>med(Y)+3

X

YN(med(Y),1)

λ

λλ=3

hal

pengguna603
sumber