1 Preface

1.1 Pendahuluan

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.

1.2 Library dan Setup

#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 interaktif

1.3 Dataset

Berikut 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)

2 Preprocess

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
  • Tidak ada data NA dan Duplikat
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):

  • Rerata presentasi penduduk lansia untuk masing masing kecamatan adalah sebesar 9% (8.997%), dengan kondisi rendah disabilitas (0.05%)
  • Rerata kepadatan penduduk berada pada angka 144.509 per kecamatan dengan angka maksimum seebsar 596.126 per kecamatan
  • Rerata positive covid berada pada angka 7587 akan tetapi rerata yang dirawat hanya sebanyak 65.61 dan yang isoman hanya 67.93, sisanya tidak terdeteksi/ mengupdate status
  • Perbandingan rerata kepadatan penduduk dibandingkan jumlah puskesmas adalah 144509/ 7.75 (atau, 1 puskesmas untuk 18646.32 orang), angkanya semakin tinggi jika dibandingkan dengan ketersediaan Rumah Sakit. Perbandingan dengan tenaga kesehatan adalah 144509/1434 (atau, 1 nakes diharuskan menangani 100.77 orang)
  • Terdapat kecamatan yang mengalami jumlah penderita covid balita yang tinggi yaitu 51.532 pada Kepulauan Seribu SLT (Selatan?)
  • Rerata perbandingan penderita covid dengan kepadatan penduduk adalah 144509/7587 atau 19.04%
covid %>% 
  filter(balita == max(balita)) %>% 
  select(c(Kecamatan, balita))

2.1 Visualisasi Antar Variable

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

3 Variasi Teknik Analysis

3.1 Factor Analysis

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.

3.1.0.1 Kaiser–Meyer–Olkin (KMO) - Measure of Sampling Adequacy(MSA)

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.

  1. Pertama membentuk matriks korelasi dari variabel numerik pada data
covid_cor <- cor(covid[,2:17])
  1. Mencari nilai KMO-MSA dengan KMO() dari library psych menggunakan matriks korelasi yang sudah dibuat sebelumnya
covid_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

  • Dari hasil output nilai MSA untuk masing-masing variabel: lansia, disabilitas, kepadatan_penduduk, penduduk_nonmuslim, pendidikan_rendah, WNA, tenaga_kesehatan memiliki besaran nilai < 0.5, tersisa RS_covid, rasio_ketergantungan, RS, apotek, puskesmas, balita, positif_cov, rawat_cov dan isoman_cov yang memiliki besaran nilai > 0.5

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

3.1.0.2 The Bartlett’s Test statistics

Bartlett’s test digunakan untuk mengkonfirmasi bahwa data berkorelasi secara berpasangan (Mickey & Sharma, 1997). Dengan kata lain uji bartlett digunakan untuk mengetahui homogenitas variance.

  • Hipotesis uji
    • H0 = Varians di antara masing-masing variabel adalah sama (variance homogen)
    • H1 = Setidaknya satu variabel memiliki varians yang tidak sama dengan yang lain (variance tidak homogen)
  • Pengujian yang diharapkan adalah data memiliki variance yang tidak homogen (tolak H0).

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.

3.1.1 Membentuk Factor Analysis

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
  1. Membentuk scree plot: grafik yang menunjukkan relasi antara faktor dengan nilai Eigennya
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

3.1.2 Pembentukan Faktor Umum dan Interpretasi

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:

  • Faktor 1: kesehatan dan fasilitasnya
    • Faktor ini terdiri dari 6 variabel pembentuk, yaitu positif_cov, rawat_cov, isoman_cov, puskesmas, apotek, RS
    • Kesemua variabel berpengaruh positif dalam kerentanan sosial
    • Insight dari variable positif_cov, semakin meningkat angkanya tersebut maka meningkatkan kerentanan suatu daerah
  • Faktor 2: Usia penderita
    • Faktor ini terdiri dari 6 variabel pembentuk, yaitu balita dan rasio_ketergantungan
    • Kesemua variabel berpengaruh positif dalam kerentanan sosial
    • Insight dari variable balita, semakin meningkat angkanya tersebut maka meningkatkan kerentanan suatu daerah
  • Faktor 3:

3.1.3 Indeks Kerentanan Sosial

Dalam 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.

3.1.4 Melakukan PCA pada data covid

Principal 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_keep

Selanjutnya, 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))
SoVI

Melakukan 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_new

Dari 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 :

  1. Nilai rendah(1) = nilai SoVI di antara nilai 0.1554266 - 1.2893126

  2. Nilai sedang(2) = nilai SoVI di antara 1.2893126 - 2.9409363

  3. 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 tinggi

3.2 Fuzzy C-Means Clustering terhadap Kerentanan Sosial

Setelah 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.

3.2.1 Fuzzy C-means Methodology

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.

  • Langkah pertama adalah menentukan banyaknya jumlah cluster pada data.
  • Dilanjutkan dengan mencari pusat cluster (centroid), yang akan menandai posisi rata-rata untuk masing-masing cluster.
  • Memperbarui setiap iterasi
  • Terakhir data dikelompokkan berdasarkan jarak antar data dengan setiap centroid.

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.

3.2.2 Data pre-processing

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)

3.2.3 Normalisasi Min-Max

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)

3.2.4 Pemilihan nilai k optimum

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
elbow

Nilai k optimum dari data covid_FCM didapatkan pada saat 2.

3.2.5 FCM menggunakan fcm()

Membuat object fcm.covid dengan menggunakan fungsi fcm() dengan jumlah k sesuai banyaknya nilai k optimum yang didapat.

Parameter:

  • x: dataset
  • centers: 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() :

  1. Untuk mengetahui jumlah kecamatan untuk setiap cluster
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

  1. Nilai untuk masing-masing kecamatan dan juga hasil cluster setiap kecamatannya.
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_1
cluster_2 <- fcm_keep %>% 
  filter(fcm.covid.cluster %in% 2)
cluster_2
  • Kluster 1 berisi 23 Kecamatan

  • Kluster 2 berisi 21 Kecamatan

  • Kluster 3 berisi .. Kecamatan

3.2.6 Interpretasi: Cluster Profiling

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:

  • Cluster 1 :
    • Pada cluster ini dominan variabel yang terkait sarana RS, RS Covid, apotek, rasio_ketergantungan, positif_cov, rawat_cov dan isoman_cov
    • Untuk variabel positiv_cov, rawat, dan juga isoman, variabel- variabel ini menjadi masalah di kecamatan-kecamatan yang ada pada cluster 1. hal ini dibuktikan dengan nilai jumlah positif covid, jumlah orang yang dirawat, serta jumlah orang melakukan isoman akibat COVID yang tinggi.
  • Cluster 2 :
    • Pada cluster ini dominan variabel yang terkait var terkait umur penderita, kepadatan penduduk, status agama, status warga negara dan tenaga_kesehatan
    • Lansia pada kecamatan-kecamatan yang ada di cluster 2 memang memiliki persentase nilai yang tinggi pada data asli. Hal ini mengindikasikan, kecamatan-kecamatan yang ada di cluster 2 bisa dilakukan penanggulangan atau bantuan yang dikhususkan untuk lansia.
    • keadaan positive_cov menyebabkan banyaknya warga yang harus diisoman dan di beberapa kecamatan terlihat lebih sedikit yang perlu dirawat
  • Cluster 3 :

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.

3.3 Implikasi Kebijakan

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.

3.4 Kesimpulan

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.