1 Pendahuluan

Dalam konteks pembangunan global, kesenjangan tingkat kesejahteraan antarnegara masih menjadi isu yang menonjol. Ada negara yang sudah mencapai tingkat pendapatan dan kualitas kesehatan yang tinggi, sementara negara lain masih bergulat dengan kemiskinan, angka kematian anak yang tinggi, serta akses layanan kesehatan yang terbatas.

Untuk menyusun prioritas bantuan secara objektif, diperlukan analisis yang tidak hanya melihat satu indikator saja, melainkan berbagai indikator sosial ekonomi dan kesehatan secara bersamaan, seperti: pendapatan per kapita, GDP per kapita, inflasi, angka kematian anak, angka harapan hidup, tingkat fertilitas, serta proporsi ekspor dan impor terhadap PDB.

Salah satu teknik analisis multivariat yang digunakan untuk tujuan pengelompokan adalah analisis cluster non-hierarki (K-Means). Pada laporan ini digunakan dataset “Unsupervised Learning on Country Data” dari Kaggle, yang berisi 167 negara dengan beberapa variabel sosio-ekonomi dan kesehatan.

Tujuan analisis:

  1. Mengelompokkan negara-negara berdasarkan indikator sosial, ekonomi, dan kesehatan.
  2. Mendeskripsikan karakteristik utama tiap cluster.
  3. Mengidentifikasi cluster negara dengan kondisi pembangunan relatif tertinggal.

2 Persiapan dan Import Data

2.1 Memanggil Paket yang Dibutuhkan

library(readxl)
library(tidyverse)
library(factoextra)

2.2 Import Data dan Pengecekan Awal

Catatan: Sesuaikan nama/path file Country-data.xlsx dengan lokasi file di komputer Anda.

# Import data
Country_data <- read_excel("Country-data.xlsx")

# Melihat struktur dan beberapa observasi awal
glimpse(Country_data)
## Rows: 167
## Columns: 10
## $ country    <chr> "Afghanistan", "Albania", "Algeria", "Angola", "Antigua and…
## $ child_mort <dbl> 90.2, 16.6, 27.3, 119.0, 10.3, 14.5, 18.1, 4.8, 4.3, 39.2, …
## $ exports    <dbl> 10.0, 28.0, 38.4, 62.3, 45.5, 18.9, 20.8, 19.8, 51.3, 54.3,…
## $ health     <dbl> 7.58, 6.55, 4.17, 2.85, 6.03, 8.10, 4.40, 8.73, 11.00, 5.88…
## $ imports    <dbl> 44.9, 48.6, 31.4, 42.9, 58.9, 16.0, 45.3, 20.9, 47.8, 20.7,…
## $ income     <dbl> 1610, 9930, 12900, 5900, 19100, 18700, 6700, 41400, 43200, …
## $ inflation  <dbl> 9.440, 4.490, 16.100, 22.400, 1.440, 20.900, 7.770, 1.160, …
## $ life_expec <dbl> 56.2, 76.3, 76.5, 60.1, 76.8, 75.8, 73.3, 82.0, 80.5, 69.1,…
## $ total_fer  <dbl> 5.82, 1.65, 2.89, 6.16, 2.13, 2.37, 1.69, 1.93, 1.44, 1.92,…
## $ gdpp       <dbl> 553, 4090, 4460, 3530, 12200, 10300, 3220, 51900, 46900, 58…
head(Country_data)
## # A tibble: 6 × 10
##   country          child_mort exports health imports income inflation life_expec
##   <chr>                 <dbl>   <dbl>  <dbl>   <dbl>  <dbl>     <dbl>      <dbl>
## 1 Afghanistan            90.2    10     7.58    44.9   1610      9.44       56.2
## 2 Albania                16.6    28     6.55    48.6   9930      4.49       76.3
## 3 Algeria                27.3    38.4   4.17    31.4  12900     16.1        76.5
## 4 Angola                119      62.3   2.85    42.9   5900     22.4        60.1
## 5 Antigua and Bar…       10.3    45.5   6.03    58.9  19100      1.44       76.8
## 6 Argentina              14.5    18.9   8.1     16    18700     20.9        75.8
## # ℹ 2 more variables: total_fer <dbl>, gdpp <dbl>

2.3 Cek Missing Value

colSums(is.na(Country_data))
##    country child_mort    exports     health    imports     income  inflation 
##          0          0          0          0          0          0          0 
## life_expec  total_fer       gdpp 
##          0          0          0

Jika semua bernilai 0, berarti tidak ada missing value pada dataset.

3 Pra-Pemrosesan Data

3.1 Memisahkan Variabel Numerik dan Standarisasi

Variabel country bersifat kategorik sehingga tidak distandarisasi.

country_names <- Country_data$country

data_num <- Country_data %>% 
  select(-country)

summary(data_num)
##    child_mort        exports            health          imports        
##  Min.   :  2.60   Min.   :  0.109   Min.   : 1.810   Min.   :  0.0659  
##  1st Qu.:  8.25   1st Qu.: 23.800   1st Qu.: 4.920   1st Qu.: 30.2000  
##  Median : 19.30   Median : 35.000   Median : 6.320   Median : 43.3000  
##  Mean   : 38.27   Mean   : 41.109   Mean   : 6.816   Mean   : 46.8902  
##  3rd Qu.: 62.10   3rd Qu.: 51.350   3rd Qu.: 8.600   3rd Qu.: 58.7500  
##  Max.   :208.00   Max.   :200.000   Max.   :17.900   Max.   :174.0000  
##      income         inflation         life_expec      total_fer    
##  Min.   :   609   Min.   : -4.210   Min.   :32.10   Min.   :1.150  
##  1st Qu.:  3355   1st Qu.:  1.810   1st Qu.:65.30   1st Qu.:1.795  
##  Median :  9960   Median :  5.390   Median :73.10   Median :2.410  
##  Mean   : 17145   Mean   :  7.782   Mean   :70.56   Mean   :2.948  
##  3rd Qu.: 22800   3rd Qu.: 10.750   3rd Qu.:76.80   3rd Qu.:3.880  
##  Max.   :125000   Max.   :104.000   Max.   :82.80   Max.   :7.490  
##       gdpp       
##  Min.   :   231  
##  1st Qu.:  1330  
##  Median :  4660  
##  Mean   : 12964  
##  3rd Qu.: 14050  
##  Max.   :105000
# Standarisasi data numerik
data_scaled <- scale(data_num)

summary(as.data.frame(data_scaled))
##    child_mort         exports            health           imports       
##  Min.   :-0.8845   Min.   :-1.4957   Min.   :-1.8223   Min.   :-1.9341  
##  1st Qu.:-0.7444   1st Qu.:-0.6314   1st Qu.:-0.6901   1st Qu.:-0.6894  
##  Median :-0.4704   Median :-0.2229   Median :-0.1805   Median :-0.1483  
##  Mean   : 0.0000   Mean   : 0.0000   Mean   : 0.0000   Mean   : 0.0000  
##  3rd Qu.: 0.5909   3rd Qu.: 0.3736   3rd Qu.: 0.6496   3rd Qu.: 0.4899  
##  Max.   : 4.2086   Max.   : 5.7964   Max.   : 4.0353   Max.   : 5.2504  
##      income          inflation         life_expec        total_fer      
##  Min.   :-0.8577   Min.   :-1.1344   Min.   :-4.3242   Min.   :-1.1877  
##  1st Qu.:-0.7153   1st Qu.:-0.5649   1st Qu.:-0.5910   1st Qu.:-0.7616  
##  Median :-0.3727   Median :-0.2263   Median : 0.2861   Median :-0.3554  
##  Mean   : 0.0000   Mean   : 0.0000   Mean   : 0.0000   Mean   : 0.0000  
##  3rd Qu.: 0.2934   3rd Qu.: 0.2808   3rd Qu.: 0.7021   3rd Qu.: 0.6157  
##  Max.   : 5.5947   Max.   : 9.1023   Max.   : 1.3768   Max.   : 3.0003  
##       gdpp         
##  Min.   :-0.69471  
##  1st Qu.:-0.63475  
##  Median :-0.45307  
##  Mean   : 0.00000  
##  3rd Qu.: 0.05924  
##  Max.   : 5.02140

4 Penentuan Jumlah Cluster (k)

Jumlah cluster ditentukan menggunakan metode Elbow dan Silhouette.

set.seed(123)

# Metode Elbow
fviz_nbclust(data_scaled, kmeans, method = "wss") +
  ggtitle("Metode Elbow untuk Menentukan k")

# Metode Silhouette
fviz_nbclust(data_scaled, kmeans, method = "silhouette") +
  ggtitle("Metode Silhouette untuk Menentukan k")

Berdasarkan kedua plot tersebut, dipilih jumlah cluster optimal:

k_optimal <- 3
k_optimal
## [1] 3

5 Pembentukan Cluster K-Means

5.1 Menjalankan Algoritma K-Means

set.seed(123)
kmeans_result <- kmeans(
  x = data_scaled,
  centers = k_optimal,
  nstart = 25
)

# Menambahkan label cluster ke data asli
data_clustered <- Country_data %>% 
  mutate(cluster = factor(kmeans_result$cluster))

# Ukuran masing-masing cluster
table(data_clustered$cluster)
## 
##  1  2  3 
## 36 84 47

5.2 Daftar Negara dan Clusternya

cluster_list <- data_clustered %>% 
  arrange(cluster) %>% 
  select(country, cluster)

head(cluster_list, 20)
## # A tibble: 20 × 2
##    country        cluster
##    <chr>          <fct>  
##  1 Australia      1      
##  2 Austria        1      
##  3 Bahrain        1      
##  4 Belgium        1      
##  5 Brunei         1      
##  6 Canada         1      
##  7 Cyprus         1      
##  8 Czech Republic 1      
##  9 Denmark        1      
## 10 Finland        1      
## 11 France         1      
## 12 Germany        1      
## 13 Greece         1      
## 14 Iceland        1      
## 15 Ireland        1      
## 16 Israel         1      
## 17 Italy          1      
## 18 Japan          1      
## 19 Kuwait         1      
## 20 Luxembourg     1

6 Profil Tiap Cluster

6.1 Rata-rata Tiap Variabel per Cluster

cluster_profile <- data_clustered %>% 
  group_by(cluster) %>% 
  summarise(
    mean_child_mort = mean(child_mort),
    mean_income     = mean(income),
    mean_gdpp       = mean(gdpp),
    mean_life_expec = mean(life_expec),
    mean_inflation  = mean(inflation),
    mean_exports    = mean(exports),
    mean_imports    = mean(imports),
    mean_health     = mean(health),
    mean_total_fer  = mean(total_fer),
    .groups = "drop"
  )

cluster_profile
## # A tibble: 3 × 10
##   cluster mean_child_mort mean_income mean_gdpp mean_life_expec mean_inflation
##   <fct>             <dbl>       <dbl>     <dbl>           <dbl>          <dbl>
## 1 1                   5        45672.    42494.            80.1           2.67
## 2 2                  21.9      12306.     6486.            72.8           7.60
## 3 3                  93.0       3942.     1922.            59.2          12.0 
## # ℹ 4 more variables: mean_exports <dbl>, mean_imports <dbl>,
## #   mean_health <dbl>, mean_total_fer <dbl>

Anda dapat menambahkan visualisasi profil cluster (misalnya barplot atau radar chart) bila diperlukan.

6.2 Visualisasi Cluster di Ruang Dua Dimensi

fviz_cluster(
  kmeans_result,
  data = data_scaled,
  geom = "point",
  ellipse.type = "norm",
  main = "Visualisasi Cluster Negara (K-Means)"
)

7 Identifikasi Cluster Paling Tertinggal

Untuk menilai ketertinggalan, digunakan kombinasi beberapa indikator utama: - child_mort (semakin tinggi → semakin tertinggal) - life_expec (semakin rendah → semakin tertinggal) - income (semakin rendah → semakin tertinggal) - gdpp (semakin rendah → semakin tertinggal)

7.1 Membuat Skor Ketertinggalan

cluster_profile_rank <- cluster_profile %>%
  mutate(
    # Semakin tinggi child_mort = semakin tertinggal (rank desc)
    rank_child_mort = dense_rank(desc(mean_child_mort)),
    
    # Semakin rendah life_expec/income/gdpp = semakin tertinggal (rank naik)
    rank_life_expec = dense_rank(mean_life_expec),
    rank_income     = dense_rank(mean_income),
    rank_gdpp       = dense_rank(mean_gdpp),
    
    # Skor total ketertinggalan (semakin besar = semakin tertinggal)
    skor_ketertinggalan = rank_child_mort + rank_life_expec +
      rank_income + rank_gdpp
  ) %>% 
  arrange(desc(skor_ketertinggalan))

cluster_profile_rank
## # A tibble: 3 × 15
##   cluster mean_child_mort mean_income mean_gdpp mean_life_expec mean_inflation
##   <fct>             <dbl>       <dbl>     <dbl>           <dbl>          <dbl>
## 1 1                   5        45672.    42494.            80.1           2.67
## 2 2                  21.9      12306.     6486.            72.8           7.60
## 3 3                  93.0       3942.     1922.            59.2          12.0 
## # ℹ 9 more variables: mean_exports <dbl>, mean_imports <dbl>,
## #   mean_health <dbl>, mean_total_fer <dbl>, rank_child_mort <int>,
## #   rank_life_expec <int>, rank_income <int>, rank_gdpp <int>,
## #   skor_ketertinggalan <int>

Cluster dengan skor ketertinggalan tertinggi dianggap sebagai cluster paling tertinggal.

cluster_tertinggal <- cluster_profile_rank$cluster[1]
cluster_tertinggal
## [1] 1
## Levels: 1 2 3

7.2 Daftar Negara dalam Cluster Paling Tertinggal

negara_cluster_tertinggal <- data_clustered %>%
  filter(cluster == cluster_tertinggal) %>%
  select(country, cluster, child_mort, income, gdpp, life_expec) %>%
  arrange(desc(child_mort))

negara_cluster_tertinggal
## # A tibble: 36 × 6
##    country              cluster child_mort income  gdpp life_expec
##    <chr>                <fct>        <dbl>  <dbl> <dbl>      <dbl>
##  1 Kuwait               1             10.8  75200 38500       78.2
##  2 Brunei               1             10.5  80600 35300       77.1
##  3 Qatar                1              9   125000 70300       79.5
##  4 Bahrain              1              8.6  41100 20700       76  
##  5 United Arab Emirates 1              8.6  57600 35000       76.5
##  6 United States        1              7.3  49400 48400       78.7
##  7 Slovak Republic      1              7    25200 16600       75.5
##  8 Malta                1              6.8  28300 21100       80.3
##  9 New Zealand          1              6.2  32300 33700       80.9
## 10 Canada               1              5.6  40700 47400       81.3
## # ℹ 26 more rows

8 Interpretasi dan Pembahasan

8.1 Gambaran Umum Data

Secara umum, data menunjukkan adanya kesenjangan besar antarnegara:

  • Child_mort: Banyak negara memiliki angka kematian anak rendah, tetapi ada juga negara dengan angka sangat tinggi.
  • Income & gdpp: Median pendapatan dan GDP per kapita jauh di bawah rata-rata, menandakan beberapa negara sangat kaya yang menarik rata-rata naik.
  • Life_expec: Sebagian besar negara memiliki harapan hidup cukup tinggi, namun terdapat negara dengan harapan hidup sangat rendah.
  • Total_fer: Banyak negara mendekati tingkat pengganti (replacement level), tetapi ada negara dengan fertilitas sangat tinggi.
  • Inflation: Mayoritas berada pada tingkat inflasi moderat, sebagian kecil mengalami inflasi sangat tinggi.

8.2 Karakteristik Tiap Cluster (Berdasarkan Mean Profil)

Secara kualitatif (dapat disesuaikan dengan output cluster_profile):

  • Cluster 1
    • Pendapatan dan GDP per kapita tinggi
    • Angka kematian anak rendah
    • Harapan hidup tinggi
    • Fertilitas rendah
    • Pengeluaran kesehatan relatif besar
      → Menggambarkan negara maju / berpendapatan tinggi
  • Cluster 2
    • Nilai indikator berada di tengah-tengah antara Cluster 1 dan 3
    • Pendapatan dan GDP per kapita menengah
    • Kematian anak dan harapan hidup berada pada tingkat menengah
      → Menggambarkan negara berkembang tingkat menengah / transisi
  • Cluster 3
    • Pendapatan dan GDP per kapita rendah
    • Angka kematian anak tinggi
    • Harapan hidup rendah
    • Fertilitas tinggi
    • Inflasi relatif lebih tinggi
      → Menggambarkan negara dengan kondisi pembangunan tertinggal dan menjadi prioritas utama untuk intervensi/bantuan.

9 Kesimpulan

  1. Analisis deskriptif menunjukkan adanya kesenjangan pembangunan yang sangat besar antarnegara dari sisi ekonomi, kesehatan, dan demografi.
  2. Metode K-Means dengan k = 3 menghasilkan tiga cluster negara:
    • Cluster 1: Negara maju dengan pendapatan tinggi dan indikator kesehatan sangat baik.
    • Cluster 2: Negara berkembang menengah dengan indikator pada level moderat.
    • Cluster 3: Negara tertinggal dengan pendapatan rendah, kematian anak tinggi, harapan hidup rendah, dan fertilitas tinggi.
  3. Berdasarkan skor ketertinggalan, Cluster 3 diidentifikasi sebagai cluster yang paling tertinggal dan berpotensi menjadi prioritas utama dalam pemberian bantuan atau intervensi internasional.
  4. Analisis ini dapat menjadi dasar bagi lembaga internasional untuk menyusun strategi dan prioritas bantuan yang lebih terarah.

10 Daftar Pustaka