Ketimpangan distribusi sarana dan tenaga kesehatan antar kecamatan di Provinsi DKI Jakarta masih menjadi persoalan yang perlu diperhatikan karena berdampak pada pemerataan akses layanan kesehatan masyarakat. Analisis ini bertujuan untuk mengelompokkan 44 kecamatan di Provinsi DKI Jakarta berdasarkan ketersediaan sarana dan tenaga kesehatan menggunakan metode Hierarchical Cluster Analysis (HCA), dengan jarak Euclidean dan pemilihan metode linkage terbaik berdasarkan koefisien korelasi cophenetic.
Data yang digunakan merupakan data sekunder dari publikasi Badan Pusat Statistik (BPS) masing-masing Kota/Kabupaten di Provinsi DKI Jakarta, dengan variabel sebagai berikut:
Tahapan analisis yang dilakukan meliputi statistika deskriptif, pengecekan multikolinieritas, standarisasi data, perhitungan jarak Euclidean, pemilihan metode linkage terbaik melalui koefisien korelasi cophenetic, penentuan jumlah klaster optimal melalui validitas klaster, hingga interpretasi karakteristik masing-masing klaster.
library(psych)
library(GPArotation)
library(clValid)
library(ggplot2)
library(cluster)
library(factoextra)
library(tidyverse)
library(car)
library(readxl)
library(proxy)
data <- read_excel("Data Fasilitas Kesehatan AKHIR.xlsx", sheet = 1)
head(data)
## # A tibble: 6 × 8
## Kecamatan `Rumah Sakit` Puskesmas Apotek Poliklinik `Tenaga Medis`
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Tanah Abang 4 1 12 74 382
## 2 Menteng 10 0 16 56 226
## 3 Senen 7 1 10 27 2656
## 4 Johar Baru 1 2 17 14 90
## 5 Cempaka Putih 7 1 14 35 211
## 6 Kemayoran 3 1 22 37 210
## # ℹ 2 more variables: `Tenaga Keperawatan` <dbl>, `Tenaga Kebidanan` <dbl>
datanew <- as.data.frame(data[,2:8])
rownames(datanew) <- data$Kecamatan
head(datanew)
## Rumah Sakit Puskesmas Apotek Poliklinik Tenaga Medis
## Tanah Abang 4 1 12 74 382
## Menteng 10 0 16 56 226
## Senen 7 1 10 27 2656
## Johar Baru 1 2 17 14 90
## Cempaka Putih 7 1 14 35 211
## Kemayoran 3 1 22 37 210
## Tenaga Keperawatan Tenaga Kebidanan
## Tanah Abang 698 117
## Menteng 943 174
## Senen 4159 277
## Johar Baru 109 75
## Cempaka Putih 900 123
## Kemayoran 548 127
Data terdiri dari 44 kecamatan di Provinsi DKI Jakarta dengan 7 variabel sarana dan tenaga kesehatan sebagaimana disebutkan pada bagian Pendahuluan.
summary(datanew)
## Rumah Sakit Puskesmas Apotek Poliklinik
## Min. : 0.000 Min. :0.00 Min. : 0.00 Min. : 0.00
## 1st Qu.: 2.000 1st Qu.:1.00 1st Qu.:16.75 1st Qu.: 21.75
## Median : 4.000 Median :1.00 Median :24.00 Median : 35.50
## Mean : 4.205 Mean :1.25 Mean :26.34 Mean : 37.27
## 3rd Qu.: 7.000 3rd Qu.:1.00 3rd Qu.:31.75 3rd Qu.: 48.50
## Max. :10.000 Max. :5.00 Max. :59.00 Max. :103.00
## Tenaga Medis Tenaga Keperawatan Tenaga Kebidanan
## Min. : 16.0 Min. : 33.0 Min. : 20.0
## 1st Qu.: 204.2 1st Qu.: 437.5 1st Qu.:122.8
## Median : 363.0 Median : 714.5 Median :166.0
## Mean : 520.4 Mean : 873.9 Mean :163.7
## 3rd Qu.: 618.8 3rd Qu.:1042.5 3rd Qu.:207.5
## Max. :2656.0 Max. :4159.0 Max. :354.0
describe(datanew)
## vars n mean sd median trimmed mad min max range
## Rumah Sakit 1 44 4.20 2.62 4.0 4.08 2.97 0 10 10
## Puskesmas 2 44 1.25 0.97 1.0 1.08 0.00 0 5 5
## Apotek 3 44 26.34 14.83 24.0 25.47 11.12 0 59 59
## Poliklinik 4 44 37.27 21.66 35.5 36.25 20.76 0 103 103
## Tenaga Medis 5 44 520.39 507.03 363.0 433.58 258.71 16 2656 2640
## Tenaga Keperawatan 6 44 873.86 806.83 714.5 733.50 490.00 33 4159 4126
## Tenaga Kebidanan 7 44 163.66 74.04 166.0 162.64 64.49 20 354 334
## skew kurtosis se
## Rumah Sakit 0.41 -0.77 0.39
## Puskesmas 2.66 7.73 0.15
## Apotek 0.55 -0.53 2.24
## Poliklinik 0.63 0.38 3.27
## Tenaga Medis 2.13 5.40 76.44
## Tenaga Keperawatan 2.08 5.10 121.63
## Tenaga Kebidanan 0.15 -0.20 11.16
Ringkasan hasil statistika deskriptif:
| Variabel | Minimum | Rata-rata | Maksimum |
|---|---|---|---|
| Jumlah Rumah Sakit | 0 | 4,21 | 10 |
| Jumlah Puskesmas | 0 | 1,25 | 5 |
| Jumlah Apotek | 0 | 24 | 59 |
| Jumlah Poliklinik | 0 | 37,27 | 103 |
| Jumlah Tenaga Medis | 16 | 520,4 | 2656 |
| Jumlah Tenaga Keperawatan | 33 | 873,9 | 4159 |
| Jumlah Tenaga Kebidanan | 20 | 163,7 | 354 |
Rata-rata setiap kecamatan di DKI Jakarta memiliki sekitar 4 rumah sakit, 1 puskesmas, 24 apotek, dan 37 poliklinik. Kecamatan Menteng memiliki jumlah rumah sakit terbanyak (10 unit), sedangkan Kepulauan Seribu Selatan tidak memiliki rumah sakit sama sekali. Kecamatan Sawah Besar dan Penjaringan memiliki puskesmas terbanyak (5 unit), sementara Menteng, Koja, dan Setiabudi tidak memiliki puskesmas. Duren Sawit unggul pada jumlah apotek (59 unit) dan tenaga kebidanan (354 jiwa), sedangkan Kebayoran Baru memiliki poliklinik terbanyak (103 unit). Untuk tenaga medis dan tenaga keperawatan, Kecamatan Senen mencatat jumlah tertinggi (2656 tenaga medis dan 4159 tenaga keperawatan), sedangkan Kepulauan Seribu Utara memiliki jumlah tenaga medis dan keperawatan paling sedikit.
Sebelum melakukan analisis klaster, perlu dipastikan bahwa tidak terdapat multikolinieritas yang serius antar variabel. Pengecekan dilakukan dengan melihat matriks korelasi Pearson antar variabel, di mana suatu variabel dikatakan bermasalah jika memiliki korelasi ≥ 0,8 dengan variabel lain.
model_vif <- lm(datanew[,1] ~ ., data = datanew)
vif(model_vif)
## `Rumah Sakit` Puskesmas Apotek
## 2.085551 1.048260 1.766053
## Poliklinik `Tenaga Medis` `Tenaga Keperawatan`
## 1.604642 3.214498 5.491275
## `Tenaga Kebidanan`
## 3.165229
cor_matrix <- cor(datanew)
cor_matrix
## Rumah Sakit Puskesmas Apotek Poliklinik Tenaga Medis
## Rumah Sakit 1.0000000 -0.1582625 0.29921658 0.4108802 0.4873818
## Puskesmas -0.1582625 1.0000000 -0.11142758 -0.1309599 -0.1215662
## Apotek 0.2992166 -0.1114276 1.00000000 0.2652692 0.1535442
## Poliklinik 0.4108802 -0.1309599 0.26526922 1.0000000 0.1318816
## Tenaga Medis 0.4873818 -0.1215662 0.15354417 0.1318816 1.0000000
## Tenaga Keperawatan 0.5892066 -0.1460265 -0.03190082 0.1347002 0.7958191
## Tenaga Kebidanan 0.6134333 -0.2026515 0.41521088 0.5214179 0.4571255
## Tenaga Keperawatan Tenaga Kebidanan
## Rumah Sakit 0.58920656 0.6134333
## Puskesmas -0.14602652 -0.2026515
## Apotek -0.03190082 0.4152109
## Poliklinik 0.13470019 0.5214179
## Tenaga Medis 0.79581908 0.4571255
## Tenaga Keperawatan 1.00000000 0.5956476
## Tenaga Kebidanan 0.59564759 1.0000000
Interpretasi: Seluruh nilai korelasi antar variabel berada di bawah 0,8 (nilai tertinggi terdapat pada pasangan \(X_5\) dan \(X_6\), yaitu 0,79). Artinya tidak ditemukan indikasi multikolinieritas yang serius, sehingga ketujuh variabel (\(X_1\)–\(X_7\)) dapat digunakan seluruhnya dalam analisis klaster tanpa perlu direduksi.
Karena ketujuh variabel memiliki satuan pengukuran yang berbeda (unit fasilitas dan jumlah jiwa), data perlu distandarisasi ke dalam bentuk z-score agar tidak ada variabel yang mendominasi proses pengelompokan hanya karena skalanya lebih besar.
datastand <- scale(datanew)
rownames(datastand) <- rownames(datanew)
Jarak Euclidean digunakan untuk mengukur tingkat kemiripan antar kecamatan berdasarkan data yang telah distandarisasi. Semakin kecil jarak antar dua kecamatan, semakin mirip karakteristik ketersediaan sarana dan tenaga kesehatannya.
jarak <- dist(datastand, method = "euclidean")
Koefisien korelasi cophenetic digunakan untuk menentukan metode linkage terbaik dari lima metode agglomerative: single, average, complete, centroid, dan Ward. Semakin nilainya mendekati 1, semakin baik metode tersebut merepresentasikan struktur jarak data asli.
d1 <- dist(datanew, method = "euclidean")
## Single Linkage
hc_single <- hclust(d1, method = "single")
cors <- cor(d1, cophenetic(hc_single))
## Average Linkage
hc_average <- hclust(d1, method = "average")
corave <- cor(d1, cophenetic(hc_average))
## Complete Linkage
hc_complete <- hclust(d1, method = "complete")
corcomp <- cor(d1, cophenetic(hc_complete))
## Centroid Linkage
hc_centroid <- hclust(d1, method = "centroid")
corcen <- cor(d1, cophenetic(hc_centroid))
## Ward Linkage
hc_ward <- hclust(d1, method = "ward.D")
corward <- cor(d1, cophenetic(hc_ward))
# Gabungkan hasil korelasi cophenetic
KorCop <- data.frame(
Single = cors,
Average = corave,
Complete = corcomp,
Centroid = corcen,
Ward = corward
)
KorCop
## Single Average Complete Centroid Ward
## 1 0.9219845 0.9293642 0.845533 0.9167857 0.7691483
Hasil koefisien korelasi cophenetic:
| Metode | Koefisien Korelasi |
|---|---|
| Single Linkage | 0,9220 |
| Average Linkage | 0,9294 |
| Complete Linkage | 0,8455 |
| Centroid Method | 0,9168 |
| Ward Method | 0,7691 |
Metode Average Linkage memiliki koefisien korelasi cophenetic tertinggi, yaitu 0,929 (92,9%), sehingga dipilih sebagai metode terbaik dan digunakan pada tahap pengelompokan selanjutnya.
Penentuan jumlah klaster optimal dilakukan menggunakan tiga indeks validitas: Connectivity (semakin kecil semakin baik), Dunn Index (semakin besar semakin baik), dan Silhouette Index (semakin mendekati 1 semakin baik).
inval <- clValid(datastand, 2:6, clMethods = "hierarchical",
validation = "internal", metric = "euclidean", method = "average")
summary(inval)
##
## Clustering Methods:
## hierarchical
##
## Cluster sizes:
## 2 3 4 5 6
##
## Validation Measures:
## 2 3 4 5 6
##
## hierarchical Connectivity 5.9813 10.5893 19.1536 27.3472 29.1806
## Dunn 0.3320 0.3200 0.2615 0.3236 0.3236
## Silhouette 0.3828 0.3453 0.2257 0.2739 0.2639
##
## Optimal Scores:
##
## Score Method Clusters
## Connectivity 5.9813 hierarchical 2
## Dunn 0.3320 hierarchical 2
## Silhouette 0.3828 hierarchical 2
optimalScores(inval)
## Score Method Clusters
## Connectivity 5.9813492 hierarchical 2
## Dunn 0.3319573 hierarchical 2
## Silhouette 0.3828209 hierarchical 2
Hasil validitas klaster:
| Indeks Validitas | k=2 | k=3 | k=4 | k=5 | k=6 |
|---|---|---|---|---|---|
| Connectivity | 5,98 | 10,59 | 19,15 | 27,35 | 29,18 |
| Dunn | 0,33 | 0,32 | 0,26 | 0,32 | 0,32 |
| Silhouette | 0,38 | 0,34 | 0,23 | 0,27 | 0,26 |
Ketiga indeks validitas secara konsisten menunjukkan bahwa jumlah klaster optimal adalah k = 2, dengan nilai Connectivity terkecil (5,98), nilai Dunn Index terbesar (0,33), dan nilai Silhouette Index tertinggi (0,38) di antara jumlah klaster yang diuji.
hirave <- hclust(dist(datastand), method = "average")
plot(hirave, labels = rownames(datastand), hang = 1,
main = "Dendogram Cluster Kecamatan",
xlab = "Kecamatan", ylab = "Jarak", col = "blue")
Proses penggabungan diawali dari kecamatan-kecamatan dengan jarak terdekat, misalnya Jatinegara dan Kemayoran yang bergabung pertama kali pada jarak 0,364, kemudian Kepulauan Seribu Utara dan Kepulauan Seribu Selatan pada jarak 0,387. Proses ini berlanjut hingga seluruh 44 kecamatan tergabung menjadi satu klaster besar. Garis potong (cut-off) ditentukan pada jarak sekitar 4,8, karena pada titik tersebut masih terlihat pemisahan yang jelas antara dua kelompok besar sebelum seluruh kecamatan menyatu menjadi satu klaster.
anggotaave <- data.frame(
Kecamatan = rownames(datastand),
Cluster = cutree(hirave, k = 2)
)
anggotaave
## Kecamatan Cluster
## Tanah Abang Tanah Abang 1
## Menteng Menteng 1
## Senen Senen 2
## Johar Baru Johar Baru 1
## Cempaka Putih Cempaka Putih 1
## Kemayoran Kemayoran 1
## Sawah Besar Sawah Besar 1
## Gambir Gambir 1
## Penjaringan Penjaringan 1
## Pademangan Pademangan 1
## Tanjung Priok Tanjung Priok 1
## Koja Koja 1
## Kelapa Gading Kelapa Gading 1
## Cilincing Cilincing 1
## Pasar Rebo Pasar Rebo 1
## Ciracas Ciracas 1
## Cipayung Cipayung 1
## Makasar Makasar 1
## Kramat Jati Kramat Jati 1
## Jatinegara Jatinegara 1
## Duren Sawit Duren Sawit 1
## Cakung Cakung 1
## Pulo Gadung Pulo Gadung 1
## Matraman Matraman 1
## Kembangan Kembangan 1
## Kebon Jeruk Kebon Jeruk 1
## Palmerah Palmerah 2
## Grogol Petamburan Grogol Petamburan 1
## Tambora Tambora 1
## Taman Sari Taman Sari 1
## Cengkareng Cengkareng 1
## Kali Deres Kali Deres 1
## Jagakarsa Jagakarsa 1
## Pasar Minggu Pasar Minggu 1
## Cilandak Cilandak 2
## Pesanggrahan Pesanggrahan 1
## Kebayoran Lama Kebayoran Lama 1
## Kebayoran Baru Kebayoran Baru 1
## Mampang Prapatan Mampang Prapatan 1
## Pancoran Pancoran 1
## Tebet Tebet 1
## Setia Budi Setia Budi 1
## Kepulauan Seribu Selatan Kepulauan Seribu Selatan 1
## Kepulauan Seribu Utara Kepulauan Seribu Utara 1
Pemotongan dendrogram pada jarak 4,8 menghasilkan dua klaster utama:
clus_hier <- eclust(datastand, FUNcluster = "hclust",
k = 2, hc_method = "average", graph = TRUE)
fviz_dend(clus_hier, rect = TRUE, cex = 0.5)
idclus <- clus_hier$cluster
aggregate(datanew, list(Cluster = idclus), mean)
## Cluster Rumah Sakit Puskesmas Apotek Poliklinik Tenaga Medis
## 1 1 4.024390 1.268293 26.65854 38.68293 420.9512
## 2 2 6.666667 1.000000 22.00000 18.00000 1879.3333
## Tenaga Keperawatan Tenaga Kebidanan
## 1 710.8049 158.5366
## 2 3102.3333 233.6667
Rata-rata variabel tiap klaster:
| Variabel | Klaster 1 | Klaster 2 |
|---|---|---|
| Jumlah Rumah Sakit | 4,02 | 6,70 |
| Jumlah Puskesmas | 1,27 | 1,00 |
| Jumlah Apotek | 26,87 | 22,00 |
| Jumlah Poliklinik | 38,68 | 18,00 |
| Jumlah Tenaga Medis | 420,95 | 1879,30 |
| Jumlah Tenaga Keperawatan | 710,81 | 3102,30 |
| Jumlah Tenaga Kebidanan | 158,54 | 233,73 |
Klaster 1 (41 kecamatan) memiliki rata-rata jumlah puskesmas, apotek, dan poliklinik yang lebih tinggi dibandingkan Klaster 2, sehingga menggambarkan kecamatan-kecamatan dengan layanan kesehatan dasar yang relatif merata namun dengan jumlah rumah sakit dan tenaga kesehatan yang lebih terbatas.
Klaster 2 (Senen, Palmerah, dan Cilandak) justru unggul pada rata-rata jumlah rumah sakit serta seluruh kategori tenaga kesehatan (tenaga medis, keperawatan, dan kebidanan). Sebagai gambaran, Kecamatan Senen tercatat memiliki 2656 tenaga medis dan 4159 tenaga keperawatan, sedangkan Kecamatan Palmerah memiliki 3011 tenaga keperawatan. Ketiga kecamatan ini berperan sebagai pusat layanan kesehatan dengan fasilitas dan tenaga kesehatan yang jauh lebih lengkap, sejalan dengan keberadaan rumah sakit besar seperti RSUP Fatmawati, RS Bhakti Mulia, dan RS Dr. Cipto Mangunkusumo di wilayah-wilayah tersebut.
Berdasarkan koefisien korelasi cophenetic, metode Average Linkage terpilih sebagai metode terbaik dengan nilai korelasi 0,929, dan hasil validitas internal klaster (Connectivity, Dunn, dan Silhouette) secara konsisten menunjukkan jumlah klaster optimal adalah k = 2.
Hasil pengelompokan menunjukkan adanya ketimpangan distribusi sarana dan tenaga kesehatan antar kecamatan di Provinsi DKI Jakarta: - Klaster 1 (41 kecamatan) unggul pada rata-rata jumlah puskesmas, apotek, dan poliklinik — mencerminkan pemerataan layanan kesehatan dasar di sebagian besar wilayah. - Klaster 2 (Senen, Palmerah, Cilandak) unggul pada rata-rata jumlah rumah sakit serta tenaga kesehatan (medis, keperawatan, kebidanan) — mencerminkan konsentrasi fasilitas kesehatan rujukan/lanjutan pada wilayah tertentu saja.
Hasil ini dapat dijadikan bahan pertimbangan bagi pemerintah daerah dalam merumuskan kebijakan pemerataan sarana dan tenaga kesehatan, khususnya bagi kecamatan-kecamatan pada Klaster 1 yang masih terbatas jumlah rumah sakit dan tenaga kesehatannya. Untuk penelitian selanjutnya, disarankan menambahkan variabel lain serta mempertimbangkan metode klaster berbeda agar hasil pengelompokan lebih tajam.