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.
There are a number of different methods that can be used to carry out a cluster analysis; these methods can be classified as follows:
Hierarchical methods
Non-hierarchical methods (often known as k-means clustering methods)
Ada beberapa package yang dibutuhkan.
ggplot
dplyr
cluster
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
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:
Curah Hujan (0mm-500mm)
Suhu (20°C-38°C)
Kelembaban Udara (50%-100%)
Tekanan Udara (700-1500mb)
Kecepatan Angin(2-6 Knot)
Penyinaran Matahari (40-80 persen)
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),
KelembabanUdara=sample(50:100,200, replace = TRUE),
TekananUdara=sample(700:1500,200, replace = TRUE),
KecepatanAngin=sample(2:6,200, replace = TRUE),
PenyinaranMatahari=sample(40:80,200, replace = TRUE)
)
head(Sumatera)
## StasiunID CurahHujan Suhu KelembabanUdara TekananUdara KecepatanAngin
## 1 1 414 30 68 1446 4
## 2 2 462 35 76 866 6
## 3 3 178 27 81 1198 2
## 4 4 13 22 76 954 3
## 5 5 194 23 79 1298 5
## 6 6 425 31 53 1333 4
## PenyinaranMatahari
## 1 68
## 2 55
## 3 80
## 4 48
## 5 76
## 6 61
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,KelembabanUdara,TekananUdara,KecepatanAngin,PenyinaranMatahari) #remove StasiunId
head(Sumatera_features) # View the first few rows of the Sumatera_features data
## CurahHujan Suhu KelembabanUdara TekananUdara KecepatanAngin
## 1 414 30 68 1446 4
## 2 462 35 76 866 6
## 3 178 27 81 1198 2
## 4 13 22 76 954 3
## 5 194 23 79 1298 5
## 6 425 31 53 1333 4
## PenyinaranMatahari
## 1 68
## 2 55
## 3 80
## 4 48
## 5 76
## 6 61
Pada dataframe yang baru, hanya tersisa dua peubah itu saja.
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 KelembabanUdara TekananUdara KecepatanAngin
## [1,] 1.1020719 0.1531414 -0.47282454 1.4624485 -0.003548957
## [2,] 1.4298155 1.0926594 0.06219616 -1.0846061 1.416033863
## [3,] -0.5093340 -0.4105693 0.39658409 0.3733631 -1.423131777
## [4,] -1.6359526 -1.3500873 0.06219616 -0.6981564 -0.713340367
## [5,] -0.4000861 -1.1621837 0.26282892 0.8125104 0.706242453
## [6,] 1.1771798 0.3410450 -1.47598835 0.9662120 -0.003548957
## PenyinaranMatahari
## [1,] 0.7166851
## [2,] -0.3911516
## [3,] 1.7393036
## [4,] -0.9876790
## [5,] 1.3984308
## [6,] 0.1201577
apply(Sumatera_features_standardize,2,mean)
## CurahHujan Suhu KelembabanUdara TekananUdara
## 1.149607e-17 2.399052e-16 4.619318e-16 -8.080288e-17
## KecepatanAngin PenyinaranMatahari
## 8.858365e-17 -2.933222e-16
apply(Sumatera_features_standardize,2,sd)
## CurahHujan Suhu KelembabanUdara TekananUdara
## 1 1 1 1
## KecepatanAngin PenyinaranMatahari
## 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.
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():
“single”: Single linkage (nearest neighbor)
“complete”: Complete linkage (farthest neighbor)
“average”: Average linkage (UPGMA)
“mcquitty”: McQuitty’s method (WPGMA)
“median”: Median linkage (WPGMC)
“centroid”: Centroid linkage (UPGMC)
“ward.D2”: Ward’s minimum variance method, squared distance
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, 6)
y_hc_w
## [1] 1 2 3 2 3 1 2 4 5 4 3 3 3 4 2 6 2 5 1 4 1 1 6 3 3 3 5 4 2 4 2 2 2 4 3 4 1
## [38] 6 6 2 4 1 3 3 1 2 2 2 1 1 1 3 2 3 5 6 5 3 1 3 3 4 5 3 3 6 1 6 3 3 2 6 1 4
## [75] 1 6 4 6 5 3 3 2 3 5 4 4 6 4 2 6 2 4 2 4 2 3 1 1 2 3 3 2 2 4 1 3 2 2 1 3 2
## [112] 6 5 4 4 1 3 2 2 4 3 3 1 1 2 2 6 4 6 3 1 5 4 3 3 4 2 3 6 2 2 5 1 2 2 6 2 1
## [149] 1 2 3 1 5 1 1 2 3 4 5 1 3 3 1 3 2 5 1 1 4 2 6 3 1 3 1 3 3 5 6 3 2 1 3 1 5
## [186] 6 4 4 1 2 3 6 3 1 4 6 3 6 3 1
library(factoextra)
fviz_dend(hc_w, k = 6, # Cut in 6 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
library(cluster)
clusplot(Sumatera_features,
y_hc_w,
lines = 0,
shade = TRUE,
color = TRUE,
labels= 2,
plotchar = FALSE,
span = TRUE,
main = paste('Iklim'))