K-Means Clustering pada Data Penyusun Indikator Kerentanan Pandemi Covid-19 pada Tahun 2020
Library
library(viridis)
library(corrplot)
library(car)
library(glmnet)
library(factoextra)Data
Dataset yang digunakan merupakan data penyusun indikator kerentanan pandemi Covid-19 pada tahun 2020 yang terdiri atas 12 indikator dan 31 amatan berupa provinsi di Indonesia.
dt.cluster <- read.csv("C:\\Users\\ASUS\\Downloads\\Soal UAS Smt 5\\dataCluster.csv", sep = ";")
head(dt.cluster)## Kode Provinsi X1 X2 X3 X4 X5 X6 X7 X8
## 1 11 Aceh 1.952 0.166 4.093 92.284 199.428 5.055 14.04 31.092
## 2 12 Sumatera Utara 5.477 0.123 3.741 166.876 106.022 5.072 12.24 30.420
## 3 13 Sumatera Barat 2.048 0.424 2.148 108.354 28.211 6.593 14.39 32.955
## 4 14 Riau 2.366 0.390 2.335 155.593 57.071 3.649 11.63 30.949
## 5 15 Jambi 1.313 0.091 1.704 176.671 204.015 4.631 9.66 30.349
## 6 16 Sumatera Selatan 3.134 0.140 5.167 188.755 131.193 5.334 12.20 33.039
## X9 X10 X11 X12
## 1 3.35 15.43 6.59 566.520
## 2 37.53 9.14 6.91 595.835
## 3 29.48 6.56 6.88 683.944
## 4 33.43 7.04 6.32 755.177
## 5 46.88 7.97 5.13 754.782
## 6 38.15 12.98 5.51 800.098
Menghapus Kolom Kode dan Provinsi
Dilakukan penghapusan terhadap peubah kategorik karena tidak digunakan dalam analisis.
dt.cluster1 <- dt.cluster[,-1:-2]Eksplorasi Data
summary(dt.cluster1)## X1 X2 X3 X4
## Min. : 0.2600 Min. :0.0410 Min. :0.866 Min. : 29.71
## 1st Qu.: 0.9705 1st Qu.:0.1385 1st Qu.:1.832 1st Qu.: 84.94
## Median : 1.5980 Median :0.2240 Median :2.459 Median : 166.88
## Mean : 3.1456 Mean :0.3042 Mean :2.816 Mean : 306.46
## 3rd Qu.: 3.2340 3rd Qu.:0.3670 3rd Qu.:3.494 3rd Qu.: 227.81
## Max. :17.8660 Max. :1.7400 Max. :6.924 Max. :3114.88
## X5 X6 X7 X8
## Min. : 10.89 Min. : 3.536 Min. : 7.81 Min. :22.14
## 1st Qu.: 57.95 1st Qu.: 4.676 1st Qu.:12.01 1st Qu.:28.59
## Median : 87.71 Median : 5.064 Median :13.86 Median :30.35
## Mean :127.28 Mean : 5.598 Mean :13.67 Mean :30.21
## 3rd Qu.:201.72 3rd Qu.: 5.946 3rd Qu.:14.88 3rd Qu.:32.90
## Max. :360.88 Max. :10.814 Max. :21.09 Max. :36.02
## X9 X10 X11 X12
## Min. : 3.35 Min. : 4.450 Min. : 3.320 Min. : 327.2
## 1st Qu.:22.14 1st Qu.: 6.635 1st Qu.: 4.580 1st Qu.: 561.4
## Median :29.48 Median : 8.990 Median : 5.630 Median : 683.9
## Mean :28.31 Mean :10.062 Mean : 6.094 Mean : 701.7
## 3rd Qu.:35.55 3rd Qu.:12.890 3rd Qu.: 6.875 3rd Qu.: 794.8
## Max. :46.88 Max. :21.210 Max. :10.950 Max. :1179.6
Output di atas merupakan summary dari peubah X1 sampai dengan X12. Dihasilkan nilai minimum, kuartil 1, median, kuartil 3, rata-rata, dan nilai maksimum dari masing-masing peubah.
boxplot(dt.cluster1, col = "#966989")Eksplorasi data dilakukan dengan menggunakan boxplot. Pada boxplot di atas, sebaran masing-masing peubah tidak terlihat karena rentang nilai beberapa peubah yang terpaut cukup jauh. Oleh karena itu, eksplorasi dilakukan dengan mengelompokkan peubah-peubah dengan rentang yang tidak berbeda terlalu jauh.
boxplot(dt.cluster1[,-c(4, 5, 12)], col = inferno(ncol(dt.cluster1[,-c(4, 5, 12)])))Berdasarkan boxplot di atas, terlihat bahwa terdapat enam peubah yang memiliki pencilan atas, Akan tetapi, tidak ada peubah dengan pencilan bawah. Terlihat bahwa sebaran data pada peubah-peubah di atas sebagian besar cenderung simetris atau tidak menjulur ke salah satu sisi.
boxplot(dt.cluster1[,4], col = "maroon", xlab = "X4")Boxplot di atas memperlihatkan sebaran peubah X4, yaitu rata-rata volume lalu lintas per meter jalan raya. Terlihat bahwa terdapat beberapa pencilan atas, tetapi hanya satu yang bernilai sangat tinggi. Hal ini mengindikasikan bahwa terdapat satu provinsi dengan lalu lintas jalan raya yang sangat padat saat pandemi Covid-19 pada tahun 2020.
boxplot(dt.cluster1[,c(5, 12)], col = c("steelblue", "#966989"))Berdasarkan boxplot di atas, terlihat bahwa sebaran peubah penduduk di setiap provinsi yang telah mengalami pemeriksaan Covid-19 (X5) cenderung menjulur ke kanan. Sementara itu, sebaran peubah ketersediaan tempat tidur di rumah sakit pada setiap provinsi cenderung simetris, tetapi memiliki sebuah pencilan atas. Pencilan tersebut mengindikasikan bahwa terdapat satu provinsi yang memiliki ketersediaan tempat tidur di rumah sakit yang sangat besar saat pandemi Covid-19 pada tahun 2020.
K-Means Clustering
Metode K-Means adalah pendekatan sederhana untuk mempartisi kumpulan data ke dalam k buah gerombol yang berbeda dan tidak tumpang tindih. Untuk melakukan penggerombolan K-Means, harus ditentukan jumlah gerombol yang diinginkan.
Pemilihan Banyaknya Cluster
Banyaknya cluster ditentukan dengan menggunakan kriteria statistik, yaitu koefisien silhouette dan Within Sum of Square (WSS).
Koefisien Silhouette
Koefisien ini mengukur seberapa dekat suatu amatan dengan amatan lain yang berada di cluster yang sama (dikenal sebagai ukuran cohesion) dibandingkan jarak terhadap amatan lain yang berada di cluster berbeda (dikenal sebagai ukuran separation). Koefisien yang nilainya semakin besar menunjukkan bahwa cluster yang terbentuk sudah sesuai.
data.stdz = scale(dt.cluster1)
fviz_nbclust(data.stdz, FUNcluster = kmeans, method = "silhouette")Dengan menggunakan koefisien silhouette, jumlah cluster optimum yang didapatkan adalah delapan (k = 8).
Within Sum of Square (WSS)
Kriteria WSS merupakan kriteria yang menghitung keragaman dalam cluster yang terbentuk. Semakin kecil keragaman dalam cluster yang terbentuk menunjukkan bahwa cluster yang terbentuk sudah sesuai.
fviz_nbclust(data.stdz, FUNcluster = kmeans, method = "wss")Ketika menggunakan WSS, banyaknya cluster yang dipilih didasarkan pada di mana garis berbentuk seperti siku (elbow) sehingga bersifat subjektif atau setiap individu dapat melihat pola siku pada cluster yang berbeda. Pada gambar di atas, dipilih k = 4 untuk penggerombolan dengan metode K-Means.
K-Means
kmeans.cls <- eclust(dt.cluster1, stand = TRUE, FUNcluster = "kmeans", k = 4, graph = F)kmeans.cls$cluster## [1] 3 1 1 1 1 3 3 3 1 1 4 2 2 4 2 1 4 3 3 1 1 1 1 1 1 3 1 3 3 3 1
kmeans.cls$centers## X1 X2 X3 X4 X5 X6 X7
## 1 -0.2946024 0.04279807 -0.3912438 -0.2631584 -0.4759269 -0.3698691 -0.6568970
## 2 2.8522550 -0.33410444 1.0593720 0.4750576 -0.4666915 1.0186437 0.8083135
## 3 -0.3542870 -0.47262694 0.3875526 -0.3575284 1.1333622 -0.2366646 0.7056615
## 4 -0.1982865 1.69553724 -0.3949948 2.0324957 -0.9315478 1.6195835 0.1239665
## X8 X9 X10 X11 X12
## 1 -0.1271528 0.2520571 -0.5618356 0.2660717 -0.2568893
## 2 0.3541559 0.5042072 0.1190785 0.7225928 0.5681146
## 3 0.6218488 -0.1602026 0.9977893 -0.7541133 0.5888884
## 4 -1.7912212 -1.2304841 -0.6358648 0.4607598 -1.2466293
Output di atas menghasilkan centroid untuk data yang masih terstandardisasi sehingga sulit diinterpretasikan.
aggregate(dt.cluster1, by=list(cluster=kmeans.cls$cluster), FUN = mean)## cluster X1 X2 X3 X4 X5 X6 X7
## 1 1 1.871933 0.3173333 2.294667 161.2444 81.07160 5.009867 11.81067
## 2 2 15.476667 0.2013333 4.228333 568.6137 81.96833 7.218000 15.95000
## 3 3 1.613900 0.1587000 3.332800 109.1683 237.32940 5.221700 15.66000
## 4 4 2.288333 0.8260000 2.289667 1428.0537 36.83200 8.173667 14.01667
## X8 X9 X10 X11 X12
## 1 29.80587 30.75933 7.633333 6.646000 650.7127
## 2 31.33733 33.20667 10.576667 7.593333 814.4137
## 3 32.18910 26.75800 14.375000 4.529000 818.5357
## 4 24.51100 16.37000 7.313333 7.050000 454.3240
Output di atas menghasilkan nilai rata-rata 12 peubah pada setiap cluster, di mana terdapat empat cluster. Dapat disimpulkan bahwa cluster 2 berisi provinsi dengan persentase jumlah penduduk yang besar dibandingkan cluster 1, 3, dan 4. Provinsi dengan kasus konfirmasi positif Covid-19 terbanyak berada pada cluster 4. Provinsi dengan lalu lintas yang padat di jalan raya berada pada cluster 4, diikuti dengan cluster 2. Untuk provinsi dengan jumlah penduduk lanjut usia cenderung tidak berbeda signifikan pada keempat cluster. Pada saat pandemi Covid-19, banyak pasien yang tidak dapat menjalani pengobatan dengan layak karena tidak adanya ketersediaan tempat tidur di rumah sakit. Ketersediaan tempat tidur di rumah sakit paling banyak pada provinsi yang berada pada cluster 2 dan 3.
fviz_cluster(kmeans.cls)Penggerombolan menggunakan metode K-Means dengan k = 4 menghasilkan hasil penggerombolan yang cukup baik. Pada keempat cluster yang terbentuk, tidak terjadi overlap atau tumpang tindih. Dalam artian, tidak terdapat sebuah individu atau provinsi yang masuk ke dalam dua cluster yang berbeda. Didapatkan bahwa kedua komponen utama dapat menjelaskan lebih dari 50% keragaman pada data, yaitu 50.9%.