Pandemi COVID-19 merupakan bentuk bahaya yang memiliki potensi mengancam segala aspek kehidupan masyarakat seperti sosial, kesehatan, dan psikologis. Dampak pada masyarakat Indonesia tidak berbeda jauh dengan negara lain yang juga mengalami COVID 19. Kondisi kerentanan sosial menjadi realitas nyata yang terjadi pada masyarakat dalam menghadapi pandemi COVID-19.
Pada era pemulihan ekonomi ini, kerentanan dapat dipandang dari dua arah. Dimana sisi positif kerentanan ini dapat kita pandang sebagai suatu masalah yang dapat diselesaikan dalam ranah pihak CSR. Di sinilah peran industri untuk pro aktif dalam mencari peluang dengan memanfaatkan kerentanan yang ditimbulkan oleh COVID-19. Sementara sisi lainnya, kerentanan ini dapat kita pandang sebagai permasalahan yang disebabkan oleh berbagai aspek yang diakibatkan oleh COVID-19, sehingga dapat ditanggulangi dengan mengintegrasikan perencanaan penanggulangan resiko dengan program pengembangan lainnya.
#data cleaning
library(dplyr)
library(readxl) # untuk membaca data excel
library(readr) # untuk membaca data
library(tidyverse) # untuk data manipulation
library(stringr) # untuk persiapan data
#data analysis
library(GGally) # untuk membuat matriks korelasi
library(psych) # untuk melakukan analisis KMO
library(GPArotation) # untuk melakukan factor analysis
library(factoextra) # untuk mengekstrak dan visualisasi Hasil analisis data multivariat
library(BAMMtools) # untuk membuat natural breaks pada pemetaan
library(ppclust) # untuk membuat Probabilistic and Possibilistic Cluster Analysis
#data visualization
library(gridExtra) # untuk membuat mixed plot dalam satu hasil
library(leaflet) # untuk visualisasi interaktifBerikut adalah daftar kecamatan dengan informasi detail demografi penduduk yang juga meliputi ketersediaan Rumah Sakit dan jumlah penderita Covid.
covid <- readxl::read_xlsx("dataset/covid_LBB.xlsx")
head(covid)Cleansing & Exploratory Data Analysis
Memastikan tidak adanya data NA dan Null value
anyNA(covid)## [1] FALSE
is.null(covid)## [1] FALSE
colSums(is.na(covid))## Kecamatan lansia disabilitas
## 0 0 0
## kepadatan_penduduk penduduk_nonmuslim pendidikan_rendah
## 0 0 0
## RS_covid rasio_ketergantungan WNA
## 0 0 0
## RS tenaga_kesehatan apotek
## 0 0 0
## puskesmas balita positif_cov
## 0 0 0
## rawat_cov isoman_cov
## 0 0
anyDuplicated(covid)## [1] 0
summary(covid)## Kecamatan lansia disabilitas kepadatan_penduduk
## Length:44 Min. : 5.873 Min. :0.01019 Min. : 11877
## Class :character 1st Qu.: 7.844 1st Qu.:0.02388 1st Qu.: 87832
## Mode :character Median : 8.845 Median :0.03287 Median :123268
## Mean : 8.997 Mean :0.05443 Mean :144509
## 3rd Qu.: 9.776 3rd Qu.:0.04140 3rd Qu.:167995
## Max. :13.219 Max. :0.38417 Max. :596126
## penduduk_nonmuslim pendidikan_rendah RS_covid rasio_ketergantungan
## Min. : 0.04063 Min. :0.2687 Min. :0.000 Min. :35.00
## 1st Qu.: 9.05234 1st Qu.:0.3334 1st Qu.:1.000 1st Qu.:39.26
## Median :12.11404 Median :0.3501 Median :2.000 Median :39.77
## Mean :16.59378 Mean :0.3751 Mean :2.159 Mean :39.89
## 3rd Qu.:19.81415 3rd Qu.:0.4014 3rd Qu.:3.000 3rd Qu.:40.36
## Max. :50.68831 Max. :0.5982 Max. :5.000 Max. :47.33
## WNA RS tenaga_kesehatan apotek
## Min. :0.000000 Min. :0.000 Min. : 100 Min. : 0.00
## 1st Qu.:0.007346 1st Qu.:1.000 1st Qu.:1251 1st Qu.: 39.00
## Median :0.035313 Median :1.500 Median :1433 Median : 48.00
## Mean :0.049053 Mean :1.818 Mean :1434 Mean : 52.27
## 3rd Qu.:0.068665 3rd Qu.:3.000 3rd Qu.:1614 3rd Qu.: 64.75
## Max. :0.206289 Max. :7.000 Max. :2906 Max. :121.00
## puskesmas balita positif_cov rawat_cov
## Min. : 3.00 Min. : 3.816 Min. : 242 Min. : 0.00
## 1st Qu.: 6.00 1st Qu.: 5.583 1st Qu.: 5698 1st Qu.: 49.75
## Median : 7.50 Median : 6.496 Median : 7966 Median : 62.50
## Mean : 7.75 Mean : 9.139 Mean : 7587 Mean : 65.61
## 3rd Qu.: 9.25 3rd Qu.: 8.814 3rd Qu.: 9622 3rd Qu.: 77.00
## Max. :14.00 Max. :51.532 Max. :14329 Max. :142.00
## isoman_cov
## Min. : 0.00
## 1st Qu.: 41.75
## Median : 62.50
## Mean : 67.93
## 3rd Qu.: 88.50
## Max. :175.00
Insight: Berdasarkan hasil summary(covid):
covid %>%
filter(balita == max(balita)) %>%
select(c(Kecamatan, balita))ggpairs(covid[,c(2:17)], upper = list(continuous = wrap("cor", size=2)))+
theme(axis.text = element_text(colour = "black", size = 4),
strip.text = element_text(size = 5))Insight: - Nilai korelasi variabel lansia dan penduduk_nonmuslim besarnya adalah 0.591. Hal ini mengindikasikan adanya hubungan yang kuat antara 2 variabel tersebut. - lansia, positif_cov dan tenaga_kesehatan cenderung memiliki distribusi normal. Variabel yang lain memiliki distribusi yg skewed
Memeriksa korelasi antar variabel
ggcorr(covid, label = T, label_round = 3, label_size = 2)Insight: Variabel-variabel yang kita punya semuanya miliki nilai korelasi (tidak ada yang tidak berhubungan) dan juga tidak ada yang melebihi 0.85 (batas atas). Sehingga asumsi multikolinearitas terpenuhi.
KMO-MSA (proporsi korelasi) adalah uji yang dilakukan untuk menentukan kelayakan (appropriateness) dari suatu analisis faktor yang akan dilakukan.
Skala uji KMO-MSA berkisar antara 0 sampai 1.
Jika nilai KMO-MSA lebih rendah dari 0.5, maka analisis faktor tidak layak dilakukan. Sedangkan jika nilai KMO lebih besar dari 0.5, maka analisis faktor layak dilakukan.
covid_cor <- cor(covid[,2:17])KMO() dari library psych menggunakan matriks korelasi yang sudah dibuat sebelumnyacovid_KMO <- KMO(covid_cor)
covid_KMO## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = covid_cor)
## Overall MSA = 0.56
## MSA for each item =
## lansia disabilitas kepadatan_penduduk
## 0.42 0.33 0.43
## penduduk_nonmuslim pendidikan_rendah RS_covid
## 0.26 0.47 0.57
## rasio_ketergantungan WNA RS
## 0.78 0.45 0.64
## tenaga_kesehatan apotek puskesmas
## 0.44 0.65 0.69
## balita positif_cov rawat_cov
## 0.60 0.69 0.74
## isoman_cov
## 0.71
Insight: - Untuk nilai overall MSA : 0.56 -> data yang kita miliki sudah cukup untuk dilakukan analisis faktor
sehingga coba didrop MSA pada kolom-kolom yang besarannya dibawah 0.5
1.1 matriks korelasi tanpa kolom MSA yang rendah (setelah dilakukan langkah ini, RS_covid menunjukan besaran MSA dibawah 0.5 sehingga ikut didrop juga)
covid_selected <- covid %>%
select(c(rasio_ketergantungan, RS, apotek, puskesmas, balita, positif_cov, rawat_cov, isoman_cov))
#kolom RS_covid tidak diambil karena setelah uji KMO ke-2, MSA nya hanya 0.48
covid_cor_ok <- cor(covid_selected)2.1 Mencari nilai KMO-MSA
covid_KMO_ok <- KMO(covid_cor_ok)
covid_KMO_ok## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = covid_cor_ok)
## Overall MSA = 0.73
## MSA for each item =
## rasio_ketergantungan RS apotek
## 0.56 0.60 0.84
## puskesmas balita positif_cov
## 0.79 0.72 0.70
## rawat_cov isoman_cov
## 0.83 0.69
Bartlett’s test digunakan untuk mengkonfirmasi bahwa data berkorelasi secara berpasangan (Mickey & Sharma, 1997). Dengan kata lain uji bartlett digunakan untuk mengetahui homogenitas variance.
Di R fungsi yang dapat digunakan adalah bartlett.test() dari base. nilai alpha = 0.05
bartlett.test(covid[,c(2:17)])##
## Bartlett test of homogeneity of variances
##
## data: covid[, c(2:17)]
## Bartlett's K-squared = 10804, df = 15, p-value < 2.2e-16
Apabila nilai p-value < alpha = tolak H0
Insight: Nilai p-value < 0.05/ nilai alpha. Sehingga data kita memiliki variance yang tidak homogen/ berbeda satu sama lainnya.
Untuk membentuk faktor-faktor penyusun kerentanan sosial digunakan metode analisis faktor, fungsi yang tersedia di R adalah fa() dari library psych.
Parameter fungsi fa() - r: Correlation matrix dari data awal
fa_covid <- fa(r = covid_cor_ok)## Warning in fa.stats(r = r, f = f, phi = phi, n.obs = n.obs, np.obs = np.obs, :
## The estimated weights for the factor scores are probably incorrect. Try a
## different factor score estimation method.
fa_covid## Factor Analysis using method = minres
## Call: fa(r = covid_cor_ok)
## Standardized loadings (pattern matrix) based upon correlation matrix
## MR1 h2 u2 com
## rasio_ketergantungan -0.34 0.12 0.882 1
## RS 0.32 0.10 0.898 1
## apotek 0.57 0.33 0.670 1
## puskesmas 0.63 0.40 0.601 1
## balita -0.72 0.52 0.477 1
## positif_cov 0.99 0.98 0.019 1
## rawat_cov 0.86 0.74 0.262 1
## isoman_cov 0.75 0.56 0.443 1
##
## MR1
## SS loadings 3.75
## Proportion Var 0.47
##
## Mean item complexity = 1
## Test of the hypothesis that 1 factor is sufficient.
##
## The degrees of freedom for the null model are 28 and the objective function was 5.25
## The degrees of freedom for the model are 20 and the objective function was 1.31
##
## The root mean square of the residuals (RMSR) is 0.1
## The df corrected root mean square of the residuals is 0.12
##
## Fit based upon off diagonal values = 0.95
Secara default, objek factor analysis yang terbentuk menghasilkan sejumlah 1 faktor. Jumlah ini dapat saja belum optimal, sehingga perlu untuk mencari jumlah faktor yang optimal dari data yang kita miliki.
Menentukan jumlah faktor optimal
Langkah di balik penentuan jumlah faktor optimal: 1. Mencari eigen value: variance/informasi yang dirangkum oleh tiap faktor dengan eigen().
ev <- eigen(covid_cor_ok) # get eigenvalues
ev$values## [1] 4.12976372 1.13591191 1.02254343 0.70488806 0.47737583 0.27941896 0.18791011
## [8] 0.06218798
nfactors <- fa.parallel(x = covid[,c(2:17)],
fa = "fa")## Parallel analysis suggests that the number of factors = 3 and the number of components = NA
nfactors## Call: fa.parallel(x = covid[, c(2:17)], fa = "fa")
## Parallel analysis suggests that the number of factors = 3 and the number of components = NA
##
## Eigen Values of
##
## eigen values of factors
## [1] 4.22 2.16 1.04 0.59 0.22 0.12 -0.10 -0.14 -0.20 -0.30 -0.39 -0.40
## [13] -0.51 -0.58 -0.68 -0.84
##
## eigen values of simulated factors
## [1] 1.47 0.94 0.74 0.57 0.42 0.28 0.17 0.04 -0.06 -0.15 -0.26 -0.37
## [13] -0.45 -0.53 -0.62 -0.71
##
## eigen values of components
## [1] 4.72 2.98 1.89 1.37 1.10 0.89 0.66 0.62 0.55 0.37 0.33 0.20 0.14 0.12 0.04
## [16] 0.03
##
## eigen values of simulated components
## [1] NA
Insight: Jumlah faktor yang akan kita gunakan untuk kebutuhan analisis sebanyak 3 buah faktor.
Membentuk Analisis Faktor dengan Jumlah Faktor yang ditentukan
Selanjutnya akan kembali dilakukan analisis faktor menggunakan jumlah faktor optimal yang sudah didapatkan.
Parameter tambahan fungsi fa(): - r = Correlation matrix dari data awal - nfactors: banyaknya faktor yang akan dibentuk - rotate : tipe rotasi. Rotasi meminimalkan kompleksitas faktor untuk membuat struktur lebih sederhana untuk ditafsirkan. Beberapa tipe rotasi yang dapat dipilih: + Rotasi ortogonal (varimax, quartimax, equamax) -> Jika ingin memulai dengan asumsi faktor saling tidak berkorelasi + Rotasi oblique (oblimin, promax) -> asumsi faktor saling berkorelasi
# jumlah faktor optimal yang didapat
nfact <- nfactors$nfact
# factor analysis dengan tipe rotasi varimax
fa_covid_opt <- fa(r = covid_cor_ok,
nfactors = 3, #jumlah faktor optimal yang didapat dari fa_paralel
rotate= "varimax")## Warning in fa.stats(r = r, f = f, phi = phi, n.obs = n.obs, np.obs = np.obs, :
## The estimated weights for the factor scores are probably incorrect. Try a
## different factor score estimation method.
## Warning in fac(r = r, nfactors = nfactors, n.obs = n.obs, rotate = rotate, : An
## ultra-Heywood case was detected. Examine the results carefully
fa_covid_opt ## Factor Analysis using method = minres
## Call: fa(r = covid_cor_ok, nfactors = 3, rotate = "varimax")
## Standardized loadings (pattern matrix) based upon correlation matrix
## MR1 MR3 MR2 h2 u2 com
## rasio_ketergantungan -0.10 -0.06 0.92 0.85 0.1459 1.0
## RS 0.37 -0.02 -0.08 0.15 0.8542 1.1
## apotek 0.17 0.97 -0.15 1.00 0.0045 1.1
## puskesmas 0.54 0.37 -0.03 0.43 0.5741 1.8
## balita -0.45 -0.41 0.55 0.67 0.3339 2.8
## positif_cov 0.92 0.35 -0.19 1.00 -0.0018 1.4
## rawat_cov 0.81 0.37 -0.06 0.79 0.2054 1.4
## isoman_cov 0.78 0.13 -0.19 0.65 0.3465 1.2
##
## MR1 MR3 MR2
## SS loadings 2.76 1.53 1.25
## Proportion Var 0.35 0.19 0.16
## Cumulative Var 0.35 0.54 0.69
## Proportion Explained 0.50 0.28 0.22
## Cumulative Proportion 0.50 0.78 1.00
##
## Mean item complexity = 1.5
## Test of the hypothesis that 3 factors are sufficient.
##
## The degrees of freedom for the null model are 28 and the objective function was 5.25
## The degrees of freedom for the model are 7 and the objective function was 0.59
##
## The root mean square of the residuals (RMSR) is 0.04
## The df corrected root mean square of the residuals is 0.08
##
## Fit based upon off diagonal values = 0.99
Dengan menggunakan 3 faktor, maka informasi keseluruhan yang diperhitungkan faktor dari semua variabel sebanyak 0.69
fa.diagram(fa.results = fa_covid_opt,
rsize = 1)Arah dari masing-masing variabel ditentukan berdasarkan pengaruhnya terhadap kerentanan sosial. Arah positif berpengaruh terhadap peningkatan kerentanan sosial, sebaliknya arah negatif menurunkan tingkat kerentanan sosial.
Dari plot di atas dilakukan pengekstrakan terhadap 3 faktor dengan interpretasi faktor:
positif_cov, rawat_cov, isoman_cov, puskesmas, apotek, RSpositif_cov, semakin meningkat angkanya tersebut maka meningkatkan kerentanan suatu daerahbalita dan rasio_ketergantunganbalita, semakin meningkat angkanya tersebut maka meningkatkan kerentanan suatu daerahDalam analisis ini, digunakan pembobotan tidak sama untuk melakukan agregasi indeks. Pembobot didapatkan dari pembagian antara varians terjelaskan masing-masing komponen dibagi dengan total varians terjelaskan atau nilai proportion explained dari object fa_rentan_opt. Dengan cara ini komponen yang memiliki varians terjelaskan yang lebih tinggi berpengaruh lebih besar terhadap kerentanan sosial. Perhitungan kerentanan sosial mengikuti persamaan sebagai berikut:
\[SoVI=|(0.50*komponen_1)+(0.28*komponen_2)+(0.22*komponen_3)|\]
SoVI merujuk peda Social Vulnerability Index.
covidPrincipal Component Analysis (PCA)
PCA merupakan suatu algoritma unsupervised learning yang bertujuan untuk dimentionality reduction. Salah satu tujuan dari PCA adalah untuk mengubah variabel asli yang saling berkorelasi satu sama lainnya menjadi satu set variabel baru yang memiliki korelasi lebih kecil atau saling bebas.
Ide dasar dari PCA adalah untuk membuat sumbu (axis) baru yang dapat menangkap informasi sebesar mungkin. Sumbu baru ini adalah yang dinamakan sebagai Principal Component (PC). Untuk melakukan dimensionality reduction, kita akan memilih beberapa PC untuk dapat merangkum informasi yang dibutuhkan. Nilai masing-masing PC dibentuk dari matriks varian-kovarians dari suatu set variabel melalui kombinasi linear dari variabel-variabel tersebut.
# membuat object PCA
covid_pca<-prcomp(covid[,2:17], scale. = T)
# mendapatkan nilai data baru untuk setiap komponen
as.data.frame(covid_pca$x)Sesuai dengan hasil dari factor analysis dengan objek fa_covid_opt(), akan kita ambil sebanyak 3 principal component untuk kebutuhan pemetaan SoVI masing-masing kecamatan di Provinsi DKI Jakarta.
pc_keep <- as.data.frame(covid_pca$x[,1:3])
pc_keepSelanjutnya, melakukan perhitungan persamaan indeks kerentanan sosial. Sehingga dihasilkan SoVI atau Social Vulnerability Index untuk masing-masing kecamatan.
SoVI <- pc_keep %>% # object pc yang kita ambil sebanyak 2
# mutate(SoVI = 0.65*abs(PC1) + 0.35*abs(PC2))
mutate(SoVI = 0.50*abs(PC1) + 0.28*abs(PC2)+ 0.22*abs(PC3))
SoVIMelakukan penggabungan variabel kecamatan dan juga nilai SoVI yang sudah didapatkan
Selanjutnya, dilakukan pengabungan nilai hasil perhitungan Social Vulnerability Index dengan nama-nama kecamatan dan kode area yang ada pada dataset covid untuk kebutuhan visualisasi geospasial.
covid_new <- covid %>%
select_if(~!is.numeric(.)) %>% # ambil kolom Kecamatan
cbind(SoVI = SoVI[,4]) # gabungkan dengan kolom SoVI
covid_newDari indeks kerentanan sosial yang terbentuk, selanjutnya perlu untuk melakukan kategorisasi pengkategorian indeks menjadi 3, yaitu rendah, sedang, tinggi. Hal ini bertujuan untuk memudahkan insight yang dapat diambil. Pengkategorian indeks dilakukan dengan menggunakan Natural Breaks pada R menggunakan function getJenksBreaks() dari library BAMMtools.
function(df,var) -> nilai input dr function yang kita buat
Rendah a-b Sedang b-c Tinggi c-d
# Membagi SoVI ke dalam 3 kategori
natural_breaks <- function(df, var) {
breaks <- BAMMtools::getJenksBreaks(df[[var]], k = 4)
df %>%
mutate("jenks" :=
case_when(df[[var]] >= breaks[[1]] & df[[var]] < breaks[[2]] ~ 1,
df[[var]] >= breaks[[2]] & df[[var]] < breaks[[3]] ~ 2,
df[[var]] >= breaks[[3]] & df[[var]] <= breaks[[4]] ~ 3))
}
covid_new <- natural_breaks(covid_new, "SoVI")
covid_new# Melihat threshold untuk masing-masing kategori
getJenksBreaks(covid_new$SoVI, k = 4)## [1] 0.2336861 1.0661989 2.6773708 5.6229348
Insight :
Nilai rendah(1) = nilai SoVI di antara nilai 0.1554266 - 1.2893126
Nilai sedang(2) = nilai SoVI di antara 1.2893126 - 2.9409363
Nilai tinggi(3) = nilai SoVI di antara 2.9409363 - 6.9914851
# Melihat jumlah kecamatan per masing-masing kategori
covid_new %>%
group_by(jenks) %>%
summarise(Total_Kecamatan = n())Insight:
Di DKI Jakarta tingkat kerentanan sosial akibat COVID 19 lebih banyak berada di level rendah-sedang
Untuk kategori tinggi atau daerah kecamatan yang membutuhkan penanganan lebih berjumlah 3 kecamatan. Di antaranya kecamatan-kecamatan yang ada di bawah ini:
covid_new %>%
filter(jenks == 3) # untuk nilai SoVI kategori tinggiSetelah melakukan pembentukan indeks kerentanan sosial, selanjutnya clustering digunakan untuk mengetahui variabel yang berpengaruh pada masing-masing klaster. Supaya hasil klaster dapat diinterpretasikan, akan digunakan data covid awal dengan variabel-variabel numerik yang mana sudah signifikan melalui pengujian KMO-MSA dan bartlett. Metode yang digunakan dalam melakukan klastering ini adalah Fuzzy C-Means Clustering.
Fuzzy C-means clustering merupakan suatu metode clustering yang hampir mirip seperti k-means clustering. Karena metode clustering ini mirip dengan k-means clustering, ada yang menyebut metode ini fuzzy k-means clustering.
Algoritma Fuzzy C-Means (FCM) pertama kali diperkenalkan oleh Dunn pada tahun 1973 dan dikembangkan kembali oleh Bezdek pada tahun 1981 sebagai metode clustering yang menggunakan konsep fuzzy.
Fuzzy c-means merupakan salah satu jenis soft clustering di mana dalam mengelompokan suatu data, setiap data bisa dimiliki lebih dari satu cluster. Contohnya sebuah tomat bisa dikelompokkan ke warna merah atau warna hijau jika dalam hard clustering, namun tomat bisa dikelompokkan ke warna merah dan hijau dalam fuzzy clustering. Tomat berwarna merah memiliki tingkatan yang sama dengan tomat berwarna hijau. Jika dimisalkan dengan angka dari 0 sampai 1, tomat warna merah 0.5 dan tomat warna hijau 0.5.
Lakukan pengolahan klaster menggunakan perangkat lunak R-Studio dengan package ppclust.
Langkah pertama mendefinisikan data yang akan digunakan dalam analisis FCM ini ke dalam object covid_FCM dimana data ini berisi variabel-variabel bertipe data numerik.
covid_FCM <- covid[,1:17]
head(covid_FCM)Melakukan assign nilai dari kolom Kecamatan yang ada pada data covid kita menjadi nama baris.
covid_FCM <- covid_FCM %>%
remove_rownames %>%
column_to_rownames(var="Kecamatan")
head(covid_FCM)Normalisasi/standarisasi data diperlukan sebelum melakukan clustering untuk memudahkan kita melakukan identifikasi cluster. Apabila skala data untuk dilakukan clustering tidak sama, maka kita tidak akan dapat membandingkan setiap nilai dengan semua nilai lain dalam kumpulan data yang kita miliki.
Teknik penskalaan Min-Max merupakan salah satu metode normaliasi dengan melakukan perubahan linear terhadap data asli. Teknik normalisasi Min-Max dapat dilakukan dengan formula berikut:
Selanjutnya, karena pada R tidak terdapat build-in function dari formula Min-Max ini, maka akan dibuat fungsi manual dengan minMax. Lalu melakukan pengaplikasian fungsi yang sudah dibuat pada data rentan_FCM kita.
# custom function to implement min max scaling
minMax <- function(x) {
(x - min(x)) / (max(x) - min(x))
}
#Normalisasi data menggunakan fungsi custom
covid_scale <- as.data.frame(lapply(covid_FCM, minMax))
#Menambahkan rownames kecamatan pada data yang sudah discale
covid_FCM <- as.data.frame(covid_scale, covid$Kecamatan)Pada analisis ini, akan digunakan metode silhouette untuk melakukan pemilihan nilai k (jumlah cluster) optimal.
Di mana akan dipilih nilai k pada saat nilai k ditambah, penurunan Total WSS (Whitin Sum of Squares) tidak terlalu drastis (dapat dikatakan sudah melandai). Secara statistik, dalam melakukan visualisasi elbow digunakan function fviz_nbclust() dari package factoextra.
library(cluster)
set.seed(123)
elbow <-
fviz_nbclust(
x = covid_scale, #data
FUNcluster = fanny, #fungsi clustering
method = "silhouette") + labs(subtitle = "Metode Silhouette") #judul
elbowNilai k optimum dari data
covid_FCMdidapatkan pada saat 2.
fcm()Membuat object fcm.covid dengan menggunakan fungsi fcm() dengan jumlah k sesuai banyaknya nilai k optimum yang didapat.
Parameter:
x: datasetcenters: banyaknya centroid (nilai k)library(ppclust)
set.seed(123)
fcm.covid <- fcm(x = covid_FCM,
centers = 3)
summary(fcm.covid)## Summary for 'fcm.covid'
##
## Number of data objects: 44
##
## Number of clusters: 3
##
## Crisp clustering vector:
## [1] 1 2 1 3 1 1 1 1 2 2 1 1 2 1 2 1 1 2 3 1 2 2 1 1 1 2 2 2 2 1 3 1 3 1 2 1 2 2
## [39] 2 2 2 2 1 3
##
## Initial cluster prototypes:
## lansia disabilitas kepadatan_penduduk penduduk_nonmuslim
## Cluster 1 0.0000000 0.05561904 0.1086198 0.3865473
## Cluster 2 0.3064559 0.03037189 0.1564692 0.1523000
## Cluster 3 0.4829961 0.01840313 0.2442726 0.3293974
## pendidikan_rendah RS_covid rasio_ketergantungan WNA RS
## Cluster 1 0.6458134 0.8 0.3405406 0.05601652 0.1428571
## Cluster 2 0.1984026 0.2 0.4216217 0.10437702 0.1428571
## Cluster 3 0.1859687 0.8 0.3474901 0.09863555 1.0000000
## tenaga_kesehatan apotek puskesmas balita positif_cov
## Cluster 1 0.4322880 0.5867769 0.9090909 0.007745482 0.5534890
## Cluster 2 0.4158945 0.2975207 0.2727273 0.035113105 0.5078441
## Cluster 3 0.3959373 0.3471074 0.5454545 0.047895019 0.6856676
## rawat_cov isoman_cov
## Cluster 1 0.5140845 0.2857143
## Cluster 2 0.2957746 0.2342857
## Cluster 3 0.7535211 0.4857143
##
## Final cluster prototypes:
## lansia disabilitas kepadatan_penduduk penduduk_nonmuslim
## Cluster 1 0.3939859 0.1192119 0.2260148 0.3118510
## Cluster 2 0.4951107 0.1134644 0.2284729 0.3591381
## Cluster 3 0.3939859 0.1192119 0.2260148 0.3118510
## pendidikan_rendah RS_covid rasio_ketergantungan WNA RS
## Cluster 1 0.3220313 0.4401078 0.3975909 0.2190329 0.2674931
## Cluster 2 0.3239526 0.4151862 0.3935061 0.2757236 0.2427760
## Cluster 3 0.3220313 0.4401078 0.3975909 0.2190329 0.2674931
## tenaga_kesehatan apotek puskesmas balita positif_cov rawat_cov
## Cluster 1 0.4731661 0.4414550 0.4586129 0.1015171 0.5518107 0.4852348
## Cluster 2 0.4815302 0.4120726 0.3728493 0.1314325 0.4568695 0.4127754
## Cluster 3 0.4731661 0.4414550 0.4586129 0.1015171 0.5518107 0.4852348
## isoman_cov
## Cluster 1 0.4149176
## Cluster 2 0.3316175
## Cluster 3 0.4149176
##
## Distance between the final cluster prototypes
## Cluster 1 Cluster 2
## Cluster 2 0.04735431
## Cluster 3 0.00000000 0.04735430
##
## Difference between the initial and final cluster prototypes
## lansia disabilitas kepadatan_penduduk penduduk_nonmuslim
## Cluster 1 0.39398593 0.06359282 0.11739504 -0.07469628
## Cluster 2 0.18865482 0.08309255 0.07200369 0.20683815
## Cluster 3 -0.08901014 0.10080874 -0.01825773 -0.01754639
## pendidikan_rendah RS_covid rasio_ketergantungan WNA
## Cluster 1 -0.3237821 -0.3598922 0.05705031 0.1630164
## Cluster 2 0.1255501 0.2151862 -0.02811561 0.1713466
## Cluster 3 0.1360625 -0.3598922 0.05010085 0.1203973
## RS tenaga_kesehatan apotek puskesmas balita
## Cluster 1 0.12463594 0.04087819 -0.14532188 -0.45047801 0.09377165
## Cluster 2 0.09991883 0.06563566 0.11455192 0.10012206 0.09631937
## Cluster 3 -0.73250691 0.07722887 0.09434754 -0.08684165 0.05362212
## positif_cov rawat_cov isoman_cov
## Cluster 1 -0.001678377 -0.02884972 0.12920332
## Cluster 2 -0.050974633 0.11700075 0.09733174
## Cluster 3 -0.133856984 -0.26828635 -0.07079668
##
## Root Mean Squared Deviations (RMSD): 0.7759022
## Mean Absolute Deviation (MAD): 36.32231
##
## Membership degrees matrix (top and bottom 5 rows):
## Cluster 1 Cluster 2 Cluster 3
## CAKUNG 0.3715046 0.2569907 0.3715046
## CEMPAKA PUTIH 0.3084686 0.3830627 0.3084686
## CENGKARENG 0.3620984 0.2758031 0.3620984
## CILANDAK 0.3339280 0.3321441 0.3339280
## CILINCING 0.3697744 0.2604512 0.3697744
## ...
## Cluster 1 Cluster 2 Cluster 3
## TAMAN SARI 0.2982663 0.4034675 0.2982663
## TAMBORA 0.3251729 0.3496542 0.3251729
## TANAH ABANG 0.3070770 0.3858459 0.3070770
## TANJUNG PRIOK 0.3643396 0.2713207 0.3643396
## TEBET 0.3394246 0.3211508 0.3394246
##
## Descriptive statistics for the membership degrees by clusters
## Size Min Q1 Mean Median Q3 Max
## Cluster 1 20 0.3403343 0.3621926 0.3677819 0.3690368 0.3715735 0.4047902
## Cluster 2 19 0.3422544 0.3538441 0.3839823 0.3830627 0.4011145 0.4423572
## Cluster 3 5 0.3339280 0.3394246 0.3455511 0.3475147 0.3497177 0.3571706
##
## Dunn's Fuzziness Coefficients:
## dunn_coeff normalized
## 0.339506011 0.009259016
##
## Within cluster sum of squares by cluster:
## 1 2 3
## 8.8915470 15.5337770 0.8310329
## (between_SS / total_SS = 1.98%)
##
## Available components:
## [1] "u" "v" "v0" "d" "x"
## [6] "cluster" "csize" "sumsqrs" "k" "m"
## [11] "iter" "best.start" "func.val" "comp.time" "inpargs"
## [16] "algorithm" "call"
Hasil dari fcm() :
fcm.covid$csize## 1 2 3
## 20 19 5
Insight
Untuk cluster 1 ada sejumlah 23 kecamatan
Untuk cluster 2 ada sejumlah 21 kecamatan
Untuk cluster 3 ada sejumlah .. kecamatan
fcm.covid$cluster## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
## 1 2 1 3 1 1 1 1 2 2 1 1 2 1 2 1 1 2 3 1 2 2 1 1 1 2
## 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
## 2 2 2 1 3 1 3 1 2 1 2 2 2 2 2 2 1 3
# membuat data frame gabungan antara rentan_FCM dengan hasil cluster
fcm_keep<-data.frame(covid_FCM, fcm.covid$cluster)
fcm_keep # Inspeksi nilai-nilai kecamatan permasing-masing cluster
cluster_1 <- fcm_keep %>%
filter(fcm.covid.cluster %in% 1)
cluster_1cluster_2 <- fcm_keep %>%
filter(fcm.covid.cluster %in% 2)
cluster_2Kluster 1 berisi 23 Kecamatan
Kluster 2 berisi 21 Kecamatan
Kluster 3 berisi .. Kecamatan
Untuk dapat melakukan cluster profiling, dibutuhkan informasi pusat cluster (centroid) masing-masing variabel terhadap cluster yang dihasilkan. Dalam object fcm.covid, kita dapat melakukan inspeksi menggunakan fcm.covid$v yang mana merupakan matriks numerik yang berisi pusat masing-masing cluster (centroid).
Final cluster prototype
fcm.covid$v## lansia disabilitas kepadatan_penduduk penduduk_nonmuslim
## Cluster 1 0.3939859 0.1192119 0.2260148 0.3118510
## Cluster 2 0.4951107 0.1134644 0.2284729 0.3591381
## Cluster 3 0.3939859 0.1192119 0.2260148 0.3118510
## pendidikan_rendah RS_covid rasio_ketergantungan WNA RS
## Cluster 1 0.3220313 0.4401078 0.3975909 0.2190329 0.2674931
## Cluster 2 0.3239526 0.4151862 0.3935061 0.2757236 0.2427760
## Cluster 3 0.3220313 0.4401078 0.3975909 0.2190329 0.2674931
## tenaga_kesehatan apotek puskesmas balita positif_cov rawat_cov
## Cluster 1 0.4731661 0.4414550 0.4586129 0.1015171 0.5518107 0.4852348
## Cluster 2 0.4815302 0.4120726 0.3728493 0.1314325 0.4568695 0.4127754
## Cluster 3 0.4731661 0.4414550 0.4586129 0.1015171 0.5518107 0.4852348
## isoman_cov
## Cluster 1 0.4149176
## Cluster 2 0.3316175
## Cluster 3 0.4149176
Cluster Profiling:
covid %>%
select(c(Kecamatan, positif_cov, rawat_cov, isoman_cov))Berikut merupakan hasil visualisasi kluster dalam plot 2 dimensi.
# mengubah object ppclust menjadi tipe lain dari object cluster
fcm.covid2 <- ppclust2(fcm.covid, "fanny")
# gunakan fungsi fviz_cluster() dari package factoextra
factoextra::fviz_cluster(fcm.covid2, data = covid_FCM,
ellipse.type = "convex",
palette = "jco",
repel = TRUE)Untuk daerah yang terletak di antara 2 cluster atau memiliki membership degree yang fifty-fifty indikasinya daerah/kecamatan tersebut cenderung memiliki nilai yang cukup dominan/tinggi di variabel-varibel keseluruhan.
Peta kerentanan sosial juga dapat menjadi informasi yang baik dalam penanggulangan bencana. Integrasi dengan sistem peringatan yang dirancang untuk mencegah penularan penyakit dapat memberikan informasi yang berguna bagi wilayah yang memiliki risiko penyebaran COVID-19 yang tinggi. Permasalahan yang disebabkan oleh kependudukan, pekerjaan, kesehatan, dan pendidikan yang diakibatkan oleh COVID-19, dapat ditanggulangi dengan mengintegrasikan perencanaan penanggulangan resiko dengan program pengembangan lainnya.
Pada analisis ini ditemukan 3 faktor yang berpengaruh terhadap kerentanan sosial yaitu Faktor Kesehatan dan Fasilitas Penunjang serta Faktor Usia Penderita, oleh karena itu, disarankan bahwa penanggulan dampak COVID-19 dapat diintegrasikan dengan program pengembangan lainnya yang sesuai dengan beberapa faktor yang telah disebutkan.
Oleh karena itu, hasil analisis ini dapat menjadi masukan bagi pemerintah dalam hal ini Badan Penanggulangan Bencana Daerah (BPBD) DKI Jakarta, dimana hasilnya dapat digunakan untuk perencanaan program penanggulangan bencana kedepannya. Lebih jauh lagi berdasarkan hasil analisis ini dapat dilihat tingkat kerentanan yang berbeda pada masing-masing wilayah, Hal ini berarti kapasitas kesiapan dan respon terhadap COVID-19 berbeda beda. Bagi CSR perusahaan, hal ini dapat menjadi rujukan informasi yang bersesuaian agar lebih tepat sasaran dalam memberikan bantuan kepada daerah dengan karakteristik tertentu
Ketika informasi yang terbatas, penggunaan peta kerentanan sosial dapat dijadikan informasi untuk memprioritaskan terlebih dahulu daerah dengan tingkat kerentanan sosial yang tinggi.
Analisis ini merupakan upaya yang dilakukan untuk mendukung penanggulangan dampak yang diakibatkan oleh COVID-19 di DKI Jakarta. Pendekatan indeks dan klaster dilakukan untuk mengetahui bagaimana indeks kerentanan dan pengaruh variabel terhadap masing-masing wilayah kecamatan DKI Jakarta. Dari project ini, kami mendapatkan 2 faktor yang membentuk kerentanan sosial, yaitu Kesehatan dan Fasilitas Penunjang serta Faktor Usia Penderita.
Analisis ini menggunakan 8 variabel (dari total 16 variabel) untuk mengukur kerentanan sosial. Hal ini dikarenakan keterbatasan data yang ada. Menggunakan data yang lebih lengkap dan terbaru maka pengukuran akan menjadi lebih baik. Akhirnya, poin penting bahwa project ini melakukan penilaian terhadap kerentanan sosial pada kecamatan di DKI Jakarta. Karakteristik wilayah yang berbeda beda menyebabkan penggunaan variabel yang berbeda juga, sehingga penilaian terhadap kerentanan sosial akan menjadi tantangan tersendiri.
Terima kasih.