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:
parameter merge menjukkan pengelompokan menggunakan urutan baris. Contoh -9 menunjukkan bulan September.
parameter height menunjukkan tinggi bagan pada plot, yang pertama 34.6 yaitu tinggi plot pada bagan bulan September dan Oktober. Kedua 382.4 adalah tinggi plot dari bagan bulan April dan Agustus, dst.
parameter order menunjukkan urutan bulan pada plot dimulai dari kiri seperti April(4), Agustus(8), Maret(3), dst.
parameter labels menunjukkan keterangan pada plot yang diambil dari nama baris yang berada di data ekspor.
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:
Kelompok pertama : Januari, Februari, dan Mei
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