Analisis cluster adalah metode yang tepat untuk mengidentifikasi objek- objek yang homogen ke dalam kelompok-kelompok yang disebut cluster. Cluster-cluster yang terbentuk memiliki homogenitas internal yang tinggi dan heterogenitas eksternal yang tinggi. Pertama kita install packages factoextra
#install.packages
library("factoextra")
## Loading required package: ggplot2
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
lalu kita import data. di sini saya menggunakan data sosial ekonomi indonesia 2021
data_ekonomi <- read.csv("C:/Users/LENOVO/Downloads/sosial_ekonomi_indonesia2021.csv", sep=";")
head (data_ekonomi)
## province cities_reg poorpeople_percentage reg_gdp life_exp avg_schooltime
## 1 Aceh Simeulue 18.98 2.275 65.240 9.48
## 2 Aceh Aceh Singkil 20.36 2.425 67.355 8.68
## 3 Aceh Aceh Selatan 13.18 5.531 64.360 8.88
## 4 Aceh Aceh Tenggara 13.41 5.063 68.155 9.67
## 5 Aceh Aceh Timur 14.45 10.616 68.705 8.21
## 6 Aceh Aceh Tengah 15.26 7.389 68.790 9.86
## exp_percap
## 1 7148
## 2 8776
## 3 8180
## 4 8030
## 5 8577
## 6 10780
dim(data_ekonomi)
## [1] 514 7
Peubah yang digunakan untuk menerapkan k-means adalah peubah poorpeople_percentage, reg_gdp, dan life_exp. Oleh karena itu peubah yang tidak kita gunakan akan kita hilangkan tersebih dahulu.
data_ekonomi <- data_ekonomi[,c("poorpeople_percentage","reg_gdp","life_exp")]
head(data_ekonomi)
## poorpeople_percentage reg_gdp life_exp
## 1 18.98 2.275 65.240
## 2 20.36 2.425 67.355
## 3 13.18 5.531 64.360
## 4 13.41 5.063 68.155
## 5 14.45 10.616 68.705
## 6 15.26 7.389 68.790
Standarisasi peubah merupakan proses transformasi peubah menjadi peubah yang memiliki rata-rata nol dan simpangan baku satu. Process standarisasi ini dilakukan jika kita melihat perbedanan satuan pengukuran peubah-peubah yang digunakan contoh(umur dan pendapatan). Standarisasi dilakukan karena metode k-means menggunakan konsep jarak antara objek/amatan, yang mana sensitif terhadap satuan pengukuran. dengan merupakan rata-rata dari dan merupakan simpangan baku dari y. Dalam R, standarisasi data bisa dilakukan dengan menggunakan fungsi scale .
data_ekonomi_standardize <- scale(data_ekonomi)
apply(data_ekonomi_standardize,2,mean)
## poorpeople_percentage reg_gdp life_exp
## -1.198211e-16 3.789284e-17 -1.953493e-15
apply(data_ekonomi_standardize,2,sd)
## poorpeople_percentage reg_gdp life_exp
## 1 1 1
Umumnya, banyaknya cluster dapat ditentukan dengan menggunakan beberapa kriteria statistik, seperti koefisien silhouette dan WSS atau (Within Sum of Square). Kriteria koefisien silhouette dihitung berdasarkan jarak antar amatan. Koefisien ini mengukur seberapa dekat suatu amatan dengan amatan lain yang berada di cluster yang sama (dikenal sebagai ukuran cohesion) dibandingkan dengan 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. Kriteria WSS merupakan kriteria yangmenghitung keragamaan dalam cluster yang terbentuk. Semakin kecil keragaman dalam cluster yang terbentuk menunjukkan bahwa cluster yang terbentuk sudah sesuai. Dengan menggunakan kriteria tersebut, kita bisa membandingkan banyaknya cluster yang paling sesuai pada data yang kita sedang analisis. Dalam R, fungsi fviz_nbclust dari package factoextra dapat digunakan untuk memilih banyaknya cluster.
fviz_nbclust(data_ekonomi_standardize,FUNcluster = kmeans,method = "silhouette")
fviz_nbclust(data_ekonomi_standardize,FUNcluster = kmeans,method = "wss")
Setelah kita mendapatkan banyaknya cluster terbaik, maka selajutnya kita
akan menerapkan metode kmenas untuk mendapatkan label cluster pada
setiap amatan. Fungsi eclust dari package factoextra digunakan untuk
menerpkan metode kmeans. Pada fungsi eclust , kita cukup memasukan data
yang sebelum distandarisasi, karena dalam fungsi tersebut terdapat
argumen stand , yang jika diatur stand=TRUE secara otomatis data yang
kita gunakan akan distandarisasi.
kmeans_ekonomil <- eclust(data_ekonomi,stand = TRUE,FUNcluster = "kmeans",k=8,graph = F)
kmeans_ekonomil$cluster
## [1] 2 4 2 4 4 4 4 4 2 4 4 2 2 4 4 8 4 4 1 4 8 1 2 4 2 8 8 8 1 1 8 1 8 1 5 8 4
## [38] 8 8 1 8 8 8 8 8 1 4 4 4 2 6 1 5 1 1 4 2 1 8 8 1 8 1 1 8 8 1 8 6 1 1 1 6 6
## [75] 1 8 1 8 1 1 1 1 5 1 7 5 1 1 1 8 1 1 8 8 1 8 6 1 8 4 4 2 4 4 8 8 8 2 2 4 2
## [112] 5 4 8 4 4 4 8 2 4 8 2 4 8 4 8 8 4 4 4 4 4 1 4 1 8 1 2 1 1 1 1 1 1 8 1 1 1
## [149] 1 8 2 8 5 1 4 3 3 3 3 3 5 1 1 5 1 1 1 6 6 4 6 6 6 1 5 5 6 1 6 1 5 6 6 6 6
## [186] 6 1 6 6 6 6 6 6 4 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 1 4 6 6 6 5 6 6
## [223] 6 6 6 6 6 4 6 6 6 6 6 5 1 8 1 2 4 4 5 5 6 6 1 1 6 6 6 4 6 5 4 4 4 4 5 6 6
## [260] 1 1 6 1 3 1 2 8 5 8 5 8 8 1 1 6 6 6 1 1 1 1 6 4 2 2 4 8 2 4 7 1 1 7 7 2 7
## [297] 4 2 2 7 2 4 7 8 4 7 4 7 7 8 7 7 2 1 8 6 6 1 1 1 1 1 1 6 8 1 1 1 1 1 8 8 1
## [334] 1 1 1 8 8 1 8 1 1 1 1 8 8 1 8 8 8 1 1 8 1 1 6 6 5 5 1 1 6 5 6 6 1 6 1 1 6
## [371] 1 1 1 1 1 1 8 1 4 2 8 1 1 1 1 2 1 4 4 4 2 4 2 2 4 2 4 1 4 8 1 2 8 1 8 8 2
## [408] 8 8 1 8 1 1 4 4 6 4 1 6 5 1 1 4 4 4 1 1 8 4 4 4 4 6 4 4 4 4 6 1 4 4 2 4 2
## [445] 1 2 2 4 8 8 8 7 2 2 2 7 7 7 7 2 1 2 8 2 2 8 1 4 8 2 1 1 4 2 7 7 4 2 7 2 7
## [482] 3 3 7 4 8 7 8 4 4 4 7 7 6 2 7 7 7 7 7 2 2 7 7 7 7 7 7 7 7 7 7 7 1
kmeans_ekonomil$centers
## poorpeople_percentage reg_gdp life_exp
## 1 -0.6917816 -0.180072801 0.4020558
## 2 0.4608848 -0.328486622 -1.3546712
## 3 -0.1329858 6.850249596 0.7180594
## 4 0.5333480 -0.240891897 -0.1239620
## 5 -0.7044149 1.557062412 0.9120638
## 6 -0.2903757 -0.008841414 1.2968831
## 7 2.5257146 -0.235062722 -1.5312197
## 8 -0.5064086 -0.215469673 -0.5814895
Jika sulit membaca hasil dalam bentuk skala standarisasi maka kita bisa menggunakan fungsi aggregate untuk melihat rata-ratanya dalam skala aslinya. Fungsi ini dapat menghitung rata-rata setiap peubah berdasarkan cluster yang terbentuk.
aggregate(data_ekonomi,by =list(cluster=kmeans_ekonomil$cluster),FUN = mean)
## cluster poorpeople_percentage reg_gdp life_exp
## 1 1 7.113358 19.644216 71.00854
## 2 2 15.710755 7.154377 64.93745
## 3 3 11.281250 611.284500 72.10062
## 4 4 16.251236 14.525955 69.19067
## 5 5 7.019130 165.833696 72.77109
## 6 6 10.107326 34.054279 74.10099
## 7 7 31.111707 15.016512 64.32732
## 8 8 8.496000 16.665375 67.60950
Cara lain untuk memnginterpretasikan hasil cluster adalah menggunakan scatterplot. Jika peubah untuk membangun kluster lebih dari dua, maka sebelum dibentuk scatterplot peubah tersebut direduksi terlebih dahulu menggunakan analisis komponen utama menjadi dua komponen utama. Namun, untuk interpretasinya setiap clusternya kita harus mengetahui interpretasi dari kedua komponen utama dan belum tentu dengan dua komponen utama tersebut sudah mampu menjelaskan keragaman data asal dengan baik.
fviz_cluster(kmeans_ekonomil)
Interpretasi dua komponen utama bisa dilihat dengan akar cirinya
pca_ekonomi <- prcomp(data_ekonomi_standardize)
pca_ekonomi$rotation
## PC1 PC2 PC3
## poorpeople_percentage -0.6512335 0.3514975 -0.6725656
## reg_gdp 0.3205262 0.9307337 0.1760619
## life_exp 0.6878647 -0.1009175 -0.7187891