Memuat Paket

Memuat paket tambahan yang digunakan.

library(ggplot2)
library(ggdendro)
library(cluster)

Memuat dan Manipulasi Data

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

Analisis Data

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 Hierarki

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")

Visualisasi

Setelah pengelompokan hierarki dibuat, langkah selanjutnya adalah menggambarkan (visualisasi) pengelompokan tersebut dengan dendogram.

Plot bawaan (default plot)

plot(hc)

# atau
pltree(clust, cex = 1, main = "Dendrogram")

Edit plot

# 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).

Session Info:

## 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