Clustering sering diartikan sebagai proses pengelompokkan data ke dalam beberapa cluster sehingga data-data di suatu cluster memiliki kemiripan maksimum. Dengan adanya clustering, akan membuat kita mendapatkan data antar-cluster yang berbeda dan memiliki kemiripan yang minimum. Tujuan utama dari clustering adalah mengelompokkan obyek-obyek berdasarkan karakteristik yang dimiliki masing- masing obyek (Candiasa, 2011:77). Untuk mengidentifikasi obyek-obyek (Recognition), untuk mendukung sistem pendukung keputusan dan data mining.
Prosedur Clustering 1. Pre-processing data 2. Memilih metode linkage dan banyaknya cluster 3. Menerapkan Hierarchical Clustering 4. Interprestasi cluster yang terbentuk
Panggil semua packages dengan fungsi library (nama_packages)
library(tidyverse) # data manipulation
## -- Attaching core tidyverse packages ------------------------ tidyverse 2.0.0 --
## v dplyr 1.1.3 v readr 2.1.4
## v forcats 1.0.0 v stringr 1.5.0
## v ggplot2 3.4.3 v tibble 3.2.1
## v lubridate 1.9.2 v tidyr 1.3.0
## v purrr 1.0.2
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
## i Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(cluster) # clustering algorithms
library(factoextra) # clustering algorithms & visualization
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(PerformanceAnalytics)
## Loading required package: xts
## Loading required package: zoo
##
## Attaching package: 'zoo'
##
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
##
##
## ######################### Warning from 'xts' package ##########################
## # #
## # The dplyr lag() function breaks how base R's lag() function is supposed to #
## # work, which breaks lag(my_xts). Calls to lag(my_xts) that you type or #
## # source() into this session won't work correctly. #
## # #
## # Use stats::lag() to make sure you're not using dplyr::lag(), or you can add #
## # conflictRules('dplyr', exclude = 'lag') to your .Rprofile to stop #
## # dplyr from breaking base R's lag() function. #
## # #
## # Code in packages is not affected. It's protected by R's namespace mechanism #
## # Set `options(xts.warn_dplyr_breaks_lag = FALSE)` to suppress this warning. #
## # #
## ###############################################################################
##
## Attaching package: 'xts'
##
## The following objects are masked from 'package:dplyr':
##
## first, last
##
##
## Attaching package: 'PerformanceAnalytics'
##
## The following object is masked from 'package:graphics':
##
## legend
library(ggpubr)
library(tibble)
library(MVN)
library(ggplot2)
library(factoextra)
library(fpc)
library(clValid)
library(readxl)
Tahapan proses pengumpulan data, dimana pada penelitian ini mencari sumber data melalui situs website Badan Pusat Statistik (BPS). Metode analisis data yang digunakan dalam penelitian ini adalah clustering pada penelitian ini menggunakan 2 metode yaitu menggunakan metode K-Means dan Hierarki menggunakan software R. Pada Pengelompokan data produksi perikanan tangkap di Indonesi tahun 2019.
#read data
data <- read_excel("C:/Users/kjl/Downloads/Produksi.xlsx",
col_types = c("text", "numeric", "numeric",
"numeric", "numeric", "numeric"))
head(data)
dim(data)
## [1] 34 6
Peubah yang digunakan untuk menerapkan k-means adalah peubah waduk, sungai, rawa, dan genangan air. Oleh karena itu peubah provinsi yang tidak kita gunakan akan kita hilangkan tersebih dahulu.
# mengambil variabel numerik
index <- data[,2:6]
str(data)
## tibble [34 x 6] (S3: tbl_df/tbl/data.frame)
## $ Provinsi : chr [1:34] "ACEH" "SUMATERA UTARA" "SUMATERA BARAT" "RIAU" ...
## $ Waduk : num [1:34] 0 0 2858 739 0 ...
## $ Sungai : num [1:34] 1833 6582 5996 19429 4743 ...
## $ Danau : num [1:34] 371 67103 2032 1003 2593 ...
## $ Rawa : num [1:34] 242 2 46 2736 185 ...
## $ Genangan Air: num [1:34] 238 0 469 127 12 0 0 84 0 0 ...
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 contoh(umur dan pendapatan). Standarisasi dilakukan karena metode k-means menggunakan konsep jarak antara objek/amatan, yang mana sensitif terhadap satuan pengukuran.
#standarisasi data
data_standardize <- scale(index)
apply(data_standardize,2,mean)
## Waduk Sungai Danau Rawa Genangan Air
## -3.207963e-18 9.813624e-18 -4.285309e-17 -1.350629e-17 -1.164720e-17
apply(data_standardize,2,sd)
## Waduk Sungai Danau Rawa Genangan Air
## 1 1 1 1 1
Jika kita perhatikan rata-rata dan simpangan baku peubah setelah distandarisasi mendekati nol dan satu. Note: Dalam tahapan pre-processing data, kita menyiapkan data agar metode kmeans bisa diterapkan secara maksimal. Dua hal yang umumnya dilakukan pada tahap ini adalah memilih peubah yang digunakan dan melakukan standarisasi peubah.
Umumnya, banyaknya cluster dapat ditentukan dengan menggunakan beberapa kriteria statistik, seperti koefi sien silhouette dan WSS atau (Within Sum of Square). Kriteria koefi sien silhouette dihitung berdasarkan jarak antar amatan. Koefi sien ini mengukur seberapa dekat suatu amatan dengan amatan lain yang berada di cluster yang sama (dikenal sebagai ukuran cohesion) dibandingkan dengan jarak terhadap amatan lain yang berada di cluster berbeda (dikenal sebagai ukuran separation). Koefi sien yang nilainya semakin besar menunjukkan bahwa cluster yang terbentuk sudah sesuai. Kriteria WSS merupakan kriteria yangmenghitung keragamaan dalam cluster yang terbentuk. Semakin kecil keragaman dalam cluster yang terbentuk menunjukkan bahwa cluster yang terbentuk sudah sesuai. Dengan menggunakan kriteria tersebut, kita bisa membandingkan banyaknya cluster yang paling sesuai pada data yang kita sedang analisis. Dalam R, fungsi fviz_nbclust dari package factoextra dapat digunakan untuk memilih banyaknya cluster
#menetukan k optimal dengan membandingkan wss dan silhoutte
fviz_nbclust(data_standardize, kmeans, method = "wss")
fviz_nbclust(data_standardize, kmeans, method = "silhouette")
Untuk kriteria koefi sien silhoutte, banyaknya cluster dengan nilai
koefi sien tertinggi yang kita pilih. Sedangkan pada WSS, banyaknya
cluster yang kita pilih didasarkan pada banyaknya cluster yang mana
garisnya berbentuk seperti siku (elbow). Pada gambar diatas garis
membentuk siku saat berada di cluster keempat. Karena penentuan ini
berdasarkan visual,jadi setiap orang mungkin berbeda melihat pola
sikunya Berdasarkan kedua kriteria tersebut, banyaknya cluster terbaik
yang dipilih berbeda. Jika demikian, banyaknya cluster bisa ditentukan
berdasarkan kemudahan interpretasi cluster yang terbentuk. Pada tulisan
ini kita akan menggunakan 4 cluster saja.
Note: secara default banyaknya cluster yang dicobakan pada fungsi fviz_nbclust adalah 10, jika ingin merubah hal tersebut bisa dilakukan dengan menggunakan argumen kmax dalam fungsi,misal kmax=20 .
clustering=kmeans(data_standardize, centers=2, nstar= 25)
clustering
## K-means clustering with 2 clusters of sizes 32, 2
##
## Cluster means:
## Waduk Sungai Danau Rawa Genangan Air
## 1 -0.00825713 -0.1915156 0.01322925 -0.2396499 0.02211255
## 2 0.13211408 3.0642498 -0.21166796 3.8343976 -0.35380086
##
## Clustering vector:
## [1] 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1
##
## Within cluster sum of squares by cluster:
## [1] 110.813237 2.592477
## (between_SS / total_SS = 31.3 %)
##
## Available components:
##
## [1] "cluster" "centers" "totss" "withinss" "tot.withinss"
## [6] "betweenss" "size" "iter" "ifault"
Metode k-means diperkenalkan oleh James B MacQueen (1967), dasar pengelompokan dalam metode ini adalah menempatkan objek berdasarkan rata-rata klaster terdekat. Oleh karena itu, metode ini bertujuan untuk meminimumkan error akibat partisi n objek ke dalam k klaster. Kelemahan metode adalah jumlah klaster harus ditentukan sebelumnya dan tidak menjamin solusi klaster yang unik karena metode ini sulit mencapai global optimum. (Nuningsih, dkk., 2010) Teknik partisi berbasis sentroid menggunakan centroid dari sebuah cluster, untuk mewakili cluster tersebut. Secara konseptual, sentroid sebuah cluster adalah titik pusatnya. Centroid dapat didefinisikan dengan berbagai cara seperti dengan mean atau medoid dari objek (atau poin) yang ditetapkan ke cluster. Perbedaan antara sebuah objek dan perwakilan dari cluster, diukur dari jarak Euclidean antara dua titik.
Setelah kita mendapatkan banyaknya cluster terbaik, maka selajutnya kita akan menerapkan metode kmenas untuk mendapatkan label cluster pada setiap amatan. Fungsi eclust dari package factoextra digunakan untuk menerpkan metode kmeans.
Pada fungsi eclust , kita cukup memasukan data yang sebelum distandarisasi, karena dalam fungsi tersebut terdapat argumen stand , yang jika diatur stand=TRUE secara otomatis data yang kita gunakan akan distandarisasi.
fviz_cluster(clustering, geom="point", data=data_standardize)+ ggtitle("k=2")
final=data.frame(data,clustering$cluster)
View(final)
Interpretasi dua komponen utama bisa dilihat dengan akar cirinya.
#melihat deskripsi data setelah berhasil di cluster
index%>%
mutate(cluster=final$cluster)%>%
group_by(cluster)%>%
summarise_all("mean")
clustering$cluster
## [1] 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1
clustering$centers
## Waduk Sungai Danau Rawa Genangan Air
## 1 -0.00825713 -0.1915156 0.01322925 -0.2396499 0.02211255
## 2 0.13211408 3.0642498 -0.21166796 3.8343976 -0.35380086
Label cluster untuk setiap amatan/objek, bisa diperoleh dengan menggunakan $cluster. Kemudian,interpretasi setiap cluster yang terbentuk dapat dilakukan dengan menggunakan bantuan nilai rata-rata dari masing-masing peubah dihitung berdasarkan cluster. Informasi ini bisa diperoleh dengan menggunakan $centers . Karena kita melakukan standarisasi peubah, maka nilai rata-rata yang diperoleh juga dalam skala standarisasi.
Berdasarkan nilai rata-rata dari $centers , berikut adalah interpretasinya
cluster 1: cluster ini merupakan hasil produksi perikanan tangkap yang masih sangat kecil hasil produksinya (peubah waduk -0.00825713 bernilai kecil), hasil produksinya sangat kecil (peubah sungai -0.1915156 bernilai kecil) namun pada peubah danau cukup besar dengan hasil positif 0.01322925.
cluster 2: cluster ini merupakan hasil produksi perikanan tangkap yang besar hasil produksinya (peubah rawa 3.8343976), hasil produksinya besar (peubah sungai 3.0642498 bernilai besar) namun pada peubah grnangan air dengan hasil negatif -0.35380086.
Jika sulit membaca hasil dalam bentuk skala standarisasi maka kita bisa menggunakan fungsi aggregate untuk melihat rata-ratanya dalam skala aslinya. Fungsi ini dapat menghitung rata-rata setiap peubah berdasarkan cluster yang terbentuk.
aggregate(index,by =list(cluster=clustering$cluster),FUN = mean)
Cara lain untuk memnginterpretasikan hasil cluster adalah menggunakan scatterplot. Jika peubah untuk membangun kluster lebih dari dua, maka sebelum dibentuk scatterplot peubah tersebut direduksi terlebih dahulu menggunakan analisis komponen utama menjadi dua komponen utama. Namun, untuk interpretasinya setiap clusternya kita harus mengetahui interpretasi dari kedua komponen utama dan belum tentu dengan dua komponen utama tersebut sudah mampu menjelaskan keragaman data asal dengan baik.
pca_mall <- prcomp(data_standardize)
pca_mall$rotation
## PC1 PC2 PC3 PC4 PC5
## Waduk -0.23014983 -0.6511613 0.15500332 0.69949260 0.09850962
## Sungai -0.69199741 0.1363227 0.05028109 -0.01235278 -0.70701834
## Danau 0.01026500 0.2260365 0.96851699 -0.01528208 0.10268108
## Rawa -0.67704386 0.1852648 -0.11143473 -0.12314647 0.69260797
## Genangan Air -0.09837111 -0.6870150 0.15166712 -0.70367529 -0.01310408
#hitung nilai silhoutte
silhouette<-silhouette(clustering$cluster, dist(data_standardize))
silhouette
## cluster neighbor sil_width
## [1,] 1 2 0.7678232
## [2,] 1 2 0.2810873
## [3,] 1 2 0.6543291
## [4,] 1 2 0.6104529
## [5,] 1 2 0.7671685
## [6,] 2 1 0.6004820
## [7,] 1 2 0.7866997
## [8,] 1 2 0.7755678
## [9,] 1 2 0.7898401
## [10,] 1 2 0.7898605
## [11,] 1 2 0.7898605
## [12,] 1 2 0.3929378
## [13,] 1 2 0.2131458
## [14,] 1 2 0.7847764
## [15,] 1 2 0.6938230
## [16,] 1 2 0.3614273
## [17,] 1 2 0.7900335
## [18,] 1 2 0.6567259
## [19,] 1 2 0.7899798
## [20,] 1 2 0.4790348
## [21,] 1 2 0.4428275
## [22,] 2 1 0.5907656
## [23,] 1 2 0.3346753
## [24,] 1 2 0.7891643
## [25,] 1 2 0.7360182
## [26,] 1 2 0.7875478
## [27,] 1 2 0.5959144
## [28,] 1 2 0.7843442
## [29,] 1 2 0.7856995
## [30,] 1 2 0.7898605
## [31,] 1 2 0.7898605
## [32,] 1 2 0.7898605
## [33,] 1 2 0.7897530
## [34,] 1 2 0.7898605
## attr(,"Ordered")
## [1] FALSE
## attr(,"call")
## silhouette.default(x = clustering$cluster, dist = dist(data_standardize))
## attr(,"class")
## [1] "silhouette"
plot(silhouette)
Nilai Average Silhouette sebesar 0.66 nilai Silhouette Coefficient ≤ 0,5
yang berarti termasuk struktur medium, atau objek-objek pada penelitian
ini yaitu dasar capaian kompetensi Laboratorium berada pada kelompok
yang tepat, hal ini mengindikasikan bahwa Metode K-Means tepat
diterapkan pada penelitian ini.
Pengelompokan hirarki (Hierarchical Clustering) adalah metode dengan cara melakukan pengelompokan objek-objek data ke dalam sebuah kelompok hirarki.BHierarchical Clustering dapat dilakukan menggunakan dua strategi, yaitu bottom-up yang disebut agglomerative hierarchical clustering dan top-down yang bisa disebut divisive hierarchical clustering. Agglomerative Hierarchical Clustering, strategi ini dimulai dengan menganggap setiap objek tunggal yang ada sebagai sebuah klaster kemudian secara berulang menggabungkannya untuk membentuk klaster-klaster yang lebih besar.
Pada clustering hirarki, jarak digunakan untuk mengukur kedekatan antara dua cluster. Jarak yang digunakan dapat berupa jarak euclidean.
Pengukuran jarak antar cluster ini dilakukan secara berulang-ulang, dimulai dari cluster yang paling terpisah. Cluster yang paling terpisah akan digabungkan menjadi satu cluster, kemudian jarak antar cluster yang baru dihitung. Proses ini terus dilakukan sampai semua data tercakup dalam satu cluster.
jarak<-dist(data_standardize)
#melakukan proses clustering hirarki
hirarkisingle=hclust(jarak, method = "single")
hirarkisingle
##
## Call:
## hclust(d = jarak, method = "single")
##
## Cluster method : single
## Distance : euclidean
## Number of objects: 34
#melihat dendrogam
plot(hirarkisingle, data$Provinsi, labels(data$Provinsi))
#membentuk hasil cluster
anggotasingle=data.frame(id=data, cutree(hirarkisingle, k=2))
anggotasingle
Jika diperhatikan dari keempat dendogram pada masing-masing metode linkage, banyaknya cluster yang terbentuk sama seperti menggunakan keofi sien silhouette diatas.
interpretasi cluster seperti metode kmeans diatas
#hitung nilai silhoutte
hirar<-silhouette(clustering$cluster, dist(jarak))
hirar
## cluster neighbor sil_width
## [1,] 1 2 0.79052232
## [2,] 1 2 -0.46757940
## [3,] 1 2 0.66502734
## [4,] 1 2 0.68401701
## [5,] 1 2 0.78893973
## [6,] 2 1 0.85271471
## [7,] 1 2 0.80011469
## [8,] 1 2 0.79437530
## [9,] 1 2 0.80046353
## [10,] 1 2 0.80038210
## [11,] 1 2 0.80038210
## [12,] 1 2 -0.07644458
## [13,] 1 2 -0.49598488
## [14,] 1 2 0.79779855
## [15,] 1 2 0.71389234
## [16,] 1 2 -0.29015194
## [17,] 1 2 0.80057272
## [18,] 1 2 0.67959632
## [19,] 1 2 0.80050870
## [20,] 1 2 0.42199058
## [21,] 1 2 0.54917918
## [22,] 2 1 0.84695330
## [23,] 1 2 0.33861041
## [24,] 1 2 0.80061845
## [25,] 1 2 0.76009856
## [26,] 1 2 0.79977387
## [27,] 1 2 0.62096092
## [28,] 1 2 0.79933633
## [29,] 1 2 0.79907600
## [30,] 1 2 0.80038210
## [31,] 1 2 0.80038210
## [32,] 1 2 0.80038210
## [33,] 1 2 0.80060251
## [34,] 1 2 0.80038210
## attr(,"Ordered")
## [1] FALSE
## attr(,"call")
## silhouette.default(x = clustering$cluster, dist = dist(jarak))
## attr(,"class")
## [1] "silhouette"
plot(hirar)
Nilai Average Silhouette sebesar 0.62 nilai Silhouette Coefficient ≤ 0,5
yang berarti termasuk struktur medium, atau objek-objek pada penelitian
ini yaitu dasar capaian kompetensi Laboratorium berada pada kelompok
yang tepat, hal ini mengindikasikan bahwa Metode Hirariki tepat
diterapkan pada penelitian ini.
Berdasarkan analisis data dan pembahasan tentang produksi perikanan tangkap di indonesia dapat diambil kesimpulan bahwa hasil analisis Metode Elbow untuk pengelompokan K-Means dan Hirarki menghasilkan jumlah kelompok yang optimal adalah 2 cluster. Metode Pengelompokan terbaik adalah Metode K-Means dengan nilai Silhouette Coeffient sebesar 0,66.