Memuat paket tambahan yang digunakan.
library(ggplot2)
library(ggdendro)
library(cluster)
Memuat dan manipulasi data yang akan digunakan.
# memuat data
dt <- read.csv("clustering.csv")
head(dt)
## stasiun var1 var2 var3 var4 var5 var6
## 1 st.1 0.244417957 0.4961844 0.9320401 0.32935144 0.8973747 0.3684539
## 2 st.2 0.467151572 0.1930051 0.9596264 0.26489862 0.4189129 0.1563747
## 3 st.3 0.002251075 0.3350158 0.9928400 0.28297982 0.7048100 0.2266213
## 4 st.4 0.534145660 0.7117228 0.4364743 0.06382566 0.7914976 0.5972664
## 5 st.5 0.781895565 0.5716094 0.6927893 0.67814573 0.1348373 0.4680610
## var7 var8 var9 var10 var11 var12 var13
## 1 0.07929782 0.36016475 0.502595377 0.97637639 0.35921157 0.8666180 0.07622065
## 2 0.17503063 0.50164249 0.981117997 0.59659780 0.02969329 0.9792560 0.94284549
## 3 0.64929578 0.05188050 0.006561193 0.97752996 0.02502272 0.5731446 0.51260696
## 4 0.04795044 0.54520207 0.655838857 0.27306792 0.29214377 0.5977974 0.55998223
## 5 0.16211888 0.02940407 0.586467977 0.05353235 0.65212319 0.0426989 0.81571079
## var14 var15
## 1 25 1
## 2 27 3
## 3 26 2
## 4 25 0
## 5 26 0
# indeksing
dt.u <- dt[,-1] #indeksing, hanya mengambil data variabel tanpa data stasiun
head(dt.u)
## var1 var2 var3 var4 var5 var6 var7
## 1 0.244417957 0.4961844 0.9320401 0.32935144 0.8973747 0.3684539 0.07929782
## 2 0.467151572 0.1930051 0.9596264 0.26489862 0.4189129 0.1563747 0.17503063
## 3 0.002251075 0.3350158 0.9928400 0.28297982 0.7048100 0.2266213 0.64929578
## 4 0.534145660 0.7117228 0.4364743 0.06382566 0.7914976 0.5972664 0.04795044
## 5 0.781895565 0.5716094 0.6927893 0.67814573 0.1348373 0.4680610 0.16211888
## var8 var9 var10 var11 var12 var13 var14 var15
## 1 0.36016475 0.502595377 0.97637639 0.35921157 0.8666180 0.07622065 25 1
## 2 0.50164249 0.981117997 0.59659780 0.02969329 0.9792560 0.94284549 27 3
## 3 0.05188050 0.006561193 0.97752996 0.02502272 0.5731446 0.51260696 26 2
## 4 0.54520207 0.655838857 0.27306792 0.29214377 0.5977974 0.55998223 25 0
## 5 0.02940407 0.586467977 0.05353235 0.65212319 0.0426989 0.81571079 26 0
# memberi nama kolom
rownames(dt.u) <- c(dt$stasiun) #kolom pada dataframe diberi nama (identitas) dengan nama stasiusn
head(dt.u)
## var1 var2 var3 var4 var5 var6 var7
## st.1 0.244417957 0.4961844 0.9320401 0.32935144 0.8973747 0.3684539 0.07929782
## st.2 0.467151572 0.1930051 0.9596264 0.26489862 0.4189129 0.1563747 0.17503063
## st.3 0.002251075 0.3350158 0.9928400 0.28297982 0.7048100 0.2266213 0.64929578
## st.4 0.534145660 0.7117228 0.4364743 0.06382566 0.7914976 0.5972664 0.04795044
## st.5 0.781895565 0.5716094 0.6927893 0.67814573 0.1348373 0.4680610 0.16211888
## var8 var9 var10 var11 var12 var13 var14
## st.1 0.36016475 0.502595377 0.97637639 0.35921157 0.8666180 0.07622065 25
## st.2 0.50164249 0.981117997 0.59659780 0.02969329 0.9792560 0.94284549 27
## st.3 0.05188050 0.006561193 0.97752996 0.02502272 0.5731446 0.51260696 26
## st.4 0.54520207 0.655838857 0.27306792 0.29214377 0.5977974 0.55998223 25
## st.5 0.02940407 0.586467977 0.05353235 0.65212319 0.0426989 0.81571079 26
## var15
## st.1 1
## st.2 3
## st.3 2
## st.4 0
## st.5 0
Langkah selanjutnya adalah analisis data dengan metode pengelompokan (clustering) yang tepat.
# metode-metode clustering
mt <- c( "average", "single", "complete", "ward")
names(mt) <- c( "average", "single", "complete", "ward")
# menghitung koefisien aglomeratif
ac <- function(x) {
agnes(dt.u, method = x)$ac
}
sapply(mt, ac)
## average single complete ward
## 0.3796241 0.1608601 0.5016312 0.5429891
Pemilihan metode clustering dengan melihat nilai koefisien aglomeratif, metode dengan nilai koefisien aglomeratif tertinggi merupakan metode yang tepat untuk digunakan.
Pengelompokan (clustering) hierarki dapat menggunakan fungsi
hclust()
dari paket "stat"
(paket dasar R) dan
agnes()
dari paket "cluster"
(paket
tambahan).
# melakukan pengelompokan
dd <- dist(scale(dt.u), method = "euclidean") #menghitung jarak dengan metode Euclidean
hc <- hclust(dd, method = "ward.D2")
# atau
clust <- agnes(dt.u, method = "ward")
Setelah pengelompokan hierarki dibuat, langkah selanjutnya adalah menggambarkan (visualisasi) pengelompokan tersebut dengan dendogram.
plot(hc)
# atau
pltree(clust, cex = 1, main = "Dendrogram")
# label pada ketinggian yang sama: hang = -1
plot(hc, hang = -1, cex = 1)
# mengubah hclust menjadi dendrogram dan plot untuk edit lebih lanjut
hcd <- as.dendrogram(hc)
plot(hcd, type = "rectangle", ylab = "Jarak") #membuat plot
# membuat titik (nodepar) pada bawah dendogram
nodePar <- list(lab.cex = 0.6, pch = c(NA, 19),
cex = 0.7, col = "black")
plot(hcd, ylab = "Jarak", nodePar = nodePar, leaflab = "none") #menambah nodepar dan menghapus label
# plot horizontal
plot(hcd, xlab = "Jarak",
nodePar = nodePar, horiz = TRUE)
# mengubah warna
plot(hcd, xlab = "Jarak", nodePar = nodePar,
edgePar = list(col = 1:2, lwd = 2:2)) #col (1:2): ubah warna dan lwd = 2:2: ubah ketebalan
# plot dengan warna dan horizontal
plot(hcd, xlab = "Jarak", nodePar = nodePar,
edgePar = list(col = 1:2, lwd = 2:2), horiz = TRUE)
nilai pada col dan lwd (col = 1:2 dan lwd = 2:2), nilai pertama menunjukan asal (root), sedangkan nilai kedua menunjukan cabang (clade).
## R version 4.3.2 (2023-10-31 ucrt)
## Platform: x86_64-w64-mingw32/x64 (64-bit)
## Running under: Windows 10 x64 (build 19045)
##
## Matrix products: default
##
##
## locale:
## [1] LC_COLLATE=English_United States.utf8
## [2] LC_CTYPE=English_United States.utf8
## [3] LC_MONETARY=English_United States.utf8
## [4] LC_NUMERIC=C
## [5] LC_TIME=English_United States.utf8
##
## time zone: Asia/Jakarta
## tzcode source: internal
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] cluster_2.1.4 ggdendro_0.2.0 ggplot2_3.5.0
##
## loaded via a namespace (and not attached):
## [1] vctrs_0.6.5 cli_3.6.2 knitr_1.45 rlang_1.1.3
## [5] xfun_0.42 highr_0.10 generics_0.1.3 jsonlite_1.8.8
## [9] glue_1.7.0 colorspace_2.1-0 htmltools_0.5.7 sass_0.4.8
## [13] fansi_1.0.6 scales_1.3.0 rmarkdown_2.25 grid_4.3.2
## [17] evaluate_0.23 munsell_0.5.0 jquerylib_0.1.4 tibble_3.2.1
## [21] MASS_7.3-60 fastmap_1.1.1 yaml_2.3.8 lifecycle_1.0.4
## [25] compiler_4.3.2 dplyr_1.1.4 pkgconfig_2.0.3 rstudioapi_0.15.0
## [29] digest_0.6.34 R6_2.5.1 tidyselect_1.2.0 utf8_1.2.4
## [33] pillar_1.9.0 magrittr_2.0.3 bslib_0.6.1 withr_3.0.0
## [37] tools_4.3.2 gtable_0.3.4 cachem_1.0.8