Cluster analysis atau clustering adalah satu tugas pengelompokan dari suatu himpunan objek sedemikian hingga objek tersebut akan mengelompok di dalam satu klaster yang memiliki kemiripan dalam kelompok tersebut daripada kelompok yang lain. Untuk informasi lain dapat dilihat pada web berikut https://en.wikipedia.org/wiki/Cluster_analysis.

Hierarchical Clustering adalah pengelompokan data yang dilakukan dengan membuat suatu bagan hirarki (dendrogram) dengan tujuan menunjukkan kemiripan antar data. Setiap data yang mirip akan memiliki hubungan hirarki yang dekat dan menbentuk cluster data. Bagan hirarki akan terus terbentuk hingga seluruh data terhubung dalam bagan hirarki tersebut. Cluster dapat dihasilkan dengan memotong bagan hirarki pada level tertentu. Beberapa metode dalam hierarchical clustering yaitu single linkage, complete linkage, average linkage, dan ward’s minimum variance.

Kita akan mencoba melakukan analisis menggunakan hierarchical clustering di R dari data Nilai Ekspor Migas-NonMigas Negara Indonesia Tahun 2022 yang diperoleh melalui Badan Pusat Statistik Indonesia https://www.bps.go.id/indicator/8/1753/2/nilai-ekspor-migas-nonmigas.html. Berikut data dari BPS:

Bulan migas (Juta US$) nonmigas (Juta US$)
Januari 901.2 18272.5
Februari 994.8 19478.1
Maret 1405.1 25092.4
April 1433.3 25889.0
Mei 1496.1 20013.7
Juni 1549.3 24600.8
Juli 1367.9 24195.3
Agustus 1686.5 26175.6
September 1310.5 23466.7
Oktober 1288.1 23440.3
November 1114.1 22979.9
Desember 1472.8 22355.0

Dipunyai 12 buah objek dengan nilai yang bervariasi, dimana objek tersebut sesuai dengan jumlah bulan dalam setahun. Nilai pada ‘migas’ menyatakan nilai ekspor migas (Juta US$) dimana migas adalah komoditas yang terdiri dari minyak dan gas, sementara nilai pada ‘nonmigas’ menyatakan nilai ekspor non-migas (Juta US$) dimana non-migas adalah komoditas berupa hasil pertanian, perkebunan, peternakan, kehutanan, kerajinan, mineral hasil tambang, dan barang industri. Ekspor nonmigas masih mendominasi total ekspor di Indonesia, kita dapat melihat dari tabel bahwa nilai non-migas sangat jauh berbeda dengan nilai migas. Komoditas unggulan dalam ekspor nonmigas antara lain kelapa sawit, batu bara, besi dan baja, karet, kopi, teh, dan kakao.

Langkah pertama dalam melakukan analisis adalah memanggil package yang digunakan untuk analisis hierarchical clustering yaitu package cluster, dendextend, dan factoextra.

library(cluster)
library(dendextend)
library(factoextra)

setelah itu kita input data migas dan non-migas ke dalam bentuk vektor.

migas <- c(901.2,994.8,1405.1,1433.3,1496.1,1549.3,1367.9,1686.5,1310.5,1288.1,1114.1,1472.8)
nonmigas <- c(18272.5,19478.1,25092.4,25889.0,20013.7,24600.8,24195.3,26175.6,23466.7,23440.3,22979.9,22355.0)

kemudian kita gabungkan data tersebut dalam bentuk data frame.

ekspor <- data.frame(migas, nonmigas)
ekspor
##     migas nonmigas
## 1   901.2  18272.5
## 2   994.8  19478.1
## 3  1405.1  25092.4
## 4  1433.3  25889.0
## 5  1496.1  20013.7
## 6  1549.3  24600.8
## 7  1367.9  24195.3
## 8  1686.5  26175.6
## 9  1310.5  23466.7
## 10 1288.1  23440.3
## 11 1114.1  22979.9
## 12 1472.8  22355.0

selanjutnya kita memberikan nama pada baris, karena pada kolom sudah terdapat nama.

rownames(ekspor) <- c("Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember")

lalu kita panggil kembali datanya.

ekspor
##            migas nonmigas
## Januari    901.2  18272.5
## Februari   994.8  19478.1
## Maret     1405.1  25092.4
## April     1433.3  25889.0
## Mei       1496.1  20013.7
## Juni      1549.3  24600.8
## Juli      1367.9  24195.3
## Agustus   1686.5  26175.6
## September 1310.5  23466.7
## Oktober   1288.1  23440.3
## November  1114.1  22979.9
## Desember  1472.8  22355.0

selanjutnya kita membuat plot dari data ekspor.

plot(ekspor)
text(ekspor, rownames(ekspor), cex = 0.5) #cex untuk ukuran teks

Dari hasil plot kita bisa melihat bahwa dibagian bawah terdapat 2 bulan yang berdekatan, dibagian atas terdapat 9 bulan yang juga saling berdekatan. Sehingga kita bisa mengasumsikan bahwa mereka berkumpul menjadi 2 cluster. Untuk bulan Mei terletak agak jauh dengan yang lainnya, sehingga kita dapat mengasumsikan bulan Mei bisa bergabung dengan kelompok manapun.

Kemudian kita membuat cluster (pengelompokan) dari data. Pertama kita mencari jarak dari masing-masing objek terhadap objek lainnya.

dist(ekspor) #jarak masing2 objek
##              Januari   Februari      Maret      April        Mei       Juni
## Februari  1209.22799                                                       
## Maret     6838.49042 5629.27265                                            
## April     7635.06402 6425.87901  797.09899                                 
## Mei       1840.02268  733.60006 5079.51520 5875.63562                      
## Juni      6361.40036 5152.62317  512.31260 1293.41225 4587.40849           
## Juli      5941.15887 4731.93189  897.87095 1694.96220 4183.56472  444.22540
## Agustus   7942.02025 6733.12373 1119.15513  382.42620 6164.84094 1580.76528
## September 5210.30135 4001.07441 1628.45008 2425.41071 3457.98444 1158.96861
## Oktober   5182.26287 3973.04087 1656.23773 2453.00117 3432.90716 1189.53171
## November  4712.21192 3503.83158 2132.44865 2926.55966 2990.69665 1678.30744
## Desember  4122.32129 2916.33976 2738.23703 3534.22074 2341.41593 2247.10255
##                 Juli    Agustus  September    Oktober   November
## Februari                                                        
## Maret                                                           
## April                                                           
## Mei                                                             
## Juni                                                            
## Juli                                                            
## Agustus   2005.76520                                            
## September  730.85752 2734.87024                                 
## Oktober    759.20553 2764.16147   34.62254                      
## November  1241.61653 3246.55822  524.92590  492.18306           
## Desember  1843.28731 3826.57184 1123.48484 1100.90426  720.53154

karena kita menggunakan analisis hierarchical clustering maka kita menggunakan perintah hclust(). Disini kita menggunakan method single karena kita ingin membuat cluster berdasarkan jarak terdekat dari masing-masing objek.

ekspor.hc <- hclust(dist(ekspor), "single") #single adalah jarak terdekat dari masing2 cluster

lalu kita membuat plot dalam bentuk dendogram dari data yang sudah dikelompokkan.

plot(ekspor.hc)

kita bisa menambahkan sintaks hang, code ini adalah bagian dari tinggi plot dimana label (keterangan) harus digantung di bawah sisa plot. Jika kita memasukkan nilai negatif pada sintaks hang maka akan menyebabkan label menggantung dari 0.

plot(ekspor.hc, hang = -1)

Dari hasil plot hierarchical clustering di atas, menunjukkan bulan Oktober, September, November, Desember, Juli, Juni, Maret, Agustus, dan April berkumpul terlebih dahulu menjadi 1 bagan hirarki. Kemudian bulan Mei, Februari, dan Januari juga berkumpul menjadi 1 bagan hiraki. Baru yang terakhir kedua bagan tersebut saling berhubung menjadi satu kesatuan bagan hirarki.

Selanjutnya kita dapat melihat ringkasan dari hasil perintah hclust() menggunakan perintah berikut.

summary(ekspor) #sebelum dikelompokkan
##      migas           nonmigas    
##  Min.   : 901.2   Min.   :18273  
##  1st Qu.:1244.6   1st Qu.:21770  
##  Median :1386.5   Median :23454  
##  Mean   :1335.0   Mean   :22997  
##  3rd Qu.:1478.6   3rd Qu.:24724  
##  Max.   :1686.5   Max.   :26176
summary(ekspor.hc) #setelah dikelompokkan
##             Length Class  Mode     
## merge       22     -none- numeric  
## height      11     -none- numeric  
## order       12     -none- numeric  
## labels      12     -none- character
## method       1     -none- character
## call         3     -none- call     
## dist.method  1     -none- character

Di dalam ringkasan data ekspor diperoleh beberapa ringkasan yaitu Min (nilai terkecil), 1st Qu (nilai kuartil pertama), Median (nilai tengah / kuartil kedua), Mean (rata-rata), 3st Qu (nilai kuartil ketiga), dan Max (nilai terbesar). Sedangkan ringkasan dari data hclust() menghasilkan beberapa parameter yang ada sesuai dengan output. Untuk membaca ringkasan tersebut dapat menggunakan perintah str() yang mana digunakan untuk menampilkan struktur dari pengelompokan.

str(ekspor.hc)
## List of 7
##  $ merge      : int [1:11, 1:2] -9 -4 -6 -11 -3 -12 5 -2 2 -1 ...
##  $ height     : num [1:11] 34.6 382.4 444.2 492.2 512.3 ...
##  $ order      : int [1:12] 4 8 3 6 7 12 11 9 10 1 ...
##  $ labels     : chr [1:12] "Januari" "Februari" "Maret" "April" ...
##  $ method     : chr "single"
##  $ call       : language hclust(d = dist(ekspor), method = "single")
##  $ dist.method: chr "euclidean"
##  - attr(*, "class")= chr "hclust"

Dari hasil di atas diperoleh beberapa informasi sebagai berikut:

kemudian untuk melihat lebih lanjut tentang merge kita dapat memanggil parameternya menggunakan perintah berikut.

ekspor.hc$merge
##       [,1] [,2]
##  [1,]   -9  -10
##  [2,]   -4   -8
##  [3,]   -6   -7
##  [4,]  -11    1
##  [5,]   -3    3
##  [6,]  -12    4
##  [7,]    5    6
##  [8,]   -2   -5
##  [9,]    2    7
## [10,]   -1    8
## [11,]    9   10

Dari hasil parameter merge, diketahui bahwa kita mempunyai 12 baris (nama bulan). Sebagai contoh -9 (September) dan -10 (Oktober) berkumpul menjadi satu cluster terlebih dahulu. Kemudian -4 (April) dan -8 (Agustus) berkumpul menjadi satu cluster. Lalu -6 (Juni) dan -7 (Juli) juga sama membentuk satu cluster. Selanjutnya -11 (November) dan 1 (cluster pertama) yang berarti November berkumpul dengan September dan Oktober. Untuk yang lainnya dapat mengikuti.

Selanjutnya kita dapat menggambar persegi panjang di sekitar cabang dendogram. Disini kita akan membagi menajdi 2 cluster. Dalam perintah rect.hclust() sintaks k digunakan untuk jumlah cluster dan border digunakan untuk memberi warna pada cluster.

plot(ekspor.hc, hang = -1)
rect.hclust(ekspor.hc, k = 2, border = 2:3)

Dari hasil di atas, terdapat 2 warna yang berbeda sebagai petunjuk bahwa masing-masing terpisahkan menjadi 2 cluster/kelompok. Kita juga dapat melihat hasil tersebut menggunakan perintah cutree()

ekspor.cut <- cutree(ekspor.hc, 2) #angka 2 sesuai dengan kelompok yang terbentuk
table(ekspor.cut)
## ekspor.cut
## 1 2 
## 3 9

Dari hasil tersebut, kita dapat memperoleh informasi bahwa cluster pertama terdapat 3 objek dan cluster kedua terdapat 9 objek.

Untuk melihat nama-nama objek tersebut dapat menggunakan perintah berikut.

rownames(ekspor)[ekspor.cut==1]
## [1] "Januari"  "Februari" "Mei"
rownames(ekspor)[ekspor.cut==2]
## [1] "Maret"     "April"     "Juni"      "Juli"      "Agustus"   "September"
## [7] "Oktober"   "November"  "Desember"

Dari hasil analisis data Nilai Ekspor Migas-NonMigas Negara Indonesia Tahun 2022 dengan menggunakan hierarchical clustering, diperoleh kesimpulan bahwa dari data tersebut terbentuk 2 kelompok, yang mana di dalam kelompok memiliki kemiripan satu sama lain. Berikut 2 kelompok yang dihasilkan dari analisis:

  1. Kelompok pertama : Januari, Februari, dan Mei

  2. Kelompok kedua : Maret, April, Juni, Juli, Agustus, September, Oktober, November, dan Desember

Semoga penjelasan dari saya dapat membantu dan bermanfaat bagi semuanya.

Salam

Adinda Devi Utari

Universitas Islam Indonesia