Cara menghilangkan outlier di r


Outlier adalah observasi yang jaraknya sangat jauh dari nilai lain dalam kumpulan data. Pencilan dapat menjadi masalah karena dapat mempengaruhi hasil analisis.

Tutorial ini menjelaskan cara mengidentifikasi dan menghapus outlier di R.

Bagaimana mengidentifikasi outlier di R

Sebelum Anda dapat menghapus outlier, Anda harus terlebih dahulu memutuskan apa yang Anda anggap sebagai outlier. Ada dua cara umum untuk melakukan ini:

1. Gunakan rentang interkuartil.

Rentang interkuartil (IQR) adalah selisih antara persentil ke-75 (Q3) dan persentil ke-25 (Q1) dalam suatu kumpulan data. Ini mengukur distribusi rata-rata 50% nilai.

Anda dapat mendefinisikan suatu observasi sebagai outlier jika observasi tersebut 1,5 kali rentang antarkuartil di atas kuartil ketiga (Q3) atau 1,5 kali rentang antarkuartil di bawah kuartil pertama (Q1).

Outlier = Pengamatan > Q3 + 1,5*IQR atau < Q1 – 1,5*IQR

2. Gunakan skor-z.

Skor-z memberi tahu Anda berapa banyak deviasi standar suatu nilai tertentu dari mean. Kami menggunakan rumus berikut untuk menghitung skor-z:

z = (X – μ) / σ

Emas:

  • X adalah nilai data mentah tunggal
  • μ adalah rata-rata populasi
  • σ adalah simpangan baku populasi

Anda dapat mendefinisikan suatu observasi sebagai outlier jika skor z-nya kurang dari -3 atau lebih besar dari 3.

Pencilan = Pengamatan dengan skor z > 3 atau < -3

Cara menghilangkan outlier di R

Setelah Anda memutuskan apa yang Anda anggap sebagai outlier, Anda kemudian dapat mengidentifikasi dan menghapusnya dari kumpulan data. Untuk mengilustrasikan cara melakukan ini, kami akan menggunakan kerangka data berikut:

 #make this example reproducible 
set.seed(0)

#create data frame with three columns A', 'B', 'C' 
df <- data.frame(A=rnorm(1000, mean=10, sd=3),
                 B=rnorm(1000, mean=20, sd=3),
                 C=rnorm(1000, mean=30, sd=3))

#view first six rows of data frame
head(df)
         ABC
1 13.78886 19.13945 31.33304
2 9.02130 25.52332 30.03579
3 13.98940 19.52971 29.97216
4 13.81729 15.83059 29.09287
5 11.24392 15.58069 31.47707
6 5.38015 19.79144 28.19184

Kita kemudian dapat mendefinisikan dan menghilangkan outlier menggunakan metode z-score atau metode rentang interkuartil:

Metode skor Z:

Kode berikut menunjukkan cara menghitung skor-z dari setiap nilai di setiap kolom bingkai data dan kemudian menghapus baris yang memiliki setidaknya satu skor-z dengan nilai absolut lebih besar dari 3:

 #find absolute value of z-score for each value in each column
z_scores <- as.data.frame (sapply(df, function(df) (abs(df-mean(df))/sd(df))))

#view first six rows of z_scores data frame
head(z_scores)

          ABC
1 1.2813403 0.25350805 0.39419878
2 0.3110243 1.80496734 0.05890232
3 1.3483190 0.12766847 0.08112630
4 1.2908343 1.32044506 0.38824414
5 0.4313316 1.40102642 0.44450451
6 1.5271674 0.04327186 0.70295309

#only keep rows in dataframe with all z-scores less than absolute value of 3 
no_outliers <- z_scores[!rowSums(z_scores>3), ]

#view row and column count of new data frame
dim(no_outliers)

[1] 994 3

Bingkai data asli memiliki 1000 baris dan 3 kolom. Bingkai data baru memiliki 994 baris dan 3 kolom, yang menunjukkan bahwa 6 baris telah dihapus karena memiliki setidaknya satu skor-z dengan nilai absolut lebih besar dari 3 di salah satu kolomnya.

Metode rentang antarkuartil:

Dalam beberapa kasus, kami mungkin hanya ingin mengidentifikasi outlier di kolom bingkai data. Misalnya, kita hanya ingin menghapus baris dengan outlier di kolom “A” pada bingkai data kita.

Kode berikut menunjukkan cara menghilangkan baris dari bingkai data yang nilainya pada kolom “A” adalah 1,5 kali rentang interkuartil di atas kuartil ketiga (Q3) atau 1,5 kali rentang interkuartil di bawah kuartil pertama (Q1). .

 #find Q1, Q3, and interquartile range for values in column A
Q1 <- quantile(df$A, .25)
Q3 <- quantile(df$A, .75)
IQR <- IQR(df$A)

#only keep rows in dataframe that have values within 1.5*IQR of Q1 and Q3
no_outliers <- subset(df, df$A> (Q1 - 1.5*IQR) & df$A< (Q3 + 1.5*IQR))

#view row and column count of new data frame
dim(no_outliers) 

[1] 994 3

Bingkai data asli memiliki 1000 baris dan 3 kolom. Bingkai data baru memiliki 994 baris dan 3 kolom, yang menunjukkan bahwa 6 baris telah dihapus karena mengandung setidaknya satu outlier di kolom A.

Kapan harus menghilangkan outlier

Jika ada satu atau lebih outlier, pertama-tama Anda harus memverifikasi bahwa outlier tersebut bukan akibat kesalahan entri data. Terkadang seseorang memasukkan nilai data yang salah saat menyimpan data.

Jika outlier ternyata disebabkan oleh kesalahan entri data, Anda dapat memutuskan untuk memberinya nilai baru seperti mean atau median kumpulan data.

Jika nilainya benar-benar outlier, Anda dapat memilih untuk menghapusnya jika nilai tersebut akan berdampak signifikan pada analisis Anda secara keseluruhan. Pastikan untuk menyebutkan dalam laporan akhir atau analisis Anda bahwa Anda telah menghapus outlier.

Sumber daya tambahan

Dalam tutorial ini, kami menggunakan rnorm() untuk menghasilkan vektor variabel acak yang terdistribusi normal dengan panjang vektor n , rata-rata populasi μ , dan deviasi standar populasi σ . Anda dapat mempelajari lebih lanjut tentang fitur ini di sini .

Kami juga menggunakan sapply() untuk menerapkan fungsi ke setiap kolom dalam bingkai data yang menghitung skor-z. Anda dapat mempelajari lebih lanjut tentang fitur ini di sini .

Tambahkan komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *