# Melihat daftar dataset dan memilih dataset data("USArrests")
# Assign dataset ke variabel df df <- USArrests
#Untuk menghilangkan missing values yang mungkin ada di dalam dataset, gunakan perintah berikut:
df <- na.omit(object = df)
#Kita tidak ingin algoritma clustering bergantung pada arbitrary variable unit atau data yang berubah- ubah, disinilah kita scaling/menstandarisasikan datanya menggunakan fungsi scale(). Perintahnya:
df <- scale(x = df) head(x = df, n = 5)
#Apa proses yang terjadi dalam fungi scale()? Fungsi scale() akan menghitung rata-rata (mean) dan standar deviasi (standard deviation) dari seluruh vektor yaitu dataset atau variabel df, lalu
“menskalakan” (scaling) setiap elemen dengan nilai-nilai tersebut dengan mengurangi mean dan membaginya dengan sd.
# Scaling manual kolom Murder
scl <- (USArrests$Murder - mean(USArrests$Murder)) / sd(USArrests$Murder) head(scl, 5)
#Package yangharus di install
# Install packages
install.packages(c("cluster", "factoextra"))
# Load packages library(cluster) library(factoextra)
# Perhitungan jarak matriks set.seed(123)
ss <- sample(1:50, 15)
df <- USArrests[ss, ] #USArrests mengikuti kondisi yang sesuai di variabel ss, kecuali kolomnya.
df.scaled <- scale(df)
print(df.scaled)
#Menghitung jarak euclidean
dist.eucl <- dist(df.scaled, method = "euclidean") round(as.matrix(dist.eucl)[1:3, 1:3], 1)
#Menghitung jarak berbasis korelasi
dist.cor <- get_dist(df.scaled, method = "pearson") round(as.matrix(dist.cor)[1:3, 1:3], 1)
# Load data data(flower) head(flower, 5) str(flower)
dd <- daisy(flower)
round(as.matrix(dd)[1:3, 1:3], 2)
#membuat heatmap fviz_dist(dist.eucl)
######### K-Means Clustering########
df <- scale(USArrests)
#menentukan jumlah cluster optimal
fviz_nbclust(x = df, FUNcluster = kmeans, method = "gap_stat")
#fviz_nbclust(...): Fungsi yang menentukan dan memvisualisasikan jumlah cluster yang optimal.
#x = df: parameter penyimpan data frame,
#FUNcluster = kmeans: parameter partisi atau yang berfungsi untuk membagi cluster,
#method = "gap_stat": adalah metode yang digunakan untuk memperkirakan jumlah cluster.
#Menghitung dan visualisasi clustering k-means:
set.seed(123)
km.res <- kmeans(x = df, centers = 2, nstart = 25)
str(km.res)
fviz_cluster(object = km.res, data = df, palette = "jco", ggtheme = theme_minimal())
#kmeans(...): Melakukan klastersisasi pada data matriks dengan perhitungan k-means.
#x = df: parameter penyimpan data frame,
#centers = 2: jumlah clutser yang didapat atau diinginkan,
#nstart = 25: jumlah random sets yang dipilih. Ini berlaku hanya jika parameter centers berisi nomor/angka,
#fviz_cluster(...): fungsi untuk memvisualisasikan hasil klasterisasi,
#object = km.res: objek yang berisi hasil partisi dari fungsi kmeans(),
#data = df: df adalah data yang sudah digunakan untuk clustering. Ini hanya digunakan bila objeknya (parameter object) berbentuk class yang terlihat seperti di akhir baris dari kode str(km.res) yang ada dibawah ini.
#ggtheme = theme_minimal(): Bentuk visual atau tema yang disediakan ggplot2. Pilihannya ada theme_gray(), theme_classic() dll.
########Hirarki cluster#########
res.hc <- hclust(dist(df), method = "ward.D2") fviz_dend(x = res.hc, cex = 0.5, k = 4, palette = "jco")
#hclust(...): Sesuai namanya hclust alias hierarchical clustering yaitu fungsi yang mencari dan menganalisa klaster hierarki dalam suatu data yang diberikan. Dalam kasus ini, datanya adalah yang sudah diolah dengan fungsi dist().
#dist(df): Distance matrix computation atau dist adalah fungsi yang menghitung dan mengembalikan nilai matriks jarak dari sebuah data.
#method = "ward.D2": Metode aglomerasi atau mudahnya perhitungan yang dipakai, yaitu ward.D2.
Pengenalan tentang apati ward.D2 bisa di lihat di sini dan sini.
#fviz_dend(...): Fungsi turunan dari ggplot2 yang otomatis membuat visual dendogram.
#x = res.hc: Objek data yang berbentuk class atau yang sudah diolah dengan fungsi hclust(), dlana(), hkmeans(), dll.
#cex = 0.5: Ukuran label.
#k = 4: k_colors atau singkatnya k adalah parameter untuk memberikan jumlah variasi warna untuk per grup yang diambil dari parameter palette. Jika diberikan angka 2 maka variasi warnanya cuma dua misal merah dan hijau.
#palette = "jco": Parameter palette dengan input-an jco adalah kumpulan atau set warna yang siap pakai.
Bisa diganti dengan warna npg, aaas, uchicago, dll.
library(pheatmap)
pheatmap(t(df), cutree_cols = 4, fontsize_col = 8.5)
#pheatmap(...): Fungsi untuk menggambarkan penyebaran kelompok atau cluster.
#t(df): Parameter t untuk membalikkan posisi matriks sepanjang diagonal utamanya. Atau simpelnya yaitu transpose.
#cutree_cols = 4: Jumlah kolom yang akan dibagi atau dipecah berdasarkan jumlah cluster. Kenapa 4?
Coba jalankan dan lihat hasil dari baris kode t(df) agar tahu jawabannya.
#fontsize_col = 8.5: Menentukan ukuran besar-kecil label kolom.