Kerentanan Sosial Terhadap COVID-19 di DKI Jakarta Menggunakan Analisis Faktor dan Kluster
Pendahuluan
Latar Belakang
Setiap harinya, jumlah kasus positif COVID-19 di Indonesia terus mengalami peningkatan. 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 1 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.
Tujuan
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.
Dataset
Sumber data yang digunakan untuk melakukan analisis ini bersumber dari:
- Website Open Data DKI Jakarta berupa variabel:
- persentase penduduk perempuan,
- persentase kepala keluarga berjenis kelamin perempuan,
- persentase penduduk lansia,
- persentase 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
Theoretical Concept
Multivariate Analysis
Multivariate analysis adalah sekelompok metode statistik yang berfokus pada mempelajari banyak variabel bersama-sama sambil berfokus pada variasi yang dimiliki oleh variabel-variabel tersebut.
Multivariate Statistics deals with the treatment of data sets with a large number of dimensions.
Analisis Faktor / Factor Analysis
Analisis faktor bertujuan untuk menerangkan struktur ragam-peragam
melalui kombinasi linier dari variabel-variabel pembentuknya. Pada
dasarnya, analisis faktor mendekatkan data pada suatu pengelompokkan
berdasarkan adanya keeratan hubungan antar-dimensi pembentuk faktor.
Statistik kunci yang relevan dengan analisis faktor antara lain
Bartletts test of sphericity
Bartletts test of sphericity yaitu suatu uji statistik yang dipergunakan untuk menguji hipotesis bahwa variabel tidak saling berkorelasi dalam populasi. Statistik uji Bartlett adalah sebagai berikut:
\[\chi^2= -[(N-1)-\frac{2p+5}{6}] ln|R|\] dengan \(N\) merupakan jumlah observasi, \(p\) merupakan jumlah variabel, dan \(|R|\) merupakan determianan matriks korelasi.
Kaiser-Meyer-Olkin (KMO)
KMO adalah uji yang dilakukan untuk menentukan kelayakan (appropriateness) dari suatu analisis faktor yang akan dilakukan. Skala uji KMO berkisar antara 0 sampai 1. Jika nilai KMO 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. Statistik Uji Kaiser-Meyer-Olkin adalah sebagai berikut:
\[KMO = \frac {\sum\sum_{j≠k} r^2_{jk}}{\sum\sum_{j≠k}r^2_{jk} + \sum\sum_{j≠k}p^2_{jk}}\] di mana:
\(r_{jk}\) = koefisien korelasi antara variabel ke-j dan ke-k
\(p_{jk}\) = koefisien korelasi parsial antara variabel ke-j dan ke-k
Measure of Sampling Adequacy (MSA)
Measure of Sampling Adequacy (MSA) yaitu suatu indeks perbandingan natara koefisien korelasi parsial untuk setiap variabel. MSA digunakan untuk mengukur kecukupan sampel.
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:
- Mempertahankan PC yang cukup untuk menjelaskan persentase yang spesifik dari total variansi/informasi
- Mempertahankan PC yang memiliki eigen value lebih besar dibandingkan rata-rata eigen value dari setiap PC
Fuzzy C-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.
Clustering adalah pengelompokan data menjadi beberapa cluster, di mana setiap data pada cluster yang sama akan memiliki kemiripan dibandingkan dengan cluster yang berbeda.
FCM adalah algoritma partitial clustering sehingga 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, lalu diperbarui setiap iterasi dan terakhir data dikelompokkan berdasarkan jarak antar data dengan setiap centroid.
Uji Kruskal Wallis
Pengujian ini merupakan uji non parametrik yang digunakan untuk menentukan ada atau tidaknya perbedaan yang signifikan pada dua atau lebih kelompok. Asumsi yang diperlukan dalam melakukan pengujian Kruskal Wallis adalah:
- Variabel dependen berskala numerik baik interval/rasio atau skala ordinal
- Variabel independent berskala kategorik dengan 2 atau lebih kategorik
- Independen. Artinya sampel di tiap kategori harus bebas satu sama lain.
Load Packages
Berikut merupakan basic packages yang digunakan selama pengerjaan analisis:
library(readr) # untuk membaca data
library(dplyr) # untuk data manipulation
library(GGally) # untuk membuat matriks korelasi
library(psych) # untuk melakukan analisis KMO
library(ggplot2) # untuk membuat plot
library(GPArotation) # untuk melakukan factor analysis
library(factoextra) # untuk mengekstrak dan visualisasi Hasil analisis data multivariat
library(gridExtra) # untuk membuat mixed plot dalam satu hasil
library(tidyr)
library(rmdformats)
library(BAMMtools) # untuk membuat natural breaks pada pemetaan
library(geojsonio) # untuk membaca file geojson
library(stringr)
library(leaflet) # untuk visualisasi interaktif
library(ppclust) # untuk membuat Probabilistic and Possibilistic Cluster Analysis
Data Loading
Pada project 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 yang telah disebutkan di atas. Berikut adalah 14 variabel yang digunakan:
<- readxl::read_xlsx("dataset/kerentanansosial.xlsx")
rentan ::paged_table(rentan) rmarkdown
Berikut adalah deskripsi data untuk rentan
:
Kecamatan
= Nama kecamatan pada masing-masing kota administratif pada Provinsi DKI Jakartaperempuan
= persentase penduduk perempuanKK_perempuan
= persenyase kepala keluarga berjenis kelamin perempuanlansia
= persentase penduduk lansiapengangguran
= persentase pengangguranwajib_ktp
= persentase penduduk wajib KTPbanjir
= jumlah daerah rawan banjirinformal
= persentase pekerja di sektor informalRS
= jumlah RS umumpuskesmas
= jumlah puskesmaspositif_cov
= jumlah kasus positif akibat COVID-19 (data 30 april 2021)rawat
= jumlah penduduk yang dirawat akibat COVID-19isoman
= jumlah penduduk yang melakukan isolasi mandiri akibat COVID-19 (data 30 april 2021)kode
= kode wilayah untuk kebutuhan pemetaan peta.
Data Cleansing
Melakukan inspeksi untuk melihat keseluruhan data.
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> 0.5319820, 0.5383420, 0.5156924, 0.2667300, 0.6526999, 0.…
#> $ wajib_ktp <dbl> 70.20066, 75.12540, 70.84496, 73.73298, 68.92114, 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 <chr> "IDN.7.4.1_1", "IDN.7.2.1_1", "IDN.7.1.1_1", "IDN.7.3.1_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
#> 0 0
Exploratory Data Analysis
Sebelum dilakukannya analisis lebih lanjut, alangkah lebih baik kita mengeksplorasi data kerentanan sosial dalam bentuk visualisasi.
1. Gambaran umum variabel penyusun indeks kerentanan sosial
Ini adalah langkah yang baik untuk memahami data terlebih dahulu dan mencoba mengumpulkan sebanyak mungkin wawasan darinya.
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. :49.11 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.73 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. :0.1950 Min. :67.78 Min. : 0.00 Min. : 6.148
#> 1st Qu.:0.3217 1st Qu.:71.57 1st Qu.: 0.00 1st Qu.: 9.543
#> Median :0.5162 Median :72.66 Median : 9.00 Median :10.540
#> Mean :0.5611 Mean :72.78 Mean :12.86 Mean :12.412
#> 3rd Qu.:0.6276 3rd Qu.:73.73 3rd Qu.:18.75 3rd Qu.:16.318
#> Max. :1.7709 Max. :79.05 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
#> 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
Berdasarkan hasil summary(rentan)
, secara umum terdapat
49,73 persen jumlah penduduk perempuan yang ditunjukan oleh rata-rata
perempuan
dengan 21,09 persen merupakan kepala keluarga
yang berjenis kelamin perempuan dari variabel KK_perempuan
.
Sedangkan untuk rata-rata jumlah penduduk lansia di Jakarta sebesar
8,997 persen yang ditunjukan oleh lansia
.
::paged_table(rentan[which(rentan$pengangguran < 0.1951 | rentan$pengangguran > 1.770), ]) rmarkdown
Kemudian untuk variabel pengangguran
, secara rata-rata
sebesar 0,5611 persen dengan nilai maksimum 1,77 persen berada di
Kecamatan Kep. Seribu Selatan dan nilai terendah 0,195 berada di
Kecamatan Kembangan. Perbedaan antara nilai maksimum dan minimum yang
hampir 10 kali lipat ini menunjukkan belum meratanya tingkat
pengangguran di DKI Jakarta. Selain itu, terdapat 12,412 persen pekerja
informal di DKI Jakarta.
Membahas lebih lanjut lagi mengenai variabel yang digunakan dalam
penelitian ini, KTP merupakan salah satu dokumen administrasi yang
sangat penting dan harus dimiliki seluruh masyarakat Indonesia. Tanpa
adanya kepemilikan dokumen ini, maka akan terjadi kesulitan dalam
menggunakan berbagai layanan publik, seperti kesehatan, perbankan,
pendidikan, pendataan pemerintah, dan lain sebagainya. Namun, persentase
penduduk wajib KTP di DKI Jakarta yang ditunjukkan oleh
wajib_KTP
secara umum hanya sebesar 72,78 persen, yang
menandakan belum semua masyarakat sadar akan pentingnya kepemilikan
KTP.
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. 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)], showStrips = F, upper = list(continuous = wrap("cor", size=2))) +
theme(axis.text = element_text(colour = "black", size = 7),
strip.background = element_rect(fill = "#6e8f71"),
strip.text = element_text(colour = "white", size = 6,
face = "bold"))
Kemudian dengan menggunakan bantuan ggplot ingin dicari informasi mengenai persentase lansia pada masing-masing kecamatan di provinsi DKI Jakarta.
ggplot(data = rentan, mapping = aes(x= lansia, y= reorder(Kecamatan,lansia))) +
geom_col(aes(fill = lansia)) + # untuk membuat barplot
labs(
title = "Persentase Jumlah Lansia pada masing-masing Kecamatan di Provinsi DKI Jakarta",
x = "Persentase Lansia",
y = "Kecamatan"
+
) scale_fill_gradient(low = "#a9d1b1", high = "#4c614e") +
geom_text(mapping = aes(label=round(lansia, digits = 4)), # menambahkan informasi label masing-masing kategori dengan variasi box
col = "white", # memberikan warna pada text
nudge_x = -1, # menggeser text berdasarkan sumbu x
label.size = 10) +
theme_minimal() +
theme(legend.position = "none") # untuk menghilangkan legend.
Dari plot di atas dapat ditarik insight bahwa Kecamatan Gambir merupakan kecamatan dengan persentase lansia terbanyak yaitu sebesar 13.22%. Diikuti dengan Kecamatan Senen sebesar 12.16%. Kecamatand dengan persentase lansia terkecil terdapat pada Kecamatan Kalideres.
Penyusun Kerentanan Sosial
Pada bagian ini dilakukan tiga teknik analisis untuk melihat bagaimana kerentanan sosial yang diakibatkan COVID-19.
- Digunakan metode Factor Analysis untuk membentuk indeks kerentanan sosial per kecamatan di DKI Jakarta.
- Kemudian melakukan pengklusteran menggunakan metode non-hierarchical clustering.
- Uji Kruskal-Wallis untuk mengetahui bagimana variabel mempengaruhi kerentanan sosial pada masing-masing klaster.
Factor Analysis / Analisis Faktor
Sebelum dilakukan analisis faktor pada data kerentanan sosial, perlu dilakukan beberapa pengujian validitas untuk memutuskan apakah data yang dimiliki sudah memenuhi syarat untuk dianalisis menggunakan analisis faktor.
Melakukan uji multikolinearitas pada seluruh variabel.
Tujuan dari membentuk plot korelasi adalah untuk menguji kolinearitas dari data. Seluruh variabel harus memiliki korelasi, tetapi tidak terlalu tinggi.
ggcorr(rentan, label = T, hjust = 1, layout.exp = 2, size = 3, label_size = 2, label_round = 2, low = "#d7fc5b", mid = "white", high = "#5d8064")
Correlation plot di atas yang digunakan untuk menguji multikolinearitas dari data. Pada project 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.
Kaiser–Meyer–Olkin (KMO) - Measure of Sampling Adequacy(MSA)
Untuk dapat melakukan pengujian KMO dan MSA, pada R disediakan suatu
function KMO()
dari library psych
.
<- cor(rentan[,2:13])
rentan_cor <-KMO(rentan_cor) rentan_KMO
Melakukan inspeksi nilai KMO
$MSA rentan_KMO
#> [1] 0.7315378
Untuk nilai KMO didapatkan sebesar 0,7315378. 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.
Melakukan inspeksi nilai MSA masing-masing variabel
::paged_table(as.data.frame(rentan_KMO$MSAi)) rmarkdown
Dari hasil output nilai MSA masing-masing variabel di atas didapatkan seluruh nilai MSA dari setiap variabel (> 0,5). Sehingga bisa dinyatakan bahwa semua variabel dapat diprediksi dan dianalisis lebih lanjut
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 = 5144, 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.
Membentuk faktor-faktor penyusun kerentanan sosial
Untuk melakukan exploratory factor analysis menggunakan MinRes
(Minimum Residual), fungsi yang tersedia di R adalah fa()
dari library psych
.
Parameter fungsi fa()
- r
:
Correlation/covariance matrix dari data awal
<- fa(r = rentan_cor)
fa_rentan 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.11 0.013 0.99 1
#> KK_perempuan -0.59 0.352 0.65 1
#> lansia -0.68 0.459 0.54 1
#> pengangguran -0.16 0.026 0.97 1
#> wajib_ktp -0.58 0.334 0.67 1
#> banjir 0.51 0.260 0.74 1
#> informal -0.69 0.480 0.52 1
#> RS 0.13 0.018 0.98 1
#> puskesmas 0.63 0.402 0.60 1
#> positiv_cov 0.85 0.721 0.28 1
#> rawat 0.64 0.406 0.59 1
#> isoman 0.72 0.519 0.48 1
#>
#> MR1
#> SS loadings 3.99
#> Proportion Var 0.33
#>
#> 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.27
#> The degrees of freedom for the model are 54 and the objective function was 5.98
#>
#> The root mean square of the residuals (RMSR) is 0.23
#> The df corrected root mean square of the residuals is 0.26
#>
#> Fit based upon off diagonal values = 0.66
#> Measures of factor score adequacy
#> MR1
#> Correlation of (regression) scores with factors 0.96
#> Multiple R square of scores with factors 0.91
#> Minimum correlation of possible factor scores 0.83
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.
Salah satu cara untuk mencari jumlah faktor yang optimal dari data,
digunakan sebuah fungsi yaitu fa.parallel()
. Metode ini
mencari jumlah faktor optimal dari nilai eigen yang berurutan, kemudian
penurunan tajam dalam plot menunjukkan jumlah komponen atau faktor yang
sesuai untuk diekstraksi.
<- fa.parallel(rentan[,2:13], plot = T) nfactors
#> Parallel analysis suggests that the number of factors = 2 and the number of components = 2
summary(nfactors)
Dari hasil paralell analysis scree plot di atas dihasilkan
factors=2
sebagai jumlah faktor yang optimal pada data
rentan.
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.
# jumlah faktor optimal yang didapat
<- nfactors$nfact
nfact
#factor analysis
<- fa(r = rentan_cor, nfactors = nfact, rotate = "varimax")
fa_rentan_opt 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.22 0.48 0.27 0.72599 1.4
#> KK_perempuan -0.15 0.83 0.71 0.29360 1.1
#> lansia -0.21 0.91 0.88 0.12095 1.1
#> pengangguran -0.50 -0.37 0.38 0.61504 1.8
#> wajib_ktp -0.08 0.93 0.87 0.12878 1.0
#> banjir 0.50 -0.17 0.28 0.72403 1.2
#> informal -0.36 0.66 0.56 0.43507 1.5
#> RS 0.38 0.27 0.22 0.78159 1.8
#> puskesmas 0.61 -0.22 0.42 0.57622 1.3
#> positiv_cov 0.99 -0.17 1.00 0.00042 1.1
#> rawat 0.88 0.03 0.77 0.22694 1.0
#> isoman 0.80 -0.15 0.66 0.33818 1.1
#>
#> MR1 MR2
#> SS loadings 3.65 3.39
#> Proportion Var 0.30 0.28
#> Cumulative Var 0.30 0.59
#> Proportion Explained 0.52 0.48
#> Cumulative Proportion 0.52 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.27
#> The degrees of freedom for the model are 43 and the objective function was 1.6
#>
#> 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.98
Dari output di atas dengan menggunakan faktor sebanyak 2 didapatkan beberapa informasi sebagai berikut:
SS Loadings
: Nilai Eigen.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
: Minimum Residual/factor dapat disebut juga sebagai komponen utama.h2
: jumlah varians dalam item/variabel yang dijelaskan oleh faktor-faktor (yang dipertahankan). Ekuivalen dengan SS Loadings untuk variabel / communalityu2
: 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%.
Faktor-Faktor Pembentuk Kerentanan Sosial di Provinsi DKI Jakarta
Salah satu tujuan dari factor analysis adalah melakukan ekstraksi dengan menghasilkan variabel laten. Variabel laten yang dihasilkan nantinya akan dijadikan sebagai faktor-faktor pembentuk kerentanan sosial pada data.
fa.diagram(fa_rentan_opt, rsize = 1)
Arah dari masing-masing variabel ditentukan berdasarkan kajian literatur dari (Rufat et al., 2015), dimana arah tersebut 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 dan pekerjaan serta kependudukan dan KRT perempuan.
- Faktor Kesehatan dan Pekerjaan
Faktor kesehatan 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, persentase pengangguran, jumlah daerah rawan banjir, dan jumlah RS umum. Pada faktor ini menjelaskan 30 persen varians yang membentuk kerentanan sosial. Lima variabel berpengaruh positif dan dua 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, jumlah puskesmas yang banyak dapat menurunkan kerentanan sosial, dikarenakan dengan tersedianya fasilitas kesehatan yang memadai maka akan cepat melakukan penanganan dan pemulihan kesehatan kepada masyarakat yang terdampak sehingga pemulihan terhadap dampak COVID-19 dapat dipercepat.
- Faktor Kependudukan dan KRT Perempuan
Faktor kependudukan terdiri dari lima variabel pembentuk, yaitu persentase penduduk wajib KTP, persentase penduduk lansia, persentase kepala keluarga berjenis kelamin perempuan, persentase pekerja di sektor informal, dan persentase penduduk perempuan. Pada faktor ini menjelaskan 28 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. Selanjutnya, 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.
Indeks Kerentanan Sosial
Ada banyak metode untuk melakukan pembobotan dalam agregasi indeks. Peneliti seperti:
(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 project 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.52*komponen1)+(0.48*komponen2)\] SoVI merujuk peda Social Vulnarability Index.
Melakukan PCA pada data rentan
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.
Untuk itu akan dilakukan inspeksi untuk pca$x
dimana
merupakan nilai hasil proyeksi titik ke PC untuk tiap baris. Digunakan
untuk mendapatkan nilai data yang baru.
<-prcomp(rentan[,2:13], scale. = T)
rentan_pca::paged_table(as.data.frame(rentan_pca$x)) rmarkdown
Sesuai dengan hasil dari factor analysis, akan kita ambil sebanyak 2 principal component untuk kebutuhan pemetaan SoVI masing-masing kecamatan di Provinsi DKI Jakarta.
<- rentan_pca$x[, 1:2] %>%
pc_keep as.data.frame()
::paged_table(pc_keep) rmarkdown
Melakukan perhitungan persamaan indeks kerentanan sosial.
<- pc_keep %>%
SoVI mutate(SoVI = 0.52*abs(PC1) + 0.48*abs(PC2))
::paged_table(SoVI) rmarkdown
Selanjutnya, dilakukan pengabungan nilai hasil perhitungan Social
Vulnerability Index dengan nama-nama kecamatan dan kode area yang ada
pada dataset rentan
.
<- rentan %>%
rentan_new select_if(~!is.numeric(.)) %>% # ambil kolom Kecamatan
cbind(SoVI = SoVI[,3]) # gabungkan dengan kolom SoVI
::paged_table(rentan_new) rmarkdown
Dari indeks kerentanan sosial yang terbentuk, kami melakukan
pengkategorian indeks menjadi tiga, yaitu rendah, sedang, dan tinggi.
Kami melakukan pengkategorian indeks menggunakan Natural Breaks pada R
menggunakan function getJenksBreaks()
dari library
BAMMtools
.
# Membagi SoVI ke dalam 3 kategori
<- function(df, var) {
natural_breaks <- BAMMtools::getJenksBreaks(df[[var]], k = 4)
var_breaks paste0('Jenks_', var)]] <- findInterval(df[[var]], var_breaks)
df[[
df
}<- natural_breaks(rentan_new, "SoVI")
rentan_new
# Membuat Kategori Rendah Sedang Tinggi
$Kategori <- ordered(rentan_new$Jenks_SoVI,
rentan_newlevels = c(1,2,3),
labels = c("Rendah", "Sedang", "Tinggi"))
::paged_table(rentan_new) rmarkdown
# Melihat threshold untuk masing-masing kategori
getJenksBreaks(rentan_new$SoVI, 4)
#> [1] 0.2734244 1.3269436 2.3094436 3.5813008
Hasil yang didapatkan yaitu 0.2734 sampai 1.3269 untuk kategori rendah; 1.3269 sampai 2.3094 untuk kategori sedang; dan 2.3094 sampai 3.5813 untuk kategori tinggi. Secara umum, sebagian besar masyarakat di wilayah DKI Jakarta memiliki kerentanan sosial terhadap COVID-19 yang berada pada rentang kategori sedang-rendah.
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 project ini akan dibuat visualisasi geocoding berupa choropleth.
Pertama-tama dilakukan penarikan data SHP untuk keseluruhan provinsi di Indonesia yang diambil melalui website GADM. Kemudian melakukan subseting data dengan hanya mengambil Provinsi DKI Jakarta dengan bantuan MapShaper.
Langkah kedua, untuk membaca data .json di R, kita akan menggunakan
package geojsonio
. Pada fungsi geojson_read()
,
kita menentukan what = “sp” untuk memastikan data yang kita baca
merupakan kelas spasial, bukan list. Kemudian untuk mengecek datanya
terlebih dahulu, kita dapat fokus pada isi tabelnya dengan menggunakan
@
.
library(geojsonio)
<- geojson_read("dataset/gadm36_IDN_3.json", what = "sp")
jakarta_json ::paged_table(jakarta_json@data) rmarkdown
Selanjutnya, kita melakukan convert object jakarta_json
menjadi sebuah object sf. Object sf adalah sebuah dataframe yang berisi
aspek spasial (geospasial).
<- sf::st_as_sf(jakarta_json) jakarta_json_mod
Langkah keempat setelah membuat object sf adalah melakukan data pre-processing untuk data tersebut. Beberapa diantaranya yaitu membuang kolom yang tidak berguna.
library(stringr)
<- jakarta_json_mod %>%
jakarta_json_mod # Agar mudah digabung
mutate(NAME_3 = str_replace_all(NAME_3, fixed(" "), "") %>% str_to_title()) %>%
# melakukan pemotongan variabel/kolom yang tidak berguna untuk analisis
::select(-c(id, NL_NAME_1, NL_NAME_2, NL_NAME_3, VARNAME_3, HASC_3, TYPE_3, ENGTYPE_3))
dplyr
# melakukan inspeksi data dan tipenya
glimpse(jakarta_json_mod)
#> Rows: 47
#> Columns: 10
#> $ GID_0 <chr> "IDN", "IDN", "IDN", "IDN", "IDN", "IDN", "IDN", "IDN", "IDN"…
#> $ NAME_0 <chr> "Indonesia", "Indonesia", "Indonesia", "Indonesia", "Indonesi…
#> $ GID_1 <chr> "IDN.7_1", "IDN.7_1", "IDN.7_1", "IDN.7_1", "IDN.7_1", "IDN.7…
#> $ NAME_1 <chr> "Jakarta Raya", "Jakarta Raya", "Jakarta Raya", "Jakarta Raya…
#> $ GID_2 <chr> "IDN.7.1_1", "IDN.7.1_1", "IDN.7.1_1", "IDN.7.1_1", "IDN.7.1_…
#> $ NAME_2 <chr> "Jakarta Barat", "Jakarta Barat", "Jakarta Barat", "Jakarta B…
#> $ GID_3 <chr> "IDN.7.1.1_1", "IDN.7.1.2_1", "IDN.7.1.3_1", "IDN.7.1.4_1", "…
#> $ NAME_3 <chr> "Cengkareng", "Grogolpetamburan", "Kalideres", "Kebonjeruk", …
#> $ CC_3 <chr> "3174070", "3174040", "3174080", "3174020", "3174010", "31740…
#> $ geometry <MULTIPOLYGON> MULTIPOLYGON (((106.7004 -6..., MULTIPOLYGON (((106.…
Langkah kelima adalah melakukan pengolahan data denganmencoba untuk
menyocokkan isi dari data rentan
yang nanti akan kita
tampilkan informasinya di peta, dengan data spasial yang sebelumnya
sudah kita baca (dan kita olah sedikit). Hal ini bermaksud agar tidak
terjadinya bentrok dikarenakan nama daerah yang berbeda, dan agar lebih
masuk akal dilakukan.
<- jakarta_json_mod %>%
jakarta_rentan left_join(rentan_new, by = c("GID_3" = "Kode")) %>%
arrange(NAME_3, NAME_0)
glimpse(jakarta_rentan)
#> Rows: 47
#> Columns: 14
#> $ GID_0 <chr> "IDN", "IDN", "IDN", "IDN", "IDN", "IDN", "IDN", "IDN", "ID…
#> $ NAME_0 <chr> "Indonesia", "Indonesia", "Indonesia", "Indonesia", "Indone…
#> $ GID_1 <chr> "IDN.7_1", "IDN.7_1", "IDN.7_1", "IDN.7_1", "IDN.7_1", "IDN…
#> $ NAME_1 <chr> "Jakarta Raya", "Jakarta Raya", "Jakarta Raya", "Jakarta Ra…
#> $ GID_2 <chr> "IDN.7.4_1", "IDN.7.2_1", "IDN.7.1_1", "IDN.7.3_1", "IDN.7.…
#> $ NAME_2 <chr> "Jakarta Timur", "Jakarta Pusat", "Jakarta Barat", "Jakarta…
#> $ GID_3 <chr> "IDN.7.4.1_1", "IDN.7.2.1_1", "IDN.7.1.1_1", "IDN.7.3.1_1",…
#> $ NAME_3 <chr> "Cakung", "Cempakaputih", "Cengkareng", "Cilandak", "Cilinc…
#> $ CC_3 <chr> "3172080", "3173050", "3174070", "3171030", "3175060", "317…
#> $ Kecamatan <chr> "Cakung", "Cempaka Putih", "Cengkareng", "Cilandak", "Cilin…
#> $ SoVI <dbl> 2.1771459, 1.5710675, 2.2455849, 0.6934557, 1.7166052, 1.57…
#> $ Jenks_SoVI <int> 2, 2, 2, 1, 2, 2, 1, NA, 3, 3, 2, 2, 1, 2, NA, 2, 2, 1, 1, …
#> $ Kategori <ord> Sedang, Sedang, Sedang, Rendah, Sedang, Sedang, Rendah, NA,…
#> $ geometry <MULTIPOLYGON> MULTIPOLYGON (((106.9508 -6..., MULTIPOLYGON (((10…
Akan tetapi yang perlu dinote bahwa, pada data spasial yang kita
miliki terdapat 2 object yang redundan, di antaranya adalah
kebayoran lama
dengan variabel
GID_3 = IDN.7.3.10_1
dan setiabudi
dengan
variabel GID_3 = IDN.7.3.3_1
. Serta 1 object
danausunterdll
yang tidak terdapat pada data
rentan
. Sehingga nantinya ketiga object ini akan
diabaikan/dikeluarkan.
<- jakarta_rentan %>%
jakarta_rentan_sf filter(GID_3 != "IDN.7.3.10_1") %>%
filter(GID_3 != "IDN.7.3.3_1") %>%
filter(GID_3 != "IDN.7.5.2_1") %>%
::st_as_sf() sf
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.
library(leaflet)
<- leaflet(jakarta_rentan_sf)
m
<- paste("<h2><b>", jakarta_rentan_sf$NAME_3, "</b></h2>")
popup.cont <- jakarta_rentan_sf$SoVI
col <- col %>% replace(is.na(.), 0)
col <- c(getJenksBreaks(jakarta_rentan_sf$SoVI, 4))
bins <- colorBin("YlOrRd", domain = col, bins = bins,) pal
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,
label = paste0("Kecamatan: ", jakarta_rentan_sf$NAME_3),
popup = popup.cont) %>%
addLegend("bottomright",
pal = pal,
values = ~col,
title = "Social Vulnerability Index",
labFormat = labelFormat(digits = 2),
opacity = 1)
Fuzzy C-Means Clustering terhadap Kerentanan Sosial
Setelah melakukan pembentukan indeks kerentanan sosial, kami
melakukan klastering 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. Kami melakukan pengolahan klaster menggunakan
perangkat lunak R-Studio dengan package ppclust
.
Data pre-processing
Langkah pertama mendefinisikan data yang akan digunakan dalam
analisis FCM ini ke dalam object rentan_FCM
m dimana data
ini berisi variabel-variabel bertipe data numerik.
<- rentan[,2:13]
rentan_FCM head(rentan_FCM)
#> # A tibble: 6 × 12
#> perempuan KK_per…¹ lansia penga…² wajib…³ banjir infor…⁴ RS puske…⁵ posit…⁶
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 49.2 18.1 6.22 0.532 70.2 31 6.50 1 9 11740
#> 2 50.1 23.0 10.9 0.538 75.1 0 13.9 2 4 4998
#> 3 49.3 18.5 6.59 0.516 70.8 55 6.79 1 10 13036
#> 4 50.4 20.8 9.31 0.267 73.7 2 10.9 3 6 8201
#> 5 49.5 20.5 5.98 0.653 68.9 38 11.3 1 10 7899
#> 6 49.6 17.1 7.00 0.871 71.2 15 14.3 0 11 10437
#> # … with 2 more variables: rawat <dbl>, isoman <dbl>, and abbreviated variable
#> # names ¹KK_perempuan, ²pengangguran, ³wajib_ktp, ⁴informal, ⁵puskesmas,
#> # ⁶positiv_cov
Melakukan assign nilai dari kolom Kecamatan yang ada pada
data rentan
kita menjadi nama baris.
rownames(rentan_FCM) <- rentan$Kecamatan
Normalisasi Min-Max
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
<- function(x) {
minMax - min(x)) / (max(x) - min(x))
(x
}
#Normalisasi data menggunakan fungsi custom
<- as.data.frame(lapply(rentan_FCM, minMax))
rentan_scale head(rentan_scale)
#> perempuan KK_perempuan lansia pengangguran wajib_ktp banjir
#> 1 0.05295316 0.2576572 0.04693080 0.21383515 0.2149322 0.52542373
#> 2 0.52031300 0.6466472 0.67779574 0.21787096 0.6517199 0.00000000
#> 3 0.12482581 0.2962708 0.09707556 0.20349840 0.2720766 0.93220339
#> 4 0.70446993 0.4727347 0.46795975 0.04551688 0.5282226 0.03389831
#> 5 0.18362097 0.4507673 0.01395345 0.29043789 0.1014482 0.64406780
#> 6 0.27318041 0.1840792 0.15352836 0.42899989 0.3010948 0.25423729
#> informal RS puskesmas positiv_cov rawat isoman
#> 1 0.01814115 0.1428571 0.54545455 0.8162135 0.5774648 0.58285714
#> 2 0.39627308 0.2857143 0.09090909 0.3376162 0.3521127 0.09714286
#> 3 0.03286447 0.1428571 0.63636364 0.9082132 0.7676056 0.83428571
#> 4 0.24102604 0.4285714 0.27272727 0.5649890 0.4366197 0.65142857
#> 5 0.26129471 0.1428571 0.63636364 0.5435508 0.5140845 0.36000000
#> 6 0.41400807 0.0000000 0.72727273 0.7237169 0.4436620 0.70857143
Pemilihan nilai k optimum
Pada project ini, akan digunakan metode elbow 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
.
set.seed(123)
<-
elbow fviz_nbclust(
x = rentan_scale,
FUNcluster = kmeans,
method = "wss",
k.max = 10
+ labs(subtitle = "Metode Elbow")
) elbow
Nilai k optimum dari data
rentan_FCM
didapatkan pada saat k=3
FCM menggunakan fcm()
Membuat object fcm.rentan
dengan menggunakan fungsi
fcm()
dengan jumlah \(k=3\), \(m=2\) atau nilai membership degree.
library(ppclust)
set.seed(123)
<- fcm(rentan_scale, 3, m=2, dmetric="sqeuclidean", pw = 2,
fcm.rentan alginitv="kmpp", alginitu="imembrand",
nstart=1, iter.max=1000, con.val=1e-09)
summary(fcm.rentan)
#> Summary for 'fcm.rentan'
#>
#> Number of data objects: 44
#>
#> Number of clusters: 3
#>
#> Crisp clustering vector:
#> [1] 1 3 1 2 1 1 1 1 3 3 1 1 3 1 3 2 1 3 1 2 2 2 1 1 1 2 3 3 2 2 2 1 2 1 2 1 3 3
#> [39] 3 3 3 3 1 3
#>
#> Initial cluster prototypes:
#> perempuan KK_perempuan lansia pengangguran wajib_ktp banjir
#> Cluster 1 0.1605746 0.2174588 0.0000000 0.1790955 0.2569760 0.00000000
#> Cluster 2 0.2864723 0.6662773 0.4948316 0.2670284 0.4809782 0.44067797
#> Cluster 3 0.4331654 0.7510184 0.4848500 0.2040897 0.5733735 0.01694915
#> informal RS puskesmas positiv_cov rawat isoman
#> Cluster 1 0.01501601 0.1428571 0.9090909 0.5534890 0.5140845 0.2857143
#> Cluster 2 0.27119979 0.1428571 0.4545455 0.6869454 0.6056338 0.3600000
#> Cluster 3 1.00000000 0.5714286 0.1818182 0.3716902 0.4366197 0.3371429
#>
#> Final cluster prototypes:
#> perempuan KK_perempuan lansia pengangguran wajib_ktp banjir
#> Cluster 1 0.3152556 0.4134893 0.3212723 0.2128704 0.3783466 0.28769114
#> Cluster 2 0.3221162 0.4199689 0.3367700 0.2082273 0.3898127 0.25317872
#> Cluster 3 0.3505734 0.7027618 0.6751806 0.2755074 0.5942018 0.07892542
#> informal RS puskesmas positiv_cov rawat isoman
#> Cluster 1 0.2153258 0.2756352 0.5032064 0.6137991 0.5298518 0.4764718
#> Cluster 2 0.2287537 0.2644816 0.4857593 0.5844553 0.4991475 0.4445524
#> Cluster 3 0.5672056 0.2309419 0.2612857 0.3440010 0.3417834 0.2199829
#>
#> Distance between the final cluster prototypes
#> Cluster 1 Cluster 2
#> Cluster 2 0.005105141
#> Cluster 3 0.662566819 0.571045341
#>
#> Difference between the initial and final cluster prototypes
#> perempuan KK_perempuan lansia pengangguran wajib_ktp
#> Cluster 1 0.15468107 0.1960305 0.3212723 0.03377495 0.12137066
#> Cluster 2 0.03564389 -0.2463084 -0.1580616 -0.05880108 -0.09116555
#> Cluster 3 -0.08259198 -0.0482566 0.1903306 0.07141765 0.02082833
#> banjir informal RS puskesmas positiv_cov
#> Cluster 1 0.28769114 0.20030979 0.1327781 -0.40588453 0.06031003
#> Cluster 2 -0.18749924 -0.04244609 0.1216244 0.03121389 -0.10249015
#> Cluster 3 0.06197627 -0.43279442 -0.3404867 0.07946748 -0.02768923
#> rawat isoman
#> Cluster 1 0.01576731 0.19075756
#> Cluster 2 -0.10648633 0.08455244
#> Cluster 3 -0.09483634 -0.11715994
#>
#> Root Mean Squared Deviations (RMSD): 0.6042024
#> Mean Absolute Deviation (MAD): 19.81903
#>
#> Membership degrees matrix (top and bottom 5 rows):
#> Cluster 1 Cluster 2 Cluster 3
#> 1 0.4882022 0.4145029 0.09729491
#> 2 0.1106537 0.1271162 0.76223009
#> 3 0.4554046 0.3982856 0.14630985
#> 4 0.3712570 0.4013925 0.22735047
#> 5 0.4585425 0.4192312 0.12222637
#> ...
#> Cluster 1 Cluster 2 Cluster 3
#> 40 0.1454923 0.1573695 0.6971382
#> 41 0.2380096 0.2644525 0.4975380
#> 42 0.1653044 0.1892569 0.6454387
#> 43 0.4238533 0.3844937 0.1916530
#> 44 0.2839744 0.3216587 0.3943669
#>
#> Descriptive statistics for the membership degrees by clusters
#> Size Min Q1 Mean Median Q3 Max
#> Cluster 1 18 0.3910770 0.4354837 0.4579773 0.4508280 0.4640693 0.5855688
#> Cluster 2 11 0.3483277 0.3929432 0.4256993 0.4370806 0.4701132 0.4801915
#> Cluster 3 15 0.3621822 0.4428936 0.5755343 0.5967759 0.7010497 0.7622301
#>
#> Dunn's Fuzziness Coefficients:
#> dunn_coeff normalized
#> 0.4115541 0.1173312
#>
#> Within cluster sum of squares by cluster:
#> 1 2 3
#> 6.638132 4.676674 5.472873
#> (between_SS / total_SS = 27.07%)
#>
#> 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
$csize fcm.rentan
#> 1 2 3
#> 18 11 15
Berikut merupakan nilai untuk masing-masing kecamatan dan juga hasil
cluster setiap kecamatannya. Hasil cluster dapat diakses dengan
melakukan inspeksi pada object fcm$cluster
.
<-data.frame(rentan_scale, fcm.rentan$cluster)
fcm_keep::paged_table(fcm_keep) rmarkdown
Kluster 1 berisi 18 Kecamatan, mencakup Kecamatan Cakung, Cengkareng, Cilincing, Cipayung, Ciracas, Duren Sawit, Jagakarsa, Jatinegara, Kalideres, Kebonjeruk, Kemayoran, Koja, Kramatjati, Makasar, Pasar Minggu, Penjaringan, Pulogadung, Tanjung Priok.
Kluster 2 berisi 11 Kecamatan, mencakup Kecamatan Cilandak, Kebayoran Lama, Kembangan, Kepulauan Seribu Selatan, Kepulauan Seribu Utara, Mampang Prapatan, Pademangan, Palmerah, Pancoran, Pasarrebo, dan Pesanggrahan.
Kluster 3 berisi 15 Kecamatan, mencakup Kecamatan Cempaka Putih, Gambir, Grogolpetamburan, Johar Baru, Kebayoran Baru, Kelapa Gading, Matraman, Menteng, Sawah Besar, Senen, Setia Budi, Tamansari, Tambora, Tanahabang, dan Tebet.
###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)
v ::paged_table(v) rmarkdown
Profiling:
Pada klaster 1 ini dapat dilihat bahwa kerentanan tertinggi didapat oleh RS, puskesmas, positiv_cov, rawat, isoman yang ditunjukkan 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.
Pada klaster 2 dapat sama-sama diketahui bahwa di antara 3 klaster lainnya, centroid untuk klaster 2 ini cenderung sedang untuk setiap variabelnya. Tidak ada nilai maksimal untuk variabel-variabel pembentuk kerentanan sosial.
Sementara itu pada klaster 3 dapat dilihat bahwa
kerentanan tertinggi terdapat pada variabel-variabel perempuan,
KK_perempuan, lansia, pengangguran, jumlah penduduk wajib_ktp, serta
penduduk yang bekerja di sektor informal. Dapat dilihat dari
data pada kecamatan ini rata-rata persentase lansia dan kepala keluarga
perempuan yang lebih tinggi dibandingkan klaster lain, yaitu > 9%
untuk persentase lansia
dan > 21% untuk persentase
KK_Perempuan
. 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.
Berikut merupakan hasil visualisasi kluster dalam plot 2 dimensi.
<- ppclust2(fcm.rentan, "kmeans")
fcm.rentan2 ::fviz_cluster(fcm.rentan2, data = rentan_scale,
factoextraellipse.type = "convex",
palette = "jco",
repel = TRUE)
Melakukan Uji Kruskal-Wallis terhadap kluster yang terbentuk
Uji Kruskal-Wallis digunakan untuk melihat signifikansi pada variabel yang menjadi isu yang terjadi pada setiap kluster. Jika suatu data signifikan (p-value < 0,05), maka rata-rata dari variabel yang ada pada data untuk masing-masing kluster dapat diidentifikasi berdasarkan hubungannya dengan karakteristik dari kerentanan sosial.
Pada R, pengujian kruskal wallis dapat dilakukan dengan menggunakan
fungsi kruskal.test()
.
## kruskall walis
kruskal.test(fcm_keep)
#>
#> Kruskal-Wallis rank sum test
#>
#> data: fcm_keep
#> Kruskal-Wallis chi-squared = 205.82, df = 12, p-value <
#> 0.00000000000000022
Berdasarkan output melalui Uji Kruskal-Wallis, dapat dilihat bahwa pengujian signifikan (p-value < 0,05). Hal ini menunjukkan hipotesis nol ditolak yang menunjukkan terdapat perbedaan rata-rata antar kluster. Masing-masing kluster memiliki variabel yang dominan dalam mempengaruhi kerentanan sosial.
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 project ini kami menemukan 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.
Kesimpulan
Project 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.
Project ini menggunakan 13 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.