Analisis ini bertujuan untuk mengelompokkan universitas di seluruh dunia berdasarkan stabilitas performa mereka selama tiga tahun terakhir (2013-2015) menggunakan tiga algoritma berbeda: K-Means, DBSCAN, dan Fuzzy C-Means.

1. Library

Tahap awal adalah memuat library yang diperlukan untuk manipulasi data, perhitungan algoritma clustering, dan visualisasi hasil.

library(tidyverse) # Manipulasi data & ggplot2
## Warning: package 'tidyverse' was built under R version 4.5.3
## Warning: package 'readr' was built under R version 4.5.3
## Warning: package 'lubridate' was built under R version 4.5.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.2.0     ✔ readr     2.2.0
## ✔ forcats   1.0.1     ✔ stringr   1.6.0
## ✔ ggplot2   4.0.2     ✔ tibble    3.3.1
## ✔ lubridate 1.9.5     ✔ tidyr     1.3.2
## ✔ purrr     1.2.1     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(cluster)   # Algoritma clustering & silhouette
library(factoextra)# Visualisasi cluster 
## Welcome to factoextra!
## Want to learn more? See two factoextra-related books at https://www.datanovia.com/en/product/practical-guide-to-principal-component-methods-in-r/
library(dbscan)    # Algoritma DBSCAN
## Warning: package 'dbscan' was built under R version 4.5.3
## 
## Attaching package: 'dbscan'
## 
## The following object is masked from 'package:stats':
## 
##     as.dendrogram
library(e1071)     # Algoritma Fuzzy C-Means
## Warning: package 'e1071' was built under R version 4.5.3
## 
## Attaching package: 'e1071'
## 
## The following object is masked from 'package:ggplot2':
## 
##     element
library(gridExtra) # Mengatur tata letak grafik
## 
## Attaching package: 'gridExtra'
## 
## The following object is masked from 'package:dplyr':
## 
##     combine

2. Memuat Data Awal

Sebelum pengolahan, perlu melihat struktur data asli terlebih dahulu untuk memahami variabel apa saja yang tersedia.

# Membaca file CSV
data_raw <- read.csv("cwurData.csv")

# Menampilkan 6 data teratas
head(data_raw)
##   world_rank                           institution        country national_rank
## 1          1                    Harvard University            USA             1
## 2          2 Massachusetts Institute of Technology            USA             2
## 3          3                   Stanford University            USA             3
## 4          4               University of Cambridge United Kingdom             1
## 5          5    California Institute of Technology            USA             4
## 6          6                  Princeton University            USA             5
##   quality_of_education alumni_employment quality_of_faculty publications
## 1                    7                 9                  1            1
## 2                    9                17                  3           12
## 3                   17                11                  5            4
## 4                   10                24                  4           16
## 5                    2                29                  7           37
## 6                    8                14                  2           53
##   influence citations broad_impact patents  score year
## 1         1         1           NA       5 100.00 2012
## 2         4         4           NA       1  91.67 2012
## 3         2         2           NA      15  89.50 2012
## 4        16        11           NA      50  86.17 2012
## 5        22        22           NA      18  85.21 2012
## 6        33        26           NA     101  82.50 2012

Interpretasi: Data awal bersifat longitudinal (satu universitas muncul di beberapa baris untuk tahun yang berbeda). Kolom seperti quality_of_education hingga patents menggunakan skala peringkat (1 = Terbaik), sedangkan score adalah nilai absolut (100 = Terbaik).


3. Preprocessing: Agregasi 3 Tahun & Scaling

Tahap ini menggabungkan data tahun 2013, 2014, dan 2015. Dengan mengambil nilai rata-rata,mendapatkan gambaran stabilitas universitas, sehingga hasil clustering tidak terpengaruh oleh fluktuasi peringkat yang hanya terjadi sesaat.

# Agregasi data: Satu baris per Universitas
data_cleaned <- data_raw %>%
  filter(year >= 2013 & year <= 2015) %>%
  group_by(institution) %>%
  summarise(across(c(quality_of_education, alumni_employment, quality_of_faculty, 
                     publications, influence, citations, broad_impact, patents, score), 
                   mean, na.rm = TRUE)) %>%
  ungroup()
## Warning: There was 1 warning in `summarise()`.
## ℹ In argument: `across(...)`.
## ℹ In group 1: `institution = "AGH University of Science and Technology"`.
## Caused by warning:
## ! The `...` argument of `across()` is deprecated as of dplyr 1.1.0.
## Supply arguments directly to `.fns` through an anonymous function instead.
## 
##   # Previously
##   across(a:b, mean, na.rm = TRUE)
## 
##   # Now
##   across(a:b, \(x) mean(x, na.rm = TRUE))
# Menghilangkan kolom nama (non-numerik) untuk perhitungan
df_final <- data_cleaned %>% select(-institution)

# Scaling data: Menyamakan rentang nilai semua variabel
df_scaled <- scale(df_final)

4. Menentukan Jumlah Cluster Optimal

Menggunakan Elbow Method untuk melihat di mana penambahan cluster tidak lagi memberikan penurunan varians yang signifikan (mencari titik “siku”).

fviz_nbclust(df_scaled, kmeans, method = "wss") + 
  geom_vline(xintercept = 4, linetype = 2, color = "red") +
  labs(title = "Elbow Method: Menyarankan k=4")

> Penjelasan: Titik siku biasanya ditemukan pada \(k=4\). Ini membagi universitas secara logis menjadi kelompok: Elit, Riset Kuat, Menengah, dan Regional.


5. Implementasi Tiga Algoritma Clustering

A. K-Means (Partitioning)

Algoritma ini membagi data secara tegas berdasarkan jarak ke pusat massa (centroid).

set.seed(123)
km_res <- kmeans(df_scaled, centers = 4, nstart = 25)

B. DBSCAN (Density-Based)

Berbeda dengan K-Means, DBSCAN mengelompokkan data berdasarkan kerapatan. Data yang berada di area sepi akan dianggap sebagai noise (anomali).

# Menentukan epsilon (jarak tetangga)
kNNdistplot(df_scaled, k = 5) 

# Eksekusi DBSCAN
db_res <- dbscan(df_scaled, eps = 1.3, minPts = 5)

C. Fuzzy C-Means (Soft Clustering)

Dalam algoritma ini, satu universitas bisa memiliki derajat keanggotaan di lebih dari satu cluster.

set.seed(123)
fcm_res <- cmeans(df_scaled, centers = 4, m = 2)

6. Visualisasi dan Perbandingan Hasil

Tahap ini menampilkan ketiga hasil tersebut berdampingan untuk melihat bagaimana masing-masing algoritma memandang struktur data universitas dunia.

plot_km <- fviz_cluster(km_res, data = df_scaled, main = "K-Means (k=4)")
plot_db <- fviz_cluster(db_res, data = df_scaled, main = "DBSCAN (Density-Based)")
plot_fcm <- fviz_cluster(list(data = df_scaled, cluster = fcm_res$cluster), 
                   main = "Fuzzy C-Means (Membership)")
plot_km

Interpretasi K-Means Clustering :

Berdasarkan Gambar hasil K-Means (\(k=4\)), data terbagi menjadi empat wilayah yang terpisah secara spasial berdasarkan jarak ke centroid. - Klaster 4 (Ungu): Terletak di koordinat Dim1 dan Dim2 paling negatif. Kelompok ini memiliki sebaran paling jauh dari pusat massa utama, menunjukkan karakteristik unik yang sangat berbeda dari kelompok lain (Universitas Elit/Top Tier). - Klaster 3 (Biru Muda): Memiliki kepadatan menengah dan berada di antara Klaster 4 dan Klaster 1. - Klaster 1 (Merah) & Klaster 2 (Hijau): Terletak di area dengan nilai Dim1 positif. Kedua klaster ini memiliki area overlap yang cukup besar, menunjukkan adanya kemiripan karakteristik antar anggota di kelompok menengah dan bawah.

plot_db

Interpretasi DBSCAN (Density-Based) :

Hasil DBSCAN menunjukkan struktur data yang didominasi oleh satu massa jenis yang sangat besar.

  • Klaster 1 (Merah): Algoritma hanya berhasil mengidentifikasi satu klaster besar yang mencakup mayoritas data universitas.Titik Hitam (Noise/Outliers): Terdapat banyak titik hitam yang tersebar di luar area arsiran merah, seperti titik bernomor 187, 294, 54, dan 185. Titik-titik ini adalah universitas yang tidak memiliki kepadatan tetangga yang cukup (sesuai nilai epsilon), sehingga dikategorikan sebagai anomali atau universitas dengan profil performa yang sangat ekstrem dibandingkan rata-rata global.
plot_fcm

Interpretasi Fuzzy C-Means (Membership):

Grafik FCM menunjukkan pembagian wilayah yang mirip dengan K-Means, namun dengan batas area yang lebih dinamis karena konsep soft clustering. Area arsiran (poligon) menunjukkan derajat keanggotaan. Perhatikan area perbatasan antara Klaster 2 (Hijau) dan Klaster 1 (Merah); terdapat tumpang tindih poligon yang menunjukkan bahwa universitas di area tersebut memiliki probabilitas keanggotaan ganda. Ini mencerminkan adanya universitas “transisi” yang memiliki profil antara kategori satu dengan lainnya.

7. Evaluasi dan Interpretasi Akhir

Silhouette Plot Visualisasi diperlukan untuk bagian Asumsi dan Evaluasi. Tanpa ini, kita tidak bisa membuktikan secara objektif metode mana yang paling akurat. Jika batang siluet lebar dan mendekati angka 1, maka pengelompokan sudah sangat baik.Jika banyak batang negatif, berarti banyak universitas yang “salah masuk” klaster.

# Menghitung Silhouette Score
dist_matrix <- dist(df_scaled)
sil_km <- mean(silhouette(km_res$cluster, dist_matrix)[, 3])
sil_fcm <- mean(silhouette(fcm_res$cluster, dist_matrix)[, 3])

cat("Silhouette Score K-Means:", round(sil_km, 4), "\n")
## Silhouette Score K-Means: 0.3299
cat("Silhouette Score FCM:", round(sil_fcm, 4), "\n")
## Silhouette Score FCM: 0.236

Silhouette Plot untuk K-Means

sil_km <- silhouette(km_res$cluster, dist(df_scaled))
fviz_silhouette(sil_km) +
  labs(title = "K-Means",
       subtitle = paste("Average Silhouette Width:", round(mean(sil_km[,3]), 4))) +
  theme_minimal()
##   cluster size ave.sil.width
## 1       1  362          0.22
## 2       2  486          0.40
## 3       3  156          0.31
## 4       4   19          0.62

Silhouette Plot untuk DBSCAN

(Hanya menghitung data yang bukan noise/0)

db_clusters <- db_res$cluster
# Menghitung jumlah klaster unik selain noise (0)
n_clusters_db <- length(unique(db_clusters[db_clusters != 0]))

if(n_clusters_db > 1) {
  sil_db <- silhouette(db_clusters[db_clusters != 0], 
                       dist(df_scaled[db_clusters != 0, ]))
  fviz_silhouette(sil_db) +
    labs(title = "DBSCAN",
         subtitle = paste("Average Silhouette Width:", round(mean(sil_db[,3]), 4))) +
    theme_minimal()
} else {
  # Tampilkan pesan jika tidak bisa dihitung
  plot.new()
  text(0.5, 0.5, "DBSCAN hanya menemukan 1 klaster.\nSilhouette tidak dapat dihitung.")
}

Silhouette Plot untuk Fuzzy C-Means

sil_fcm <- silhouette(fcm_res$cluster, dist(df_scaled))
fviz_silhouette(sil_fcm) +
  labs(title = "Fuzzy C-Means",
       subtitle = paste("Average Silhouette Width:", round(mean(sil_fcm[,3]), 4))) +
  theme_minimal()
##   cluster size ave.sil.width
## 1       1  244          0.19
## 2       2  133          0.26
## 3       3  287          0.17
## 4       4  359          0.31

Cluster:

  1. Klaster 1 (The Global Elites): Berisi universitas top dengan peringkat pendidikan dan alumni yang luar biasa (angka kecil). DBSCAN seringkali menganggap kelompok ini sebagai noise karena saking tingginya kualitas mereka dibandingkan universitas lain.
  2. Klaster 2 (Research Giants): Universitas yang fokus pada produksi jurnal dan sitasi ilmiah.
  3. Klaster 3 (Solid Global Competitors): Kelompok menengah yang memiliki performa stabil di skala internasional.
  4. Klaster 4 (Regional/Emerging): Universitas yang baru berkembang atau fokus pada pasar pendidikan lokal dengan peringkat riset yang masih rendah.

Kesimpulan:

Berdasarkan hasil analisis multivariat terhadap data World University Rankings periode 2013-2015 menggunakan tiga metode clustering, dapat ditarik beberapa kesimpulan utama:

Struktur Kelompok: Performa universitas dunia secara objektif paling baik dijelaskan dalam 4 kelompok berdasarkan Elbow Method. Terdapat stratifikasi yang jelas antara universitas dengan performa riset dan reputasi alumni yang ekstrem (Klaster 4 pada K-Means) dengan universitas yang memiliki performa rata-rata (Klaster 1 dan 2).

Efektivitas Algoritma:

  1. K-Means unggul dalam memberikan batas segmentasi yang tegas dan mudah dipahami untuk kebijakan pemetaan institusi secara umum.

  2. DBSCAN terbukti paling efektif dalam mendeteksi institusi anomali. Banyaknya outlier yang terdeteksi menunjukkan bahwa kualitas universitas top dunia memang sangat jauh melampaui rata-rata institusi lainnya, sehingga tidak bisa dikelompokkan dalam satu massa densitas yang sama.

  3. Fuzzy C-Means memberikan perspektif tambahan mengenai adanya universitas yang memiliki karakteristik campuran, yang tidak bisa dipisahkan secara kaku oleh garis batas linier.

Evaluasi Metode: Penggunaan standarisasi data (scaling) terbukti krusial dalam menyamakan pengaruh variabel peringkat (seperti patents) dengan variabel skor, sehingga hasil clustering tidak didominasi oleh satu variabel dengan rentang nilai besar saja.