Library:
> # install.packages("knitr")
> # install.packages("rmarkdown")
> # install.packages("prettydoc")
> # install.packages("equatiomatic")Kebahagiaan merupakan sebuah hal yang dianggap penting oleh masyarakat saat ini, kebahagiaan bersifat domino yang berarti bahwa kebahagiaan suatu individu bisa memengaruhi individu lainnya, termasuk dalam urusan kebahagiaan suatu negara juga dipengaruhi oleh kesejahteraan masyarakatnya. Indeks Kebahagiaan adalah pengukuran yang dilakukan untuk mengetahui kesejahteraan secara subjektif yaitu seberapa bahagia seseorang beserta penyebabnya (Kumalasari & Yasa, 2020). Oleh karena itu, banyak penelitian yang mengukur kebahagiaan berdasarkan faktor-faktor tertentu secara subjektif.
Salah satunya adalah Laporan Kebahagiaan Dunia (World Happiness Report) yang diterbitkan oleh Perserikatan Bangsa-Bangsa (PBB) sejak tahun 2012. World Happiness Report adalah sebuah laporan kebahagiaan yang telah dikaji oleh para ahli dan pakar terkemuka di bidang psikologi, ekonomi, dan statistik, yang bertujuan untuk mengukur tingkat kebahagiaan di negara-negara di seluruh dunia (Hamidah & Voutama, 2023). Laporan tersebut dirancang untuk memahami faktor-faktor yang memengaruhi kebahagiaan di dunia, tak hanya itu, laporan tersebut juga mengurutkan negara-negara di dunia berdasarkan negara yang paling bahagia dan paling tidak bahagia. Oleh karena itu, informasi mengenai kedekatan karakteristik/variabel negara-negara yang memiliki tingkat kebahagiaan yang tinggi atau rendah penting untuk diketahui.
Tujuan dari analisis ini adalah untuk mengelompokkan negara-negara yang termasuk dalam Laporan Kebahagiaan Dunia (World Happiness Report) ke dalam k cluster dan mengetahui karakteristik setiap cluster.
Banyak metode analisis yang digunakan untuk menganalisis dataset tersebut, salah satunya adalah clustering. Clustering adalah salah satu metode yang digunakan untuk mengklasifikasikan data dengan cara mengelompokkan data dalam suatu set data baru yang tidak diketahui sebelumnya (Wakhidah, 2010). Algoritma K-Means merupakan algoritma untuk mengelompokkan (cluster) berjumlah n observasi berdasarkan atribut menjadi k partisi di mana k < n (Wakhidah, 2010).
Langkah-langkah untuk melakukan K-Means clustering adalah sebagai berikut:
Menentukan jumlah cluster
Menentukan nilai centroid
Menghitung jarak titik centroid ke titik setiap objek
Mengelompokkan objek berdasarkan kedekatan dengan centroid
Mengulangi langkah 2-4 hingga nilai centroid tetap dan objek tidak berpindah cluster (konsisten).
Data yang digunakan adalah data “Laporan Kebahagiaan Dunia (World Happiness Report)” tahun 2015 yang diperoleh secara sekunder dari website Kaggle. Data dapat dilihat pada tabel berikut.
library(rmarkdown)
library(readxl)
library(factoextra)
library(cluster)
library(ggplot2)
DataUAP <- read_excel("C:/Users/WINDOWS 11/Documents/Anmul UAP.xlsx", sheet = 2)
DataUAP
str(DataUAP)
Impor data dari excel dengan nama file Anmul UAP dan sheet yang dipilih adalah sheet 2
summary(DataUAP)
DataUAP_standard <- scale(DataUAP[, c(-1)])
Karena data setiap variabel memiliki satuan yang berbeda maka perlu distandarisasi terlebih dahulu. c(-1) berisikan perintah untuk menghapus kolom pertama (bukan numerik)
fviz_nbclust(DataUAP_standard, kmeans, method = "silhouette") +
ggtitle("Determining Optimal Clusters using Silhouette Method") +
theme_minimal()
Penentuan cluster optimal dengan metode silhoutte, di mana digunakan k adalah angka yang dipotong oleh garis putus-putus
set.seed(123)
kmeans_DataUAP <- kmeans(DataUAP_standard, centers = 3, nstart = 25)
Melakukan clustering dengan centers adalah k yang diperoleh pada step sebelumnya, dan nstart sebanyak 25 iterasi.
fviz_cluster(kmeans_DataUAP, data = DataUAP_standard) +
ggtitle("Cluster Visualization") +
theme_minimal()
Dilakukan visualisasi dari hasil clustering yang sudah diperoleh
silhouette_score <- silhouette(kmeans_DataUAP$cluster, dist(DataUAP_standard))
fviz_silhouette(silhouette_score) +
ggtitle("Silhouette Plot for Clustering") +
theme_minimal()
Validasi dengan metode silhoutte width
DataUAP$cluster <- kmeans_DataUAP$cluster
View(DataUAP)
cluster_means <- aggregate(
DataUAP,
by = list(Cluster = DataUAP$cluster),
FUN = mean
)
print(cluster_means)
Untuk mengetahui karakteristik dari masing-masing cluster, digunakan salah satu fungsi agregat, yaitu Rata-rata.
negara_per_cluster <- split(DataUAP$Country, DataUAP$cluster)
print(negara_per_cluster)
> DataUAP <- read_excel("C:/Users/WINDOWS 11/Documents/Anmul UAP.xlsx", sheet = 2)
> DataUAP
# A tibble: 158 × 5
Country `Economy (GDP per Capita)` Freedom Trust (Government Corruption…¹
<chr> <dbl> <dbl> <dbl>
1 Switzerland 1.40 0.666 0.420
2 Iceland 1.30 0.629 0.141
3 Denmark 1.33 0.649 0.484
4 Norway 1.46 0.670 0.365
5 Canada 1.33 0.633 0.330
6 Finland 1.29 0.642 0.414
7 Netherlands 1.33 0.616 0.318
8 Sweden 1.33 0.660 0.438
9 New Zealand 1.25 0.639 0.429
10 Australia 1.33 0.651 0.356
# ℹ 148 more rows
# ℹ abbreviated name: ¹`Trust (Government Corruption)`
# ℹ 1 more variable: `Health (Life Expectancy)` <dbl>> str(DataUAP)
tibble [158 × 5] (S3: tbl_df/tbl/data.frame)
$ Country : chr [1:158] "Switzerland" "Iceland" "Denmark" "Norway" ...
$ Economy (GDP per Capita) : num [1:158] 1.4 1.3 1.33 1.46 1.33 ...
$ Freedom : num [1:158] 0.666 0.629 0.649 0.67 0.633 ...
$ Trust (Government Corruption): num [1:158] 0.42 0.141 0.484 0.365 0.33 ...
$ Health (Life Expectancy) : num [1:158] 0.941 0.948 0.875 0.885 0.906 ...Data memiliki 5 variabel dengan variabel Country memiliki tipe data character dan sisanya numerik, memiliki 158 observasi
> summary(DataUAP)
Country Economy (GDP per Capita) Freedom
Length:158 Min. :0.0000 Min. :0.0000
Class :character 1st Qu.:0.5458 1st Qu.:0.3283
Mode :character Median :0.9102 Median :0.4355
Mean :0.8461 Mean :0.4286
3rd Qu.:1.1584 3rd Qu.:0.5491
Max. :1.6904 Max. :0.6697
Trust (Government Corruption) Health (Life Expectancy)
Min. :0.00000 Min. :0.0000
1st Qu.:0.06168 1st Qu.:0.4392
Median :0.10722 Median :0.6967
Mean :0.14342 Mean :0.6303
3rd Qu.:0.18025 3rd Qu.:0.8110
Max. :0.55191 Max. :1.0252 Menampilkan deskripsi data yang berisi nilai minimum, kuartil, rata-rata, dan maksimum dari masing-masing variabel bertipe numerik.
Standarisasi hanya dilakukan pada data numerik, yaitu semua variabel kecuali variabel Country (variabel kolom pertama (c(-1))). Data yang telah distandarisasi, selanjutnya akan digunakan dalam perhitungan clustering.
> fviz_nbclust(DataUAP_standard, kmeans, method = "silhouette") +
+ ggtitle("Determining Optimal Clusters using Silhouette Method") +
+ theme_minimal()Berdasarkan plot yang ditampilkan dengan metode silhouette, diperoleh garis putus putus pada k=3, sehingga jumlah cluster yang optimal adalah 3
Melakukan clustering dengan k adalah 3 dan sebanyak 25 iterasi
> fviz_cluster(kmeans_DataUAP, data = DataUAP_standard) +
+ ggtitle("Cluster Visualization") +
+ theme_minimal()Diperoleh 3 cluster, cluster 1 berwarna merah, cluster 2 berwarna hijau, dan cluster 3 berwarna biru. Sekilas terlihat dari visualisasi, ukuran cluster tidak jauh berbeda dan jarak antar cluster tidak terlalu jauh.
> silhouette_score <- silhouette(kmeans_DataUAP$cluster, dist(DataUAP_standard))
> fviz_silhouette(silhouette_score) +
+ ggtitle("Silhouette Plot for Clustering") +
+ theme_minimal()
cluster size ave.sil.width
1 1 35 0.36
2 2 78 0.35
3 3 45 0.40Untuk mengevaluasi hasil clustering yang dilakukan, digunakan validitas silhouette width dan diperoleh ukuran cluster 1 adalah 35 observasi, cluster 2 adalah 78 observasi, dan cluster 3 adalah 45 observasi. ave.sil.width digunakan untuk melihat ukuran atau kedekatan antar cluster, ave.sil.width bernilai dari -1 sampai 1, apabila bernilai -1 atau mendekati -1 maka terdapat indikasi adanya penempatan cluster yang salah, jika bernilai 0 atau mendekati 0 maka cluster tidak cukup baik atau tidak cukup terpisah dari cluster lain, indikasi adanya tumpang tindih, dan jika bernilai 1 maka cluster dianggap sangat baik dalam memisahkan atau mengelompokkan data.
Berdasarkan hasil tersebut, seluruh ave.sil.width bernilai <0.50 mengindikasikan pemisahan cluster tidak cukup baik, meskipun tidak terlihat tumpang tindih pada visualisasi cluster, tetapi ketiga cluster terlihat sangat dekat.
Memasukkan hasil clustering ke data asli (data awal) dengan menambah kolom baru bernama cluster pada DataUAP, kemudian digunakan View(DataUAP) untuk memastikan dan melihat bahwa hasil clustering memang sudah ditambahkan.
> cluster_means <- aggregate(
+ DataUAP[, c(-1)],
+ by = list(Cluster = DataUAP$cluster),
+ FUN = mean
+ )
> print(cluster_means)
Cluster Economy (GDP per Capita) Freedom Trust (Government Corruption)
1 1 1.2434640 0.5854520 0.3208660
2 2 0.9498965 0.4026400 0.0799400
3 3 0.3572558 0.3516538 0.1154449
Health (Life Expectancy) cluster
1 0.8355960 1
2 0.7279482 2
3 0.3012258 3Berdasarkan hasil tersebut, diketahui bahwa sebagian besar negara yang memiliki GDP per Kapita terendah adalah cluster 3, yaitu 0.3572558, sedangkan untuk Kebebasan berpendapat cenderung tidak jauh berbeda antar cluster. Kemudian untuk kepercayaan kepada pemerintah terendah ada pada cluster 2, dan untuk angka harapan hidup terendah ada pada cluster 3. Dengan demikian, secara keseluruhan, cluster 3 memiliki rata-rata terendah untuk 3 dari 4 variabel.
Diperoleh anggota cluster sebagai berikut.
> negara_per_cluster <- split(DataUAP$Country, DataUAP$cluster)
> print(negara_per_cluster)
$`1`
[1] "Switzerland" "Iceland" "Denmark"
[4] "Norway" "Canada" "Finland"
[7] "Netherlands" "Sweden" "New Zealand"
[10] "Australia" "Austria" "Mexico"
[13] "United States" "Luxembourg" "Ireland"
[16] "Belgium" "United Arab Emirates" "United Kingdom"
[19] "Oman" "Singapore" "Germany"
[22] "Qatar" "France" "Uruguay"
[25] "Saudi Arabia" "Malta" "Kuwait"
[28] "Uzbekistan" "Japan" "Bahrain"
[31] "Turkmenistan" "Hong Kong" "Laos"
[34] "Georgia" "Rwanda"
$`2`
[1] "Israel" "Costa Rica"
[3] "Brazil" "Venezuela"
[5] "Panama" "Chile"
[7] "Argentina" "Czech Republic"
[9] "Colombia" "Thailand"
[11] "Spain" "Taiwan"
[13] "Suriname" "Trinidad and Tobago"
[15] "El Salvador" "Guatemala"
[17] "Slovakia" "South Korea"
[19] "Ecuador" "Italy"
[21] "Bolivia" "Moldova"
[23] "Paraguay" "Kazakhstan"
[25] "Slovenia" "Lithuania"
[27] "Nicaragua" "Peru"
[29] "Belarus" "Poland"
[31] "Malaysia" "Croatia"
[33] "Libya" "Russia"
[35] "Jamaica" "North Cyprus"
[37] "Cyprus" "Algeria"
[39] "Kosovo" "Mauritius"
[41] "Estonia" "Indonesia"
[43] "Vietnam" "Turkey"
[45] "Kyrgyzstan" "Bhutan"
[47] "Azerbaijan" "Jordan"
[49] "Montenegro" "China"
[51] "Romania" "Serbia"
[53] "Portugal" "Latvia"
[55] "Philippines" "Morocco"
[57] "Macedonia" "Albania"
[59] "Bosnia and Herzegovina" "Dominican Republic"
[61] "Mongolia" "Greece"
[63] "Lebanon" "Hungary"
[65] "Honduras" "Tunisia"
[67] "Palestinian Territories" "Iran"
[69] "Ukraine" "Iraq"
[71] "India" "Armenia"
[73] "Sri Lanka" "Bulgaria"
[75] "Egypt" "Gabon"
[77] "Cambodia" "Syria"
$`3`
[1] "Nigeria" "Pakistan"
[3] "Zambia" "Somaliland region"
[5] "Mozambique" "Lesotho"
[7] "Swaziland" "Tajikistan"
[9] "Bangladesh" "South Africa"
[11] "Ghana" "Zimbabwe"
[13] "Liberia" "Sudan"
[15] "Haiti" "Congo (Kinshasa)"
[17] "Nepal" "Ethiopia"
[19] "Sierra Leone" "Mauritania"
[21] "Kenya" "Djibouti"
[23] "Botswana" "Myanmar"
[25] "Malawi" "Cameroon"
[27] "Yemen" "Angola"
[29] "Mali" "Congo (Brazzaville)"
[31] "Comoros" "Uganda"
[33] "Senegal" "Niger"
[35] "Tanzania" "Madagascar"
[37] "Central African Republic" "Chad"
[39] "Guinea" "Ivory Coast"
[41] "Burkina Faso" "Afghanistan"
[43] "Benin" "Burundi"
[45] "Togo" Anggota Cluster 1 dari Switzerland hingga Laos
Anggota cluster 2 dari Israel hingga Syria
Anggota cluster 3 dari Nigeria hingga Togo
Berdasarkan analisis k-means yang dilakukan, diperoleh cluster optimal adalah 3 dengan rincian sebagai berikut.
Cluster 1 memiliki anggota 35 negara, dengan seluruh indikator kebahagiaan memiliki nilai paling tinggi dibandingkan cluster lainnya. Ini memungkinkan anggota pada cluster 1 memiliki tingkat kebahagiaan hidup yang tinggi.
CLuster 2 memiliki anggota paling banyak, yaitu 78 negara dengan indikator kebahagiaan terendah ada pada tingkat kepercayaan kepada pemerintah.
Cluster 3 memiliki anggota 45 negara, dengan 3 dari 4 indikator kebahagiaan, yaitu GDP per kapita, Kebebasan berpendapat, dan angka harapan hidup berada pada angka yang paling rendah dibandingkan dua cluster lainnya. Hal ini memungkinkan bahwa anggota negara pada cluster 3 memiliki tingkat kebahagiaan yang rendah.
Visualisasi clustering yang terbentuk menunjukkan bahwa antar cluster memiliki kedekatan yang cukup dekat sehingga karakteristik antar cluster tidak jauh berbeda. Untuk mengatasi hal tersebut, bisa menambah jumlah cluster agar tidak terjadi tumpang tindih antar cluster.
Hamidah, K., & Voutama, A. (2023). Analisis Faktor Tingkat Kebahagiaan Negara Menggunakan Data World Happiness Report dengan Metode Regresi Linier. Explore IT: Jurnal Keilmuan dan Aplikasi Teknik Informatika, 15(1), 1-7.
Kumalasari, D. A., & Yasa, I. G. W. M. (2020). Pengaruh Faktor-Faktor Yang Mempengaruhi Tingkat Kebahagiaan Negara Di Dunia. E-Jurnal Ekonomi Pembangunan Universitas Udayana, 9(5), 963-992.
UNSDSN. (n.d.). World Happiness Report dataset. Kaggle. Diakses pada 25 November 2024, dari https://www.kaggle.com/datasets/unsdsn/world-happiness
Wakhidah, N. (2010). Clustering menggunakan k-means algorithm. Jurnal Transformatika, 8(1), 33-39.