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