Buku ini sedang dalam tahap tinjauan terbuka. Kami ingin umpan balik Anda untuk membuat buku ini lebih baik bagi. Anda dapat memberikan anotasi pada beberapa teks dengan memilihnya menggunakan kursor dan kemudian klik “Beri Anotasi” pada menu pop-up. Anda juga dapat melihat anotasi orang lain: klik tanda panah di sudut kanan atas halaman

8.2 Eksperimen Agglomerative Clustering

library (readr)
urlfile = "https://bit.ly/3VO3kRE"
data<-read.csv(url(urlfile), row.names = "Kabupaten")
Tabel 8.1: Basis Data Terpadu Jawa Tengah
X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
CILACAP 5.19 5.67 5.08 5.44 5.22 6.05 11.47 9.78 5.55 5.12
BANYUMAS 5.71 4.47 5.18 5.51 5.02 6.21 7.39 6.96 5.98 8.22
PURBALINGGA 3.30 2.19 3.80 3.13 3.73 3.34 8.71 7.41 3.21 4.65
BANJARNEGARA 2.73 2.34 3.76 2.80 2.57 2.99 3.31 5.45 4.21 6.05
KEBUMEN 4.17 2.55 3.26 4.16 3.15 4.15 4.30 9.29 4.61 4.34
PURWOREJO 1.87 2.12 1.48 3.05 1.78 1.83 5.00 4.90 3.12 2.09
WONOSOBO 2.13 1.95 3.00 1.78 1.62 2.06 0.45 2.32 3.57 0.84
MAGELANG 3.95 3.01 4.22 4.15 3.01 3.64 1.44 3.35 5.69 3.67
BOYOLALI 2.19 3.07 1.61 2.74 2.11 1.82 1.71 2.34 3.41 1.55
KLATEN 3.84 5.15 1.93 4.64 4.04 3.78 8.71 4.45 3.99 3.09

Standarisasi Data

Sebelum melakukan analisis clustering, penting untuk menstandarisasi data agar setiap fitur memiliki skala yang sama. Standarisasi membantu menghindari bias yang mungkin muncul akibat perbedaan skala antar fitur, yang dapat mempengaruhi hasil analisis, terutama dalam pengukuran jarak.

Dalam R, kita dapat menggunakan fungsi scale() untuk menstandarisasi dataset. Fungsi ini mengubah setiap fitur dalam dataset sehingga memiliki rata-rata 0 dan deviasi standar 1. Proses ini dilakukan dengan cara mengurangi rata-rata dari setiap nilai dan membaginya dengan deviasi standar fitur tersebut.

# Standarisasi Data
df <- scale(data)
Tabel 8.2: Data Hasil Standarisasi
X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
CILACAP 1.4450108 1.6357957 1.0041319 1.6983202 1.3694832 1.7177332 3.2150170 2.4732171 1.5722235 0.8644476
BANYUMAS 1.7671470 0.9380866 1.0492817 1.7443527 1.2535376 1.8038274 1.6920805 1.4657198 1.8233322 2.0488467
PURBALINGGA 0.2741697 -0.3875608 0.4262142 0.1792452 0.5056885 0.2595125 2.1847953 1.6264906 0.2057255 0.6848774
BANJARNEGARA -0.0789411 -0.3003472 0.4081543 -0.0377655 -0.1667960 0.0711815 0.1691441 0.9262442 0.7896990 1.2197673
KEBUMEN 0.8131283 -0.1782481 0.1824052 0.8565817 0.1694462 0.6953645 0.5386801 2.2981555 1.0232884 0.5664375
PURWOREJO -0.6117047 -0.4282605 -0.6212614 0.1266366 -0.6247812 -0.5530016 0.7999682 0.7297465 0.1531679 -0.2932070
WONOSOBO -0.4506367 -0.5271026 0.0650157 -0.7085259 -0.7175376 -0.4292411 -0.8984045 -0.1920063 0.4159560 -0.7707873
MAGELANG 0.6768400 0.0892071 0.6158435 0.8500056 0.0882843 0.4209392 -0.5288685 0.1759803 1.6539798 0.3104545
BOYOLALI -0.4134671 0.1240926 -0.5625667 -0.0772220 -0.4334709 -0.5583825 -0.4280859 -0.1848610 0.3225202 -0.4995217
KLATEN 0.6086958 1.3334551 -0.4180873 1.1722336 0.6854041 0.4962716 2.1847953 0.5689757 0.6612249 0.0888572

Ukuran Similarity dan Dissimilarity

Dalam analisis clustering, ukuran similarity (kesamaan) dan dissimilarity (ketidaksamaan) sangat penting untuk menentukan seberapa dekat atau jauh objek satu sama lain dalam ruang fitur. Ukuran dissimilarity sering digunakan untuk mengukur jarak antara data point, yang kemudian digunakan dalam algoritma clustering untuk mengelompokkan data berdasarkan kedekatan mereka.

Salah satu langkah awal dalam proses clustering adalah menghitung matriks dissimilarity, yang memberikan informasi tentang jarak antara setiap pasangan objek dalam dataset. Dalam konteks ini, kita menggunakan ukuran jarak Euclidean, yang merupakan salah satu metode paling umum untuk mengukur jarak antara dua titik dalam ruang multidimensi.

res.dist <- dist(df, method = "euclidean")

Pada kode di atas, kita menggunakan fungsi dist() dari R untuk menghitung matriks dissimilarity. Parameter df merujuk pada data yang telah distandarisasi, yang berarti bahwa setiap fitur dalam dataset telah dinormalisasi untuk memiliki rata-rata 0 dan deviasi standar 1. Proses standarisasi ini penting untuk memastikan bahwa semua fitur berkontribusi secara seimbang terhadap perhitungan jarak, terutama ketika fitur memiliki skala yang berbeda.

Setelah menghitung matriks dissimilarity menggunakan fungsi dist(), kita sering kali ingin melihat representasi matriks tersebut dalam format yang lebih mudah dibaca. Dalam R, kita dapat menggunakan fungsi as.matrix() untuk mengonversi objek dissimilarity menjadi matriks biasa. Ini memungkinkan kita untuk melihat nilai-nilai jarak antara objek-objek dalam dataset.

Pada kode di atas, res.dist adalah objek dissimilarity yang telah dihitung sebelumnya. Dengan menggunakan as.matrix(res.dist), kita mengonversi objek tersebut menjadi matriks. Kemudian, kita menggunakan indeks [1:5, 1:5] untuk menampilkan lima baris dan lima kolom pertama dari matriks dissimilarity.

as.matrix(res.dist)[1:5, 1:5]
#>               CILACAP BANYUMAS PURBALINGGA BANJARNEGARA  KEBUMEN
#> CILACAP      0.000000 2.327193    3.828424     5.188508 3.891360
#> BANYUMAS     2.327193 0.000000    3.809719     4.232529 3.310710
#> PURBALINGGA  3.828424 3.809719    0.000000     2.418211 2.235801
#> BANJARNEGARA 5.188508 4.232529    2.418211     0.000000 2.159694
#> KEBUMEN      3.891360 3.310710    2.235801     2.159694 0.000000

Melakukan Pengelompokan Hierarkis

Setelah menghitung matriks dissimilarity, langkah selanjutnya dalam analisis clustering adalah menerapkan algoritma pengelompokan hierarkis. Dalam R, kita dapat menggunakan fungsi hclust() untuk melakukan ini. Salah satu metode yang umum digunakan dalam pengelompokan hierarkis adalah metode Ward, yang bertujuan untuk meminimalkan varians dalam setiap cluster yang terbentuk.

res.hc <- hclust(d =res.dist, method = "ward.D2")

Pada kode di atas, res.dist adalah matriks dissimilarity yang telah dihitung sebelumnya. Parameter method = "ward.D2" menunjukkan bahwa kita menggunakan metode Ward untuk menggabungkan cluster. Metode Ward bekerja dengan cara menggabungkan dua cluster yang menghasilkan peningkatan terkecil dalam total varians dalam cluster yang baru terbentuk. Ini membantu dalam menghasilkan cluster yang lebih homogen.

Hasil dari fungsi hclust() adalah objek yang berisi informasi tentang struktur pengelompokan hierarkis. Objek ini dapat digunakan untuk membuat dendrogram, yang merupakan representasi visual dari proses penggabungan cluster. Dendrogram ini membantu dalam menentukan jumlah cluster yang optimal dengan memotong dendrogram pada ketinggian tertentu.

Visualisasi dengan Dendrogram

Setelah melakukan pengelompokan hierarkis menggunakan metode Ward, langkah selanjutnya adalah memvisualisasikan hasil clustering untuk memahami struktur dan hubungan antar cluster. Salah satu cara yang efektif untuk melakukan ini adalah dengan menggunakan dendrogram, yang menunjukkan bagaimana objek-objek dalam dataset digabungkan menjadi cluster.

Library factoextra menyediakan fungsi yang memudahkan visualisasi hasil analisis multivariat, termasuk dendrogram untuk pengelompokan hierarkis. Berikut adalah kode untuk memvisualisasikan dendrogram dari hasil pengelompokan hierarkis yang telah dilakukan:

library("factoextra")
library(ggplot2)
fviz_dend(res.hc, cex = 0.5)
Visualisasi Dendogram

Gambar 8.1: Visualisasi Dendogram

Pada kode di atas, kita pertama-tama memuat library factoextra dan ggplot2. Fungsi fviz_dend() digunakan untuk membuat dendrogram dari objek hasil pengelompokan hierarkis res.hc. Parameter cex = 0.5 digunakan untuk mengatur ukuran label pada dendrogram, sehingga label lebih mudah dibaca.

Visualisasi dengan Dendrogram

Setelah memvisualisasikan dendrogram dari hasil pengelompokan hierarkis, langkah selanjutnya adalah menentukan jumlah cluster yang diinginkan dan memotong dendrogram untuk membentuk kelompok-kelompok tersebut. Dalam contoh ini, kita akan memotong dendrogram menjadi dua kelompok.

Fungsi cutree() digunakan untuk memotong dendrogram dan mengelompokkan objek-objek ke dalam jumlah cluster yang ditentukan. Berikut adalah kode untuk memotong dendrogram menjadi dua kelompok:

grp <- cutree(res.hc, k =2)
head(grp, n =2)
#>  CILACAP BANYUMAS 
#>        1        1

Pada kode di atas, res.hc adalah objek hasil pengelompokan hierarkis yang telah kita buat sebelumnya. Parameter k = 2 menunjukkan bahwa kita ingin memotong dendrogram menjadi dua kelompok. Hasil dari fungsi cutree() disimpan dalam variabel grp, yang berisi penugasan kelompok untuk setiap objek dalam dataset.

Jumlah Anggota dalam Setiap Cluster

Setelah memotong dendrogram dan mengelompokkan objek-objek ke dalam cluster, langkah selanjutnya adalah menghitung jumlah anggota dalam setiap cluster. Dalam contoh ini, kita akan menggunakan fungsi table() untuk menghitung jumlah anggota dalam setiap cluster.

Fungsi table() digunakan untuk menghitung frekuensi atau jumlah anggota dalam setiap kategori atau cluster. Berikut adalah kode untuk menghitung jumlah anggota dalam setiap cluster:

table(grp)
#> grp
#>  1  2 
#> 12 23

Visualisasi Dendrogram

Setelah memotong dendrogram untuk membentuk kelompok, kita dapat memvisualisasikan hasil pengelompokan dengan menandai setiap kelompok menggunakan warna yang berbeda. Ini membantu dalam memahami struktur cluster dan memudahkan interpretasi hasil.

fviz_dend(res.hc, k =2, 
          cex = 0.5, 
          k_colors = c("#E7B800", "#FC4E07"),
          color_labels_by_k = TRUE, 
          rect = TRUE 
          )
Visualisasi Dendogram

Gambar 8.2: Visualisasi Dendogram

Pada kode di atas, kita menggunakan fungsi fviz_dend() untuk membuat dendrogram dari objek hasil pengelompokan hierarkis res.hc. Parameter yang digunakan adalah sebagai berikut: k = 2 Menunjukkan bahwa kita ingin memotong dendrogram menjadi dua kelompok. cex = 0.5 Mengatur ukuran label pada dendrogram agar lebih mudah dibaca. k_colors = c("#E7B800", "#FC4E07") Menentukan warna yang akan digunakan untuk masing-masing kelompok. Dalam hal ini, kelompok pertama akan berwarna kuning (#E7B800) dan kelompok kedua berwarna oranye (#FC4E07).color_labels_by_k = TRUE Mengatur agar label pada dendrogram diwarnai sesuai dengan kelompok yang ditentukan. rect = TRUE Menambahkan kotak di sekitar kelompok untuk menyoroti batasan antar cluster.

Visualisasi Hasil Clustering

Setelah melakukan pengelompokan data dan mendapatkan penugasan kelompok untuk setiap objek, langkah selanjutnya adalah memvisualisasikan hasil clustering. Visualisasi ini membantu kita memahami distribusi objek dalam setiap cluster dan bagaimana cluster tersebut terpisah satu sama lain.

Pada kode di bwah, kita menggunakan fungsi fviz_cluster() untuk membuat visualisasi clustering. Parameter yang digunakan adalah sebagai berikut:

  • list(data = df, cluster = grp): Menyediakan data yang telah distandarisasi (df) dan penugasan kelompok (grp) yang dihasilkan dari pemotongan dendrogram.

  • palette = c("#E7B800", "#FC4E07"): Menentukan warna yang akan digunakan untuk masing-masing cluster. Dalam hal ini, cluster pertama akan berwarna kuning (#E7B800) dan cluster kedua berwarna oranye (#FC4E07).

  • ellipse.type = "convex": Menambahkan elips konsentrasi di sekitar setiap cluster, yang memberikan gambaran visual tentang sebaran objek dalam cluster.

  • repel = TRUE: Menghindari tumpang tindih label pada plot, meskipun ini dapat memperlambat proses rendering.

  • show.clust.cent = FALSE: Menentukan untuk tidak menampilkan pusat cluster pada visualisasi.

  • ggtheme = theme_minimal(): Menggunakan tema minimal untuk plot, yang memberikan tampilan yang bersih dan profesional.

fviz_cluster(list(data = df, cluster = grp),
palette = c("#E7B800", "#FC4E07"),
ellipse.type = "convex",
repel = TRUE, 
show.clust.cent = FALSE, ggtheme = theme_minimal())
Visualisasi Hasil CLustering

Gambar 8.3: Visualisasi Hasil CLustering