Education vector created by nizovatina - www.freepik.com
Analisis Klaster merupakan salah satu metode statistik yang bertujuan untuk memisahkan objek ke dalam beberapa klaster (kelompok data) yang mempunyai sifat :
Secara umum, analisis klaster dibagi menjadi dua yaitu 1] Hierarchical Clustering dan 2] Non Hierarchical Clustering. Perbedaan diantara kedua metode tersebut adalah pada 1] Hierarchical Clustering, jumlah klaster ditentukan kemudian dan pengelompokkan objek ke dalam klaster dilakukan secara bertahap; sedangkan pada 2] Non Hierarchical Clustering, jumlah klaster ditentukan di awal dan pengelompokkan objek ke dalam klaster dilakukan sekaligus.
Salah satu metode Non Hierarchical Clustering yang sering digunakan adalah K-Means Clustering. K-Means Clustering merupakan metode analisis klaster dimana pengguna menentukan jumlah klaster sebanyak ‘k’ yang ingin dibuatnya. Pengklasteran suatu objek didasarkan pada jarak terdekat antara objek tersebut dengan centroid/titik pusat/rata-rata suatu klaster. Cara kerja atau algoritma dari K-Means Clustering adalah sebagai berikut =
Visualisasi dari algoritma K-Means Clustering dapat dilihat di tautan berikut : https://www.naftaliharris.com/blog/visualizing-k-means-clustering/
Data yang digunakan adalah data indikator kependudukan negara-negara Asia Tenggara pada tahun 2015. Data Indikator yang tercakup hanya yang terkait dengan kelahiran dan kematian. Indikator tersebut adalah :
Tujuan dilakukannya analisis kluster adalah untuk mengklasterkan negara-negara ASEAN berdasarkan indikator kependudukanya yang meliputi indikator kematian dan kelahiran. Indikator kematian dan kelahiran penduduk dapat digunakan untuk mengetahui kualitas kesehatan penduduk di negara-negara ASEAN.
Data yang digunakan di artikel ini dapat diunduh di tautan berikut : https://github.com/nadhifanhf/Multivariate-R/tree/master/Datasets
library(readr) #Membaca data
library(dplyr) #Data processing
library(DT) #Menampilkan tabel agar mudah dilihat di browser
asean_data <- read_csv("asean_demografi.csv")
datatable(asean_data, caption = "Indikator Demografi Negara ASEAN 2015")
Karena data yang digunakan memiliki satuan dan rentang yang berbeda, maka perlu dilakukan standardisasi data terlebih dahulu sebelum masuk ke analisis klaster. Untuk melakukan standardisasi data ke dalam normal baku di R dapat menggunakan fungsi scale()
.
data_standardized <- round(scale(asean_data[,2:5]),4) #Hanya memilih kolom/variabel yang berisikan indikator kelahiran dan kematian
datatable(data_standardized, caption = "Data Hasil Standardisasi")
Dalam metode k-means banyaknya klaster ditentukan sendiri oleh pengguna. Maka dari itu perlu dicari jumlah klaster yang optimum yang dapat mengelompokkan objek dengan baik (Perlu diketahui bahwa metode ini relatif subjektif). Salah satu metode yang digunakan adalah Elbow Plot. Elbow Plot merupakan plot antara banyak klaster dengan total within-cluster variation (total dari simpangan per kluster). Banyak klaster yang dipilih adalah bagian “siku” atau titik dimana terdapat penurunan yang tajam sebelum titik tersebut dan disusul penurunan yang tidak tajam setelah titik tersebut. Hal ini karena penambahan jumlah klaster tidak membawa pengaruh banyak atas variasi yang ada di dalam klaster tersebut.
jumlah_klaster <- c(1:9) #Vektor yang berisikan jumlah klaster yang ingin dilihat nilai dari total within-cluster sum of squares
within_ss <- c() #Vektor kosong yang akan diisi nilai total within-cluster sum of squares
for (i in jumlah_klaster) {
within_ss <- c(within_ss, kmeans(x = data_standardized, centers = i, nstart = 25)$tot.withinss)
}
plot(x = jumlah_klaster, y = within_ss, type = "b", xlab = "Number of Cluster",
ylab = "Total Within Sum of Squares", main = "Elbow Plot")
abline(v = 4, col = 'red')
Dilihat dari Elbow Plot diatas, banyaknya klaster yang dipilih adalah 4 klaster.
Analisis klaster di R dapat dilakukan dengan fungsi kmeans()
dan menggunakan data yang telah distandardisasi. Salah satu hal yang perlu diperhatikan ketika melakukan analisis klaster dengan mengggunakan algoritma K-Means adalah inisiasi centroid awal. Hal ini mengingat algoritma K-Means dimulai dengan menempatkan (menginisiasi) centroid awal secara acak dalam data. Akibatnya, hasil klaster yang dihasilkan dapat berbeda-beda jika hanya menggunakan sekali inisiasi. Maka dari itu, perlu dilakukan pengulangan algoritma KMeans beberapa kali dengan nilai inisiasi awal yang berbeda guna menghasilkan klaster yang optimal.
Dalam fungsi kmeans()
terdapat parameter nstart
yang digunakan untuk memberitahu fungsi berapa kali inisiasi awal yang pengguna inginkan. Pada contoh ini, parameter nstart
akan diisi sebanyak 25 sehingga akan ada inisiasi centroid awal yang berbeda sebanyak 25 kali. Setelah itu algoritma K-Means akan memilih hasil klaster terbaik dengan nilai total within-cluster variation yang terkecil dari ke-25 inisiasi centroid awal. Total within-cluster variation yang kecil menunjukkan bahwa secara umum klaster yang terbentuk diisikan oleh observasi yang homogen atau serupa.
set.seed(123)
kmeans_clustering <- kmeans(x = data_standardized, centers = 4, nstart = 25) #parameter nstart digunakan untuk memberitahu fungsi berapa kali inisiasi centroid awal (secara acak) yang akan dibentuk dan centers digunakan untuk memberitahu fungsi berapa jumlah klaster yang akan dibentuk.
kmeans_clustering
## K-means clustering with 4 clusters of sizes 4, 1, 2, 3
##
## Cluster means:
## TFR AKB AKI AHH
## 1 -0.5495500 -0.67505 -0.755625 0.483425
## 2 -1.7018000 -1.09130 -1.178000 1.945000
## 3 0.6913500 1.65795 1.468150 -1.184200
## 4 0.8390667 0.15850 0.421400 -0.503400
##
## Clustering vector:
## [1] 1 4 4 3 1 3 4 2 1 1
##
## Within cluster sum of squares by cluster:
## [1] 1.3354210 0.0000000 1.3512916 0.7564396
## (between_SS / total_SS = 90.4 %)
##
## Available components:
##
## [1] "cluster" "centers" "totss" "withinss" "tot.withinss"
## [6] "betweenss" "size" "iter" "ifault"
Output dari fungsi kmeans()
terdiri atas beberapa informasi sebagai berikut :
cluster
: vector yang berisikan lokasi klaster tiap objek.centers
: matriks yang berisikan centroid/rata-rata nilai tiap klaster.withinss
: vektor yang berisikan simpangan tiap klaster yang terbentuk.tot.withinss
: total dari simpangan tiap klaster yang terbentuk. Biasa digunakan untuk membuat Elbow Plot guna mengetahui banyak klaster yang sebaiknya dipilih.size
: jumlah objek pada tiap klaster.Nilai means/centroid yang termuat masih dalam nilai yang distandardisasi, maka nilainya perlu dikembalikan ke nilai awal guna diketahui karakteristik sebenarnya dari tiap klaster.
asean_data %>%
mutate(Klaster = kmeans_clustering$cluster) %>%
group_by(Klaster) %>%
summarise(Mean_TFR = mean(TFR), Mean_AKB = mean(AKB), Mean_AKI = mean(AKI), Mean_AHH = mean(AHH))
## # A tibble: 4 x 5
## Klaster Mean_TFR Mean_AKB Mean_AKI Mean_AHH
## <int> <dbl> <dbl> <dbl> <dbl>
## 1 1 1.85 9.15 40.5 75.1
## 2 2 1.2 1.7 7.1 82.9
## 3 3 2.55 50.9 216. 66.2
## 4 4 2.63 24.1 134. 69.8
Pengelompokkan objek ke dalam klaster yang terbentuk dapat dilihat dari output cluster
.
asean_data %>%
mutate (Klaster = kmeans_clustering$cluster) %>%
select(Negara, Klaster) %>%
arrange(Klaster)
## # A tibble: 10 x 2
## Negara Klaster
## <chr> <int>
## 1 Brunei Darussalam 1
## 2 Malaysia 1
## 3 Thailand 1
## 4 Vietnam 1
## 5 Singapura 2
## 6 Laos 3
## 7 Myanmar 3
## 8 Kamboja 4
## 9 Indonesia 4
## 10 Filipina 4
Untuk mempermudah dalam memahami dan interpretasi, maka dibuat tabel sebagai berikut :
Dilihat dari rata-rata angka TFR, AKB, AKI, dan AHH pada masing-masing klaster, maka dapat diinterpretasikan bahwa: