Provinsi Jawa Barat merupakan provinsi dengan kemunculan kasus pertama di Indonesia dan juga memiliki kasus positif tertinggi kedua di Indonesia. Banyaknya kota/kabupaten di Jawa Barat dapat menyulitkan pemerintah serta satuan tugas pengananan COVID-19 di tingkat provinsi dalam menangani kasus aktif COVID-19.
Perkembangan kasus aktif perlu dianalisis untuk setiap kota/kabupaten karena setiap kabupaten/kota memiliki karakteristik yang berbeda sehingga kabupaten/kota tersebut dikelompokkan berdasarkan karakteristik yang sama untuk mengetahui karakteristik pada setiap kota/kabupaten. Hal tersebut dapat mempermudah pemerintah dalam menangani kasus aktif COVID-19 berdasarkan karakteristiknya masing-masing.
Berdasarkan uraian tersebut maka diperlukan sebuah metode yang dapat mengelompokan kabupaten/kota di Jawa Barat, pada kasus ini akan dilakukan pengelompokan dengan analisis klaster menggunakan metode K-Mean Clustering.
Metode K-Means dari MacQueen (1967) merupakan salah satu metode pengelompokan dengan membagi data menjadi beberapa partisi dengan rata-rata menjadi centroid dalam prosesnya, setiap data yang mendekati rata-rata dari masing-masing partisi maka akan menjadi kelompok, setelah itu akan dilakukan iterasi hingga menemukan hasil yang optimal[1].
Penelitian ini bertujuan untuk mempercepat penanganan COVID-19 yang lebih terarah untuk semua provinsi di Indonesia. Oleh karena itu, pemerintah perlu memahami karakteristik setiap provinsi dan penanganan yang sesuai untuk provinsi tersebut, dan perlu dilakukan peng-klasteran karakteristik tiap provinsi agar penanganan COVID-19 dapat dilakukan dengan tepat. Sehingga dengan hasil peng-klasteran tersebut dapat menjadi pertimbangan kinerja pemerintah dalam penanganan COVID-19 yang lebih efektif dan efisien.
Pada penelitian ini masih terdapat permasalahan outlier, sedangkan algoritma K-Means sensitive terhadap noise dan outlier, sehingga dikhawatirkan ada masalah yang disebabkan objek dengan nilai besar yang menyimpang dari distribusi data.
# Import library untuk data wrangling
library(tidyverse)
library(dplyr)
# Import library untuk visualisasi
library(factoextra) # Visualisasi hasil clustering
library(gridExtra) # Visualisasi karakteristik cluster
library(GGally) # Correlation matrix
library(ggiraphExtra)
library(sf) # Read data map
library(plotly) # Interactive Plotting
Data pada penelitian ini merupakan data Sekunder, yang berisikan informasi mengenai kasus covid-19 bulan July 2022, fasilitas kesehatan, ekonomi dan kependudukan berdasarkan provinsi di Indonesia. Data yang digunakan diperoleh dari situs kawal COVID-19 (https://kawalcovid19.id/) dan Badan Pusat Statistik (https://www.bps.go.id/) yang diakses pada bulan Agustus 2022.
data_covid <- read.csv("(3) Dataset Sebaran Covid July.csv") %>%
janitor::clean_names()
# Cek struktur data
glimpse(data_covid)
## Rows: 34
## Columns: 10
## $ provinsi <chr> "Aceh", "Bali", "Banten", "B~
## $ total_sembuh <dbl> 94.90, 96.10, 97.59, 98.19, ~
## $ total_meninggal <dbl> 5.07, 2.84, 0.94, 1.79, 2.66~
## $ kasus_aktif <dbl> 0.03, 1.07, 1.47, 0.02, 0.57~
## $ jumlah_rumah_sakit_umum_per_1000_penduduk <dbl> 0.0124, 0.0151, 0.0078, 0.01~
## $ jumlah_puskesmas_per_1000_penduduk <dbl> 0.0673, 0.0275, 0.0203, 0.08~
## $ persentase_penduduk_miskin <dbl> 14.64, 4.57, 6.16, 14.62, 11~
## $ gini_ratio <dbl> 0.311, 0.363, 0.363, 0.315, ~
## $ persentase_penduduk <dbl> 1.96, 1.60, 4.42, 0.75, 1.36~
## $ kepadatan_penduduk_per_km_persegi_km2 <int> 92, 755, 1248, 102, 1185, 15~
Definisi Variabel:
Provinsi
: 34 provinsi yang ada di Indonesiatotal_sembuh
: Persentase Total Sembuh dari Covid (Di
bulan Juli)total_meninggal
: Persentase Total Kematian karena Covid
(Di bulan Juli)kasus_aktif
: Persentase Total Kasus Aktif Covid (Di
bulan Juli)jumlah_rumah_sakit_umum_per_1000_penduduk
: Jumlah Rumah
Sakit Umum per 1000 Pendudukjumlah_puskesmas_per_1000_penduduk
: Jumlah Puskesmas
per 1000 Pendudukpersentase_penduduk_miskin
: Persentase Penduduk Miskin
di tiap Provinsigini_ratio
: Gini Ratio (indikator yang menunjukkan
tingkat ketimpangan pengeluaran secara menyeluruh)persentase_penduduk
: Persentase Penduduk (Populasi
Provinsi/Populasi Indonesia)kepadatan_penduduk_per_km_persegi_km2
: Kepadatan
Penduduk per km persegi(km^2)Aspek dari tiap Variabel:
total_sembuh
, total_meninggal
dan
kasus_aktif
: aspek kasus Covid-19.jumlah_rumah_sakit_umum_per_1000_penduduk
dan
jumlah_puskesmas_per_1000_penduduk
: aspek fasilitas
kesehatan.persentase_penduduk_miskin
dan gini_ratio
:
aspek ekonomipersentase_penduduk
dan
kepadatan_penduduk_per_km_persegi_km2
: aspek populasi
pendudukDibagian ini variabel data akan disesuaikan tipe datanya, kemudian
agar memudahkan dalam kodingan tiap variabel akan diganti menjadi X1,
X2, dst, dan untuk variabel provinsi
akan dijadikan sebagai
rowname atau nama dari tiap barisnya.
data_covid <- data_covid %>%
# Ubah nama variabel
select(X1 = total_sembuh, X2 = total_meninggal, X3 = kasus_aktif,
X4 = jumlah_rumah_sakit_umum_per_1000_penduduk, X5 = jumlah_puskesmas_per_1000_penduduk,
X6 = persentase_penduduk_miskin, X7 = gini_ratio, X8 = persentase_penduduk,
X9 = kepadatan_penduduk_per_km_persegi_km2, Provinsi = provinsi)
# Mengubah tipe data
data_covid$X9 <- as.numeric(data_covid$X9)
rownames(data_covid) <- data_covid$Provinsi
glimpse(data_covid)
## Rows: 34
## Columns: 10
## $ X1 <dbl> 94.90, 96.10, 97.59, 98.19, 96.76, 97.09, 96.28, 97.61, 97.53~
## $ X2 <dbl> 5.07, 2.84, 0.94, 1.79, 2.66, 1.16, 3.49, 2.30, 1.40, 5.27, 5~
## $ X3 <dbl> 0.03, 1.07, 1.47, 0.02, 0.57, 1.75, 0.24, 0.09, 1.07, 0.19, 0~
## $ X4 <dbl> 0.0124, 0.0151, 0.0078, 0.0118, 0.0162, 0.0135, 0.0135, 0.010~
## $ X5 <dbl> 0.0673, 0.0275, 0.0203, 0.0881, 0.0326, 0.0297, 0.0787, 0.057~
## $ X6 <dbl> 14.64, 4.57, 6.16, 14.62, 11.34, 4.69, 15.42, 7.62, 8.06, 10.~
## $ X7 <dbl> 0.311, 0.363, 0.363, 0.315, 0.439, 0.423, 0.418, 0.320, 0.417~
## $ X8 <dbl> 1.96, 1.60, 4.42, 0.75, 1.36, 3.89, 0.43, 1.31, 17.89, 13.47,~
## $ X9 <dbl> 92, 755, 1248, 102, 1185, 15978, 105, 72, 1379, 1120, 855, 37~
## $ Provinsi <chr> "Aceh", "Bali", "Banten", "Bengkulu", "DI Yogyakarta", "DKI J~
Definisi Variabel:
X1
: Persentase Total Sembuh dari Covid (Di bulan
Juli)X2
: Persentase Total Kematian karena Covid (Di bulan
Juli)X3
: Persentase Total Kasus Aktif Covid (Di bulan
Juli)x4
: Jumlah Rumah Sakit Umum per 1000 Pendudukx5
: Jumlah Puskesmas per 1000 Pendudukx6
: Persentase Penduduk Miskin di tiap ProvinsiX7
: Gini Ratio (indikator yang menunjukkan tingkat
ketimpangan pengeluaran secara menyeluruh)X8
: Persentase Penduduk (Populasi Provinsi/Populasi
Indonesia)x9
: Kepadatan Penduduk per km persegi(km^2)Provinsi
: 34 provinsi yang ada di IndonesiaEkplorasi data dilakukan agar kita menjadi lebih paham dengan gambaran awal dari data yang akan digunakan.
data_covid %>%
is.na() %>%
colSums()
## X1 X2 X3 X4 X5 X6 X7 X8
## 0 0 0 0 0 0 0 0
## X9 Provinsi
## 0 0
Insight :
summary(data_covid)
## X1 X2 X3 X4
## Min. :94.25 Min. :0.940 Min. :0.0100 Min. :0.006600
## 1st Qu.:96.70 1st Qu.:1.768 1st Qu.:0.0800 1st Qu.:0.008425
## Median :97.47 Median :2.375 Median :0.1500 Median :0.011100
## Mean :97.07 Mean :2.602 Mean :0.3318 Mean :0.011535
## 3rd Qu.:97.70 3rd Qu.:2.840 3rd Qu.:0.3100 3rd Qu.:0.014425
## Max. :98.60 Max. :5.590 Max. :1.7500 Max. :0.018200
## X5 X6 X7 X8
## Min. :0.02030 Min. : 4.450 Min. :0.2360 Min. : 0.2600
## 1st Qu.:0.03480 1st Qu.: 6.258 1st Qu.:0.3140 1st Qu.: 0.8275
## Median :0.05060 Median : 8.525 Median :0.3365 Median : 1.5550
## Mean :0.05939 Mean :10.243 Mean :0.3439 Mean : 2.9418
## 3rd Qu.:0.07717 3rd Qu.:12.223 3rd Qu.:0.3725 3rd Qu.: 2.9500
## Max. :0.14000 Max. :26.560 Max. :0.4390 Max. :17.8900
## X9 Provinsi
## Min. : 9.00 Length:34
## 1st Qu.: 54.25 Class :character
## Median : 103.50 Mode :character
## Mean : 744.26
## 3rd Qu.: 261.00
## Max. :15978.00
Insight :
Terdapat beberapa variabel dengan range yang kecil yaitu Persentase Total Sembuh(X1), Persentase Total Kematian(X2), dan Gini Ratio(X7), yang artinya untuk variabel-variabel tersebut tidak jauh berbeda di tiap provinsinya.
Sebaliknya terdapat variabel-variabel dengan range sangat besar (dapat dilihat dari nilai Max. dan Min.) seperti variabel Persentase Total Kasus Aktif Covid(X3), Persentase Penduduk(X8) dan Kepadatan Penduduk(X9).
Dari informasi diatas dapat diketahui bahwa tiap provinsi memiliki karakteristik tersendiri, maka dari itu provinsi-provinsi akan diklasterkan berdasarkan kemiripan dari karakteristiknya.
# Cek korelasi
ggcorr(data_covid, label = TRUE)
Insight :
Terdapat korelasi yang tinggi dan bersifat negatif antara Persentase Total Sembuh(X1) dengan Persentase Total Kematian(X2) yaitu sebesar -0.9, artinya jika di suatu wilayah memiliki presentase kesembuhan yang tinggi maka wilayah tersebut cenderung memiliki presentase kematian yang rendah.
Terdapat beberapa varibel yang memiliki korelasi yang sedang yaitu -0.5, -0.4, 0.4, 0.5, dan 0.6, sedangkan sisanya berkorelasi rendah.
Terdapat beberapa varibel yang tidak memiliki korelasi, nilai korelasi 0, yaitu antara Total Sembuh(X1) dengan Kepadatan Penduduk(X9) artinya tidak ada pengaruh/hubungan antara persentase kesembuhan di suatu wilayah dengan Kepadatan Penduduk per km persegi(km^2), dan Total Kematian(X2) dengan Persentase Penduduk Miskin(X6) artinya tidak ada pengaruh/hubungan antara persentase kematian di suatu wilayah dengan Persentase Penduduk Miskin.
Variabel-variabel yang memiliki hubungan perlu diteliti apakah terdapat permasalahan multikolinearitas, multikolinearitas ini berarti terdapat hubungan antara variabel independennya.
Pemeriksaan masalah data yang akan dilakukan pada analasis ini adalah pemeriksaan multikolinearitas dan deteksi outlier.
Pengujian multikolinearitas ini untuk melihat apakah ada variabel yang memberikan informasi yang sama dengan variabel lain atau biasa disebut redundan. Untuk menguji multikolinearitas akan dilihat dari nilai Variance Inflation Factor (VIF). Model dikatakan memiliki multikolinearitas jika nilai VIF > 10 yang mengindikasikan bahwa hasil estimasi yang kurang baik[1]. Berikut adalah rumus untuk menghitung nilai VIF: \[ VIF_k = (1-R_k^2)^{-1} \] Dimana: \(R_k^2\): Koefisien determinasi \(X_k\) dengan variabel lainnya yang ada pada model \(k\): 1, 2,…,p; p adalah jumlah variabel
Adapun selain itu, nilai VIF dapat diperolah dengan mencari nilai diagonal pada matrix korelasi data yang sudah di invers-kan. Berikut adalah perhitungan dengan menggunakan function dari R:
CekVIF <- function(data) {
corr = as.matrix(cor(data))
VIF = diag(solve(corr))
return(VIF)
}
CekVIF(data_covid[1:9])
## X1 X2 X3 X4 X5 X6
## 56689.154039 61612.849596 7874.228488 1.957228 3.263877 2.295834
## X7 X8 X9
## 2.142817 1.719329 1.810653
Insight :
CekVIF(data_covid[,c(1,2,4,5,6,7,8,9)])
## X1 X2 X4 X5 X6 X7 X8 X9
## 17.553950 16.661047 1.848965 3.227306 2.292446 1.953803 1.710718 1.792990
CekVIF(data_covid[,c(1,3,4,5,6,7,8,9)])
## X1 X3 X4 X5 X6 X7 X8 X9
## 1.415953 2.129311 1.848558 3.226553 2.291700 1.946732 1.710628 1.790069
CekVIF(data_covid[,c(2,3,4,5,6,7,8,9)])
## X2 X3 X4 X5 X6 X7 X8 X9
## 1.538934 2.438276 1.848586 3.225406 2.291785 1.947056 1.710399 1.790070
Insight :
covid_clean <- data_covid[,c(1,3,4,5,6,7,8,9)]
Outlier adalah pengamatan yang sangat menyimpang dari pengamatan lain sehingga, menimbulkan kecurigaan yang dihasilkan oleh mekanisme yang berbeda[2].Pengecekan outlier akan dilihat melalui visualisasi dari Box-Plot.
# membagi jendela grafik menajdi 2 baris dan 4 kolom
par(mfrow=c(2,4))
# Looping Box-Plot
type <- c("X1", "X3", "X4", "X5", "X6", "X7", "X8", "X9")
for (i in type){
boxplot(covid_clean[,i],
main = paste("Variabel", i))
}
Insight :
Untuk variabel Jumlah Rumah Sakit Umum per 1000 Penduduk(X4), Jumlah Puskesmas per 1000 Penduduk(X5) dan Gini Ratio(X7) tidak terdapat data outlier.
Untuk variabel Persentase Total Sembuh(X1), Persentase Total Kasus Aktif Covid(X3), Persentase Penduduk Miskin(X6), Persentase Penduduk(X8) dan Kepadatan Penduduk(X9) terdapat outlier.
Dalam beberapa penelitian outlier diperlakukan dengan cara dibuang. Tapi memperlakukan outlier sebagai noise dapat mengakibatkan hilangnya informasi penting yang tersembunyi[3]. Di banyak bidang, outlier lebih penting daripada data normal, karena dapat menunjukkan perilaku menyimpang atau awal dari pola baru.
Namun demikian pada variabel Kepadatan Penduduk(X9) terdapat 1 outlier yang sangat besar yang dapat mengakibatkan range dari variabel Kepadatan Penduduk(X9) menjadi sangat besar. Maka dari itu outlier tersebut akan dikeluarkan. Sehingga pada kasus ini hanya akan mengeluarkan data pada Provinsi DKI Jakarta yang memiliki penyimpangan paling jauh dengan data lainnya.
covid_clean %>%
select(X9) %>%
filter(X9 != max(X9)) %>%
boxplot(main = "Variabel X9")
Insight :
covid_fil <- covid_clean %>%
filter(X9 != max(X9))
Selanjutnya akan dilanjutkan kedalam analis clustering dengan pendekatan K-Means Clustering.
Metode K-Means digunakan sebagai alternatif metode klaster untuk data dengan ukuran yang lebih besar. Hal ini dikarenakan metode ini memiliki kecepatan yang lebih tinggi jika dibandingkan dengan metode hirarki. Metode K-Means dapat digunakan untuk menjelaskan algoritma dalam penentuan suatu objek kedalam klaster tertentu berdasarkan rataan terdekat[4]. Dalam prosedur pembentukan K-Means Cluster terdapat langkah-langkah yang dapat dilakukan, antara lain:
Tentukan banyaknya klaster (k) yang akan dibentuk.
Random initialization: meletakkan \(k\) centroid secara random
Cluster assignment: assign masing-masing observasi ke cluster terdekat, berdasarkan perhitungan jarak
Centroid update: menggeser centroid ke rata-rata (means) dari cluster yang terbentuk
Ulangi langkah 3 dan 4 sampai tidak ada observasi yang clusternya berubah lagi
Bertujuan untuk menyamakan skala data atau menghilangkan kontras antar variabel yang memiliki satuan berbeda.
covid_scale <- scale(covid_fil)
Menentukan jumlah klaster paling optimum untuk membagi 33 provinsi yang ada di Indonesia. Pada dasarnya nilai k optimum dapat ditentukan sendiri oleh peneliti, selain itu nilai k dapat ditentukan juga menggunakan bantuan grafik Elbow berikut. Dimana k minimum akan didapat ketika grafik sudah tidak bergerak menurun dengan tajam.
fviz_nbclust(x = covid_scale,
FUNcluster = kmeans,
method = 'wss',
k.max = 10)
RNGkind(sample.kind = "Rounding")
set.seed(100)
covid_kmeans <- kmeans(x = covid_scale, centers = 5)
Visualisasi hasil pembagian klaster:
fviz_cluster(object = covid_kmeans, data=covid_scale)
Insight :
Dari hasil visualisasi nampak jelas bahwa tiap klaster memiliki daerah tertentu yang terpisah dari klaster lain.
Terlihat bahwa klaster 1 dan klaster 3 saling tumpang tindih, namun itu bukan karena wilayah klaster nya sama melainkan keterbatasan dari visualisasi yang ditampilkan, karena hanya dapat menampilkan secara 2 Dimensi.
Agar lebih jelas lagi, berikut adalah rincian dari tiap-tiap klaster dan anggota Provinsinya:
Hasil clustering menggunakan metode K-Means:
table(covid_kmeans$cluster)
##
## 1 2 3 4 5
## 15 3 5 3 7
Rincian cluster tiap-tiap Provinsi:
covid_kmeans$cluster
## Aceh Bali Banten
## 3 4 4
## Bengkulu DI Yogyakarta Gorontalo
## 5 4 5
## Jambi Jawa Barat Jawa Tengah
## 1 2 2
## Jawa Timur Kalimantan Barat Kalimantan Selatan
## 2 1 3
## Kalimantan Tengah Kalimantan Timur Kalimantan Utara
## 3 1 1
## Kepulauan Bangka Belitung Kepulauan Riau Lampung
## 1 1 3
## Maluku Maluku Utara Nusa Tenggara Barat
## 5 1 1
## Nusa Tenggara Timur Papua Papua Barat
## 5 5 5
## Riau Sulawesi Barat Sulawesi Selatan
## 1 1 1
## Sulawesi Tengah Sulawesi Tenggara Sulawesi Utara
## 1 5 1
## Sumatera Barat Sumatera Selatan Sumatera Utara
## 1 3 1
Insight :
Klaster 1 berjumlah 15, yaitu: Jambi, Kalimantan Barat, Kalimantan Timur, Kalimantan Utara, Kepulauan Bangka Belitung, Kepulauan Riau, Maluku Utara, Nusa Tenggara Barat, Riau, Sulawesi Barat, Sulawesi Selatan, Sulawesi Tengah, Sulawesi Utara, Sumatera Barat dan Sumatera Utara.
Klaster 2 berjumlah 3, yaitu: Jawa Barat, Jawa Tengah dan Jawa Timur.
Klaster 3 berjumlah 5, yaitu: Aceh, Kalimantan Selatan, Kalimantan Tengah, Lampung dan Sumatera Selatan.
Klaster 4 berjumlah 3, yaitu: Bali, Banten dan DI Yogyakarta.
Klaster 5 berjumlah 7, yaitu: Bengkulu, Gorontalo, Maluku, Nusa Tenggara Timur, Papua, Papua Barat dan Sulawesi Tenggara.
Dengan menggunakan visualisasi data, dapat memudahkan dalam melakukan profiling.
data_clus <- data_covid %>%
filter(X9 != max(X9))
data_clus$Cluster <- covid_kmeans$cluster
ggRadar(
data = data_clus,
mapping = aes(colours = Cluster),
interactive = T
)
Insight :
Berdasarkan hasil diatas dapat diketahui bahwa karakteristik dari masing-masing klaster adalah sebagai berikut:
Klaster 1 : Memiliki nilai rata-rata Persentase Total Sembuh(X1) dan Jumlah Rumah Sakit Umum per 1000 Penduduk(X4) yang tinggi, sedangkan Persentase Total Kematian(X2), Persentase Total Kasus Aktif Covid(X3), Persentase Penduduk Miskin(X6), Persentase Penduduk(X8) dan Kepadatan Penduduk(X9) yang rendah.
Klaster 2 : Memiliki nilai rata-rata Persentase Total Kematian(X2), Gini Ratio(X7), Persentase Penduduk(X8) dan Kepadatan Penduduk(X9) yang tinggi, sedangkan Persentase Total Sembuh(X1), Jumlah Rumah Sakit Umum per 1000 Penduduk(X4) dan Jumlah Puskesmas per 1000 Penduduk(X5) yang rendah.
Klaster 3 : Memiliki nilai rata-rata Persentase Total Kematian(X2) yang tinggi, sedangkan Persentase Total Sembuh(X1) dan Kepadatan Penduduk(X9) yang rendah.
Klaster 4 : Memiliki nilai rata-rata Persentase Total Kasus Aktif Covid(X3), Jumlah Rumah Sakit Umum per 1000 Penduduk(X4), Gini Ratio(X7) dan Kepadatan Penduduk(X9) yang tinggi, sedangkan Persentase Total Kematian(X2), Jumlah Puskesmas per 1000 Penduduk(X5), Persentase Penduduk Miskin(X6) dan Persentase Penduduk(X8) yang rendah.
Klaster 5 : Memiliki nilai rata-rata Persentase Total Sembuh(X1), Jumlah Rumah Sakit Umum per 1000 Penduduk(X4), Jumlah Puskesmas per 1000 Penduduk(X5), Persentase Penduduk Miskin(X6) dan Gini Ratio(X7) yang tinggi, sedangkan Persentase Total Kematian(X2), Persentase Total Kasus Aktif Covid(X3), Persentase Penduduk(X8) dan Kepadatan Penduduk(X9) yang rendah.
Selain dengan visualisasi, berikut adalah nilai rata-rata dari masing-masing variabel di tiap cluster:
data_profil <- data_clus %>%
select(-Provinsi) %>%
group_by(Cluster) %>%
summarise_all(mean)
round(data_profil, 3)
Insight :
Hasil yang didapat tidak berbeda dengan menggunakan visualisasi sebelumnya, dengan menggunakan summarise data karakteristik dari masing-masing klaster dapat dilihat melalui angka sehingga dapat diketahui nilai tertinggi dan terendah secara detail, berikut hasilnya:
Klaster 1 : Memiliki nilai rata-rata Persentase Total Sembuh(X1) dan Jumlah Rumah Sakit Umum per 1000 Penduduk(X4) yang tinggi, sedangkan Persentase Total Kematian(X2), Persentase Total Kasus Aktif Covid(X3)[-], Persentase Penduduk Miskin(X6), Persentase Penduduk(X8) dan Kepadatan Penduduk(X9) yang rendah.
Klaster 2 : Memiliki nilai rata-rata Persentase Total Kematian(X2), Gini Ratio(X7), Persentase Penduduk(X8)[+] dan Kepadatan Penduduk(X9)[+] yang tinggi, sedangkan Persentase Total Sembuh(X1), Jumlah Rumah Sakit Umum per 1000 Penduduk(X4)[-] dan Jumlah Puskesmas per 1000 Penduduk(X5)[-] yang rendah.
Klaster 3 : Memiliki nilai rata-rata Persentase Total Kematian(X2)[+] yang tinggi, sedangkan Persentase Total Sembuh(X1)[-] dan Kepadatan Penduduk(X9) yang rendah.
Klaster 4 : Memiliki nilai rata-rata Persentase Total Kasus Aktif Covid(X3)[+], Jumlah Rumah Sakit Umum per 1000 Penduduk(X4), Gini Ratio(X7)[+] dan Kepadatan Penduduk(X9) yang tinggi, sedangkan Persentase Total Kematian(X2), Jumlah Puskesmas per 1000 Penduduk(X5), Persentase Penduduk Miskin(X6)[-] dan Persentase Penduduk(X8) yang rendah.
Klaster 5 : Memiliki nilai rata-rata Persentase Total Sembuh(X1)[+], Jumlah Rumah Sakit Umum per 1000 Penduduk(X4)[+], Jumlah Puskesmas per 1000 Penduduk(X5)[+], Persentase Penduduk Miskin(X6)[+] dan Gini Ratio(X7) yang tinggi, sedangkan Persentase Total Kematian(X2)[-], Persentase Total Kasus Aktif Covid(X3), Persentase Penduduk(X8)[-] dan Kepadatan Penduduk(X9)[-] yang rendah.
Dari hasil penglasteran diatas korelasi Persentase Total Sembuh(X1) dan Persentase Total Kematian(X2) terbukti kuat, dimana jika nilai Persentase Total Sembuh(X1) tinggi di suatu provinsi maka untuk nilai Persentase Total Kematian(X2) akan rendah.
Keterangan:
[+] : Tertinggi
[-] : Terendah
Selain itu, kita akan dibandingkan juga dengan nilai tiap variabel dari provinsi DKI Jakarta.
data_jakarta <- data_covid %>%
filter(X9 == max(X9))
data_jakarta
Insight :
Provinsi DKI Jakarta memiliki nilai Persentase Total Sembuh(X1), Persentase Total Kasus Aktif Covid(X3), Jumlah Rumah Sakit Umum per 1000 Penduduk(X4), Gini Ratio(X7) dan Kepadatan Penduduk(X9) yang tinggi, sedangkan Persentase Total Kematian(X2) dan Persentase Penduduk Miskin(X6) yang rendah.
Nilai Kepadatan Penduduk(X9) pada provinsi ini sangat ekstrim, selain itu Persentase Total Kasus Aktif Covid(X3) dan Gini Ratio(X7) memiliki nilai lebih tinggi dari nilai rata-rata klaster yang terbentuk, serta Persentase Total Kematian(X2) dan Persentase Penduduk Miskin(X6) memiliki nilai lebih rendah dari nilai rata-rata klaster yang terbentuk.
Pada bagian ini akan dilihat persebaran provinsi-provinsi pada tiap cluster-nya melalui peta Indonesia.
Akan digunakan data peta Indonesia berbentuk shapefile (.shp) untuk melakukan pemetaan. Cara untuk membaca data dalam file tersebut menggunakan fungsi st_read().
indo <- st_read("gadm41_IDN_1.shp")
## Reading layer `gadm41_IDN_1' from data source
## `D:\S44 Anugrah H\0. Job\Algoritma Data Science School\Project\LBB 1\gadm41_IDN_1.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 34 features and 11 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: 95.00971 ymin: -11.00761 xmax: 141.0194 ymax: 6.076941
## Geodetic CRS: WGS 84
glimpse(indo)
## Rows: 34
## Columns: 12
## $ GID_1 <chr> "IDN.1_1", "IDN.2_1", "IDN.3_1", "IDN.4_1", "IDN.5_1", "IDN.~
## $ GID_0 <chr> "IDN", "IDN", "IDN", "IDN", "IDN", "IDN", "IDN", "IDN", "IDN~
## $ COUNTRY <chr> "Indonesia", "Indonesia", "Indonesia", "Indonesia", "Indones~
## $ NAME_1 <chr> "Aceh", "Bali", "Bangka Belitung", "Banten", "Bengkulu", "Go~
## $ VARNAME_1 <chr> "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", ~
## $ NL_NAME_1 <chr> "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", ~
## $ TYPE_1 <chr> "Propinisi", "Propinisi", "Propinisi", "Propinisi", "Propini~
## $ ENGTYPE_1 <chr> "Province", "Province", "Province", "Province", "Province", ~
## $ CC_1 <chr> "11", "51", "19", "36", "17", "75", "31", "15", "32", "33", ~
## $ HASC_1 <chr> "ID.AC", "ID.BA", "ID.BB", "ID.BT", "ID.BE", "ID.GO", "ID.JK~
## $ ISO_1 <chr> "ID-AC", "ID-BA", "NA", "ID-BT", "ID-BE", "ID-GO", "ID-JK", ~
## $ geometry <MULTIPOLYGON [°]> MULTIPOLYGON (((98.14903 2...., MULTIPOLYGON ((~
Keterangan :
Dalam membuat peta Indonesia berdasarkan Provinsinya hanya
diperlukan variabel NAME_1
alias nama Provinsi dan
geometry
alias titik koordinat dari Provinsi.
NAME_1
: Berisi 34 provinsi yang ada di Indonesia.
Apabila diperhatikan jumlah rows adalah 34 ini sudah sesuai dengan
jumlah Provinsi di Indonesia.
geometry
: Titik koordinat dari tiap Provinsi. Dimana
geometry type-nya MULTIPOLYGON dengan dimensi XY.
Selanjutnya akan dibuat koordinat untuk tiap Provinsi untuk masing-masing dimensi X dan Y:
cent <- indo %>%
select(Provinsi = NAME_1) %>%
st_centroid()
coordinat <- cent[2] %>%
st_coordinates() %>%
as.data.frame()
indo_coor <- indo %>%
select(Provinsi = NAME_1) %>%
add_column(coordinat)
glimpse(indo_coor)
## Rows: 34
## Columns: 4
## $ Provinsi <chr> "Aceh", "Bali", "Bangka Belitung", "Banten", "Bengkulu", "Gor~
## $ geometry <MULTIPOLYGON [°]> MULTIPOLYGON (((98.14903 2...., MULTIPOLYGON (((~
## $ X <dbl> 96.91174, 115.13202, 106.55223, 106.10941, 102.33629, 122.376~
## $ Y <dbl> 4.22406854, -8.36972386, -2.44862217, -6.45641290, -3.5327631~
Setelah didapatkan titik koordinat X dan Y dari tiap Provinsi,
selanjutnya data indo_coor
akan disatukan dengan data hasil
clustering dengan menggunakan K-Means Cluster. Namun agar tidak ada data
yang hilang Provinsi DKI Jakarta akan dimasukan kembali kedalam
dataframe hasil clustering dan akan dilabeli sebagai cluster 0.
data_jakarta$Cluster <- 0
covid_clus <- rbind(data_clus, data_jakarta) %>%
select(Provinsi, Cluster)
Karena data indo_coor
akan disatukan dengan data hasil
clustering (covid_clus
), maka akan dipastikan penulisan
dari Provinsi dari kedua dataframe tersebut harus sama agar tidak
terjadi error.
indo_coor$Provinsi
## [1] "Aceh" "Bali" "Bangka Belitung"
## [4] "Banten" "Bengkulu" "Gorontalo"
## [7] "Jakarta Raya" "Jambi" "Jawa Barat"
## [10] "Jawa Tengah" "Jawa Timur" "Kalimantan Barat"
## [13] "Kalimantan Selatan" "Kalimantan Tengah" "Kalimantan Timur"
## [16] "Kalimantan Utara" "Kepulauan Riau" "Lampung"
## [19] "Maluku" "Maluku Utara" "Nusa Tenggara Barat"
## [22] "Nusa Tenggara Timur" "Papua" "Papua Barat"
## [25] "Riau" "Sulawesi Barat" "Sulawesi Selatan"
## [28] "Sulawesi Tengah" "Sulawesi Tenggara" "Sulawesi Utara"
## [31] "Sumatera Barat" "Sumatera Selatan" "Sumatera Utara"
## [34] "Yogyakarta"
covid_clus$Provinsi
## [1] "Aceh" "Bali"
## [3] "Banten" "Bengkulu"
## [5] "DI Yogyakarta" "Gorontalo"
## [7] "Jambi" "Jawa Barat"
## [9] "Jawa Tengah" "Jawa Timur"
## [11] "Kalimantan Barat" "Kalimantan Selatan"
## [13] "Kalimantan Tengah" "Kalimantan Timur"
## [15] "Kalimantan Utara" "Kepulauan Bangka Belitung"
## [17] "Kepulauan Riau" "Lampung"
## [19] "Maluku" "Maluku Utara"
## [21] "Nusa Tenggara Barat" "Nusa Tenggara Timur"
## [23] "Papua" "Papua Barat"
## [25] "Riau" "Sulawesi Barat"
## [27] "Sulawesi Selatan" "Sulawesi Tengah"
## [29] "Sulawesi Tenggara" "Sulawesi Utara"
## [31] "Sumatera Barat" "Sumatera Selatan"
## [33] "Sumatera Utara" "DKI Jakarta"
Dapat diketahui bahwa terdapat perbedaan penamaan untuk Provinsi Kepulauan Bangka Belitung, DKI Jakarta dan DI Yogyakarta. Oleh karena itu akan dilakukan penyesuaian sebelum datanya disatukan.
indo_coor$Provinsi[3] <- "Kepulauan Bangka Belitung"
indo_coor$Provinsi[7] <- "DKI Jakarta"
indo_coor$Provinsi[34] <- "DI Yogyakarta"
indo_coor$Provinsi
## [1] "Aceh" "Bali"
## [3] "Kepulauan Bangka Belitung" "Banten"
## [5] "Bengkulu" "Gorontalo"
## [7] "DKI Jakarta" "Jambi"
## [9] "Jawa Barat" "Jawa Tengah"
## [11] "Jawa Timur" "Kalimantan Barat"
## [13] "Kalimantan Selatan" "Kalimantan Tengah"
## [15] "Kalimantan Timur" "Kalimantan Utara"
## [17] "Kepulauan Riau" "Lampung"
## [19] "Maluku" "Maluku Utara"
## [21] "Nusa Tenggara Barat" "Nusa Tenggara Timur"
## [23] "Papua" "Papua Barat"
## [25] "Riau" "Sulawesi Barat"
## [27] "Sulawesi Selatan" "Sulawesi Tengah"
## [29] "Sulawesi Tenggara" "Sulawesi Utara"
## [31] "Sumatera Barat" "Sumatera Selatan"
## [33] "Sumatera Utara" "DI Yogyakarta"
Dapat diketahui bahwa sekarang penamaan dari Provinsi di kedua dataframe sudah sama, maka akan dilanjutkan untuk menyatukan/menggabungkan kedua data frame tersebut.
data_join <- indo_coor %>%
left_join(y = covid_clus, key = "Provinsi")
## Joining, by = "Provinsi"
map_indo <- ggplot(data = data_join, aes(text = paste0('Provinsi: ', Provinsi))) +
geom_sf(aes(fill=Cluster)) +
scale_fill_gradient2(low = "blue", high = "red", mid = "yellow", midpoint = 3) +
geom_text(data = data_join, aes(X,Y, label = Provinsi), size = 3, fontface = "bold", col = "navy") +
theme_void() +
labs(title = "Pemetaan Kasus Covid-19 Provinsi-Provinsi di Indonesia",
subtitle = "Menggunakan K-Means Cluster",
caption = "Update: Kasus Covid-19 bulan Juli") +
theme(plot.title = element_text(hjust = 0.5), plot.subtitle = element_text(hjust = 0.5))
map_indo
# # Interactive Map
# ggplotly(map_indo) %>% layout(
# title = paste(
# '<b>Pemetaan Provinsi-Provinsi di Indonesia</b>',
# '<br>',paste("Menggunakan K-Means Cluster"),
# '<br><span style="font-size: 15px;">',
# "Berdasarkan Kasus Covid-19 di bulan Juli"
# ),
# margin = list(t = 100)
# )
Insight :
Berdasarkan hasil persebaran diatas dapat diketahui bahwa :
Klaster 5: Cenderung tersebar di Indonesia bagian Timur.
Klaster 2: Tersebar di pulau Jawa.
Klaster 4: Tersebar antara pulai Jawa-Bali.
Sedangkan untuk Klaster 1 dan Klaster 3 tersebar di selain pulau Jawa-Bali.
Dari hasil analisis dan pembahasan yang telah diuraikan sebelumnya, maka diperoleh kesimpulan sebagai berikut :
Berdasarkan nilai wss diperoleh jumlah klaster untuk kasus ini adalah sebanyak 5. Hal ini diketahui karena penurunan inersia setelah k = 5 tidak lagi signifikan (perubahan nilai nya kecil).
Berdasarkan jumlah k tersebut, maka peng-klasteran dibuat kedalam 5 klaster.Hasil peng-klasteran menunjukan bahwa terdapat 15 provinsi pada klaster satu, 3 provinsi pada klaster dua, 5 provinsi pada klaster tiga, 3 provinsi pada klaster empat dan 7 provinsi pada klaster lima. Rincian dari ke lima klaster adalah pada berikut :
Klaster 1, yaitu provinsi Jambi, Kalimantan Barat, Kalimantan Timur, Kalimantan Utara, Kepulauan Bangka Belitung, Kepulauan Riau, Maluku Utara, Nusa Tenggara Barat, Riau, Sulawesi Barat, Sulawesi Selatan, Sulawesi Tengah, Sulawesi Utara, Sumatera Barat dan Sumatera Utara. Dengan karakteristik: memiliki nilai rata-rata Persentase Total Sembuh Covid-19 dan Jumlah Rumah Sakit Umum per 1000 Penduduk yang tinggi, sedangkan Persentase Total Kematian karena Covid-19, Persentase Total Kasus Aktif Covid-19, Persentase Penduduk Miskin, Persentase Penduduk dan Kepadatan Penduduk per km^2 yang rendah.
Klaster 2, yaitu provinsi Jawa Barat, Jawa Tengah dan Jawa Timur. Dengan karakteristik: memiliki nilai rata-rata Persentase Total Kematian karena Covid, Gini Ratio, Persentase Penduduk dan Kepadatan Penduduk per km^2 yang tinggi, sedangkan Persentase Total Sembuh Covid-19, Jumlah Rumah Sakit Umum per 1000 Penduduk dan Jumlah Puskesmas per 1000 Penduduk yang rendah.
Klaster 3, yaitu provinsi Aceh, Kalimantan Selatan, Kalimantan Tengah, Lampung dan Sumatera Selatan. Dengan karakteristik: memiliki nilai rata-rata Persentase Total Kematian karena Covid yang tinggi, sedangkan Persentase Total Sembuh Covid-19 dan Kepadatan Penduduk per km^2 yang rendah.
Klaster 4, yaitu provinsi Bali, Banten dan DI Yogyakarta. Dengan karakteristik: memiliki nilai rata-rata Persentase Total Kasus Aktif Covid-19, Jumlah Rumah Sakit Umum per 1000 Penduduk, Gini Ratio dan Kepadatan Penduduk per km^2 yang tinggi, sedangkan Persentase Total Kematian karena Covid, Jumlah Puskesmas per 1000 Penduduk, Persentase Penduduk Miskin dan Persentase Penduduk yang rendah.
Klaster 5, yaitu provinsi Bengkulu, Gorontalo, Maluku, Nusa Tenggara Timur, Papua, Papua Barat dan Sulawesi Tenggara. Dengan karakteristik: memiliki nilai rata-rata Persentase Total Sembuh Covid-19, Jumlah Rumah Sakit Umum per 1000 Penduduk, Jumlah Puskesmas per 1000 Penduduk, Persentase Penduduk Miskin dan Gini Ratio yang tinggi, sedangkan Persentase Total Kematian karena Covid, Persentase Total Kasus Aktif Covid-19, Persentase Penduduk dan Kepadatan Penduduk per km^2 yang rendah.
Terdapat provinsi yang tidak tergabung pada 5 klaster diatas, yaitu provinsi DKI Jakarta hal ini dikarekan terdapat perbedaan yang ekstrim dari provinsi ini jika dibandingkan dengan provinsi lainnya.
Berdasarkan hasil peng-klasteran diatas terdapat beberapa saran yang daapat dilakukan agar kasus Covid-19 dapat ditangani secara optimal.
Klaster 1: Penanganan Covid-19 di klaster ini sudah baik ditandai dengan Jumlah Persentase Total Sembuh Covid-19 tinggi sebaliknya Persentase Total Kematian karena Covid-19 dan Persentase Total Kasus Aktif Covid-19 rendah, serta banyaknya Rumah sakit. Kondisi ekonomi di klaster ini juga baik dengan kondisi wilayah yang tidak terlalu padat penduduk. Namun demikian tetap disarankan untuk menaati protokol kesehatan agar terhindar Covid-19.
Klaster 2: Penanganan Covid-19 di klaster ini harus tetap ditingkatkan karena Jumlah Persentase Total Sembuh Covid-19 masih rendah sebaliknya Persentase Total Kematian karena Covid-19 tinggi, serta masih kurangnya fasilitas kesehatan. Kondisi ini juga dapat semakin parah dikarenakan klaster ini cukup padat penduduk dan terdapat ketimpangan ekonomi. Sebaiknya pada klaster ini masih dibatasi untuk berkerumun, serta akses untuk fasilitas kesehatannya ditingkatkan seperti tetap memberikan vaksinasi.
Klaster 3: Penanganan Covid-19 di klaster ini harus tetap ditingkatkan karena Jumlah Persentase Total Sembuh Covid-19 masih rendah sebaliknya Persentase Total Kematian karena Covid-19 tinggi. Penerapan kebijakan jaga jarak pada wilayah diklaster ini akan berdampak karena pada klaster ini tidak terlalu padat penduduk sehingga dapat mencegah penyebaran Covid-19.
Klaster 4: Penanganan Covid-19 di klaster ini cukup baik dengan Jumlah Persentase Total Kematian karena Covid-19 rendah, serta jumlah rumah sakit tinggi. Namun masih tetap harus waspada karena Persentase Total Kasus Aktif Covid-19 masih tinggi dan disarankan untuk tetap melakukan isolasi mandiri jika terkena Covid-19 agar tidak mudah menyebar kembali karena pada klaster ini Kepadatan Penduduk per km^2 yang tinggi.
Klaster 5: Penanganan Covid-19 di klaster ini sudah baik ditandai dengan Jumlah Persentase Total Sembuh Covid-19 tinggi sebaliknya Persentase Total Kematian karena Covid-19 dan Persentase Total Kasus Aktif Covid-19 rendah, serta banyaknya fasilitas kesehatan. Persebaran Covid-19 di klaster ini juga dapat diatasi dengan kebijakan jaga jarak berhubung di klaster ini populasinya rendah dan tidak padat penduduk. Namun peru diperhatikan terkait kegiatan ekonominya karena Persentase Penduduk Miskin dan ketimpangan ekonomi masih tinggi.
[1] Jhonson, R.A. and Wichern, D.W. Applied Multivariate Statistical Analysis 6th Edition. New Jersey: Prentice Hill. Inc, 2005.
[2] Montgomery, D. C., Peck, E. A., & Vining, G. G. Introduction to Linear Regression Analysis, 2012.
[3] Hawkins, Douglas M. Identification of outliers. Vol. 11. London: Chapman and Hall, 1980.
[4] Jiang, S. Y., & An, Q. B. Clustering-based outlier detection method, 2008.