Eksplorasi Data

Author

Bagus Sartono dan Gerry Alfa Dito

Pengantar

Materi ini mendiskusikan salah satu ilustrasi proses eksplorasi terhadap sebuah dataset yang di dalamnya memuat beberapa variabel. Dataset yang akan digunakan adalah dataset yang berisi karakteristik dari 384 merek kendaraan bermotor roda empat dengan beragam jenisnya.

Perintah di bawah ini adalah program untuk mengimport dataset yang merupakan file CSV menjadi sebuah dataframe di R dengan nama mpg. Fungsi str(mpg) digunakan untuk menampilkan struktur umum dataframe tersebut.

auto <- read.csv("https://raw.githubusercontent.com/gerrydito/learning/master/auto-mpg.csv")
str(auto)
'data.frame':   384 obs. of  9 variables:
 $ mpg         : num  18 15 18 16 17 15 14 14 14 15 ...
 $ cylinders   : int  8 8 8 8 8 8 8 8 8 8 ...
 $ displacement: num  307 350 318 304 302 429 454 440 455 390 ...
 $ horsepower  : int  130 165 150 150 140 198 220 215 225 190 ...
 $ weight      : int  3504 3693 3436 3433 3449 4341 4354 4312 4425 3850 ...
 $ acceleration: num  12 11.5 11 12 10.5 10 9 8.5 10 8.5 ...
 $ model.year  : int  1970 1970 1970 1970 1970 1970 1970 1970 1970 1970 ...
 $ origin      : chr  "USA" "USA" "USA" "USA" ...
 $ car.name    : chr  "chevrolet chevelle malibu" "buick skylark 320" "plymouth satellite" "amc rebel sst" ...
auto$cylinders <- as.character(auto$cylinders)

Tampak bahwa dataset ini berisi 384 baris dan 9 kolom dengan nama-nama sebagaimana tercantum di atas. Beberapa variabel merupakan variabel numerik, sedangkan beberapa variabel yang lain adalah variabel kategorik. Khusus untuk variabel cylinders kami ubah tipenya menjadi karakter/text karena variabel ini hanya memiliki 3 (tiga) jenis nilai dan nanti akan dipandang sebagai variabel kelas.

Pada ilustrasi ini kita akan lebih banyak memfokuskan diri pada eksplorasi sebaran data numerik dan keterkaitan variabel secara bivariate.

Sebelum kita masuk ke dalam berbagai tools lebih lanjut, beberapa package yang akan digunakan dalam mater ini adalah DataExplorer, ggpubr, ggridges, dan ggstatsplot. Perintah di bawah ini melakukan loading terhadap package-package tersebut sehingga fungsi-fungsi di dalamnya dapat kita pergunakan

library(DataExplorer)
library(ggpubr)
library(ggridges)
library(ggstatsplot)

Eksplorasi Sebaran Data Univariate

Histogram

Kita akan mulai mengenali data dengan melihat pola sebaran data numerik yang ada dalam dalam dataset. Salah satu alat yang dapat dipergunakan dalam mengenali pola sebaran data numerik ini adalah histogram. Bentuk visual histogram berupa batang-batang tegak yang terletak berdampingan dimana setiap batang mewakili satu buah selang nilai dengan lebar yang seragam. Tinggi batang menunjukkan seberapa banyak amatan dalam dataset yang nilainya termasuk dalam selang tersebut. Semakin tinggi, semakin banyak amatannya.

Salah satu perintah untuk menghasilkan histogram dari variabel numerik pada data auto adalah sebagai berikut.

plot_histogram(auto[,c(1,3,4,5,6)],
               ggtheme = theme_pubr(base_size = 9),
               nrow = 2,
               ncol = 3,
               geom_histogram_args =
                 list(bins=30,
                      fill="steelblue",
                      color="black")
               )

Histogram memungkinkan kita untuk memperoleh banyak informasi. Salah satunya adalah melihat keberadaan amatan dengan nilai ekstrim yang bisa saja merupakan anomali dan sesuatu yang perlu penelaahan lebih lanjut kepantasannya. Keberadaan nilai ekstrim atau outliers kadang-kadang juga memerlukan perhatian khusus sebelum mengimplementasikan pendekatan statistika dan sains data tertentu. Jika kita amati pada lima histogram di atas, keberadaan data esktrim ini tidak tampak.

Informasi lain yang bisa diperoleh dari histogram adalah ukuran pemusatan, yaitu sebuah nilai yang merupakan tipikal dari amatan yang kita miliki atau sebagian besar amatan dalam data berada di sekitar nilai tersebut. Informasi mengenai nilai ini dengan mudah dapat ditemukan pada selang-selang dengan ketinggian batang yang umumnya lebih tinggi.

Sebaran data yang memiliki ukuran pemusatan yang posisinya di bagian tengah dengan kiri-kanan yang cenderung mirip dikenal dengan sebaran simetrik. Sedangkan jika ukuran pemusatan cenderung di bagian kiri dan kemudian ada ekor yang ke kanan maka sebarannya dikenal dengan menjulur ke kanan atau skewed-to-the-right distribution. Jika kondisinya sebaliknya, disebut menjulur ke kiri atau skewed-to-the-left distribution.

Yang juga menarik dari histogram, kita juga dapat memanfaatkannya untuk mengenali keberadaan kelompok-kelompok. Dataset yang kita miliki sangat mungkin berisi campuran amatan dari berbagai kelompok. Histogram dengan beberapa puncak mencirikan adanya kelompok-kelompok ini.

Salah satu yang tricky pada penggunaan histogram adalah kebebasan dalam menentukan banyaknya selang/batan. Pada ilustrasi di atas digunakan opsi bins=30 yang berarti bahwa histogram disusun dengan membuat 30 buah selang. Selang yang terlalu banyak akan membuat histogram memberikan visual dengan banyak ‘tanduk’ (spiky) sehingga memberikan noise untuk melihat pola sebaran. Mari kita lihat seandainya kita ubah opsinya dengan bins=20 di bawah ini.

plot_histogram(auto[,c(1,3,4,5,6)],
               ggtheme = theme_pubr(base_size = 9),
               nrow = 2,
               ncol = 3,
               geom_histogram_args =
                 list(bins=20,
                      fill="skyblue",
                      color="black")
               )

Mudah-mudahan Anda setuju dengan saya bahwa histogram yang baru memiliki ujung-ujung batang yang polanya terlihat lebih smooth dibandingkan sebelumnya sehingga lebih mudah melihat polanya karena tidak terganggu dengan selang yang bolong-bolong dan batang yang terlalu spiky.

Pilihan lain yang dapat dilakukan agar melihat pola bentuk sebaran dengan lebih smooth adalah dengan menggunakan density plot. Visualisasi ini merupakan gambaran dari penduga fungsi kepekatan dari data yang kita miliki. Bagaimana memperolehnya? Kita lanjutkan yuk…

Density Plot

Program di bawah ini menyajikan bagaimana melihat sebaran data secara visual menggunakan density plot. Perlu dipahami bahwa bentuk density plot secara umum serupa dengan bentuk histogram dan informasi yang diberikan kurang lebih serupa dengan histogram.

plot_density(auto[,c(1,3,4,5,6)],
               ggtheme = theme_pubr(base_size = 9),
               ncol = 3,
               nrow = 2,
               geom_density_args =
                 list(fill="skyblue")
               )

Dari gambar density plot di atas tampak dengan mudah adanya beberapa puncak pada sebaran variabel-variabel tersebut misalnya pada horsepower dan mog. Hal ini dapat menjadi indikasi bahwa amatan pada dataset berasal dari beberapa kelompok berbeda.

Sebut saja pada variabel yang tersedia ada informasi mengenai negara/benua produsen kendaraan tersebut. Tersedia juga informasi mengenai banyaknya silinder pada mesinnya. Kelas-kelas ini bisa jadi merupakan tambahan informasi menarik yang sangat mungkin antar kelas memiliki karakteristik yang spesifik dan berbeda satu dengan yang lainnya.

Barangkali akan menarik kalau kita coba lebih jauh melihat perbedaan pola sebaran data antar grup.

Eksplorasi Perbandingan Sebaran Data Antar Grup

Pada bagian ini kita diskusikan proses eksplorasi lanjutan yaitu membandingkan sebaran data variabel mpg antar berbagai kelompok kendaraan. Variabel mpg (miles per gallon) adalah variabel yang menyatakan berapa mil jarak tempuh kendaraan untuk setiap galon bahan bakar yang dikonsumsi. Semakin besar nilainya berarti semakin irit konsumsi bbm-nya, sedangkan kendaraan dengan nilai mpg kecil berarti kendaraan yang boros.

Program berikut menghasilkan histogram variabel mpg untuk masing-masing kelompok kendaran berdasarkan variabel origin yaitu benua tempat produsen kendaraan tersebut. Ada tiga wilayah/benua yaitu Asia, Eropa, dan Amerika.

gghistogram(auto,
            x="mpg",
            fill="steelblue",
            facet.by = "origin",
            bins = 20,
            ncol=1,
            ggtheme = theme_pubr(base_size = 9))

Informasi yang dapat dilihat dengan cepat dari ketiga histogram di atas adalah

  • puncak histogram mpg kendaraan Amerika cenderung berada di sebelah kiri dibandingkan dengan kendaraan Eropa, dan yang kendaraan Eropa puncaknya berada di sebelah kiri kendaraan Asia. Hal ini menunjukkan bahwa secara umum kendaraan Asia merupakan kendaraan yang paling irit BBM dibandingkan Eropa dan Amerika.

  • lebar ketiga histogram relatif mirip, yang mengindikasikan bahwa keragaman efisiensi konsumsi bahan bakar kendaraan antar wilayah relatif sama.

Perhatikan bedanya dengan tiga histogram dari variabel mpg yang dihasilkan berdasarkan perbedaan banyaknya silinder mesinnya.

gghistogram(auto,
            x="mpg",
            fill="steelblue",
            facet.by = "cylinders",
            bins = 20,
            ncol=1,
            ggtheme = theme_pubr(base_size = 9))

Terlihat bahwa secara umum, kendaran dengan mesin bersilinder banyak maka konsumsi bahan bakarnya semakin boros. Namun menarik untuk dicermati bahwa keragaman tingkan konsumsi pada kendaran 4 silinder terlihat lebih besar dibandingkan 6 dan 8 silinder. Penelusuran lebih lanjut bisa saja menghasilkan informasi-informasi yang menarik.

Visualisasi menggunakan histogram seperti di atas, tidak efisien dari sisi space karena tidak dapat di-overlay. Tampilan histogram yang tumpang tindih akan sulit untuk dipahami. Density plot menawarkan kemudahan dari aspek tersebut.

Perintah di bawah ini dapat digunakan untuk menyajikan density plot dari beberapa kelompok dalam satu frame yang sama.

Perhatikan bahwa density plot mpg ketiga kelas memiliki tinggi kurva yang hampir sama. Karena luas di bawah kurva density plot sama dengan satu, maka apabila ketinggiannya sama akan diikuti dengan lebar yang relatif sama. Ketiga density plot berdasarkan benua ini hanya berbeda pada posisi puncak, artinya berbeda pada ukuran pemusatannya. Yang puncaknya paling kanan (yaitu Asia) berarti merupakan kelompok yang paling irit BBM. Sebaliknya, kendaraan dari Amerika adalah yang paling boros.

ggdensity(auto,
            x="mpg",
            fill="origin",
            ncol=1,
            ggtheme = theme_pubr(base_size = 9))

Di bawah ini adalah tampilan density plot variabel mpg berdasarkan banyaknya silinder pada mesinnya. Kendaraan 4 silinder memiliki puncak yang posisinya paling kanan. Jadi, ini adalah kelompok kendaraan paling irit. Kenyataan bahwa puncaknya adalah yang paling rendah, menunjukkan bahwa lebarnya paling besar, atau keragamannya paling tinggi.

ggdensity(auto,
            x="mpg", 
            fill="cylinders",
            ncol=1,
            ggtheme = theme_pubr(base_size = 9))

Cara lain menyajikan perbandingan density plot adalah dengan menyusun dalam bentuk ridgeline dengan perintah di bawah ini.

ggplot(auto,aes(x=mpg,y=origin,fill=origin))+
  geom_density_ridges()+
  theme_pubr(base_size = 9)
Picking joint bandwidth of 1.9

ggplot(auto,aes(x=mpg,y=cylinders,fill=cylinders))+
  geom_density_ridges()+
  theme_pubr(base_size = 9)
Picking joint bandwidth of 1.13

Eksplorasi Hubungan Antar Peubah/Variabel

Pada bagian ini kita akan melihat hubungan antar variabel dengan perhatian utama pada variabel mpg. Perintah di bawah ini dapat digunakan untuk menghasilkan scatterplot antara diplacement, horsepower, acceleration, weight dengan mpg.

Berikut ini program untuk menampilkan scatterplot antara empat variabel yang disebutkan di atas dengan variabel mpg.

plot_scatterplot(auto[,c("mpg",
                         "displacement",
                         "horsepower",
                         "acceleration",
                         "weight")],
                 by="mpg",
                 geom_point_args = list(size=3,
                                        color="gray80"),
                 ncol=1,
                 nrow = 1,
                 ggtheme = theme_pubr(base_size = 9)
                 )

Tampak bahwa pola hubungan antara keempat variabel dengan mpg cenderung tidak linear. Tiga variabel yaitu displacement, weight, dan horsepower memiliki hubungan yang berlawanan arah. Kendaraan dengan nilai yang besar pada variabel tersebut cenderung memiliki nilai mpg yang kecil; sebaliknya nilai kecil pada ketiga variabel tersebut cenderung diikuti dengan nilai mpg yang lebih besar.

Kita selanjutnya akan memperhatikan hubungan variabel horsepower dan mpg. Variabel ‘horsepower’ sebuah kendaraan mengindikasikan kekuatan maksimal yang bisa dihasilkan oleh mesin pada kendaran tersebut. Kekuatan ini berguna dalam mendorong kendaraan untuk bergerak.

Tampilan scatter plot antara horsepower dan mpg adalah sebagai berikut. Sekali lagi, tampak bahwa kendaraan dengan horsepower yang semakin besar cenderung memiliki mpg yang kecil. Artinya, kendaraan yang memiliki mesin dengan kekuatan besar akan cenderung boros dalam konsumsi BBM-nya.

ggscatter(auto,
          x="horsepower",
          y="mpg",
          size=4,
          color = "gray80"
          )

Pola yang disebutkan di atas tidak memiliki bentuk yang konstan untuk berbagai rentang nilai horsepower. Pada kisaran horsepower 50 hingga 120 gradien penurunan mpg cenderung curam. Selanjutnya gradiennya cenderung melandai pada nilai horsepower lebih tinggi dari 120.

Pola hubungan tak linear di atas mengarahkan kita untuk tidak menggunakan model regresi linear dalam menggambarkan kondisi data. Teknik regresi lokal seperti LOESS (locally estimated scatterplot smoothing) dapat menjadi pilihan untuk mengenali bentuk hubungan antara kedua variabel tersebut. Pada prinsipnya LOESS memberikan dugaan nilai variabel mpg di suatu titik nilai variabel horsepower tertentu berdasarkan model regresi linear terboboti dimana amatan pada data yang nilai ‘horsepower’-nya dekat dengan titik tersebut akan diberi bobot yang lebih besar dibandingkan titik yang jauh.

ggscatter(auto,
          x="horsepower",
          y="mpg",
          size=3,
          color="gray80",
          add = "loess",
          add.params = list(color="magenta")
          )

Apakah pola ini berlaku untuk berbagai kelompok kendaraan berdasarkan negara/benua produsennya?

Berikut adalah hasil pengepasan pendekatan LOESS pada masing-masing kelompok kendaraan berdasarkan negara produsennya.

ggscatter(auto,
          x="horsepower",
          y="mpg",
          alpha=0.25,
          size = 3,
          color = "origin",
          add = "loess",
          )

Secara umum kita dapat melihat bahwa kurva LOESS untuk kendaraan Jepang berada di atas kurva Eropa dan Amerika. Kurvanya Eropa dan Amerika cenderung berimpit. Kondisi bahwa kurva Jepang berada di atas kedua kurva yang lain menunjukkan bahwa kendaraan jepang memiliki konsumsi BBM yang lebih irit dibandingkan kendaraan Eropa dan Amerika, pada kelas yang sama. Kendaraan Jepang yang memiliki horsepower yang sama cenderung memiliki mpg yang lebih besar (berarti lebih irit).

Rentang horsepower kendaraan Jepang dan Eropa cenderung lebih sempit dibandingkan kendaraan Amerika. Kendaran Jepang memiliki horsepower antara 50-120 dan kendaran Eropa berkisar 50-130. Sementara itu kendaraan Amerika ada yang mencapai hingga 230an.

Matriks Korelasi

Pearson

ggcorrmat(auto,type = "parametric")

Spearman

ggcorrmat(auto,type = "nonparametric")