1 Introduction

Cluster analysis is a multivariate method which aims to classify a sample of subjects (or objects) on the basis of a set of measured variables into a number of different groups such that similar subjects are placed in the same group.

2 Approaches to cluster analysis

There are a number of different methods that can be used to carry out a cluster analysis; these methods can be classified as follows:

  1. Hierarchical methods

  2. Non-hierarchical methods (often known as k-means clustering methods)

3 Example hierarchical clustering methods

  1. Memanggil package yang dibutuhkan

Ada beberapa package yang dibutuhkan.

  1. ggplot

  2. dplyr

  3. cluster

  4. factoextra

JIka belum diinstall, silahkan diinstall terlebih dahulu dengan install.packages(“nama_package”) kemudian dapat dilakukan pemanggilan package:

library(ggplot2)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(cluster)
library(factoextra)
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
  1. Memanggil atau membangkitkan data dan persiapan data

Data

Saya ingin mengelompokan wilayah di Sumatera. Data yang dimiliki adalah stasiun ID (sebanyak 200), curah hujan dan suhu. Data belum ada sehingga pada kesempatan ini kita akan mensimulasikan data:

  1. Curah Hujan (0mm-500mm)

  2. Suhu (20°C-38°C)

Berikut code:

# Simulate data (replace this with your dataset)
set.seed(123)  # For reproducibility
Sumatera <- data.frame(
  StasiunID = 1:200,
  CurahHujan = sample(0:500, 200, replace = TRUE),
  Suhu = sample(20:38, 200, replace = TRUE)
)

head(Sumatera)
##   StasiunID CurahHujan Suhu
## 1         1        414   30
## 2         2        462   35
## 3         3        178   27
## 4         4         13   22
## 5         5        194   23
## 6         6        425   31

Preprosessing Data

Peubah yang digunakan untuk menerapkan k-means adalah 2 (dua) peubah (Curah Hujan dan Suhu). Oleh karena itu peubah StasiunID yang tidak kita gunakan akan kita sisihkan terlebih dahulu. dengan code:

Sumatera_features <- Sumatera %>% select(CurahHujan, Suhu) #remove StasiunId
head(Sumatera_features) # View the first few rows of the Sumatera_features data
##   CurahHujan Suhu
## 1        414   30
## 2        462   35
## 3        178   27
## 4         13   22
## 5        194   23
## 6        425   31

Pada dataframe yang baru, hanya tersisa dua peubah itu saja.

Standarisasi peubah

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. Standarisasi dilakukan karena metode k-means menggunakan konsep jarak antara objek/amatan, yang mana sensitif terhadap satuan pengukuran.

Dalam R, standarisasi data bisa dilakukan dengan menggunakan fungsi scale.

Sumatera_features_standardize <- scale(Sumatera_features) # mean 0 and standar deviation 1
head(Sumatera_features_standardize)# View the first few rows of the Sumatera_features_standardize data # Check the scaled data
##      CurahHujan       Suhu
## [1,]  1.1020719  0.1531414
## [2,]  1.4298155  1.0926594
## [3,] -0.5093340 -0.4105693
## [4,] -1.6359526 -1.3500873
## [5,] -0.4000861 -1.1621837
## [6,]  1.1771798  0.3410450
apply(Sumatera_features_standardize,2,mean)
##   CurahHujan         Suhu 
## 1.149607e-17 2.399052e-16
apply(Sumatera_features_standardize,2,sd)
## CurahHujan       Suhu 
##          1          1

Data telah berubah setelah dilakukan standarisasi.Rata-rata dan simpangan baku peubah setelah distandarisasi mendekati nol dan satu.

Catatan: Dalam tahapan pre-processing data, kita menyiapkan data agar metode k-means bisa diterapkan secara maksimal. Terdapat dua hal yang umumnya dilakukan pada tahap ini adalah memilih peubah yang digunakan dan melakukan standarisasi peubah.

Membuat dendogram dan menggerombolkan data

Dalam hierarchical clustering untuk menentukan cara menggabungkan cluster secara iteratif.

# Membuat dendrogram dengan Ward.D
dendrogram <- hclust(d = dist(Sumatera_features_standardize, method = 'euclidean'), method = 'ward.D')
# Membuat gambar dendogram
plot(dendrogram)

Terdapat beberapa metode lain dalam hclust():

  1. “single”: Single linkage (nearest neighbor)

  2. “complete”: Complete linkage (farthest neighbor)

  3. “average”: Average linkage (UPGMA)

  4. “mcquitty”: McQuitty’s method (WPGMA)

  5. “median”: Median linkage (WPGMC)

  6. “centroid”: Centroid linkage (UPGMC)

  7. “ward.D2”: Ward’s minimum variance method, squared distance

Membuat model clustering

Membuat model clustering dengan hclust dimana pada contoh dibawah ini digunakan jarak euclidean dan metode penggerombolan ward

hc_w = hclust(d = dist(Sumatera_features_standardize, method = 'euclidean'), method = 'ward.D2')

Memotong dendrogram menjadi 4 gerombol

y_hc_w = cutree(hc_w, 4)
y_hc_w
##   [1] 1 2 3 3 3 1 2 4 1 3 2 4 1 4 4 4 3 3 1 3 1 1 4 1 1 1 4 4 2 4 3 3 1 4 3 4 1
##  [38] 1 1 4 4 1 4 3 1 1 1 3 1 2 2 3 1 1 2 4 3 3 1 3 3 3 4 3 3 1 1 4 1 3 1 4 2 4
##  [75] 1 3 4 4 4 3 3 2 3 1 4 3 2 3 1 1 1 4 4 4 4 1 2 2 3 3 3 1 2 3 2 3 1 1 1 1 3
## [112] 4 4 4 4 1 1 1 1 4 4 3 2 1 3 4 4 3 4 4 2 3 4 1 3 4 1 3 4 1 1 1 2 2 3 2 3 1
## [149] 2 1 3 2 4 1 2 1 4 3 3 2 3 4 2 4 1 4 1 2 2 3 2 4 2 1 1 3 3 2 1 3 1 1 4 1 3
## [186] 4 4 4 4 1 1 4 3 2 3 1 4 1 1 1

Visualisasi hasil gerombol

library(factoextra)
fviz_dend(hc_w, k = 4, # Cut in 4 groups
          cex = 0.5, # label size
          rect = TRUE # Add rectangle around groups
          )
## Warning: The `<scale>` argument of `guides()` cannot be `FALSE`. Use "none" instead as
## of ggplot2 3.3.4.
## ℹ The deprecated feature was likely used in the factoextra package.
##   Please report the issue at <https://github.com/kassambara/factoextra/issues>.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

#Peringatan tersebut mengindikasikan bahwa paket factoextra menggunakan fitur lama dari ggplot2 yang tidak didukung lagi dalam versi ggplot2 3.3.4 ke atas
# Alternative 2D plot
ggplot(Sumatera, aes(x = CurahHujan, y = Suhu, color = factor(y_hc_w))) +
  geom_point(size = 3) +
  labs(title = "Iklim", x = "Curah Hujan", y = "Suhu") +
  theme_minimal()

Plot ini bertujuan untuk memvisualisasikan distribusi data berdasarkan dua variabel, serta menunjukkan cluster mana masing-masing pelanggan berada. Plot ini membantu dalam memahami pola data dan membedakan karakteristik setiap cluster secara visual.