Apa itu Outliers Univariat?

Dalam mengeksplorasi data, seringkali dijumpai beberapa titik amatan yang berada jauh dari pola data pada umumnya yang mungkin berpengaruh besar terhadap proses analisis data. Titik-titik data tersebut dinamakan pencilan / nilai ekstrim (outliers). Pencilan yang terdapat pada satu variabel dinamakan pencilan univariat atau univariate outliers

Keberadaan outliers dapat menganggu proses analisis data, contohnya dalam analisis statistika despkriptif, kita menghitung rata-rata (mean) sebagai salah satu ukuran pemusatan data. Namun, data yang memiliki outliers menunjukkan nilai mean yang berbeda dengan data yang bebas dari outliers. Perbedaan tersebut akan dibuktikan dalam artikel ini

Eksplorasi Data

Berikut tampilan dataset yang digunakan :

head(data)
## # A tibble: 6 × 7
##     KAB KEC     NAMAKAB NAMAKEC      FOOD   NONFOOD  EXP_CAP
##   <dbl> <chr>   <chr>   <chr>       <dbl>     <dbl>    <dbl>
## 1  3201 3201210 BOGOR   CIBINONG 2567143.  3508083. 3037613.
## 2  3201 3201210 BOGOR   CIBINONG 4748571.  5113667. 2465560.
## 3  3201 3201210 BOGOR   CIBINONG 2942571.  2372667. 1328810.
## 4  3201 3201210 BOGOR   CIBINONG 3276857.  2105833. 1345673.
## 5  3201 3201210 BOGOR   CIBINONG 7669286.  9742667. 4352988.
## 6  3201 3201210 BOGOR   CIBINONG 7800000  30810500  7722100

Untuk menentukan variabel yang akan dideteksi outliers nya, dilakukan eksplorasi terlebih dahulu untuk melihat tipe data tiap variabel karena deteksi outliers hanya dapat digunakan untuk data dengan tipe numerik

Dalam hal ini, gunakan fungsi str() dan summary()

str(data)
## tibble [1,792 × 7] (S3: tbl_df/tbl/data.frame)
##  $ KAB    : Factor w/ 2 levels "3201","3271": 1 1 1 1 1 1 1 1 1 1 ...
##  $ KEC    : Factor w/ 46 levels "3201010","3201020",..: 27 27 27 27 27 27 27 27 27 27 ...
##  $ NAMAKAB: Factor w/ 2 levels "BOGOR","KOTA BOGOR": 1 1 1 1 1 1 1 1 1 1 ...
##  $ NAMAKEC: Factor w/ 46 levels "BABAKAN MADANG",..: 12 12 12 12 12 12 12 12 12 12 ...
##  $ FOOD   : num [1:1792] 2567143 4748571 2942571 3276857 7669286 ...
##  $ NONFOOD: num [1:1792] 3508083 5113667 2372667 2105833 9742667 ...
##  $ EXP_CAP: num [1:1792] 3037613 2465560 1328810 1345673 4352988 ...
summary(data)
##    KAB            KEC             NAMAKAB              NAMAKEC    
##  3201:1083   3271050: 168   BOGOR     :1251   BOGOR BARAT  : 168  
##  3271: 709   3271060: 150   KOTA BOGOR: 541   TANAH SEREAL : 150  
##              3271030: 141                     BOGOR UTARA  : 141  
##              3271010: 121                     BOGOR SELATAN: 121  
##              3201210:  80                     CIBINONG     :  80  
##              3271040:  65                     BOGOR TENGAH :  65  
##              (Other):1067                     (Other)      :1067  
##       FOOD             NONFOOD             EXP_CAP        
##  Min.   :  165000   Min.   :   121417   Min.   :  205979  
##  1st Qu.: 1443429   1st Qu.:   903062   1st Qu.:  689770  
##  Median : 2115000   Median :  1537983   Median : 1088493  
##  Mean   : 2423754   Mean   :  2879427   Mean   : 1542898  
##  3rd Qu.: 3051343   3rd Qu.:  3057979   3rd Qu.: 1879501  
##  Max.   :13519286   Max.   :101995583   Max.   :24947884  
## 

Berdasarkan output di atas, diperoleh bahwa variabel numerik dalam data hanya berjumlah 3 yakni variabel FOOD, NONFOOD, dan EXP_CAP. Dari ketiga variabel tersebut, dibuat boxplot untuk melihat variabel apa saja yang memiliki outliers untuk selanjutnya dapat ditangani dengan metode Inter Quartile Range

par(mfrow=c(1,3))
boxplot(data$FOOD)
boxplot(data$NONFOOD)
boxplot(data$EXP_CAP)

Berdasarkan boxplot di atas, terlihat ada titik-titik amatan yang tersebar di atas boxplot, hal ini berarti ketiga variabel tersebut sama-sama memiliki masalah pencilan (outliers )atas.

Misal dipilih variabel EXP_CAP untuk penanganan outliers kali ini, maka perlu didefinisikan terlebih dahulu nama objek yang mewakili variabel EXP_CAP pada data, yaitu periksa. Selanjutnya kita akan mencari ukuran statistik pada variabel EXP_CAP yang masih mengandung outliers

periksa = data$EXP_CAP
summary(periksa)
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
##   205979   689770  1088493  1542898  1879501 24947884

Penanganan Outlier

Metode yang akan dibahas pada artikel kali ini adalah metode Inter Quartile Range. Metode ini mendeteksi outliers sebagai amatan yang berada di luar range atau batasan tertentu. Seperti batasan-batasan lainnya, IQR memiliki batas bawah dan batas atas sebagai kriteria dalam mengidentifikasi data yang termasuk outliers atau yang bukan

Metode IQR mendefinisikan batas atas sebagai \[U_L = (Q3+1.5*IQR)\]

Sedangkan untuk batas bawah \[L_L = (Q1-1.5*IQR)\]

Titik-titik data yang lebih besar dari Upper Limit maupun yang lebih kecil dari Lower Limit disebut sebagai outliers sehingga perlu dihilangkan untuk menghindari bias pada analisis statistik yang hendak dilakukan

batas_atas = quantile(periksa, probs = 0.75) + 1.5*IQR(periksa)
periksa[periksa > batas_atas]
##  [1]  4352988  7722100 11710060  5934661  3884798  3938218  4327257  7978774
##  [9]  3737095 24947884  5135315 11400060 11870183 21589491  6303785  9836848
## [17] 17064083  6633800  4892542  5746850  5362292  5019825  3726586  9787624
## [25]  3831167  4543083  5648750  6210099  4058740  6172740  4651018  4491821
## [33]  4352409  4055429  3970722  3889881  4224321  4705771  5050774  6627865
## [41]  7066798  5596057  5307897  4629383  3963020  5631190  6256467  4523550
## [49]  5798420  4592236  5960758  4368306  4309675  5662202  4705512 11796310
## [57]  4075857  7834690  3977667  3808365  3960647  4337607  3852290  5999658
## [65]  4768452  8453277  7669817  5198788  6672062 12923797 12467024  4118643
## [73]  5034786  5282202  5605449  5212288  5994524  5357869  4661640  4840223
## [81]  9443333  4478250  5964505  5259911  4867536 14195446 10042262  5208929
## [89]  5488905  5225655  4072843  6372340  4359423  6561643  4076631
periksa1 = periksa[periksa<batas_atas]

Setelah dilakukan deteksi terhadap pencilan (outliers) atas ditemukan 95 data dalam variabel EXP_CAP yang merupakan outliers. Karena keberadaannya dapat menganggu, akan kita hilangkan outliers tersebut dengan hanya menampilkan data yang lebih kecil dari Upper Limit.

Selanjutnya, dilakukan deteksi terhadap pencilan (outliers) bawah dengan syntax berikut :

batas_bawah = quantile(periksa1, probs = 0.25) - 1.5*IQR(periksa1)
periksa1[periksa1 < batas_bawah]
## numeric(0)
periksa_tanpa_outlier = periksa1[periksa1>batas_bawah]

Hasil di atas menunjukkan bahwa variabel EXP_CAP tidak memiliki pencilan (outliers) bawah. Hal ini sejalan dengan apa yang telah kita lihat pada boxplot bahwa tidak ada nilai-nilai ekstrim yang berada di bawah boxplot

Setelah menghilangkan outliers, kita dapat menyimpan variabel EXP_CAP yang sudah bebas dari outliers sebagai periksa_tanpa_outliers. Setelah itu dapat dibuat ringkasan statistik dengan fungsi summary() juga boxplot-nya untuk memeriksa apakah outliers benar-benar sudah tidak ada

summary(periksa_tanpa_outlier)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  205979  661944 1009853 1219650 1663550 3162131
boxplot(periksa_tanpa_outlier)

Berdasarkan boxplot di atas, telihat bahwa hasil pembersihan outliers dengan metode IQR ini telah menghilangkan titik-titik amatan yang sebelumnya terdapat di atas boxplot. Kini, boxplot dari nilai-nilai amatan pada variabel EXP_CAP telah bebas dari outliers

Perbandingan Ukuran Statistik

Setelah data dibersihkan dari outliers, tentunya kita ingin mengetahui seberapa besar pengaruh outliers dalam menghitung ukuran statistik pada data yang masih memiliki masih terdapat outliers dengan data tanpa outliers dengan data tanpa outliers

Untuk membandingkan ringkasan statistik dari kedua data tersebut, kita bisa membuat tabel dataframe sederhana yang terdiri atas nama-nama ukuran statistik yang digunakan dan ringkasan statistik dari kedua data yang telah diperoleh dengan fungsi summary()

dengan_outliers <- as.vector(summary(periksa))
tanpa_outliers <- as.vector(summary(periksa_tanpa_outlier))
ukuran_stat <- c('min','Q1','Median','Mean','Q3','Max')
compare <- data.frame(ukuran_stat, dengan_outliers, tanpa_outliers)
compare
##   ukuran_stat dengan_outliers tanpa_outliers
## 1         min        205978.6       205978.6
## 2          Q1        689769.9       661944.4
## 3      Median       1088492.9      1009853.2
## 4        Mean       1542897.9      1219650.2
## 5          Q3       1879501.0      1663550.0
## 6         Max      24947883.9      3162131.0

Dari tabel di atas terlihat jelas bahwa keberadaan outliers mempengaruhi perbedaan nilai ukuran statistik dari data yang sebenarnya bersih dari outliers. Bahkan nilai mean menunjukkan perbedaan yang sangat menonjol yang mana jika hal ini tidak diperhatikan, terdapat kemungkinan adanya bias dalam pengambilan keputusan. Selain mean, nilai maksimum juga menunjukkan perbedaan yang sangat ekstrim, hal ini tidak terlalu mengejutkan karena data yang ditangani kali ini hanya memiliki pencilan (outliers) atas maka untuk nilai minimum tidak ditemukan adanya perbedaan