Latar Belakang

Pada akhir Desember 2019 wabah misterius yang ditandai dengan gejala klinis demam, batuk kering, kelelahan serta gejala gastrointestinal (pendarahan saluran pencernaan) dilaporkan pertama kali terjadi di Huanan, Provinsi Wuhan, China. Sekitar 66% pekerja di sana terinfeksi dan pada bulan berikutnya (Januari 2020) tercatat ribuan orang di China telah terpapar wabah ini (Wu et al, 2020). Wabah yang dinamai Coronavirus (COVID-19) oleh WHO selanjutnya menyebar ke berbagai negara seperti Thailand, Jepang, Korea, Vietnam, Jerman, Amerika Serika, termasuk Indonesia. Data epidemiolog Kementerian Kesehatan Indonesia menunjukkan bahwa sejak covid-19 diidentifikasi pertama kali di Indonesia pada tanggal 2 Maret 2020 hingga 15 September 2021, terdapat 4.178.164 kasus positif dan 139.682 kasus meninggal dunia. Tingginya angka kasus positif Covid-19 menjadi masalah yang tentunya memerlukan penanganan tepat dalam menghambat penyebaranya. Selain menerapkan PSBB dan PKMM, salah satu program Pemerintah yang diharapkan menjadi langkah preventif memutus penyebaran wabah ini adalah menggalakkan vaksinasi Covid-19. Vaksinasi adalah pemberian Vaksin dalam rangka menimbulkan atau meningkatkan kekebalan seseorang secara aktif terhadap suatu penyakit, sehingga apabila suatu saat terpajan dengan penyakit tersebut tidak akan sakit atau hanya mengalami sakit ringan dan tidak menjadi sumber penularan (covid19.go.id). Berdasarkan latar belakang tersebut, pada project ini akan dilakukan clustering atau penggerombolan untuk melihat pengaruh program vaksinasi yang telah dilakukan terhadap tingkat fatality rate.

Data

Data vaksinasi terakhir yang digunakan merupakan total yang terpapar covid-19 sampai 15 September 2021. Beberapa Istilah yang digunakan dalam data:

  1. Fatality Rate (FR) merupakan rasio jumlah pasien yang meninggal dengan jumlah kasus yang terkonfirmasi. Berdasarkan summary data, diperoleh rata-rata fatality rate sekitar 2,4. Fatality rate sebesar 2,4% menunjukkan bahwa dari setiap 100 orang yang terinfeksi oleh penyakit tersebut, sekitar 2,4 orang diperkirakan akan meninggal akibat penyakit itu. Ini memberikan gambaran tentang tingkat keparahan penyakit dan risiko kematian yang terkait. Angka fatality rate dapat mempengaruhi kebijakan kesehatan masyarakat dan keputusan tentang alokasi sumber daya. Jika FR tinggi, mungkin perlu ada upaya lebih besar untuk meningkatkan perawatan kesehatan dan pencegahan.

  2. Recovery Rate (RR) merupakan rasio jumlah pasien sembuh dengan jumlah pasien yang terkonfirmasi.Dalam konteks covid-19, recovery rate yang tinggi menunjukkan bahwa sebagian besar orang yang terinfeksi virus SARS-CoV-2 ini dapat pulih dari wabah tersebut. Rata-rata recovery rate yang diperoleh dari data adalah sekitar 93% , menginterpretasikan bahwa dari 100 pasien yang terinfeksi covid-19, 93 di antaranya berhasil sembuh. Hal ini merupakan indikasi positif bahwa virus ini memiliki tingkat kesembuhan yang tinggi, terutama bagi sebagian besar populasi yang tidak memiliki komorbiditas atau faktor risiko lainnya.

  3. BOR merupakan persentase penggunaan tempat tidur di rumah sakit dalam suatu periode tertentu. Indikator ini memberikan gambaran tentang seberapa efektif suatu rumah sakit dalam memanfaatkan kapasitas tempat tidurnya untuk merawat pasien.

Load Data

library(sf)
library(tigris)
library(tidyverse)
library(ggrepel)
library(corrplot)
library(ggcorrplot)
library(reshape2)
covid <- readxl::read_xlsx('C:\\Users\\aripo\\Downloads\\analisis jabar\\covid jawa barat.xlsx')
covid <- as.data.frame(covid)

Summary Data

#fatality rate
covid$Fatality.Rate <- (covid$Meninggal/covid$Terkonfirmasi)*100
#recovery rate
covid$Recovery.Rate <- (covid$Sembuh/covid$Terkonfirmasi)*100
covid_new <- covid[,c('Fatality.Rate','Recovery.Rate','Vaksin.1','Vaksin.2','BOR')]
summary(covid_new)
##  Fatality.Rate    Recovery.Rate      Vaksin.1       Vaksin.2    
##  Min.   :0.4347   Min.   :80.94   Min.   :15.1   Min.   : 6.40  
##  1st Qu.:1.5095   1st Qu.:91.41   1st Qu.:22.3   1st Qu.:10.35  
##  Median :2.0012   Median :93.64   Median :33.6   Median :17.50  
##  Mean   :2.3867   Mean   :93.16   Mean   :38.2   Mean   :20.04  
##  3rd Qu.:3.3558   3rd Qu.:95.09   3rd Qu.:51.4   3rd Qu.:25.40  
##  Max.   :4.3650   Max.   :98.82   Max.   :75.5   Max.   :48.70  
##       BOR        
##  Min.   : 2.720  
##  1st Qu.: 5.005  
##  Median : 9.360  
##  Mean   : 9.910  
##  3rd Qu.:12.970  
##  Max.   :24.160

Sebaran Data

Degradasi warna pada map sebaran kasus covid-19 di Jawa Barat menunjukkan bahwa semakin pekat warnanya (merah) maka jumlah yang terkonfirmasi atau terpapar covid-19 semakin tinggi.Terlihat bahwa, daerah Kota Depok dan Kota Bekasi memiliki jumlah terkonfirmasi paling tinggi dibandingkan daerah lainnya. Hal ini disebabkan karena dua daerah tersebut dekat dengan Provinsi DKI Jakarta. Provinsi DKI Jakarta merupakan daerah dengan tingkat terkonfirmasi covid-19 paling tinggi di Indonesia, sehingga daerah disekitarnya juga cenderung memiliki tingkat terkonfirmasi covid-19 yang tinggi. Hal yang sama juga berlaku pada daerah Kab. Bogor, Kab. Bekasi, dan Karawang yang terletak lebih dekat dengan Provinsi DKI Jakarta, sehingga tiga daerah tersebut memiliki jumlah terkonfirmasi covid-19 yang cenderung lebih tinggi dibandingkan Kabupaten lainnya di Jawa Barat.

peta <- st_read("C:\\Users\\aripo\\Downloads\\analisis jabar\\Peta\\idn_admbnda_adm2_bps_20200401.shp")
data.peta <- geo_join(spatial_data=peta, 
                         data_frame=covid, by_sp="ADM2_EN", 
                         by_df="Kab.Kota", how = "inner")
data_points <- sf::st_point_on_surface(data.peta)
data_coords <- as.data.frame(sf::st_coordinates(data_points))
data_coords$nama <- data.peta$ADM2_EN

ggplot()+
  geom_sf(data=data.peta,aes(fill=Terkonfirmasi))+
  scale_fill_gradient(high = "#e34a33", low = "#fee8c8", guide = "colorbar") +
  labs(title="Sebaran Kasus COVID-19 di Jawa Barat", x = '', y='') +
  geom_text(data = data_coords, aes(X, Y, label = nama), size = 1.9)

Korelasi

Korelasi adalah ukuran statistik yang mencerminkan kekuatan dan arah hubungan antara dua variabel atau lebih. Dalam konteks ini, variabel dikatakan saling berkorelasi jika perubahan pada satu variabel diikuti oleh perubahan pada variabel lainnya. Korelasi dapat memberikan wawasan tentang bagaimana satu variabel berhubungan dengan yang lain, tetapi tidak menunjukkan hubungan sebab akibat.

Nilai korelasi menunjukkan adanya kecenderungan hubungan positif antara recovery rate (tingkat kesembuhan) dengan vaksin 1 (0.28) dan vaksin 2 (0.24). Ini berarti bahwa peningkatan jumlah vaksinasi cenderung berhubungan dengan peningkatan tingkat kesembuhan dari covid-19, meskipun hubungan ini tidak terlalu kuat. Meskipun ada hubungan positif, penting untuk dicatat bahwa angka ini tidak menunjukkan bahwa vaksin secara langsung menyebabkan peningkatan recovery rate. Faktor lain seperti perawatan medis, usia pasien, dan kondisi kesehatan sebelumnya juga dapat mempengaruhi hasil ini.

Disisi lain, Nilai korelasi menunjukkan adanya kecenderungan hubungan negatif antara fatality rate (tingkat kematian) dengan vaksin 1 (0.23) dan vaksin 2 (0.20). Ini berarti bahwa peningkatan jumlah vaksinasi cenderung berhubungan dengan penurunan tingkat kematian akibat covid-19. Meskipun ada hubungan negatif, sekali lagi, ini tidak membuktikan bahwa vaksin secara langsung mengurangi angka kematian. Banyak faktor lain seperti akses ke perawatan kesehatan dan karakteristik demografis juga mempengaruhi fatality rate.

ggcorrplot

korelasi <- cor(covid_new)
ggcorrplot(korelasi, hc.order = F, type = "lower",
           lab = TRUE, outline.color = "white",
           ggtheme = ggplot2::theme_gray,
           colors = c("#E46726", "white", "#6D9EC1" ))

corrplot

corrplot(korelasi)

Karakteristik Wilayah

Perbandingan karakteristik wilayah Kota dan wilayah Kabupaten dapat dilihat pada boxplot dibawah ini. Terlihat bahwa rataan fatality rate pada wilayah Kota lebih rendah dibandingkan dengan wilayah Kabupaten. Hal ini berkebalikan dengan rataan recovery rate yang menunjukkan wilayah Kabupaten lebih rendah dibandingkan wilayah Kota. Jika dilihat dari rataan vaksinasi 1 dan 2, terlihat bahwa wilayah Kabupaten lebih rendah dibandingkan wilayah Kota. Keadaan ini sesuai dengan korelasi sebelumnya, yaitu vaksinasi berhubungan positif dengan recovery rate dan berhubungan negatif dengan fatality rate.

#kota vs kab
covid$Wilayah <- ''
covid$Wilayah[1:18] <- 'Kab'
covid$Wilayah[19:27] <- 'Kota'
covid$Wilayah <- as.factor(covid$Wilayah)
data.melt <- melt(covid[,c('Fatality.Rate','Recovery.Rate','Vaksin.1','Vaksin.2','BOR','Wilayah')])
ggplot(data.melt) +
  aes(x = variable, y = value, fill = Wilayah) +
  labs(title="Karakteristik Wilayah Kota dan Kabupaten di Jawa Barat", x = '', y='') + 
  geom_boxplot() +
  scale_fill_hue() +
  theme_minimal()

Clustering

Clustering adalah metode dalam analisis data yang digunakan untuk mengelompokkan sekumpulan objek atau data ke dalam kelompok-kelompok (cluster) berdasarkan kemiripan karakteristik di antara objek-objek tersebut. Dalam proses ini, objek yang berada dalam satu cluster memiliki tingkat kemiripan yang tinggi satu sama lain, sedangkan objek antar cluster memiliki kemiripan yang rendah.Complete linkage clustering adalah salah satu metode dalam analisis klaster hierarkis yang digunakan untuk mengelompokkan data berdasarkan jarak antara kluster. Metode ini juga dikenal sebagai farthest neighbor clustering karena mengukur jarak antara dua kluster berdasarkan jarak maksimum antara elemen-elemen yang paling tidak mirip dari masing-masing kluster.

biplot

Biplot adalah alat visualisasi yang digunakan dalam analisis data multivariat, terutama dalam konteks analisis komponen utama (PCA) atau analisis faktor. Biplot memungkinkan kita untuk melihat hubungan antara observasi dan variabel dalam satu grafik, memberikan wawasan yang lebih mendalam tentang struktur data.

Biplot memiliki dua sumbu yang mewakili dua komponen utama (PC1 dan PC2) dari analisis PCA. Sumbu ini menunjukkan variabilitas maksimum dalam data. PC1 mungkin menjelaskan 44,7% dari total varians, sementara PC2 menjelaskan 25,2%.

Titik yang berdekatan menunjukkan observasi dengan karakteristik serupa. Arah dan panjang vektor menentukan variabel mana yang paling berkontribusi terhadap perbedaan antara observasi. Dua vektor berdekatan menunjukkan bahwa variabel tersebut berkorelasi positif; jika berlawanan arah, mereka berkorelasi negatif.

data.new <- covid_new
library(magrittr)
#transformasi data
df <- data.new[,]%>%scale()
#head(df)
#struktur komponen utama
library(FactoMineR)
res.pca <- PCA(df,graph=F)
#grafik biplot
library(factoextra)
fviz_pca_biplot(res.pca)+theme_classic()

#persentase keragamanan berdasarkan nilai eigen
eig.val <- get_eigenvalue(res.pca)
eig.val
##       eigenvalue variance.percent cumulative.variance.percent
## Dim.1 2.23334332       44.6668664                    44.66687
## Dim.2 1.26030925       25.2061850                    69.87305
## Dim.3 0.96325306       19.2650612                    89.13811
## Dim.4 0.52139198       10.4278397                    99.56595
## Dim.5 0.02170238        0.4340477                   100.00000

persentase keragaman

#grafik persentase keragaman
fviz_eig(res.pca, addlabels = T)+theme_classic()

jumlah klaster optimal

#clustering
library(NbClust)
data.clust <- covid[,c('Terkonfirmasi','Vaksin.1','Vaksin.2','BOR','Fatality.Rate','Recovery.Rate')]
rownames(data.clust) <- covid[,c('Kab.Kota')]
data.sd <- scale(data.clust)
NbClust(data = data.sd, diss = NULL, distance = "euclidean",
        min.nc = 2, max.nc = 10, method = 'complete')

## *** : The Hubert index is a graphical method of determining the number of clusters.
##                 In the plot of Hubert index, we seek a significant knee that corresponds to a 
##                 significant increase of the value of the measure i.e the significant peak in Hubert
##                 index second differences plot. 
## 

## *** : The D index is a graphical method of determining the number of clusters. 
##                 In the plot of D index, we seek a significant knee (the significant peak in Dindex
##                 second differences plot) that corresponds to a significant increase of the value of
##                 the measure. 
##  
## ******************************************************************* 
## * Among all indices:                                                
## * 4 proposed 2 as the best number of clusters 
## * 9 proposed 3 as the best number of clusters 
## * 3 proposed 5 as the best number of clusters 
## * 2 proposed 6 as the best number of clusters 
## * 1 proposed 8 as the best number of clusters 
## * 4 proposed 10 as the best number of clusters 
## 
##                    ***** Conclusion *****                            
##  
## * According to the majority rule, the best number of clusters is  3 
##  
##  
## *******************************************************************
## $All.index
##        KL      CH Hartigan     CCC    Scott    Marriot   TrCovW   TraceW
## 2  0.0883  7.0303  10.3881 -2.3104  38.9362 6403221.42 643.3382 121.7598
## 3  1.5608  9.7630   7.1347 -1.2168  95.2431 1790137.52 386.4808  86.0176
## 4  1.1571 10.3709   6.3000 -0.9398 142.3537  555891.54 238.2580  66.3062
## 5  1.7234 10.9844   4.1490 -0.2778 170.7607  303308.85 137.9088  52.0492
## 6  2.0641 10.7621   2.4538 -0.2548 198.6276  155599.86 104.2762  43.7908
## 7  0.5244  9.9288   3.6582 -0.8013 216.3652  109797.68  75.7558  39.2093
## 8  1.8764 10.0602   2.2490 -0.6423 235.4008   70858.26  45.7706  33.1465
## 9  0.5643  9.5928   3.5144 -1.0700 247.6065   57064.47  32.6231  29.6383
## 10 0.7259  9.9944   5.2745 -0.8230 278.2678   22630.57  27.6615  24.7968
##    Friedman  Rubin Cindex     DB Silhouette   Duda Pseudot2   Beale Ratkowsky
## 2   12.0177 1.2812 0.5158 1.2388     0.2065 0.6836   9.2550  1.6956    0.3102
## 3   45.1454 1.8136 0.4140 1.3288     0.2550 0.6193   4.9176  2.1022    0.3702
## 4   71.5022 2.3527 0.4268 1.1386     0.2922 0.4453   6.2285  3.9938    0.3678
## 5   78.3376 2.9972 0.4681 0.9630     0.3225 0.6756   4.8007  1.6791    0.3614
## 6   90.1043 3.5624 0.4655 1.0344     0.2779 1.3347  -0.5015 -0.6432    0.3447
## 7  104.4416 3.9787 0.4692 0.9390     0.2934 1.6708  -1.2045 -1.1585    0.3260
## 8  118.0004 4.7064 0.5112 0.8458     0.3322 1.8317  -0.4541 -0.8735    0.3132
## 9  123.7595 5.2635 0.4997 0.7510     0.3494 0.8318   0.2023  0.3891    0.2996
## 10 135.1223 6.2911 0.4947 0.6796     0.3923 0.5208   6.4418  3.0980    0.2896
##       Ball Ptbiserial    Frey McClain   Dunn Hubert SDindex Dindex   SDbw
## 2  60.8799     0.2708  0.0751  0.3740 0.2833 0.0089  1.3655 2.0003 0.6884
## 3  28.6725     0.5002 -0.0465  1.2743 0.2937 0.0130  1.3787 1.6506 0.6455
## 4  16.5766     0.5932  0.1167  1.4807 0.3480 0.0153  1.1990 1.4650 0.5416
## 5  10.4098     0.6205  0.5439  1.6471 0.4104 0.0166  1.0754 1.3008 0.4204
## 6   7.2985     0.5730  0.2239  2.4299 0.3515 0.0179  1.2553 1.2095 0.3814
## 7   5.6013     0.5722  0.1203  2.5287 0.3638 0.0183  1.1509 1.1273 0.2990
## 8   4.1433     0.5777  0.2839  2.6377 0.4121 0.0203  1.1880 1.0216 0.2289
## 9   3.2931     0.5747  0.1021  2.7198 0.4122 0.0205  1.1131 0.9468 0.1907
## 10  2.4797     0.5780  0.2503  2.7726 0.4224 0.0211  1.1181 0.8521 0.1393
## 
## $All.CriticalValues
##    CritValue_Duda CritValue_PseudoT2 Fvalue_Beale
## 2          0.5276            17.9093       0.1278
## 3          0.3506            14.8210       0.0702
## 4          0.2445            15.4517       0.0047
## 5          0.3979            15.1322       0.1418
## 6          0.0348            55.4763       1.0000
## 7          0.1255            20.9054       1.0000
## 8         -0.0981           -11.1930       1.0000
## 9         -0.0981           -11.1930       0.8622
## 10         0.3212            14.7957       0.0133
## 
## $Best.nc
##                     KL      CH Hartigan     CCC   Scott Marriot   TrCovW TraceW
## Number_clusters 6.0000  5.0000   3.0000  6.0000  3.0000       3   3.0000  3.000
## Value_Index     2.0641 10.9844   3.2534 -0.2548 56.3069 3378838 256.8574 16.031
##                 Friedman   Rubin Cindex      DB Silhouette   Duda PseudoT2
## Number_clusters   3.0000  8.0000  3.000 10.0000    10.0000 2.0000    2.000
## Value_Index      33.1277 -0.1707  0.414  0.6796     0.3923 0.6836    9.255
##                  Beale Ratkowsky    Ball PtBiserial Frey McClain    Dunn Hubert
## Number_clusters 2.0000    3.0000  3.0000     5.0000    1   2.000 10.0000      0
## Value_Index     1.6956    0.3702 32.2074     0.6205   NA   0.374  0.4224      0
##                 SDindex Dindex    SDbw
## Number_clusters  5.0000      0 10.0000
## Value_Index      1.0754      0  0.1393
## 
## $Best.partition
##            Bogor         Sukabumi          Cianjur          Bandung 
##                1                2                1                1 
##            Garut      Tasikmalaya           Ciamis         Kuningan 
##                2                2                1                1 
##          Cirebon       Majalengka         Sumedang        Indramayu 
##                1                1                1                2 
##           Subang       Purwakarta         Karawang           Bekasi 
##                2                1                3                3 
##    Bandung Barat      Pangandaran       Kota Bogor    Kota Sukabumi 
##                1                1                3                3 
##     Kota Bandung     Kota Cirebon      Kota Bekasi       Kota Depok 
##                3                3                3                3 
##      Kota Cimahi Kota Tasikmalaya      Kota Banjar 
##                3                1                3
par(mfrow=c(1,1))

Dendogram

Pada analisis ini digunakan metode complete linkage clustering, merupakan salah satu metode dalam analisis klaster hierarkis yang digunakan untuk mengelompokkan data berdasarkan jarak antara kluster. Metode ini juga dikenal sebagai farthest neighbor clustering karena mengukur jarak antara dua kluster berdasarkan jarak maksimum antara elemen-elemen yang paling tidak mirip dari masing-masing kluster. Hasil klaster atau penggerombolan disajikan dalam bentuk dendogram dibawah ini.

clust <- hclust(dist(data.sd), method = 'complete')
plot(clust) 

Kesimpulan

Jumlah klaster optimal yang digunakan dalam penggerombolan data adalah 4 yang diperoleh dari metode Hubert dan Dindex. Hasil visualisasi penggerombolan ditunjukkan dalam 4 zona dalam bentuk spasial dibawah ini. Anggota dalam setiap zona memiliki karakteristik yang lebih mirip dibandingkan dengan anggota pada zona lain. Zona 1 terdiri dari 12 Kota/Kabupaten yang sebagian besar merupakan wilayah Kabupaten. Zona 2 terdiri dari 7 Kota/Kabupaten yang didominasi oleh wilayah Kota. Zona 3 terdiri dari 5 wilayah Kabupaten, dan zona 4 terdiri dari hanya 3 Kota/Kabupaten.

Perbedaan yang paling signifikan dari hasil centroid gerombol yang terbentuk adalah zona 3 dan 4. Berdasarkan data, rataan persentase wilayah zona 3 yang telah melakukan vaksin 1 sebesar 20,27% dan vaksin 2 sebesar 9%, sedangkan rataan persentase wilayah zona 4 yang telah melakukan vaksin 1 sebesar 49% dan vaksin 2 sebesar 21,8%. Berdasarkan rataan dari fatality rate, zona 4 memiliki tingkat fatality rate yang lebih rendah (1,2) dibandingkan zona 3 (3,5). Hal ini bisa menggambarkan bahwa semakin tinggi persentase pemberian vaksin 1 dan 2, berimplikasi pada penurunan rasio jumlah pasien yang meninggal terhadap jumlah kasus yang terkonfirmasi covid-19.

data.klust <- geo_join(spatial_data=peta, 
                      data_frame=covid, by_sp="ADM2_EN", 
                      by_df="Kab.Kota", how = "inner")

data.points <- sf::st_point_on_surface(data.klust)
data.coords <- as.data.frame(sf::st_coordinates(data.points))
data.coords$nama <- data.peta$ADM2_EN

ggplot()+
  geom_sf(data=data.klust,aes(fill=Zona))+
  scale_fill_manual(values=c('palegreen3','yellow3','darkorange2','red3')) +
  labs(title="Penggerombolan Wilayah di Jawa Barat", x = '', y='') +
  geom_text(data = data.coords, aes(X, Y, label = nama), size = 2.8)+ geom_text_repel(verbose = TRUE,seed = 123,max.time = 1, max.iter = Inf,size = 3)