Materi ini diproduksi oleh tim dari Algoritma untuk Analisis Kerentanan Sosial terhadap COVID-19 di DKI Jakarta Menggunakan Analisis Faktor dan Klaster. Materi berikut hanya ditujukan untuk kalangan terbatas, meliputi individu/personal yang menerima materi ini secara langsung dari lembaga pelatihan. Materi ini dilarang untuk direproduksi, didistribusikan, diterjemahkan, atau diadaptasikan dalam bentuk apapun di luar izin dari individu dan organisasi yang berkepentingan.

Algoritma adalah pusat pendidikan Data Science di Jakarta. Kami mengadakan workshop dan program pelatihan untuk membantu para profesional dan pelajar untuk mendapatkan keahlian dalam berbagai bidang dalam ruang lingkup Data Science: data visualization, machine learning, data modeling, statistical inference, dan lain-lainnya.

Sebelum masuk ke dalam materi dan menjalankan kode-kode di dalam materi ini, silakan anda melihat bagian Library and Setup untuk melihat dan memastikan semua persyaratan dasar untuk mengikuti materi ini sudah terpenuhi termasuk package-package yang diperlukan. Pada bagian Tujuan Pembelajaran anda dapat melihat secara umum apa saja yang akan dipelajari dalam modul materi ini. Kami harap materi ini akan bermanfaat bagi karir ataupun menambah keahlian peserta.

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.

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

Materi ini bertujuan memberikan pemahaman kepada peserta workshop terkait penggunaan unsupervised learning yang dapat digunakan untuk project berbasis social behaviour. Beberapa metode yang dapat diimplementasikan diantaranya analisis faktor dalam membentuk faktor-faktor laten kerentanan sosial serta PCA dalam melakukan ekstraksi variabel menjadi komponen yang akan membentuk index kerentanan sosial masing-masing daerah. Hasil index ini dapat kita manfaatkan untuk melakukan visualisasi demografis dan profiling masing-masing daerah menggunakan fuzzy c-means clustering sehingga insight yang diambil akan lebih bermakna. Adapun setelah mempelajari materi ini peserta diharapkan dapat memahami kegunaan dan potensi pemanfaatan analisis faktor dan fuzzy clustering sesuai dengan proses bisnis yang ada di bidang industri yang dijalani oleh peserta.

1.2 Library dan Setup

Untuk dapat mengikuti materi ini, peserta diharapkan sudah menginstall beberapa packages di bawah ini. Apabila package tersebut belum terinstall, silahkan jalankan chunk atau baris kode berikut. Apabila sudah ter-install, lewati chunk berikut dan muat package yang dibutuhkan dengan menjalankan chunk selanjutnya.

# install.packages(c("readr","tidyverse", "stringr", "sf", rmarkdown", "GGally", "psych", "GPArotation", "factoextra", "BAMMtools", "ppclust", "gridExtra", "leaflet"))
#data cleaning
library(readr) # untuk membaca data
library(dplyr) # untuk data manipulation
library(stringr) 
library(sf) # untuk membaca data shp

#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 Tujuan Pembelajaran

Tujuan utama dari workshop ini adalah untuk memberikan pengenalan yang komprehensif mengenai tools dan perangkat lunak yang digunakan untuk mengetahui kelompok yang memiliki resiko lebih tinggi (rentan) dan seberapa cepat pulih terhadap dampak COVID-19, yakni sebuah open-source populer: R. Adapun materi ini akan mencakup:

Introductory Module:

  • Dasar Bahasa Pemrograman R
    • Pengenalan bahasa pemrograman R
    • Bekerja dengan RStudio
    • Fungsi standar pada R
    • Data manipulasi dan persiapan data menggunakan R tidyverse
  • Introduction to Statistics
    • Statistika Deskriptif
      • Ukuran penyebaran data (Measure of spread)
      • Hubungan antar data (Variable Relationship)
    • Statistika Inferensial
      • Uji hipotesis

Main Module:

  • Data wrangling dan EDA
    • Gambaran umum variabel penyusun indeks kerentanan sosial
    • Melihat summary, plot distribusi, serta korelasi antar variabel
  • Mengecek asumsi dalam analisis faktor
    • Uji multikolinearitas pada seluruh variabel
    • Kaiser–Meyer–Olkin (KMO) - Measure of Sampling Adequacy (MSA)
    • The Bartlett’s Test statistics
  • Membentuk faktor-faktor penyusun kerentanan sosial
    • Factor Analysis dalam membentuk faktor-faktor penyusun kerentanan sosial menggunakan fungsi fa()
    • fa.parallel() untuk menemukan jumlah faktor optimal
    • Melakukan ekstraksi dan rotating faktor
    • Melakukan ekstraksi dengan menghasilkan faktor umum menggunakan fa.diagram()
    • Pembobotan dalam agregasi indeks.
  • Melakukan pembentukan Indeks Kerentanan Sosial
    • Melakukan Principle Component Analysis (PCA) untuk mengambil komponen yang tereduksi.
    • Membentuk SoVI (Social Vulnerability Index) masing-masing kecamatan
  • Visualisasi Geospasial Kerentanan Sosial Kecamatan di Provinsi DKI Jakarta
    • Indeks kerentanan sosial dikategorikan menjadi tiga yaitu : rendah, sedang dan tinggi.Pengkategorian menggunakan Natural Breaks pada R menggunakan getJenksBreaks()
    • Membuat visualisasi geocoding berupa choropleth dengan leaflet()
  • Fuzzy C-Means Clustering terhadap Kerentanan Sosial
    • Pemilihan nilai k optimum dengan elbow method
    • FCM menggunakan fcm()
    • Melakukan cluster profiling

2 Topik: COVID-19 SOCIAL VULNERABILITY

Ground Truth Story

Sampai saat ini, pandemi COVID-19 belum juga usai. Provinsi DKI Jakarta menjadi provinsi dengan jumlah kasus positif COVID-19 terbanyak di Indonesia. Meski disadari bahwa virus COVID-19 dapat menginfeksi siapa saja, tetapi beberapa kelompok orang memiliki tingkat risiko yang lebih tinggi untuk terpapar. Sebagai contoh, jika dilihat pada data kematian akibat COVID-19 per kelompok umur per tanggal 30 September 2022, penduduk rentan seperti usia lansia (≥ 60 tahun) menyumbang kematian sebesar 47,6% dari total kematian akibat COVID-19.

Selain itu, pada kasus positif COVID-19 dan sedang dirawat atau isolasi, proporsi penduduk berjenis kelamin perempuan lebih banyak dibandingkan laki-laki (Kemenkes, 2021). Tingkat kerentanan sosial masyarakat telah banyak dilakukan melalui indeks kerentanan sosial. Kerentanan sosial wilayah menggambarkan kerapuhan sosial dari suatu wilayah akibat pengaruh dari adanya bahaya. Faktor-faktor kerentanan sosial menjadi salah satu hal yang krusial di tengah pandemi COVID-19. Hal ini dikarenakan gabungan faktor kerentanan sosial tersebut dapat meningkatkan risiko terkena COVID-19 dan risiko pulih dari kondisi setelah terpapar COVID-19.

Tujuan Analisis

Untuk mengetahui kelompok yang memiliki resiko lebih tinggi (rentan) dan seberapa cepat pulih terhadap dampak COVID-19 menjadi penting, mengingat hal ini dapat meningkatkan kesadaran, mencegah terinfeksi COVID-19, dan menurunkan tingkat kematian.

2.1 Data Loading

Pada analisis ini, dilakukan observasi pada level kecamatan dengan jumlah observasi sebanyak 44 kecamatan di Provinsi DKI Jakarta. Hal ini diakibatkan observasi level kecamatan memiliki data yang terbaru dan paling lengkap. Adapun variabel yang digunakan berasal dari berbagai sumber dengan tanggal terakhir diambil yaitu 30 April 2021, yaitu:

  • Website Open Data DKI Jakarta berupa variabel:
    • persentase penduduk perempuan,
    • persentase kepala keluarga berjenis kelamin perempuan,
    • persentase penduduk lansia,
    • jumlah pengangguran,
    • persentase penduduk wajib KTP,
    • jumlah daerah rawan banjir,
    • persentase pekerja di sektor informal, dan
    • jumlah puskesmas.
  • Website Open Data COVID-19 Provinsi DKI Jakarta berupa variabel:
    • jumlah kasus positif COVID-19,
    • jumlah penduduk yang dirawat akibat COVID-19, dan
    • jumlah penduduk yang melakukan isolasi mandiri akibat COVID-19.
  • Publikasi Kabupaten/Kota dalam Angka oleh BPS untuk setiap kota dan kabupaten di Provinsi DKI Jakarta berupa variabel:
    • jumlah RS umum

Berikut adalah 14 variabel yang digunakan:

rentan <- readxl::read_xlsx("dataset/df_kerentanansosial.xlsx")
rentan

Berikut adalah deskripsi data untuk rentan:

  • Kecamatan = Nama kecamatan pada masing-masing kota administratif pada Provinsi DKI Jakarta
  • perempuan = persentase penduduk perempuan
  • KK_perempuan = persenyase kepala keluarga berjenis kelamin perempuan
  • lansia = persentase penduduk lansia
  • pengangguran = persentase pengangguran
  • wajib_ktp = persentase penduduk wajib KTP
  • banjir = jumlah daerah rawan banjir
  • informal = persentase pekerja di sektor informal
  • RS = jumlah RS umum
  • puskesmas = jumlah puskesmas
  • positif_cov = jumlah kasus positif akibat COVID-19 (data 30 april 2021)
  • rawat = jumlah penduduk yang dirawat akibat COVID-19 (data 30 april 2021)
  • isoman = jumlah penduduk yang melakukan isolasi mandiri akibat COVID-19 (data 30 april 2021)
  • kode = kode wilayah untuk kebutuhan pemetaan peta.

2.2 Data Cleansing

Melakukan inspeksi untuk melihat keseluruhan data.

library(dplyr)
rentan <- rentan %>% 
  mutate(Kode_shp = as.character(Kode_shp))
glimpse(rentan)
#> Rows: 44
#> Columns: 14
#> $ Kecamatan    <chr> "Cakung", "Cempaka Putih", "Cengkareng", "Cilandak", "Cil…
#> $ perempuan    <dbl> 49.2096, 50.0816, 49.3437, 50.4252, 49.4534, 49.6205, 49.…
#> $ KK_perempuan <dbl> 18.05886, 23.00326, 18.54968, 20.79268, 20.51346, 17.1236…
#> $ lansia       <dbl> 6.217495, 10.852327, 6.585898, 9.310706, 5.975218, 7.0006…
#> $ pengangguran <dbl> 2909, 544, 2839, 584, 2746, 2388, 1818, 2071, 702, 1187, …
#> $ wajib_ktp    <dbl> 70.20066, 75.12540, 70.84496, 73.73298, 74.35980, 71.1721…
#> $ banjir       <dbl> 31, 0, 55, 2, 38, 15, 8, 2, 0, 28, 12, 32, 2, 0, 4, 4, 0,…
#> $ informal     <dbl> 6.503218, 13.910844, 6.791649, 10.869546, 11.266610, 14.2…
#> $ RS           <dbl> 1, 2, 1, 3, 1, 0, 1, 2, 1, 3, 3, 2, 0, 1, 3, 2, 4, 2, 1, …
#> $ puskesmas    <dbl> 9, 4, 10, 6, 10, 11, 6, 12, 4, 10, 6, 12, 7, 13, 11, 9, 8…
#> $ positiv_cov  <dbl> 11740, 4998, 13036, 8201, 7899, 10437, 9529, 14329, 3796,…
#> $ rawat        <dbl> 82, 50, 109, 62, 73, 63, 73, 139, 25, 67, 80, 55, 25, 73,…
#> $ isoman       <dbl> 102, 17, 146, 114, 63, 124, 108, 145, 42, 43, 175, 87, 19…
#> $ Kode_shp     <chr> "38", "5", "15", "28", "12", "42", "41", "39", "1", "16",…

2.2.1 Melakukan pengecekan missing value

melkukan pengecekan missing value pada data untuk setiap variabel.

colSums(is.na(rentan))
#>    Kecamatan    perempuan KK_perempuan       lansia pengangguran    wajib_ktp 
#>            0            0            0            0            0            0 
#>       banjir     informal           RS    puskesmas  positiv_cov        rawat 
#>            0            0            0            0            0            0 
#>       isoman     Kode_shp 
#>            0            0

2.2.2 Melakukan pengecekan duplikasi data

Cek terlebih dahulu apakah terdapat duplikasi pada data yang ada.

rentan %>% duplicated() %>% sum()
#> [1] 0

Insight: Data rentan bebas dari data yang terduplikat.

2.3 Exploratory Data Analysis

Sebelum dilakukannya analisis lebih lanjut, alangkah lebih baik kita mengeksplorasi data kerentanan sosial dalam bentuk visualisasi.

2.3.1 1. Gambaran umum variabel penyusun indeks kerentanan sosial

Pada step ini dilakukan untuk memahami data terlebih dahulu dan mencoba mengumpulkan sebanyak mungkin wawasan dari data.

Exploratory Data Analysis refers to the critical process of performing initial investigations on data so as to discover patterns,to spot anomalies,and to check the summary statistics and graphical representations

summary(rentan)
#>   Kecamatan           perempuan      KK_perempuan       lansia      
#>  Length:44          Min.   :48.27   Min.   :14.78   Min.   : 5.873  
#>  Class :character   1st Qu.:49.43   1st Qu.:18.93   1st Qu.: 7.844  
#>  Mode  :character   Median :49.67   Median :21.11   Median : 8.845  
#>                     Mean   :49.71   Mean   :21.09   Mean   : 8.997  
#>                     3rd Qu.:49.98   3rd Qu.:22.94   3rd Qu.: 9.776  
#>                     Max.   :50.98   Max.   :27.49   Max.   :13.219  
#>   pengangguran      wajib_ktp         banjir         informal     
#>  Min.   : 207.0   Min.   :70.20   Min.   : 0.00   Min.   : 6.148  
#>  1st Qu.: 596.2   1st Qu.:72.06   1st Qu.: 0.00   1st Qu.: 9.543  
#>  Median : 931.0   Median :73.04   Median : 9.00   Median :10.540  
#>  Mean   :1244.9   Mean   :73.57   Mean   :12.86   Mean   :12.412  
#>  3rd Qu.:1666.5   3rd Qu.:74.52   3rd Qu.:18.75   3rd Qu.:16.318  
#>  Max.   :3468.0   Max.   :79.73   Max.   :59.00   Max.   :25.738  
#>        RS          puskesmas      positiv_cov        rawat       
#>  Min.   :0.000   Min.   : 3.00   Min.   :  242   Min.   :  0.00  
#>  1st Qu.:1.000   1st Qu.: 6.00   1st Qu.: 5698   1st Qu.: 49.75  
#>  Median :1.500   Median : 7.50   Median : 7966   Median : 62.50  
#>  Mean   :1.818   Mean   : 7.75   Mean   : 7587   Mean   : 65.61  
#>  3rd Qu.:3.000   3rd Qu.: 9.25   3rd Qu.: 9622   3rd Qu.: 77.00  
#>  Max.   :7.000   Max.   :14.00   Max.   :14329   Max.   :142.00  
#>      isoman         Kode_shp        
#>  Min.   :  0.00   Length:44         
#>  1st Qu.: 41.75   Class :character  
#>  Median : 62.50   Mode  :character  
#>  Mean   : 67.93                     
#>  3rd Qu.: 88.50                     
#>  Max.   :175.00

Insight: Berdasarkan hasil summary(rentan):

  • Terdapat 49,67 persen jumlah penduduk perempuan yang ditunjukkan oleh rata-rata variabel perempuan dengan 21,09 persen merupakan kepala keluarga yang berjenis kelamin perempuan.

  • Persentase wajib KTP di DKI Jakarta yang ditunjukkan oleh variabel wajib_ktp secara umum hanya sebesar 73.57 persen, yang menandakan belum semua masyarakat sadar akan pentingnya kepemilikan KTP.

  • Terdapat 12.412 persen pekerja informal di DKI Jakarta

Dari hasil summary(), diketahui bahwa setiap variabel memiliki range nilai yang cukup berbeda, hal ini menyebabkan data yang dimiliki perlu untuk dilakukan scaling/standardisasi.

2.3.2 2. Melihat visualisasi antar beberapa variabel

Pertama dilakukan pemeriksaan nilai korelasi antar variabel dengan melihat scatter plot antar masing-masing nilai variabel berpasangan pada data.

ggpairs(rentan[,c(2:13)], upper = list(continuous = wrap("cor", size=2)))+
  theme(axis.text = element_text(colour = "black", size = 4),
        strip.text = element_text(size = 5))

Insight: - -

2.4 Penyusun Kerentanan Sosial

Pada bagian ini dilakukan tiga teknik analisis untuk melihat bagaimana kerentanan sosial yang diakibatkan COVID-19.

    1. Digunakan metode Factor Analysis untuk membentuk faktor umum dan interpretasi pada faktor umum dan menentukan variabel dari masing masing komponen yang terbentuk.
    1. Digunakan metode PCA untuk meringkas informasi serta akan dipilih beberapa PC untuk dapat merangkum informasi yang dibutuhkan.
    1. Kemudian melakukan pengklusteran menggunakan metode non-hierarchical clustering (Fuzzy C-Means Clustering)

2.4.1 Analisis Faktor / Factor Analysis dan Asumsi

Analisis faktor termasuk salah satu teknik statistika yang dapat digunakan untuk memberikan deskripsi yang relatif sederhana melalui reduksi jumlah variabel yang disebut faktor.

Analisis faktor dipergunakan untuk mereduksi data atau meringkas, dari variabel lama yang banyak diubah menjadi sedikit variabel baru yang disebut faktor, dan masih memuat sebagian besar informasi yang terkandung dalam variabel asli.

Analisis faktor dipergunakan dalam kondisi sebagai berikut :

  • Mengenali atau mengidentifikasi faktor, yang menjelaskan korelasi antara suatu set variabel.

  • Mengenali atau mengidentifikasi suatu set variabel baru yang independent dan lebih sedikit jumlahnya untuk menggantikan suatu set variabel asli yang saling berkorelasi di dalam analisis multivariat selanjutnya.

  • Mengidentifikasi suatu set variabel yang penting dari suatu set variabel yang lebih banyak jumlahnya untuk dipergunakan dalam analisis multivariat selanjutnya.

Karakteristik Analisis Faktor

  • Variabel-variabel dalam satu faktor mempunyai korelasi yang tinggi
  • Korelasi dengan variabel-variabel pada faktor lain relatif rendah
  • Tiap-tiap kelompok dari variabel mewakili suatu konstruksi dasar yang disebut faktor.

2.4.1.1 Melakukan uji multikolinearitas pada seluruh variabel.

Tujuan dari membentuk plot korelasi adalah untuk menguji kolinearitas dari data. Asumsi pada analisis faktor yaitu seluruh variabel harus memiliki korelasi, tetapi tidak terlalu tinggi.

ggcorr(rentan, label = T, hjust = 1, layout.exp = 2, size = 3, label_size = 2)

Correlation plot di atas yang digunakan untuk menguji multikolinearitas dari data. Pada analisis ini, digunakan batas (>0,85) sebagai batas korelasi ekstrem terhadap setiap variabel. Dapat dilihat bahwa semua variabel tidak memiliki nilai korelasi yang lebih dari 0,85.

2.4.1.2 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 hitung lebih rendah dari 0.5, maka analisis faktor tidak layak dilakukan. Sedangkan jika nilai KMO hitung lebih besar dari 0.5, maka analisis faktor layak dilakukan.

Untuk dapat melakukan pengujian KMO-MSA, pada R disediakan suatu function KMO() dari library psych.

  1. Pertama membentuk matriks korelasi dari data
rentan_cor <- cor(rentan[,2:13])
  1. Mencari nilai KMO-MSA
rentan_KMO<-KMO(rentan_cor)
rentan_KMO
#> Kaiser-Meyer-Olkin factor adequacy
#> Call: KMO(r = rentan_cor)
#> Overall MSA =  0.74
#> MSA for each item = 
#>    perempuan KK_perempuan       lansia pengangguran    wajib_ktp       banjir 
#>         0.59         0.65         0.74         0.68         0.75         0.85 
#>     informal           RS    puskesmas  positiv_cov        rawat       isoman 
#>         0.71         0.54         0.87         0.72         0.83         0.75

Insight: - Untuk nilai MSA didapatkan sebesar 0,73. Syarat dapat dilanjutkannya proses analisis faktor adalah nilai KMO lebih besar dari nilai 0,5. Dari hasil tersebut dapat dikatakan bahwa proses analisis faktor bisa dilanjutkan ke proses selanjutnya karena syarat dilanjutkannya proses analisis faktor terpenuhi.

  • Dari hasil output diketahui juga nilai MSA untuk masing-masing variabel (> 0,5). Sehingga bisa dinyatakan bahwa semua variabel dapat diprediksi dan dianalisis lebih lanjut

2.4.1.3 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).
bartlett.test(rentan[,2:13])
#> 
#>  Bartlett test of homogeneity of variances
#> 
#> data:  rentan[, 2:13]
#> Bartlett's K-squared = 4496.9, df = 11, p-value < 0.00000000000000022

Hasil perhitungan dengan R dihasilkan nilai Bartlett test of homogeneity variances sebesar 5144 dengan signifikansi sebesar 0,000. Dengan demikian, Bartlett test of homogeneity of variances memenuhi persyaratan karena signifikansi di bawah 0,05 (5%), sehingga variance tidak homogen.

2.4.2 Membentuk Analisis Faktor

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/covariance matrix dari data awal

fa_rentan = fa(r = rentan_cor)
fa_rentan
#> Factor Analysis using method =  minres
#> Call: fa(r = rentan_cor)
#> Standardized loadings (pattern matrix) based upon correlation matrix
#>                MR1      h2    u2 com
#> perempuan     0.03 0.00083 0.999   1
#> KK_perempuan -0.43 0.18150 0.818   1
#> lansia       -0.53 0.27661 0.723   1
#> pengangguran  0.65 0.41698 0.583   1
#> wajib_ktp    -0.62 0.38288 0.617   1
#> banjir        0.56 0.31535 0.685   1
#> informal     -0.57 0.32381 0.676   1
#> RS            0.19 0.03505 0.965   1
#> puskesmas     0.70 0.48876 0.511   1
#> positiv_cov   0.97 0.93146 0.069   1
#> rawat         0.75 0.56067 0.439   1
#> isoman        0.78 0.60599 0.394   1
#> 
#>                 MR1
#> SS loadings    4.52
#> Proportion Var 0.38
#> 
#> Mean item complexity =  1
#> Test of the hypothesis that 1 factor is sufficient.
#> 
#> The degrees of freedom for the null model are  66  and the objective function was  9.22
#> The degrees of freedom for the model are 54  and the objective function was  4.63 
#> 
#> The root mean square of the residuals (RMSR) is  0.18 
#> The df corrected root mean square of the residuals is  0.2 
#> 
#> Fit based upon off diagonal values = 0.81

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

Secara teori, kita dapat mengambil faktor sebanyak variabel yang kita miliki. Tapi hal tersebut tentunya berkebalikan dengan tujuan analisis faktor.

Sehingga, akan dicari faktor laten dalam kumpulan variabel. Oleh karena itu, kita hanya akan tertarik pada faktor-faktor yang menjelaskan proporsi variasi yang substansial dalam data.

Langkah di balik penentuan jumlah faktor optimal: 1. Mencari eigen value: variance/informasi yang dirangkum oleh tiap faktor

ev <- eigen(rentan_cor) # get eigenvalues
ev$values
#>  [1] 4.99667306 2.46039233 1.12792938 0.99712076 0.65274905 0.49540729
#>  [7] 0.37580580 0.36473044 0.24043800 0.13934914 0.10192060 0.04748414
  1. Membentuk scree plot: grafik yang menunjukkan relasi antara faktor dengan nilai Eigennya

Di R terdapat sebuah fungsi yaitu fa.parallel(). Fungsi ini mencari jumlah faktor optimal dari nilai eigen yang berurutan, kemudian penurunan tajam dalam plot menunjukkan jumlah komponen atau faktor yang sesuai untuk diekstraksi.

nfactors <- fa.parallel(rentan[,2:13], fa = "fa")

#> Parallel analysis suggests that the number of factors =  2  and the number of components =  NA

Insight: Dari hasil paralell analysis scree plot di atas dihasilkan factors=2 sebagai jumlah faktor yang optimal pada data rentan.

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() - 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_rentan_opt <- fa(r = rentan_cor, nfactors = nfact, rotate = "varimax")
fa_rentan_opt
#> Factor Analysis using method =  minres
#> Call: fa(r = rentan_cor, nfactors = nfact, rotate = "varimax")
#> Standardized loadings (pattern matrix) based upon correlation matrix
#>                MR1   MR2   h2      u2 com
#> perempuan     0.21  0.57 0.37  0.6313 1.3
#> KK_perempuan -0.24  0.80 0.70  0.2972 1.2
#> lansia       -0.33  0.90 0.93  0.0705 1.3
#> pengangguran  0.60 -0.20 0.40  0.5982 1.2
#> wajib_ktp    -0.58  0.18 0.37  0.6297 1.2
#> banjir        0.56 -0.07 0.32  0.6826 1.0
#> informal     -0.43  0.61 0.55  0.4521 1.8
#> RS            0.31  0.32 0.20  0.7994 2.0
#> puskesmas     0.69 -0.11 0.48  0.5152 1.1
#> positiv_cov   1.00 -0.03 1.01 -0.0074 1.0
#> rawat         0.87  0.16 0.78  0.2229 1.1
#> isoman        0.79 -0.06 0.63  0.3660 1.0
#> 
#>                        MR1  MR2
#> SS loadings           4.36 2.38
#> Proportion Var        0.36 0.20
#> Cumulative Var        0.36 0.56
#> Proportion Explained  0.65 0.35
#> Cumulative Proportion 0.65 1.00
#> 
#> Mean item complexity =  1.3
#> Test of the hypothesis that 2 factors are sufficient.
#> 
#> The degrees of freedom for the null model are  66  and the objective function was  9.22
#> The degrees of freedom for the model are 43  and the objective function was  2.13 
#> 
#> The root mean square of the residuals (RMSR) is  0.08 
#> The df corrected root mean square of the residuals is  0.1 
#> 
#> Fit based upon off diagonal values = 0.96

Dari output di atas dengan menggunakan faktor sebanyak 2 didapatkan beberapa informasi sebagai berikut:

  • SS Loadings: Sum square loadings (jumlah kuadrat masing-masing nilai loading)

  • Proportion Var: Memberitahu kita berapa banyak varians/informasi keseluruhan yang diperhitungkan faktor dari semua variabel.

  • Cumulative Var: Nilai akumulasi dari proportion var.

  • Proportion Explained: Jumlah variansi relatif yang terjelaskan. Merupakan pembagian dari proportion var/ sum(proportion var).

  • Cumulative Proportion: Jumlah akumulasi dari proportion explained.

  • MR: Factor Loading -> kekuatan hubungan dari masing-masing variabel terhadap faktor utama.

  • h2: jumlah varians dalam item/variabel yang dijelaskan oleh faktor-faktor (yang dipertahankan) -> communality

  • u2: merupakan nilai 1-h2 adalah residual variance.

  • com: item complexity.

Dengan menggunakan 2 faktor, maka informasi keseluruhan yang diperhitungkan faktor dari semua variabel sebanyak 0,59 atau 59%.

2.4.3 Pembentukan Faktor Umum dan Interpretasi

Salah satu tujuan dari factor analysis adalah melakukan ekstraksi dengan menghasilkan faktor laten. Faktor laten yang dihasilkan nantinya akan dijadikan sebagai faktor-faktor pembentuk kerentanan sosial pada data.

fa.diagram(fa_rentan_opt, rsize = 2)

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 2 faktor/ komponen utama, yaitu kesehatan, Lingkungan, dan pekerjaan serta kependudukan dan KRT perempuan.

  • Faktor Kesehatan, Lingkungan, dan Pekerjaan

Faktor ini terdiri dari tujuh variabel pembentuk, yaitu jumlah kasus positif COVID-19, jumlah penduduk yang dirawat akibat COVID-19, jumlah penduduk yang melakukan isolasi mandiri akibat COVID-19, jumlah puskesmas, jumlah penduduk dengan status pengangguran, persentase penduduk wajib KTP, dan jumlah daerah rawan banjir. Pada faktor ini menjelaskan 36 persen varians yang membentuk kerentanan sosial. Enam variabel berpengaruh positif dan satu variabel berpengaruh negatif dalam kerentanan sosial.

Daerah yang memiliki jumlah penderita COVID-19 yang tinggi meningkatkan kontribusi terhadap kerentanan, dimana penularan COVID-19 yang sangat cepat dapat menimbulkan daerah tersebut diberlakukan pembatasan kegiatan, sehingga memperlambat pemulihan terhadap dampak yang ditimbulkan COVID-19.

Kemudian, persentase penduduk wajib KTP yang banyak dapat menurunkan kerentanan sosial, hal ini dikarenakan masyarakat yang memiliki KTP akan lebih mudah mendapatkan akses terhadap pendataan, sehingga dengan pendataan yang baik dapat menyalurkan bantuan yang terarah dan terukur sesuai KTP dan menyebabkan pemulihan lebih cepat.

  • Faktor Kependudukan dan KRT Perempuan

Faktor kependudukan terdiri dari lima variabel pembentuk, yaitu persentase penduduk lansia, persentase kepala keluarga berjenis kelamin perempuan, persentase pekerja di sektor informal, persentase penduduk perempuan, dan jumlah RS. Pada faktor ini menjelaskan 20 persen varians yang membentuk kerentanan sosial.

Struktur penduduk yang didominasi oleh penduduk lansia menyebabkan ketergantungan yang besar terhadap orang lain, sehingga ketika terjadi COVID-19 kelompok ini akan sangat rentan. Kelompok ini akan lebih sulit untuk memulihkan diri dikarenakan kemampuan fisik yang sudah menurun, sehingga mobilitas terhambat.

Selain itu, perempuan menjadi kelompok yang lebih sulit untuk pulih dari dampak COVID-19.

2.5 Dive Deeper

Sebelumnya, kita menggunakan jumlah faktor optimal berdasarkan scree plot yang ada pada function fa.parallel. Akan tetapi, beberapa literatur menyebutkan bahwa jumlah faktor optimal dapat dicari menggunakan nilai eigen value > 1.

ev$values
#>  [1] 4.99667306 2.46039233 1.12792938 0.99712076 0.65274905 0.49540729
#>  [7] 0.37580580 0.36473044 0.24043800 0.13934914 0.10192060 0.04748414

dari output di atas terdapat 3 nilai eigen yang besarnya >1. Coba tambahkan jumlah faktor yang dibuat menjadi 3 faktor. Lalu coba interpretasikan faktor pembentuk yang baru sesuai dengan pemahaman Anda.

jawaban

#please type your code
fa_rentan_3 <- fa(r = rentan_cor, nfactors = 3, rotate = "varimax")
fa_rentan_3
#> Factor Analysis using method =  minres
#> Call: fa(r = rentan_cor, nfactors = 3, rotate = "varimax")
#> Standardized loadings (pattern matrix) based upon correlation matrix
#>                MR1   MR2   MR3   h2      u2 com
#> perempuan     0.52  0.44 -0.20 0.50  0.4988 2.3
#> KK_perempuan -0.09  0.93  0.02 0.87  0.1278 1.0
#> lansia        0.01  0.88 -0.32 0.88  0.1226 1.3
#> pengangguran  0.13 -0.16  0.95 0.95  0.0536 1.1
#> wajib_ktp    -0.53  0.33 -0.18 0.41  0.5863 1.9
#> banjir        0.32 -0.11  0.50 0.37  0.6312 1.8
#> informal     -0.24  0.69 -0.18 0.57  0.4324 1.4
#> RS            0.37  0.23  0.09 0.20  0.8018 1.8
#> puskesmas     0.45 -0.19  0.51 0.50  0.4997 2.3
#> positiv_cov   0.85 -0.24  0.48 1.00 -0.0031 1.8
#> rawat         0.72  0.00  0.48 0.75  0.2460 1.7
#> isoman        0.78 -0.27  0.23 0.73  0.2706 1.4
#> 
#>                        MR1  MR2  MR3
#> SS loadings           2.91 2.69 2.13
#> Proportion Var        0.24 0.22 0.18
#> Cumulative Var        0.24 0.47 0.64
#> Proportion Explained  0.38 0.35 0.28
#> Cumulative Proportion 0.38 0.72 1.00
#> 
#> Mean item complexity =  1.7
#> Test of the hypothesis that 3 factors are sufficient.
#> 
#> The degrees of freedom for the null model are  66  and the objective function was  9.22
#> The degrees of freedom for the model are 33  and the objective function was  1.2 
#> 
#> The root mean square of the residuals (RMSR) is  0.05 
#> The df corrected root mean square of the residuals is  0.07 
#> 
#> Fit based upon off diagonal values = 0.99
# please type your code
fa.diagram(fa_rentan_3, rsize = 2)

Faktor 1 Karakteristik: - -

Faktor 2 Karakteristik: - -

Faktor 3 Karakteristik: - -

2.5.1 Indeks Kerentanan Sosial

Ada banyak metode untuk melakukan pembobotan dalam agregasi indeks. Beberapa di antaranya sudah pernah dilakukan oleh beberapa peneliti:

  • (Cutter et al., 2003) menggunakan pembobot tertimbang,

  • (Solangaarachchi et al., 2012) menggunakan pembobot berdasarkan kontribusi terhadap varians terjelaskan,

  • (Siagian et al., 2014) menggunakan pembobot tidak sama, dan

  • (Rygel et al., 2006) menggunakan pareto-ranking. Tidak ada kesepakatan yang membatasi penggunaan pembobotan yang berbeda.

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.65*komponen1)+(0.35*komponen2)|\]

\[SoVI=|\sum(bobot_{komponen_1}*komponen_1)+...+(bobot_{komponen_n}*komponen_n)|\] SoVI merujuk peda Social Vulnarability Index.

2.5.2 Melakukan PCA pada data rentan

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.

\[ PC1 = a_{11}x_1 + a_{12}x_2 + ... + a_{1p}x_p \] di mana:

  • vektor \(a_1\) adalah eigen vector dari suatu matriks varian kovarians

  • Nilai \(x_i\) adalah nilai suatu data pada baris ke-i

Hal-hal yang menjadi pedoman dalam menentukan jumlah PC, yaitu:

    1. Mempertahankan PC yang cukup untuk menjelaskan persentase yang spesifik dari total variansi/informasi
    1. Mempertahankan PC yang memiliki eigen value lebih besar dibandingkan rata-rata eigen value dari setiap PC

PCA bertujuan untuk melakukan reduksi data dari sekumpulan variabel (Mickey & Sharma, 1997). Pada analisis ini, PCA digunakan untuk menghitung nilai SoVI masing-masing kecamatan yang ada pada dataset dengan cara mengambil sejumlah komponen hasil ekstraksi dari PCA. Untuk itu akan dilakukan inspeksi untuk pca$x untuk mendapatkan nilai data yang baru.

rentan_pca<-prcomp(rentan[,2:13], scale. = T)
as.data.frame(rentan_pca$x)

Sesuai dengan hasil dari factor analysis dengan objek fa_rentan_opt(), akan kita ambil sebanyak 2 principal component untuk kebutuhan pemetaan SoVI masing-masing kecamatan di Provinsi DKI Jakarta.

pc_keep <- rentan_pca$x[, 1:2] %>% 
  as.data.frame()
pc_keep

Melakukan perhitungan persamaan indeks kerentanan sosial. Sehingga dihasilkan SoVI atau Social Vulnerability Index untuk masing-masing kecamatan.

SoVI <- pc_keep %>% 
  mutate(SoVI = 0.65*abs(PC1) + 0.35*abs(PC2))
SoVI

Melakukan penggabungan variabel kecamatan, kode atau kode area, 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 rentan untuk kebutuhan visualisasi geospasial.

rentan_new <- rentan %>% 
  select_if(~!is.numeric(.)) %>% # ambil kolom Kecamatan
  cbind(SoVI = SoVI[,3]) # gabungkan dengan kolom SoVI
  
rentan_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.

# 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))
}
rentan_new <- natural_breaks(rentan_new, "SoVI")
rentan_new
# Melihat threshold untuk masing-masing kategori 
getJenksBreaks(rentan_new$SoVI, 4)
#> [1] 0.2817538 1.1949798 2.2508194 3.8883591
# Melihat jumlah kecamatan per masing-masing kategori
rentan_new %>% 
  group_by(jenks) %>% 
  summarise(Total = n_distinct(Kecamatan))

Hasil yang didapatkan yaitu 0.28175 sampai 1.1949 untuk kategori rendah; 1.1949 sampai 2.2508 untuk kategori sedang; 2.2508 sampai 3.88835 untuk kategori tinggi; dan . Secara umum, sebagian besar masyarakat di wilayah DKI Jakarta memiliki kerentanan sosial terhadap COVID-19 yang berada pada rentang kategori rendahsedang.

2.6 Visualisasi Geospasial Kerentanan Sosial Kecamatan di Provinsi DKI Jakarta

Pemetaan dalam bentuk visual dilakukan untuk melihat persebaran indeks kerentanan sosial menurut kecamatan di DKI Jakarta. Visualisasi yang akan dilakukan dinamakan visualisasi geospasial, kita bisa memberikan informasi yang hanya dengan bantuan peta maka informasi tersebut dapat tersampaikan dengan baik.

Pada analisis ini akan dibuat visualisasi geocoding berupa choropleth.

2.6.1 Mengambil data spasial

Pertama-tama dilakukan penarikan data shapefile yang mengandung data geometri untuk kecamatan di DKI Jakarta melalui web https://hub.arcgis.com/datasets/18d008ec01aa41ab928c1959c451c6e7/explore?layer=0&location=-6.257734%2C106.896911%2C12.75

2.6.2 Membaca data geometri spasial

Langkah kedua, untuk membaca data .shp di R menggunakan function read_sf() pada packagesf.

2.6.3 Combining Data

Dalam melakukan penggabungan data, ada beberapa hal yang perlu dilakukan: 1. Mengubah tipe data OBJECTID menjadi character agar dapat dilakukan penggabungan data. 2. Menggabungkan data spasial yang dimiliki pada object jakarta_rentan_new dimana variabel OBJECTID akan dipasangkan dengan dataset rentan pada variabel Kode_shp 3. Melakukan reorder baris pada dataframe hasil gabungan menggunakan column name KECAMATAN

jakarta_rentan_new <- shapefile %>% 
  mutate(OBJECTID = as.character(OBJECTID))
glimpse(jakarta_rentan_new)
#> Rows: 44
#> Columns: 11
#> $ OBJECTID_1 <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, …
#> $ OBJECTID   <chr> "43", "44", "1", "2", "3", "4", "5", "6", "7", "8", "9", "1…
#> $ NO_KAB     <chr> NA, NA, "71", "71", "71", "71", "71", "71", "71", "71", "72…
#> $ NO_KEC     <chr> NA, NA, "01", "02", "03", "04", "05", "06", "07", "08", "01…
#> $ KECAMATAN  <chr> "KEP. SERIBU SELATAN", "KEP. SERIBU UTARA", "GAMBIR", "SAWA…
#> $ WILAYAH    <chr> "KAB.ADM.KEP.SERIBU", "KAB.ADM.KEP.SERIBU", "JAKARTA PUSAT"…
#> $ Shape__Are <dbl> 1528586439, 3126051321, 7508915, 5358573, 7168174, 4350701,…
#> $ Shape__Len <dbl> 175577.253, 229963.261, 13230.033, 13639.388, 13630.925, 13…
#> $ Shape_Leng <dbl> 0.46211226, 0.85004576, 0.11956374, 0.12328821, 0.12317691,…
#> $ Shape_Area <dbl> 0.0003136000, 0.0005370378, 0.0006133681, 0.0004376953, 0.0…
#> $ geometry   <MULTIPOLYGON [°]> MULTIPOLYGON Z (((106.7359 ..., MULTIPOLYGON Z…
jakarta_rentan_clean <- jakarta_rentan_new %>% 
  left_join(rentan_new, by = c("OBJECTID" = "Kode_shp")) %>% 
  arrange(KECAMATAN) ##mengurutkan datanya berdasarkan variabel kecamatan

2.6.4 Mengubah object spasial geometri 3 dimensi yang kita miliki menjadi 2 dimensi

Dikarenakan output yang ingin ditampilkan adalah visualisasi geometri map 2 dimensi menggunakan leaflet, maka kita perlu mengubah dimensi object spasial geometri kita menjadi 2 dimensi. Di R, hal ini dapat dilakukan dengan bantuan function st_zm() dengan parameter drop = TRUE.

jakarta_rentan_clean <- st_zm(jakarta_rentan_clean, drop = T, what = "ZM")

2.6.5 Membuat Choropleth Map menggunakan leaflet()

Dalam penyajian data, pertama-tama dimasukkan data rentan dalam leaflet. Lalu, akan ditentukan pewarnaan yang sesuai untuk choropleth yang nanti akan dibentuk. Palette ditentukan dari kuning hingga merah (silahkan lihat cheatsheet yang sudah disediakan). Selain itu, dibuat juga popup pada tiap tempat. Referensi untuk melakukan pemilihan warna palette: https://www.datanovia.com/en/blog/the-a-z-of-rcolorbrewer-palette/

library(leaflet)
m <- leaflet(jakarta_rentan_clean)

# popup
popup.cont  <- paste("Region: ", jakarta_rentan_clean$KECAMATAN, "<br>",
                      "Value: ", jakarta_rentan_clean$SoVI, "<br>")

# mendefinisikan variabel yang menjadi dasar pewarnaan
col <- jakarta_rentan_clean$SoVI

# kategorisasi variabel
bins <- c(getJenksBreaks(jakarta_rentan_clean$SoVI, 4))

# melakukan pewarnaan
pal <- colorBin("YlOrRd", 
                domain = col, #variabel yang ingin dipetakan
                bins = bins ) 

Terakhir, kita akan membentuk peta dengan tiles yang disediakan oleh CartoDB menggunakan fungsi addProviderTiles. Lalu kita atur poligon dan legenda pada peta, serta mengubah nama tiap elemen pada legenda agar lebih masuk akal.

m %>% 
  addProviderTiles(providers$CartoDB.DarkMatter) %>% 
  addPolygons(fillColor = pal(col),
              weight = 1,
              opacity = 1,
              color = "black",
              dashArray = "3",
              fillOpacity = 0.8,
              popup = popup.cont) %>%
  addLegend("bottomright", 
            pal = pal,
            values = ~col,
            title = "Social Vulnerability Index",
            labFormat = labelFormat(digits = 2),
            opacity = 1)

2.7 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 rentan 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.

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

Kami melakukan pengolahan klaster menggunakan perangkat lunak R-Studio dengan package ppclust.

2.7.2 Data pre-processing

Langkah pertama mendefinisikan data yang akan digunakan dalam analisis FCM ini ke dalam object rentan_FCM dimana data ini berisi variabel-variabel bertipe data numerik dan keterangan kecamatan.

rentan_FCM <- rentan[,1:13]
head(rentan_FCM)

Melakukan assign nilai dari kolom Kecamatan yang ada pada data rentan kita menjadi nama baris.

library(tidyverse)
rentan_FCM <- rentan_FCM %>% 
  remove_rownames %>% 
  column_to_rownames(var="Kecamatan")
head(rentan_FCM)

2.7.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:

\[ a'_i = \frac{a_i - min(a)}{max(a)-min(a)}\] 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 
rentan_scale <- as.data.frame(lapply(rentan_FCM, minMax))
#Menambahkan rownames kecamatan pada data yang sudah discale
rentan_FCM <- as.data.frame(rentan_scale, rentan$Kecamatan)

2.7.4 Pemilihan nilai k optimum

Pada analisis ini, akan digunakan metode silhouette untuk melakukan pemilihan nilai k (jumlah cluster) optimal.

Silhouette mengukur seberapa baik suatu observasi menjadi satu cluster atau memperkirakan nilai rata-rata jarak antar cluster. Nilai dari silhouette coefficient menginterpretasikan seberapa dekat suatu data pada satu cluster terhadap tetangga pada cluster yang lain. Semakin besar nilai silhouette (mendekati 1), maka semakin baik cluster tersebut.

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.

set.seed(123)
 
elbow <- 
fviz_nbclust(
  x = rentan_scale,
  FUNcluster = kmeans,
  method = "silhouette",
  k.max = 10
) + labs(subtitle = "Metode Elbow")
elbow

Nilai k optimum dari data rentan_FCM didapatkan pada saat k=2

2.7.5 FCM menggunakan fcm()

Membuat object fcm.rentan dengan menggunakan fungsi fcm() dengan jumlah \(k=2\) dan membership degree \(m=2\).

library(ppclust)
set.seed(123)
fcm.rentan <- fcm(x = rentan_FCM, 
                  centers = 2)
summary(fcm.rentan)
#> Summary for 'fcm.rentan'
#> 
#> Number of data objects:  44 
#> 
#> Number of clusters:  2 
#> 
#> Crisp clustering vector:
#>  [1] 2 1 2 2 2 2 2 2 1 1 2 2 1 2 1 2 2 1 2 2 1 1 2 2 2 1 1 1 1 2 1 2 2 2 2 2 1 1
#> [39] 1 1 1 1 2 1
#> 
#> Initial cluster prototypes:
#>           perempuan KK_perempuan    lansia pengangguran  wajib_ktp    banjir
#> Cluster 1 0.4207626    0.2174588 0.0000000    0.5617909 0.04974973 0.0000000
#> Cluster 2 0.6848996    0.3799949 0.4628804    0.5716038 0.21393593 0.0338983
#>             informal        RS puskesmas positiv_cov     rawat    isoman
#> Cluster 1 0.01501601 0.1428571 0.9090909    0.553489 0.5140845 0.2857143
#> Cluster 2 0.01414969 0.2857143 0.8181818    1.000000 0.9788732 0.8285714
#> 
#> Final cluster prototypes:
#>           perempuan KK_perempuan    lansia pengangguran wajib_ktp    banjir
#> Cluster 1 0.5389905    0.6162944 0.5619571    0.2209669 0.4455888 0.1271250
#> Cluster 2 0.5210274    0.3989750 0.3105454    0.4079368 0.2562638 0.2963236
#>            informal        RS puskesmas positiv_cov     rawat    isoman
#> Cluster 1 0.4673842 0.2265458 0.3294159   0.3923736 0.3665275 0.2634173
#> Cluster 2 0.1986334 0.2812407 0.5169692   0.6422221 0.5513181 0.5059506
#> 
#> Distance between the final cluster prototypes
#>           Cluster 1
#> Cluster 2 0.4759771
#> 
#> Difference between the initial and final cluster prototypes
#>            perempuan KK_perempuan     lansia pengangguran  wajib_ktp    banjir
#> Cluster 1  0.1182279   0.39883559  0.5619571   -0.3408239 0.39583911 0.1271250
#> Cluster 2 -0.1638722   0.01898006 -0.1523350   -0.1636670 0.04232784 0.2624253
#>            informal           RS  puskesmas positiv_cov      rawat      isoman
#> Cluster 1 0.4523682  0.083688701 -0.5796750  -0.1611154 -0.1475570 -0.02229703
#> Cluster 2 0.1844837 -0.004473622 -0.3012126  -0.3577779 -0.4275551 -0.32262080
#> 
#> Root Mean Squared Deviations (RMSD): 1.015206 
#> Mean Absolute Deviation (MAD): 34.74745 
#> 
#> Membership degrees matrix (top and bottom 5 rows): 
#>               Cluster 1 Cluster 2
#> Cakung        0.2248502 0.7751498
#> Cempaka Putih 0.8585258 0.1414742
#> Cengkareng    0.2755678 0.7244322
#> Cilandak      0.4970376 0.5029624
#> Cilincing     0.2914759 0.7085241
#> ...
#>               Cluster 1 Cluster 2
#> Tamansari     0.7645847 0.2354153
#> Tambora       0.7258928 0.2741072
#> Tanahabang    0.8497685 0.1502315
#> Tanjung Priok 0.3348927 0.6651073
#> Tebet         0.7364816 0.2635184
#> 
#> Descriptive statistics for the membership degrees by clusters
#>           Size       Min        Q1      Mean    Median        Q3       Max
#> Cluster 1   20 0.5704471 0.6287925 0.7072370 0.7270529 0.7704006 0.8585258
#> Cluster 2   24 0.5029624 0.6715673 0.7042262 0.7164671 0.7553940 0.9221182
#> 
#> Dunn's Fuzziness Coefficients:
#> dunn_coeff normalized 
#>  0.6029278  0.2058555 
#> 
#> Within cluster sum of squares by cluster:
#>         1         2 
#>  9.563466 10.156608 
#> (between_SS / total_SS =  20.84%) 
#> 
#> 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"

Untuk mengetahui jumlah kecamatan untuk setiap clusternya digunakan inspeksi pada object fcm$csize

fcm.rentan$csize
#>  1  2 
#> 20 24

Berikut merupakan nilai untuk masing-masing kecamatan dan juga hasil cluster setiap kecamatannya. Hasil cluster dapat diakses dengan melakukan inspeksi pada object fcm$cluster.

fcm.rentan$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 
#>  2  1  2  2  2  2  2  2  1  1  2  2  1  2  1  2  2  1  2  2  1  1  2  2  2  1 
#> 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 
#>  1  1  1  2  1  2  2  2  2  2  1  1  1  1  1  1  2  1
fcm_keep<-data.frame(rentan_FCM, fcm.rentan$cluster)
fcm_keep
# Inspeksi nilai-nilai kecamatan permasing-masing cluster
cluster <- fcm_keep %>% 
  filter(fcm.rentan.cluster %in% 2)
cluster
  • Kluster 1 berisi 20 Kecamatan, mencakup Kecamatan Cempaka Putih, Gambir, Grogolpetamburan, Johar Baru, Kebayoran Baru, Kelapa Gading, Kepulauan Seribu Selatan, Kepulauan Seribu Utara, Mampang Prapatan, Matraman, Menteng, Pademangan, Pancoran, Sawah Besar, Senen, Setia Budi, Tamansari, Tambora, Tanahabang, dan Tebet

  • Kluster 2 berisi 24 Kecamatan, mencakup Kecamatan Cakung, Cengkareng, Cilandak, Cilincing, Cipayung, Ciracas, Duren Sawit, Jagakarsa, Jatinegara, Kebayoran Lama, Kebon Jeruk, Kemayoran, Kembangan, Koja, Kramatjati, Makasar, Palmerah, Pasar Minggu, Pasarrebo, Penjaringan, Pesanggrahan, Pulogadung, dan Tanjung Priok.

###Interpretasi: Cluster Profiling

Untuk dapat melakukan cluster profiling, dibutuhkan informasi pusat cluster (centroid) masing-masing variabel terhadap cluster yang dihasilkan. Dalam object fcm.rentan, kita dapat melakukan inspeksi menggunakan fcm.rentan$v yang mana merupakan matriks numerin yang berisi pusat masing-masing cluster (centroid).

data.frame(fcm.rentan$v)

Cluster Profiling:

  • Cluster 1 :
    • Pada cluster 1 ini terdapat pada 5 variabel-variabel yang memiliki nilai tinggi di antaranya perempuan, KK_perempuan, lansia, jumlah penduduk wajib_ktp, penduduk yang bekerja di sektor informal
    • Dapat dilihat bahwa pada cluster ini berisi kecamatan-kecamatan dengan persentase lansia dan kepala keluarga perempuan yang lebih tinggi dibandingkan klaster lain
    • Pada klaster ini, bagi lansia akan lebih sulit pulih diakibatkan terdapat batasan pergerakan dan ketergantungan terhadap orang lain. Sedangkan pada kepala keluarga perempuan terdapat keterbatasan pilihan pekerjaan, upah yang rendah dan tanggung jawab mengurus rumah tangga.
  • Cluster 2 :
    • Pada cluster 2 ini terdapat pada 7 variabel-variabel yang memiliki nilai tinggi di antaranya pengangguran, persentase daerah rawan banjir, RS, puskesmas, positiv_cov, rawat, isoman
    • Beberapa hal ini ditunjukkan dari jumlah pasien positif dan dirawat akibat COVID-19 menjadi masalah pada klaster ini, dimana dari data dapat dilihat kecamatan tersebut memiliki jumlah positif dan dirawat akibat covid cukup tinggi
    • Selanjutnya, banjir juga merupakan masalah yang ada pada cluster ini, di mana beberapa kecamatan yang berada pada cluster 1 ini merupakan daerah yang rentan banjir.

Berikut merupakan hasil visualisasi kluster dalam plot 2 dimensi.

fcm.rentan2 <- ppclust2(fcm.rentan, "fanny")
factoextra::fviz_cluster(fcm.rentan2, data = rentan_FCM, 
  ellipse.type = "convex",
  palette = "jco",
  repel = TRUE)

2.8 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 2 faktor yang berpengaruh terhadap kerentanan sosial yaitu kesehatan dan pekerjaan serta kependudukan dan KRT perempuan. Oleh karena itu, disarankan bahwa penanggulan dampak COVID-19 dapat diintegrasikan dengan program pengembangan lainnya yang sesuai dengan beberapa faktor yang telah disebutkan.

knitr::include_graphics("assets/csr.PNG")

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.

2.9 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 berpengaruh terhadap kerentanan sosial, yaitu kesehatan dan pekerjaan serta kependudukan dan KRT perempuan.

Analisis ini menggunakan 12 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.