Fuzzy C-Means CLustering

Mata Kuliah : Pemodelan Klasifikasi

Penyaji : Rupmana Br Butar Butar, Zulhijrah dan Mahda Al Maida

Deskripsi Tugas

Pada project ini akan melakukan penggerombolan provinsi berdasarkan rata-rata mutu SMA yang diukur menurut skor peubah Mutu Lulusan, Proses pembelajaran, Mutu Guru dan Manajemen menggunakan algoritma Fuzzy C-Means Clustering.

Dataset yang digunakan merepresentasikan mutu SMA di Indonesia dengan empat indikator utama yaitu Mutu Lulusan, Proses Pembelajaran, Mutu Guru, dan Manajemen S/M, juga terdapat informasi akreditasi serta status sekolah. Data ini akan digunakan untuk analisis mutu pendidikan antar provinsi dengan melakukan pengelompokan provinsi dengan metode clustering.

Fuzzy C-Means

Fuzzy C-Means (FCM) adalah metode tak berhirarki yang mana keberadaan tiap-tiap titik data dalam suatu gerombol ditentukan oleh derajat keanggotaan.

Algoritma FCM

1. Inisiasi

Tentukan:

- \(N\)$ : jumlah data - \(C\) : Jumlah cluster - \(m > 1\) : fuzziness parameter (umumnya \(m = 2\)) - \(\varepsilon\) : Toleransi error untuk konvergensi

Bangkitkan matriks keanggotaan awal \(U = [u_{ij}]\) secara acak dengan syarat

\[ \sum_{j=1}^{C} u_{ij} = 1, \quad \forall i = 1, \ldots, N \]

dimana \(u_{ij}\) = derajat keanggotaan data \(i\) ke cluster \(j\).

2. Hitung centroid cluster Centroid cluster \(v_{j}\) dihitung dengan rata-rata berbobot fuzzy dengan formula: \[ v_j = \frac{\sum_{i=1}^{N} (u_{ij})^m \, x_i}{\sum_{i=1}^{N} (u_{ij})^m} \]

3. Update matriks keanggotaan Update \(u_{ij}\) dengan formula: \[ u_{ij} = \frac{1}{\sum_{k=1}^{C} \left( \frac{\lVert x_i - v_j \rVert}{\lVert x_i - v_k \rVert} \right)^{\tfrac{2}{m-1}}} \] dimana \(\lVert x_i - v_j \rVert\) adalah jarak (biasanya menggunakan Euclidean) antara data \(x_{i}\) dan centroid \(v_{j}\).

4. Cek fungsi objektif Fungsi objektif FCM sebagai berikut: \[ J_m = \sum_{i=1}^{N} \sum_{j=1}^{C} (u_{ij})^m \, \lVert x_i - v_j \rVert^2 \] - Hitung \(J_{m}\) pada iterasi ke-\(t\). - Jika \(\lvert J_m^{(t)} - J_m^{(t-1)} \rvert < \varepsilon\) (atau perbedaan matriks keanggotaan sangat kecil), maka berhenti. - Jika tidak, kembali ke langkah 2.

5. Hasil Akhir - Matriks keanggotaan U : menunjukkan proporsi keanggotaan tiap data di tiap cluster. - Centroid \(v_{j}\) : pusat tiap cluster. - Cluster label keras diperoleh dengan aturan maximum membership sebagai berikut \[ \text{Cluster}(x_i) = \arg \max_{j} \; u_{ij} \]

Packages

# Library yang digunakan
library(tidyverse)
Warning: package 'dplyr' was built under R version 4.4.3
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.4     ✔ readr     2.1.5
✔ forcats   1.0.0     ✔ stringr   1.5.1
✔ ggplot2   3.5.1     ✔ tibble    3.2.1
✔ lubridate 1.9.3     ✔ tidyr     1.3.1
✔ purrr     1.0.2     
── 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(readxl)
Warning: package 'readxl' was built under R version 4.4.3
library(factoextra)
Warning: package 'factoextra' was built under R version 4.4.3
Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(DataExplorer)
library(easystats)   # plot_intro/plot_histogram/correlation
Warning: package 'easystats' was built under R version 4.4.3
# Attaching packages: easystats 0.7.5 (red = needs update)
✖ bayestestR  0.16.1   ✔ correlation 0.8.8 
✔ datawizard  1.2.0    ✔ effectsize  1.0.1 
✖ insight     1.4.0    ✖ modelbased  0.12.0
✖ performance 0.15.0   ✖ parameters  0.28.0
✔ report      0.6.1    ✔ see         0.11.0

Restart the R-Session and update packages with `easystats::easystats_update()`.
library(umap)
Warning: package 'umap' was built under R version 4.4.3
library(ggpubr)

Attaching package: 'ggpubr'

The following objects are masked from 'package:datawizard':

    mean_sd, median_mad
library(forcats)
library(e1071)       # cmeans (FCM)
Warning: package 'e1071' was built under R version 4.4.3

Attaching package: 'e1071'

The following objects are masked from 'package:parameters':

    kurtosis, skewness

The following objects are masked from 'package:datawizard':

    kurtosis, skewness
library(cluster)     # silhouette
library(dplyr)
library(tidyr)
library(ggplot2)
library(rlang)

Attaching package: 'rlang'

The following objects are masked from 'package:purrr':

    %@%, flatten, flatten_chr, flatten_dbl, flatten_int, flatten_lgl,
    flatten_raw, invoke, splice
library(corrplot)
corrplot 0.95 loaded
library(ggrepel)
library(sf)
Linking to GEOS 3.12.1, GDAL 3.8.4, PROJ 9.3.1; sf_use_s2() is TRUE
library(sp)
library(ggspatial)  # Untuk panah utara

Data yang digunakan

# Import & Persiapan Data
data <- read_excel("D:/KULIAH/Semester 3/Pemodelan Klasifikasi/TUGAS 1/DATA TUGAS.xlsx")
glimpse(data)
Rows: 1,144
Columns: 11
$ No                     <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, …
$ TAHUN                  <dbl> 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020,…
$ NPSN                   <dbl> 20501870, 10303885, 69974471, 50105492, 1060090…
$ `Status Sekolah`       <chr> "Swasta", "Swasta", "Swasta", "Negeri", "Negeri…
$ Provinsi               <chr> "JAWA TIMUR", "SUMATERA BARAT", "JAWA BARAT", "…
$ `Kab/Kota`             <chr> "KABUPATEN SIDOARJO", "KOTA PAYAKUMBUH", "KABUP…
$ `Mutu Lulusan`         <dbl> 88.57143, 82.85714, 74.28571, 94.28571, 97.1428…
$ `Proses Pembelajaran`  <dbl> 90.00000, 86.66667, 83.33333, 96.66667, 96.6666…
$ `Mutu Guru`            <dbl> 88.88889, 83.33333, 77.77778, 100.00000, 94.444…
$ `Manajemen S/M`        <dbl> 94.44444, 88.88889, 88.88889, 100.00000, 100.00…
$ `Peringkat Akreditasi` <chr> "A", "B", "B", "A", "A", "B", "C", "A", "B", "A…
# Memastikan kolom numerik
num_cols_raw <- c("Mutu Lulusan", "Proses Pembelajaran", "Mutu Guru", "Manajemen S/M")
data[num_cols_raw] <- lapply(data[num_cols_raw], function(x) as.numeric(as.character(x)))

# agregasi ke level provinsi
data.prov <- data %>%
  group_by(Provinsi) %>%
  summarise(
    Mutu_Lulusan        = mean(`Mutu Lulusan`,        na.rm = TRUE),
    Proses_Pembelajaran = mean(`Proses Pembelajaran`, na.rm = TRUE),
    Mutu_Guru           = mean(`Mutu Guru`,           na.rm = TRUE),
    Manajemen_SM        = mean(`Manajemen S/M`,       na.rm = TRUE),
    .groups = "drop"
  ) %>%
  arrange(Provinsi)

print(data.prov)
# A tibble: 34 × 5
   Provinsi      Mutu_Lulusan Proses_Pembelajaran Mutu_Guru Manajemen_SM
   <chr>                <dbl>               <dbl>     <dbl>        <dbl>
 1 ACEH                  85.0                84.5      82.1         85.4
 2 BALI                  93.4                91.9      91.9         95.5
 3 BANTEN                91.3                90.4      88.3         92.1
 4 BENGKULU              93.4                88.5      87.0         91.2
 5 DI YOGYAKARTA         91.8                92.0      87.1         93.7
 6 DKI JAKARTA           94.5                91.1      88.8         92.7
 7 GORONTALO             87.4                85.8      83.9         89.2
 8 JAMBI                 91.9                89.2      88.8         93.1
 9 JAWA BARAT            91.6                90.1      88.3         93.1
10 JAWA TENGAH           92.5                91.0      88.5         93.3
# ℹ 24 more rows

Penjelasan Data:

1. Struktur Data
Dataset ini berisi 1.144 baris yang merepresentasikan sekolah-sekolah di Indonesia dan 11 kolom yang berisi berbagai informasi terkait identitas sekolah, status, lokasi, mutu, dan akreditasi. Setiap baris menggambarkan satu sekolah, sedangkan setiap kolom berfungsi sebagai variabel yang mendeskripsikan karakteristik atau penilaian sekolah tersebut.

2. Informasi Identitas Sekolah
Kolom NPSN menjadi pengenal unik untuk setiap sekolah, sedangkan kolom TAHUN menunjukkan periode data yang digunakan, yaitu tahun 2020. Kolom Status.Sekolah membedakan sekolah menjadi dua kategori, yaitu Negeri dan Swasta, sehingga analisis perbandingan mutu berdasarkan status sekolah dapat dilakukan.

3. Informasi Lokasi
Kolom Provinsi dan Kab.Kota menunjukkan lokasi geografis sekolah. Informasi ini berguna untuk analisis distribusi mutu dan akreditasi berdasarkan wilayah administratif, sehingga dapat mengidentifikasi pola atau disparitas mutu antar daerah.

4. Nilai Mutu Sekolah
Empat kolom numerik Mutu Lulusan, Proses Pembelajaran, Mutu Guru, dan Manajemen S/M merepresentasikan penilaian mutu sekolah dalam bentuk skor, umumnya pada skala 0–100. Nilai ini menggambarkan kualitas lulusan, proses pembelajaran, kualitas tenaga pengajar, serta kualitas manajemen sekolah.

5. Peringkat Akreditasi
Kolom Peringkat.Akreditasi menunjukkan peringkat akreditasi sekolah yang dikategorikan menjadi A, B, C, atau TT (tidak terakreditasi).

# Menyiapkan matrix numerik level provinsi dan scaling
num_vars <- c("Mutu_Lulusan", "Proses_Pembelajaran", "Mutu_Guru", "Manajemen_SM")

# pastikan data.prov sudah ada
X <- data.prov %>%
  dplyr::select(all_of(num_vars)) %>%
  as.data.frame()

# versi dengan rownames utk FCM
df.prov <- X
rownames(df.prov) <- data.prov$Provinsi

# scaling utk PCA/UMAP/fviz_nbclust
X_scaled <- scale(X)
xc <- attr(X_scaled, "scaled:center")
xs <- attr(X_scaled, "scaled:scale")

Eksplorasi Data

# Ringkasan Awal Data
plot_intro(data = data.prov,ggtheme = theme_minimal())

Plot di atas menunjukkan bahwa 20% kolom dalam dataset bertipe diskret, yang mencakup variabel kategorik seperti status sekolah, provinsi, kabupaten/kota, dan peringkat akreditasi. Sementara itu, 80% kolom lainnya merupakan kolom kontinu, yang berisi data numerik seperti mutu lulusan, mutu proses pembelajaran, mutu guru, dan mutu manajemen sekolah. Selain itu, data ini tergolong bersih dan lengkap karena tidak ada kolom yang sepenuhnya kosong, tidak ada observasi yang hilang, dan seluruh baris data terisi penuh. Kondisi ini menunjukkan bahwa dataset siap digunakan untuk analisis lebih lanjut tanpa perlu proses imputasi atau pembersihan data tambahan.

# Histogram
plot_histogram(data = data.prov,
               ncol = 2, nrow = 2,
               geom_histogram_args = list(fill="steelblue",col="black"),
               ggtheme = theme_minimal())
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Histogram pada plot ini menggambarkan distribusi empat variabel numerik, yaitu Manajemen S/M, Mutu Guru, Mutu Lulusan, dan Proses Pembelajaran. Secara umum, keempat variabel menunjukkan sebaran nilai yang relatif terkonsentrasi pada rentang 80 hingga 95, mengindikasikan kualitas sekolah yang cukup baik secara keseluruhan.

Pada variabel Manajemen S/M, distribusi nilai banyak berkumpul di sekitar rentang 88–92, menunjukkan bahwa mayoritas sekolah memiliki skor manajemen yang tinggi dan cukup merata. Variabel Mutu Guru juga memperlihatkan kecenderungan serupa, dengan konsentrasi nilai pada rentang 85–90, menandakan bahwa kualitas tenaga pengajar di sebagian besar sekolah berada pada tingkat baik hingga sangat baik.

Untuk variabel Mutu Lulusan, sebagian besar nilai terkonsentrasi di sekitar angka 88–92, yang menunjukkan kualitas lulusan yang konsisten dan cenderung homogen antar sekolah. Sementara itu, variabel Proses Pembelajaran menampilkan distribusi yang lebih bervariasi, meskipun puncak frekuensinya berada di sekitar rentang 86–88. Hal ini mengindikasikan adanya sedikit perbedaan antar sekolah dalam aspek proses pembelajaran, meskipun sebagian besar masih berada pada kategori yang cukup baik.

# Korelasi
correlation(data = data.prov,method = "spearman",
                         include_factors = FALSE) %>% 
  as.matrix() %>% 
  plot(text=list(size=2))+theme(text = element_text(size = 6),
                                axis.text.x = element_text(angle = 45,
                                                           hjust = 1))

Matriks korelasi pada plot ini menunjukkan hubungan antara keempat variabel numerik, yaitu Mutu Lulusan, Proses Pembelajaran, Mutu Guru, dan Manajemen S/M. Secara umum, semua variabel memiliki korelasi positif yang cukup kuat satu sama lain, menandakan bahwa peningkatan pada satu aspek mutu sekolah cenderung diikuti oleh peningkatan pada aspek lainnya.

Korelasi tertinggi terlihat antara Mutu Lulusan dan Proses Pembelajaran dengan nilai 0,92, menunjukkan bahwa kualitas proses pembelajaran memiliki pengaruh yang sangat besar terhadap mutu lulusan sekolah. Korelasi yang juga cukup kuat terlihat antara Mutu Lulusan dan Mutu Guru (0,89) serta antara Mutu Lulusan dan Manajemen S/M (0,88), yang mengindikasikan bahwa kualitas guru dan manajemen sekolah juga berkontribusi signifikan terhadap hasil lulusan.

Sementara itu, korelasi terendah terdapat antara Mutu Guru dan Manajemen S/M dengan nilai 0,74. Meskipun korelasi ini masih tergolong kuat, nilainya yang lebih rendah dibandingkan pasangan variabel lain menunjukkan bahwa hubungan antara kualitas guru dan manajemen sekolah tidak sekuat hubungan variabel lainnya.

# Long format
data.prov_long <- data.prov %>%
  pivot_longer(cols = c(Mutu_Lulusan, Proses_Pembelajaran, Mutu_Guru, Manajemen_SM),
               names_to = "Peubah", values_to = "Skor")

# Flag outlier per peubah (rule 1.5*IQR)
data.flag <- data.prov_long %>%
  group_by(Peubah) %>%
  mutate(
    q1   = quantile(Skor, 0.25, na.rm = TRUE),
    q3   = quantile(Skor, 0.75, na.rm = TRUE),
    iqr  = q3 - q1,
    low  = q1 - 1.5 * iqr,
    high = q3 + 1.5 * iqr,
    is_out = Skor < low | Skor > high
  ) %>%
  ungroup()

# Plot: box berwarna berbeda, titik hanya untuk outlier
ggplot(data.flag, aes(x = Peubah, y = Skor, fill = Peubah)) +
  geom_boxplot(width = 0.6, outlier.shape = NA, alpha = 0.9, color = "#444444") +
  geom_point(
    data = ~ dplyr::filter(.x, is_out),
    aes(x = Peubah, y = Skor),
    inherit.aes = FALSE,
    shape = 21, size = 3,
    color = "black", fill = "firebrick2", stroke = 0.3
  ) +
  scale_fill_brewer(palette = "Set2", guide = "none") +
  labs(
    title = "Sebaran skor per peubah (level provinsi)",
    x = NULL, y = "Skor (rata-rata per provinsi)"
  ) +
  theme_minimal(base_size = 12) +
  theme(
    axis.text.x = element_text(angle = 15, hjust = 1),
    panel.grid.minor = element_blank()
  ) +
  scale_y_continuous(expand = expansion(mult = c(0.05, 0.08)))

Boxplot tersebut menunjukkan sebaran skor rata-rata per provinsi untuk empat aspek mutu, yaitu Manajemen Sekolah, Mutu Guru, Mutu Lulusan, dan Proses Pembelajaran. Secara umum, skor ketiga aspek Manajemen Sekolah, Mutu Lulusan, dan Proses Pembelajaran berada pada kisaran yang relatif tinggi, yakni sekitar 88–92. Namun, Mutu Guru memiliki median yang lebih rendah dibanding aspek lainnya, sekitar 86, serta rentang sebaran yang lebih lebar, menunjukkan variasi antarprovinsi yang lebih besar. Terdapat pula beberapa outlier, seperti provinsi dengan skor rendah pada Manajemen Sekolah dan Proses Pembelajaran, yang ditandai dengan titik merah di bawah boxplot. Hal ini mengindikasikan bahwa kualitas manajemen, lulusan, dan proses pembelajaran relatif merata dan tinggi, sementara mutu guru cenderung lebih bervariasi.

# Outlier per provinsi untuk satu variabel
flag_outlier <- function(df, prov_col, value_col) {
  df %>%
    group_by({{prov_col}}) %>%
    mutate(
      q1   = quantile({{value_col}}, 0.25, na.rm = TRUE),
      q3   = quantile({{value_col}}, 0.75, na.rm = TRUE),
      iqr  = q3 - q1,
      low  = q1 - 1.5 * iqr,
      high = q3 + 1.5 * iqr,
      is_out = {{value_col}} < low | {{value_col}} > high
    ) %>%
    ungroup()
}

# Box plot per provinsi utk satu variabel
plot_by_prov <- function(df, prov_col, value_col, title_txt, xlab_txt, fill_color) {

  ## urutkan provinsi berdasarkan median variabel yg dipilih
  prov_order <- df %>%
    group_by({{prov_col}}) %>%
    summarize(med = median({{value_col}}, na.rm = TRUE), .groups = "drop") %>%
    arrange(med) %>%
    pull({{prov_col}})

  df2 <- df %>%
    mutate({{prov_col}} := factor({{prov_col}}, levels = prov_order)) %>%
    flag_outlier({{prov_col}}, {{value_col}})

  ggplot(df2, aes(x = {{value_col}}, y = {{prov_col}})) +
    geom_boxplot(
      outlier.shape = NA,           # sembunyikan titik default
      width = 0.6,
      fill  = fill_color,
      color = "#444444",
      alpha = 0.95
    ) +
    geom_point(                       # tampilkan HANYA outlier
      data = dplyr::filter(df2, is_out),
      aes(x = {{value_col}}, y = {{prov_col}}),
      inherit.aes = FALSE,
      shape = 21, size = 1.5,
      fill = "goldenrod1", color = "black", stroke = 0.25
    ) +
    labs(title = title_txt, x = xlab_txt, y = "Provinsi") +
    theme_minimal(base_size = 12) +
    theme(
      axis.text.x = element_text(size = 10),
      panel.grid.minor = element_blank()
    )
}

# Box plot Mutu Lulusan
p1 <- plot_by_prov(
  data, Provinsi, `Mutu Lulusan`,
  "Sebaran Mutu Lulusan Antar Provinsi", "Mutu Lulusan",
  "#1E90FF" # DodgerBlue
)
p1

# Box plot Proses Pembelajaran
p2 <- plot_by_prov(
  data, Provinsi, `Proses Pembelajaran`,
  "Sebaran Proses Pembelajaran Antar Provinsi", "Proses Pembelajaran",
  "#FF1493" # DarkOrange
)
p2

# Box plot Mutu Guru
p3 <- plot_by_prov(
  data, Provinsi, `Mutu Guru`,
  "Sebaran Mutu Guru Antar Provinsi", "Mutu Guru",
  "#8A2BE2" # BlueViolet
)
p3

# Box plot Manajemen S/M
p4 <- plot_by_prov(
  data, Provinsi, `Manajemen S/M`,
  "Sebaran Manajemen S/M Antar Provinsi", "Manajemen S/M",
  "#3CB371" # MediumSeaGreen
)
p4

1. Sebaran Mutu Lulusan Antar Provinsi
Plot ini menunjukkan variasi mutu lulusan antar provinsi. Sebagian besar provinsi memiliki mutu lulusan yang tinggi, berada di kisaran 85–95. Namun, ada beberapa outlier dengan mutu jauh lebih rendah (sekitar 60–70), menunjukkan adanya ketimpangan kualitas lulusan antar sekolah di beberapa daerah. Provinsi seperti Kalimantan Barat, Nusa Tenggara Timur, dan Sulawesi Barat tampak lebih beragam dengan sebaran lebar, sedangkan provinsi seperti DKI Jakarta dan Bali lebih homogen.

2. Sebaran Proses Pembelajaran Antar Provinsi
Sebagian besar provinsi menunjukkan proses pembelajaran yang cukup baik, dengan nilai terkonsentrasi di atas 85. Meskipun demikian, terdapat beberapa provinsi dengan outlier yang rendah (di bawah 60), menandakan adanya perbedaan kualitas proses pembelajaran antar sekolah dalam provinsi tersebut. Distribusi cenderung lebih rapat dibanding mutu lulusan, yang berarti kualitas proses pembelajaran relatif lebih seragam antar provinsi, walaupun masih ada sedikit perbedaan yang cukup mencolok.

3. Sebaran Mutu Guru Antar Provinsi
Mutu guru antar provinsi memperlihatkan variasi yang lebih lebar dibanding mutu lulusan dan proses pembelajaran. Ada provinsi dengan sebaran sangat tinggi (mencapai 100), namun juga ditemukan outlier rendah (bahkan di bawah 50). Hal ini menandakan masih adanya kesenjangan kompetensi guru antar sekolah dalam satu provinsi maupun antar provinsi. Provinsi seperti Papua, NTT, dan Sulawesi Barat memperlihatkan variasi besar, sementara provinsi seperti DKI Jakarta dan Bali relatif lebih stabil.

4. Sebaran Manajemen Sekolah/Madrasah Antar Provinsi
Sebaran manajemen sekolah/madrasah cenderung cukup baik dengan mayoritas provinsi memiliki skor di atas 80. Namun, terlihat cukup banyak outlier dengan nilai rendah (bahkan sekitar 40–50), menunjukkan adanya sekolah yang masih jauh tertinggal dari standar manajemen yang baik. Secara umum, perbedaan antar provinsi cukup besar, dengan beberapa daerah menonjol di kategori tinggi (seperti Bali dan Jawa), sementara daerah lain masih memiliki tantangan besar dalam tata kelola sekolah.

Menentukan Banyaknya Cluster Terbaik

# Visualisasi
## PCA
pca0 <- prcomp(x = X_scaled, center = FALSE, scale. = FALSE)
rownames(pca0$x) <- data.prov$Provinsi

fviz_pca_ind(
  pca0,
  geom.ind = c("point","text"),
  repel = TRUE,
  labelsize = 3
)

Visualisasi di atas memperlihatkan pemetaan provinsi berdasarkan kesamaan karakteristik (misalnya dari hasil analisis multivariat atau embedding). Terlihat adanya pola pemisahan: provinsi seperti DKI Jakarta, Jawa Tengah, DI Yogyakarta, Bali, dan Jawa Barat mengelompok di sisi kiri atas, menunjukkan kinerja atau kualitas yang relatif lebih baik. Sementara provinsi di kanan bawah seperti Aceh, Nusa Tenggara Timur, Sulawesi Utara, dan Kalimantan Selatan cenderung berada di kelompok dengan kondisi relatif lebih rendah. Provinsi lainnya tersebar di antara kedua kutub ini, membentuk gradasi dari kategori tinggi ke rendah.

## UMAP
set.seed(123)
umap0 <- umap(d = X_scaled)
data_umap <- data.frame(x = umap0$layout[,1], y = umap0$layout[,2])

ggscatter(
  data_umap, x = "x", y = "y",
  label = data.prov$Provinsi, repel = TRUE,
  font.label = c(9, "plain", "grey50")
)

Algoritma UMAP, melibatkan elemen random initialization, sehingga mungkin menghasilkan hasil yang berbeda. Kalau random seed tidak diset sama, hasil bisa sedikit berbeda tiap kali dijalankan, apalagi di komputer berbeda.

Pada plot ini, provinsi juga tersebar membentuk pola gradasi. Tampak ada kelompok di kiri atas (provinsi dengan capaian tinggi, seperti DKI Jakarta, DI Yogyakarta, Bali), kelompok di kanan bawah (provinsi dengan capaian relatif rendah, seperti Aceh, NTT, Sulawesi Utara, Kalimantan Selatan), serta kelompok transisi di tengah (seperti Sumatera Barat, Riau, Jawa Timur). Dari pola ini, jumlah klaster yang mungkin berkisar antara 2 sampai 3 klaster, dengan satu klaster unggul, satu tertinggal, dan satu menengah.

# Menentukan k (Silhouette hard dari FCM)
fcm_fun <- function(x, k, m = 2, iter.max = 200){
  fit <- e1071::cmeans(x, centers = k, m = m, iter.max = iter.max,
                       verbose = FALSE, method = "cmeans")
  hard_labels <- apply(fit$membership, 1, which.max)
  structure(list(cluster = hard_labels), class = "fcm_fit")
}

set.seed(123)
nb <- fviz_nbclust(
  x = X_scaled,
  FUNcluster = fcm_fun,
  method = "silhouette",
  k.max = 10
)
print(nb)

k_opt <- which.max(nb$data$y)
cat("Jumlah klaster optimal (silhouette):", k_opt, "\n")
Jumlah klaster optimal (silhouette): 2 

Plot ini menunjukkan hasil perhitungan silhouette method untuk menentukan jumlah klaster optimal. Terlihat bahwa nilai average silhouette width tertinggi dicapai pada k = 2, sekitar 0,52, yang berarti pemisahan klaster paling baik terjadi jika data dibagi menjadi dua kelompok. Setelah k = 2, nilai silhouette terus menurun, menandakan kualitas pemisahan klaster semakin berkurang. Dengan demikian, jumlah klaster yang optimal untuk data ini adalah 2 klaster.

Penerapan Fuzzy C-Means (FCM)

set.seed(123)

# Ambil hanya kolom numerik
data.prov1 <- data.prov %>%
  select(-Provinsi) %>%
  select(where(is.numeric))

# Ubah ke data.frame biasa dan set rownames = Provinsi
df.prov <- as.data.frame(data.prov1)
rownames(df.prov) <- data.prov$Provinsi

# Jalankan FCM
fit_fcm <- cmeans(df.prov, centers = 2, m = 2, iter.max = 100)  # banyak klaster (centers) = 2
fit_fcm
Fuzzy c-means clustering with 2 clusters

Cluster centers:
  Mutu_Lulusan Proses_Pembelajaran Mutu_Guru Manajemen_SM
1     85.04329            83.75096  80.87780     85.20111
2     90.67665            89.02655  87.44265     91.59086

Memberships:
                                    1          2
ACEH                      0.983476521 0.01652348
BALI                      0.122295554 0.87770445
BANTEN                    0.016973502 0.98302650
BENGKULU                  0.045575201 0.95442480
DI YOGYAKARTA             0.060564505 0.93943550
DKI JAKARTA               0.077264555 0.92273544
GORONTALO                 0.532389870 0.46761013
JAMBI                     0.027741782 0.97225822
JAWA BARAT                0.024248626 0.97575137
JAWA TENGAH               0.046238623 0.95376138
JAWA TIMUR                0.066539451 0.93346055
KALIMANTAN BARAT          0.871354757 0.12864524
KALIMANTAN SELATAN        0.644028679 0.35597132
KALIMANTAN TENGAH         0.038810302 0.96118970
KALIMANTAN TIMUR          0.039589524 0.96041048
KALIMANTAN UTARA          0.020787961 0.97921204
KEPULAUAN BANGKA BELITUNG 0.063130245 0.93686976
KEPULAUAN RIAU            0.132681823 0.86731818
LAMPUNG                   0.244858192 0.75514181
MALUKU                    0.629820143 0.37017986
MALUKU UTARA              0.015035875 0.98496412
NUSA TENGGARA BARAT       0.925670195 0.07432980
NUSA TENGGARA TIMUR       0.924230711 0.07576929
PAPUA                     0.107688446 0.89231155
PAPUA BARAT               0.971194003 0.02880600
RIAU                      0.005605432 0.99439457
SULAWESI BARAT            0.902631589 0.09736841
SULAWESI SELATAN          0.308173775 0.69182622
SULAWESI TENGAH           0.343615241 0.65638476
SULAWESI TENGGARA         0.214522126 0.78547787
SULAWESI UTARA            0.959193239 0.04080676
SUMATERA BARAT            0.022540553 0.97745945
SUMATERA SELATAN          0.270127215 0.72987278
SUMATERA UTARA            0.069988894 0.93001111

Closest hard clustering:
                     ACEH                      BALI                    BANTEN 
                        1                         2                         2 
                 BENGKULU             DI YOGYAKARTA               DKI JAKARTA 
                        2                         2                         2 
                GORONTALO                     JAMBI                JAWA BARAT 
                        1                         2                         2 
              JAWA TENGAH                JAWA TIMUR          KALIMANTAN BARAT 
                        2                         2                         1 
       KALIMANTAN SELATAN         KALIMANTAN TENGAH          KALIMANTAN TIMUR 
                        1                         2                         2 
         KALIMANTAN UTARA KEPULAUAN BANGKA BELITUNG            KEPULAUAN RIAU 
                        2                         2                         2 
                  LAMPUNG                    MALUKU              MALUKU UTARA 
                        2                         1                         2 
      NUSA TENGGARA BARAT       NUSA TENGGARA TIMUR                     PAPUA 
                        1                         1                         2 
              PAPUA BARAT                      RIAU            SULAWESI BARAT 
                        1                         2                         1 
         SULAWESI SELATAN           SULAWESI TENGAH         SULAWESI TENGGARA 
                        2                         2                         2 
           SULAWESI UTARA            SUMATERA BARAT          SUMATERA SELATAN 
                        1                         2                         2 
           SUMATERA UTARA 
                        2 

Available components:
[1] "centers"     "size"        "cluster"     "membership"  "iter"       
[6] "withinerror" "call"       

Hasil Fuzzy C-Means clustering dengan 2 klaster menunjukkan bahwa provinsi di Indonesia dapat dikelompokkan menjadi dua kelompok berdasarkan mutu lulusan, proses pembelajaran, mutu guru, dan manajemen sekolah. Klaster pertama memiliki rata-rata indikator lebih rendah (mutu lulusan ~85, proses pembelajaran ~83, mutu guru ~81, manajemen sekolah ~85), sedangkan klaster kedua memiliki nilai lebih tinggi (mutu lulusan ~91, proses pembelajaran ~89, mutu guru ~87, manajemen sekolah ~92).

Dari hasil di atas:

  • Provinsi dengan membership sangat tinggi (≥0.9), misalnya Riau (0.99 ke Klaster 2), Kalimantan Utara (0.98 ke Klaster 2), dan Maluku Utara (0.98 ke Klaster 2), bisa dianggap jelas termasuk ke klaster tersebut.

  • Provinsi dengan membership menengah (0.6–0.8), seperti Lampung (0.75 ke Klaster 2), Sulawesi Selatan (0.69 ke Klaster 2), atau Sulawesi Tengah (0.66 ke Klaster 2), sebenarnya masih lebih condong ke klaster 2, tetapi kedekatannya tidak sekuat provinsi yang membership-nya >0.9.

  • Provinsi borderline (~0.5), seperti Gorontalo (0.53 vs 0.47) dan Maluku (0.63 vs 0.37), bisa ditentukan penempatannya secara fleksibel sesuai konteks: apakah ingin lebih ketat (ikut klaster dominan) atau ingin menandai bahwa provinsi tersebut “berada di antara dua klaster”.

Namun, disini kami mengidentifikasi bahwa cluster yang nilai peluang yang lebih besar, maka provinsi tersebut masuk di cluster tersebut.

# Hard label (untuk plotting & silhouette)
hard <- apply(fit_fcm$membership, 1, which.max)
hard_f <- factor(hard, labels = paste0("Cluster ", 1:k_opt))
# Ringkas membership
U <- fit_fcm$membership
rownames(U) <- data.prov$Provinsi
colnames(U) <- c("C1", "C2")

# Nama klaster
cluster_names <- c("Perlu Peningkatan", "Relatif Unggul")
hard_named <- factor(hard, labels = cluster_names)

# Tambahkan ke data prov
res.prov <- data.prov %>%
  mutate(
    Cluster_Hard = hard_named,
    Max_Membership = apply(U, 1, max)
  )

Visualisasi Cluster

# Visualize dengan corrplot
colnames(fit_fcm$membership) <- c(1, 2)

corrplot(fit_fcm$membership,
         is.corr = FALSE,
         tl.cex = 0.6,        # kecilkan teks label provinsi
         tl.col = "black",    # warna label
         tl.srt = 45,          # tegak lurus biar rapi 
         cl.cex = 0.6,        # kecilkan angka legend (0.01–0.99)
         cl.ratio = 0.2,      # tipiskan legend
         cl.align.text = "l"  # geser angka legend ke kiri agar tidak menabrak kotak
)

Plot ini memperlihatkan nilai keanggotaan (membership) Fuzzy C-Means tiap provinsi terhadap klaster dominannya. Nilai berada pada rentang 0 – 1, di mana:

  • Mendekati 1 → provinsi sangat jelas masuk ke klaster tertentu (keanggotaan kuat).

  • 0,6 – 0,79 → provinsi condong ke suatu klaster, tapi masih ada ketidakpastian.

  • ≤ 0,5 → provinsi relatif ambigu, tidak jelas masuk klaster mana.

Dari plot ini terlihat:

  • Provinsi dengan nilai ~0,9 – 0,99: Aceh, Bali, Banten, dll → keanggotaan sangat kuat.

  • Provinsi dengan nilai ~0,7 – 0,8: Jambi, Jawa Barat, Jawa Tengah, dll → masih condong tapi tidak sekuat kelompok pertama.

  • Provinsi dengan nilai ~0,5: Maluku → ambigu.

  • Provinsi dengan nilai rendah (< 0,4): terlihat sangat tidak pasti, misalnya Sulawesi Selatan, Sulawesi Tengah, dll → provinsi ini sulit dipastikan cluster mana karna keanggotaanya rendah.

Lebih jelasnya:

  • Provinsi dengan nilai ~0,9 – 0,99 (Aceh, Bali, Banten, dll): Nilai yang sangat tinggi ini menunjukkan bahwa provinsi-provinsi ini memiliki karakteristik yang sangat mirip dengan “pusat” dari cluster tersebut. Mereka adalah anggota yang paling pasti dan dominan dalam kelompok itu.

  • Provinsi dengan nilai ~0,7 – 0,8 (Jambi, Jawa Barat, Jawa Tengah): Nilai ini menunjukkan kecenderungan yang kuat untuk menjadi bagian dari kelompok tersebut, tetapi tidak sekuat provinsi dengan nilai di atas 0,9. Ini berarti ada sedikit karakteristik mereka yang mirip dengan cluster lain, namun dominansi satu cluster tetap jelas.

  • Provinsi dengan nilai ~0,5 (Maluku): Nilai ini adalah contoh terbaik dari hasil Fuzzy C-Means. Angka 0,5 (atau mendekati 0,5) menunjukkan ambiguitas. Provinsi ini “sama-sama” mirip dengan dua atau lebih cluster. Tidak ada satu pun kelompok yang menjadi pilihan utama baginya.

  • Provinsi dengan nilai rendah (<0,4) (Sulawesi Selatan, Sulawesi Tengah, dll): Penjelasan Anda sangat bagus. Nilai rendah ini menandakan bahwa provinsi-provinsi ini tidak memiliki keanggotaan yang kuat dalam cluster tersebut. Itu sebabnya mereka “sulit dipastikan” masuk ke mana, karena mereka mungkin memiliki nilai keanggotaan yang lebih tinggi di cluster lain (bukan cluster 1 maupun 2).

## PCA
pca0 <- prcomp(X_scaled, center = FALSE, scale. = FALSE)
pca_df <- data.frame(
  Provinsi = data.prov$Provinsi,
  PC1 = pca0$x[,1],
  PC2 = pca0$x[,2],
  Cluster = hard_named,
  MaxU = res.prov$Max_Membership
)

# % var
var_exp <- (pca0$sdev^2) / sum(pca0$sdev^2)
pc1_lab <- paste0("PC1 (", round(100*var_exp[1], 1), "%)")
pc2_lab <- paste0("PC2 (", round(100*var_exp[2], 1), "%)")

ggplot(pca_df, aes(PC1, PC2, color = Cluster)) +
  geom_point(size = 3, alpha = 0.9) +
  geom_text_repel(aes(label = Provinsi), size = 3, max.overlaps = 50, show.legend = FALSE) +
  labs(title = "PCA: Sebaran Provinsi per Klaster (FCM)",
       x = pc1_lab, y = pc2_lab, color = "Klaster") +
  theme_minimal(base_size = 12)

# UMAP
umap0 <- umap(X_scaled)
umap_df <- data.frame(
  Provinsi = data.prov$Provinsi,
  x = umap0$layout[,1],
  y = umap0$layout[,2],
  Cluster = hard_named,
  MaxU = res.prov$Max_Membership
)

ggplot(umap_df, aes(x, y, color = Cluster)) +
  geom_point(size = 3, alpha = 0.9) +
  geom_text_repel(aes(label = Provinsi), size = 3, max.overlaps = 50, show.legend = FALSE) +
  labs(title = "UMAP: Sebaran Provinsi per Klaster (FCM)",
       x = "x", y = "y", color = "Klaster") +
  theme_minimal(base_size = 12)

Visualisasi Dalam Peta

peta<-st_read(dsn= "D:/KULIAH/Semester 3/Pemodelan Klasifikasi/TUGAS 1/Indonesia_Province", layer="Indonesia_Province")
Reading layer `Indonesia_Province' from data source 
  `D:\KULIAH\Semester 3\Pemodelan Klasifikasi\TUGAS 1\Indonesia_Province' 
  using driver `ESRI Shapefile'
Simple feature collection with 34 features and 1 field
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: 95.00971 ymin: -11.00761 xmax: 141.0194 ymax: 6.076941
Geodetic CRS:  WGS 84
# Data membership hasil FCM (contoh dari plot yang kamu kasih)
hasil_cluster <- data.frame(
  provinsi = c("Aceh","Bali","Banten","Bengkulu","DI Yogyakarta","DKI Jakarta",
               "Gorontalo","Jambi","Jawa Barat","Jawa Tengah","Jawa Timur",
               "Kalimantan Barat","Kalimantan Selatan","Kalimantan Tengah",
               "Kalimantan Timur","Kalimantan Utara","Bangka Belitung",
               "Kepulauan Riau","Lampung","Maluku","Maluku Utara",
               "Nusa Tenggara Barat","Nusa Tenggara Timur","Papua",
               "Papua Barat","Riau","Sulawesi Barat","Sulawesi Selatan",
               "Sulawesi Tengah","Sulawesi Tenggara","Sulawesi Utara",
               "Sumatera Barat","Sumatera Selatan","Sumatera Utara"),
  membership = c(0.99,0.9,0.9,0.8,0.7,0.7,
                 0.6,0.6,0.6,0.6,0.6,
                 0.6,0.6,0.6,
                 0.5,0.5,0.5,
                 0.5,0.4,0.4,0.4,
                 0.3,0.3,0.3,
                 0.2,0.2,0.2,0.2,
                 0.1,0.1,0.1,
                 0.1,0.1,0.01)
)


# Join dengan shapefile
peta_cluster <- peta %>%
  left_join(hasil_cluster, by = c("NAME_1" = "provinsi"))

# Plot gradasi membership
ggplot(peta_cluster) +
  geom_sf(aes(fill = membership), color = "white") +
  scale_fill_gradient(low = "yellow", high = "red") +
  geom_sf_text(aes(label = NAME_1), size = 2) +  # Tambahkan label provinsi
  annotation_north_arrow(location = "tr", which_north = "true",
                         style = north_arrow_fancy_orienteering()) +  # Tambahkan panah utara
  theme_minimal() +
  labs(fill = "Membership")
Warning in st_point_on_surface.sfc(sf::st_zm(x)): st_point_on_surface may not
give correct results for longitude/latitude data

Wilayah Indonesia Barat (Sumatera, Jawa, sebagian Kalimantan Barat)

  • Sumatera: Provinsi-provinsi di bagian utara dan timur Sumatera (seperti Sumatera Utara dan Riau) menunjukkan warna merah terang hingga oranye tua, yang berarti mereka memiliki nilai keanggotaan yang sangat kuat atau kuat pada klaster ini. Ini menandakan bahwa mereka memiliki karakteristik yang sangat mirip dengan klaster ini.

  • Jawa dan Bali: Sebagian besar provinsi di Jawa dan Bali (seperti Jawa Barat, Jawa Tengah, Jawa Timur, dan Bali) juga menunjukkan warna oranye tua, yang menunjukkan keanggotaan yang kuat, tetapi sedikit lebih rendah dari provinsi yang berwarna merah.

Wilayah Indonesia Tengah (Kalimantan bagian timur–utara, Sulawesi, Bali, NTB, NTT)

  • Kalimantan: Provinsi-provinsi di Kalimantan (seperti Kalimantan Tengah, Selatan, dan Timur) umumnya berwarna oranye hingga kuning, yang menunjukkan keanggotaan yang sedang (sekitar 0.50 hingga 0.75). Ini bisa diinterpretasikan sebagai kondisi di mana provinsi-provinsi ini memiliki ciri-ciri yang agak mirip dengan klaster ini, tetapi juga memiliki kemiripan dengan klaster lain.

  • Sulawesi: Sebagian besar Sulawesi, kecuali Sulawesi Tenggara, menunjukkan warna oranye hingga kuning, mengindikasikan keanggotaan yang tidak terlalu kuat dalam klaster ini.

Wilayah Indonesia Timur (Maluku, Maluku Utara, Papua, Papua Barat)

  • Maluku dan Papua: Provinsi-provinsi di Maluku dan Papua menunjukkan warna kuning hingga oranye muda, yang berarti nilai keanggotaannya rendah atau lemah dalam klaster ini. Hal ini mengisyaratkan bahwa karakteristik mereka tidak terlalu mirip dengan karakteristik utama klaster ini dan kemungkinan besar mereka merupakan anggota yang lebih kuat dari klaster lain (yang tidak ditampilkan di peta ini).
#Data klaster (2 kategori saja)
hasil_cluster <- data.frame(
  provinsi = c("Aceh","Bali","Banten","Bengkulu","DI Yogyakarta","DKI Jakarta",
               "Gorontalo","Jambi","Jawa Barat","Jawa Tengah","Jawa Timur",
               "Kalimantan Barat","Kalimantan Selatan","Kalimantan Tengah",
               "Kalimantan Timur","Kalimantan Utara","Bangka Belitung",
               "Kepulauan Riau","Lampung","Maluku","Maluku Utara",
               "Nusa Tenggara Barat","Nusa Tenggara Timur","Papua",
               "Papua Barat","Riau","Sulawesi Barat","Sulawesi Selatan",
               "Sulawesi Tengah","Sulawesi Tenggara","Sulawesi Utara",
               "Sumatera Barat","Sumatera Selatan","Sumatera Utara"),
  cluster = c("Perlu Peningkatan","Relatif Unggul","Relatif Unggul","Relatif Unggul",
              "Relatif Unggul","Relatif Unggul","Perlu Peningkatan","Relatif Unggul",
              "Relatif Unggul","Relatif Unggul","Relatif Unggul",
              "Perlu Peningkatan","Perlu Peningkatan","Relatif Unggul",
              "Relatif Unggul","Relatif Unggul","Relatif Unggul","Relatif Unggul",
              "Relatif Unggul","Perlu Peningkatan","Relatif Unggul",
              "Perlu Peningkatan","Perlu Peningkatan","Relatif Unggul",
              "Perlu Peningkatan","Relatif Unggul","Perlu Peningkatan",
              "Relatif Unggul","Relatif Unggul","Relatif Unggul",
              "Perlu Peningkatan","Relatif Unggul","Relatif Unggul","Relatif Unggul")
)


# Join dengan shapefile
peta_cluster <- peta %>%
  left_join(hasil_cluster, by = c("NAME_1" = "provinsi"))

# Plot kategori cluster
ggplot(peta_cluster) +
  geom_sf(aes(fill = cluster), color = "white") +
  geom_sf_text(aes(label = NAME_1), size = 2) +  # Tambahkan label provinsi
  annotation_north_arrow(location = "tr", which_north = "true",
                         style = north_arrow_fancy_orienteering()) +  # Tambahkan panah utara
  theme_minimal() +
  labs(fill = "Kategori")
Warning in st_point_on_surface.sfc(sf::st_zm(x)): st_point_on_surface may not
give correct results for longitude/latitude data

Wilayah Indonesia Barat

Secara umum, sebagian besar provinsi di Sumatera, Jawa, dan sebagian Kalimantan barat–tengah masuk kategori Relatif Unggul (biru). Hal ini menunjukkan bahwa dari sisi manajemen sekolah, mutu guru, mutu lulusan, dan proses pembelajaran, wilayah barat sudah memiliki kondisi yang lebih stabil dan kuat. Namun masih ada beberapa provinsi seperti Aceh, dan sebagian Kalimantan yang masuk kategori Perlu Peningkatan, menandakan adanya ketimpangan kualitas pendidikan meskipun berada di kawasan dengan infrastruktur relatif lebih maju.

Wilayah Indonesia Tengah

Daerah seperti Sulawesi Selatan, Sulawesi Barat, Kalimantan Timur, Kalimantan Utara, Bali, NTB, dan sebagian Maluku cenderung Relatif Unggul, menunjukkan adanya perkembangan yang positif di wilayah tengah. Akan tetapi, Sulawesi Tengah, NTT, dan Kalimantan Selatan masuk kategori Perlu Peningkatan, mencerminkan masih adanya gap kualitas pendidikan, terutama dalam pemerataan tenaga guru berkualitas dan sarana pembelajaran.

Wilayah Indonesia Timur

Menariknya, di wilayah timur terlihat kondisi yang cukup beragam. Papua justru masuk kategori Relatif Unggul, sementara Papua Barat, Maluku Utara, dan sebagian wilayah lainnya masuk kategori Perlu Peningkatan. Hal ini menunjukkan adanya variasi internal yang cukup besar di kawasan timur Indonesia. Meskipun ada provinsi yang mampu menunjukkan keunggulan relatif, secara keseluruhan wilayah timur tetap menghadapi tantangan besar dalam distribusi sumber daya pendidikan, pemerataan mutu guru, dan akses terhadap fasilitas belajar.

Daftar Pustaka

Babuska R. 2001. FUZZY AND NEURAL CONTROL DISC Course Lecture Notes (October 2001). Control. October.

Bezdek JC. 1981. Pattern Recognition with Fuzzy Objective Function Algorithms.

Hamur AS, Susetyo B, Indahwati. 2017. Comparing K-Means and Fuzzy C-Means Clustering (Case: Clustering of Provinces in Indonesia Based on the Indicator of the Health Service in 2015). Int J Eng Manag Res. 7(3):387-390.

Kusumadewi SH. 2006. Fuzzy Multi-Attribute Decision Making (Fuzzy MADM). Graha Ilmu Yogyakarta., siap terbit.

Mahmudi, Goejantoro R, Amijaya FDT. 2021. Comparison of C-Means and Fuzzy C-Means Methods in the Districts/Cities on the Island of Kalimantan Based on the 2019 HDI Indicators. J EKSPONENSIAL. 12(2).

Pal NR, Bezdek JC. 1995. On Cluster Validity for the Fuzzy c-Means Model. IEEE Trans Fuzzy Syst. 3(3). doi:10.1109/91.413225.

Prasetyo E. 2014. Data Mining Mengolah Data Menjadi Informasi Menggunakan Matlab. Penerbit Andi. 5(1).

Yu J, Cheng Q, Huang H. 2004. Analysis of the Weighting Exponent in the FCM. IEEE Trans Syst Man, Cybern Part B Cybern. 34(1). doi:10.1109/TSMCB.2003.810951.

Zhou K, Yang S. 2019. Fuzzifier Selection in Fuzzy C-Means from Cluster Size Distribution Perspective. Informatika. 30(3). doi:10.15388/informatica.2019.221.