Analisis Cluster Menggunakan Algoritma K-Means Cluster untuk Clustering Jenis Penyakit Menular di Kota Surabaya

Ayu Ragawati Alam Tyas

14 November 2023

Library:

> #install.packages("knitr")
> #install.packages("rmarkdown")
> #install.packages("prettydoc")

1 PENDAHULUAN

1.1 Latar Belakang

Kota Surabaya sebagai salah satu pusat perkotaan yang padat penduduk memiliki tantangan besar dalam mengelola kesehatan masyarakat. Penyakit menular menjadi salah satu permasalahan utama yang perlu diidentifikasi dan diatasi secara efisien. Kota Surabaya terletak antara 07° 9’ s.d 07° 21’ Lintang Selatan dan 112° 36’ s.d 112° 54’ Bujur Timur. Wilayahnya merupakan daratan rendah dengan ketinggian 3-6 meter diatas permukaan air laut, kecuali di sebelah selatan ketinggian 25- 50 meter diatas permukaan air laut. Kota Surabaya terbagi menjadi 31 kecamatan dan 154 Kelurahan. Kecamatan yang wilayahnya paling luas adalah Kecamatan Benowo, yaitu sekitar 23.73 km2 . Sedangkan yang paling kecil adalah kecamatan Simokerto dengan luas wilayah 2.59 km2. Kepadatan penduduk di Kota Surabaya tahun 2022 mencapai 8.633 jiwa/km2. Kepadatan penduduk tersebut tergolong cukup padat di lingkungan Kota Surabaya, sehingga mempengaruhi penyebaran penyakit menular yang ada di Kota Surabaya. Jenis Penyebaran penyakit menular yang ada di Surabaya di antaranya Tuberkulosis, Kusta, DBD, dan Covid 19.

Untuk itu, patut diketahui masing-masing daerah memiliki penyebaran jenis penyakit mana yang paling dominan pada kecamatan-kecamatan di Kota Surabaya, agar dapat diketahui jenis penyakit dan daerah penyebarannya. Selain itu, pendekatan ini dapat memberikan wawasan yang lebih mendalam tentang faktor-faktor lingkungan atau sosial ekonomi yang berkaitan dengan penyebaran penyakit menular di Kota Surabaya. Informasi ini dapat menjadi dasar untuk merancang kebijakan kesehatan yang lebih holistik dan terarah. Melalui penelitian ini, diharapkan dapat ditemukan pola-pola cluster penyakit menular yang dapat memberikan panduan bagi pihak berwenang dalam pengambilan keputusan strategis terkait pengendalian penyakit. Dengan demikian, upaya pencegahan dan penanganan penyakit menular dapat dilakukan secara lebih efisien dan efektif, memberikan kontribusi positif terhadap kesehatan masyarakat Kota Surabaya.

2 TINJAUAN PUSTAKA

2.1 Analisis Cluster

Analisis cluster adalah teknik analisis statistik yang digunakan untuk menempatkan kumpulan obyek ke dalam dua grup bahkan lebih berdasarkan pada karakteristik kesamaan-kesamaan obyek. Analisis cluster merupakan teknik analisis yang bertujuan untuk memilih obyek dalam beberapa kelompok dimana antara kelompok satu dengan kelompok lainnya memiliki sifat yang berbeda. Dalam analisis cluster tiap kelompok bersifat homogen antar anggota dalam kelompok atau variasi obyek dalam satu kelompok yang terbentuk sekecil mungkin. Secara keseluruhan solusi cluster tergantung pada variabel yang digunakan sebagai dasar dalam menilai suatu kesamaan. Pengurangan dan penambahan variabel yang terkait dapat mempengaruhi hasil analisis cluster. Umumnya analisis cluster dapat dikatakan sebagai suatu proses dalam menganalisa baik atau tidaknya proses pembentuk cluster. Analisis cluster digunakan sebagai analisis yang berdiri sendiri, untuk mendapatkan gambaran terkait distribusi data.

Tujuan dari Analisis Cluster adalah mengelompokkan obyeknberdasarkan kesamaan karakteristik di antara obyek-obyek tersebut. Dengan demikian, ciri-ciri suatu cluster yang baik yaitu mepunyai :

  • Homogenitas internal (within cluster) yaitu kesamaan antar anggota dalam satu cluster.
  • Heterogenitas external (between cluster); yaitu perbedaan antara cluster yang satu dengan cluster yang lain.

2.2 Asumsi Analisis Cluster

Asumsi yang harus dipenuhi dalam Analisis Cluster yaitu:

  1. Sampel yang diambil benar-benar dapat mewakili populasi yang ada (representativeness of the sample). Salah satu metode uji yang bisa digunakan untuk mengetahui apakah sample sudah representative yaitu uji KMO. Uji Kaiser-Meyer-Olkin (KMO) merupakan pengujian yang dilakukan untuk menguji kekuatan korelasi parsial (bagaimana faktor-faktor saling menjelaskan) antar variabel. Nilai KMO yang mendekati 1,0 dianggap ideal, sedangkan nilai yang kurang dari 0,5 tidak dapat diterima. Statistik Uji KMO adalah sebagai berikut.

\(KMO=\frac{\Sigma\Sigma r^{2}_{ij}}{\Sigma\Sigma r^{2}_{ij}+\Sigma\Sigma \alpha^{2}_{ij}}\) untuk \(i\neq j\)

Keterangan:

\(\Sigma\Sigma r^{2}_{ij}\) = koefisien korelasi variabel i dan j

\(\Sigma\Sigma \alpha^{2}_{ij}\) = koefisien korelasi parsial variabel i dan j

  1. Tidak adanya kejadian atau kasus Multikolinieritas antar variable yang digunakan. Salah satu metode yang dapat digunakan adalah VIF. Untuk menemukan terdapat atau tidaknya multikolinearitas dapat diketahui dari nilai toleransi dan nilai variance inflation factor (VIF). Nilai Tolerance mengukur variabilitas dari variabel bebas yang terpilih yang tidak dapat dijelaskan oleh variabel bebas lainnya. Jadi nilai tolerance rendah sama dengan nilai VIF tinggi, dikarenakan VIF = 1/tolerance, dan menunjukkan terdapat kolinearitas yang tinggi. Nilai cut off yang digunakan adalah untuk nilai tolerance 0,10 atau nilai VIF diatas angka 10. Pengujian dilakukan dengan melihat nilai VIF atau variance inflation factors. Kriteria pengambilan keputusan terkait uji multikolinearitas adalah sebagai berikut (Ghozali, 2016) : Jika nilai VIF < 10 atau nilai Tolerance > 0,01, maka dinyatakan tidak terjadi multikolinearitas. Jika nilai VIF > 10 atau nilai Tolerance < 0,01, maka dinyatakan terjadi multikolinearitas. Jika koefisien korelasi masing-masing variabel bebas > 0,8 maka terjadi multikolinearitas. Tetapi jika koefisien korelasi masing-masing variabel bebas < 0,8 maka tidak terjadi multikolinearitas.

3 SOURCE CODE

3.1 Library yang digunakan

> library(knitr)
> library(tidyverse)
> library(dplyr)
> library(psych)
> library(magrittr)
> library(factoextra)
> library(ggplot2)
> library(GGally)
> library(ggiraphExtra)

3.2 Input Data

> library(readxl)
> datasp <- read_excel("C:\\Users\\ASUS\\Documents\\Kulyeah\\semester 5\\Analisis Multivariat\\DataSurabayaPenyakit.xlsx",col_types = 
+                        c("text", "numeric", "numeric", "numeric", "numeric", "numeric","numeric"))
> head(datasp)
# A tibble: 6 × 7
  Kecamatan   JumlahPenduduk KepadatanPenduduk Tuberkulosis Kusta DemamBerdarah
  <chr>                <dbl>             <dbl>        <dbl> <dbl>         <dbl>
1 Asemrowo             47437             3080.           92     2             1
2 Benowo               71033             2997.          115     1             7
3 Bubutan              97707            25053.          189     1             4
4 Bulak                46350             6918.           61     0             2
5 Dukuh Pakis          59293             5989.           58     0             8
6 Gayungan             43617             7150.           37     0             6
# ℹ 1 more variable: Covid19 <dbl>
> 
> df_penyakit <- data.frame(datasp)
> rownames(df_penyakit) = df_penyakit$Kecamatan
> df_penyakit
                      Kecamatan JumlahPenduduk KepadatanPenduduk Tuberkulosis
Asemrowo               Asemrowo          47437          3080.325           92
Benowo                   Benowo          71033          2997.173          115
Bubutan                 Bubutan          97707         25053.077          189
Bulak                     Bulak          46350          6917.910           61
Dukuh Pakis         Dukuh Pakis          59293          5989.192           58
Gayungan               Gayungan          43617          7150.328           37
Genteng                 Genteng          58601         14292.927          111
Gubeng                   Gubeng         133900         16737.500          180
Gunung Anyar       Gunung Anyar          60535          6240.722           91
Jambangan             Jambangan          53639         12771.190           72
Karang Pilang     Karang Pilang          74931          8144.674           71
Kenjeran               Kenjeran         177561         22764.231          390
Krembangan           Krembangan         114674         13816.145          194
Lakarsantri         Lakarsantri          63017          3316.684          119
Mulyorejo             Mulyorejo          86824          6114.366           97
Pabean Cantikan Pabean Cantikan          74810         11001.471          173
Pakal                     Pakal          60877          2754.615           60
Rungkut                 Rungkut         120067          5690.379          150
Sambikerep           Sambikerep          66796          2818.397           67
Sawahan                 Sawahan         199548         28920.000          415
Semampir               Semampir         181226         20593.864          407
Simokerto             Simokerto          92832         35704.615          190
Sukolilo               Sukolilo         113876          4804.895          150
Sukomanunggal     Sukomanunggal         104271         11333.804          208
Tambaksari           Tambaksari         226136         25126.222          364
Tandes                   Tandes          91784          8268.829          258
Tegalsari             Tegalsari          98484         22903.256          220
Tenggilis             Tenggilis          58695         10671.818           40
Wiyung                   Wiyung          74224          5937.920           68
Wonocolo               Wonocolo          79559         11699.853          127
Wonokromo             Wonokromo         155559         18301.059          183
                Kusta DemamBerdarah Covid19
Asemrowo            2             1    1359
Benowo              1             7    1071
Bubutan             1             4    1809
Bulak               0             2    1881
Dukuh Pakis         0             8    2725
Gayungan            0             6    1799
Genteng             5             4    2061
Gubeng              4             7    4850
Gunung Anyar        0             5    7318
Jambangan           2             8    1454
Karang Pilang       0             4    1731
Kenjeran            8             3    1705
Krembangan          7             2    1673
Lakarsantri         1            10     408
Mulyorejo           0             3    5343
Pabean Cantikan     2             0    1161
Pakal               2             5    1047
Rungkut             0            12    5195
Sambikerep          2             5    2499
Sawahan             5             5    3812
Semampir           15            10    1162
Simokerto           4            20    1717
Sukolilo            0             6    5345
Sukomanunggal       4             4    2884
Tambaksari          2             5    5218
Tandes              5             6    6807
Tegalsari           0            25    2204
Tenggilis           0             0    1997
Wiyung              2             8    3144
Wonocolo            0             0    2760
Wonokromo           3             6    3459

3.3 Membuat Tabel Data Penelitian

> df_penyakit <- data.frame(datasp)
> rownames(df_penyakit) = df_penyakit$Kecamatan
> df_penyakit
                      Kecamatan JumlahPenduduk KepadatanPenduduk Tuberkulosis
Asemrowo               Asemrowo          47437          3080.325           92
Benowo                   Benowo          71033          2997.173          115
Bubutan                 Bubutan          97707         25053.077          189
Bulak                     Bulak          46350          6917.910           61
Dukuh Pakis         Dukuh Pakis          59293          5989.192           58
Gayungan               Gayungan          43617          7150.328           37
Genteng                 Genteng          58601         14292.927          111
Gubeng                   Gubeng         133900         16737.500          180
Gunung Anyar       Gunung Anyar          60535          6240.722           91
Jambangan             Jambangan          53639         12771.190           72
Karang Pilang     Karang Pilang          74931          8144.674           71
Kenjeran               Kenjeran         177561         22764.231          390
Krembangan           Krembangan         114674         13816.145          194
Lakarsantri         Lakarsantri          63017          3316.684          119
Mulyorejo             Mulyorejo          86824          6114.366           97
Pabean Cantikan Pabean Cantikan          74810         11001.471          173
Pakal                     Pakal          60877          2754.615           60
Rungkut                 Rungkut         120067          5690.379          150
Sambikerep           Sambikerep          66796          2818.397           67
Sawahan                 Sawahan         199548         28920.000          415
Semampir               Semampir         181226         20593.864          407
Simokerto             Simokerto          92832         35704.615          190
Sukolilo               Sukolilo         113876          4804.895          150
Sukomanunggal     Sukomanunggal         104271         11333.804          208
Tambaksari           Tambaksari         226136         25126.222          364
Tandes                   Tandes          91784          8268.829          258
Tegalsari             Tegalsari          98484         22903.256          220
Tenggilis             Tenggilis          58695         10671.818           40
Wiyung                   Wiyung          74224          5937.920           68
Wonocolo               Wonocolo          79559         11699.853          127
Wonokromo             Wonokromo         155559         18301.059          183
                Kusta DemamBerdarah Covid19
Asemrowo            2             1    1359
Benowo              1             7    1071
Bubutan             1             4    1809
Bulak               0             2    1881
Dukuh Pakis         0             8    2725
Gayungan            0             6    1799
Genteng             5             4    2061
Gubeng              4             7    4850
Gunung Anyar        0             5    7318
Jambangan           2             8    1454
Karang Pilang       0             4    1731
Kenjeran            8             3    1705
Krembangan          7             2    1673
Lakarsantri         1            10     408
Mulyorejo           0             3    5343
Pabean Cantikan     2             0    1161
Pakal               2             5    1047
Rungkut             0            12    5195
Sambikerep          2             5    2499
Sawahan             5             5    3812
Semampir           15            10    1162
Simokerto           4            20    1717
Sukolilo            0             6    5345
Sukomanunggal       4             4    2884
Tambaksari          2             5    5218
Tandes              5             6    6807
Tegalsari           0            25    2204
Tenggilis           0             0    1997
Wiyung              2             8    3144
Wonocolo            0             0    2760
Wonokromo           3             6    3459
> #buat data jadi satu vektor
> svdata<-stack(df_penyakit)
> svdata
              values               ind
1           Asemrowo         Kecamatan
2             Benowo         Kecamatan
3            Bubutan         Kecamatan
4              Bulak         Kecamatan
5        Dukuh Pakis         Kecamatan
6           Gayungan         Kecamatan
7            Genteng         Kecamatan
8             Gubeng         Kecamatan
9       Gunung Anyar         Kecamatan
10         Jambangan         Kecamatan
11     Karang Pilang         Kecamatan
12          Kenjeran         Kecamatan
13        Krembangan         Kecamatan
14       Lakarsantri         Kecamatan
15         Mulyorejo         Kecamatan
16   Pabean Cantikan         Kecamatan
17             Pakal         Kecamatan
18           Rungkut         Kecamatan
19        Sambikerep         Kecamatan
20           Sawahan         Kecamatan
21          Semampir         Kecamatan
22         Simokerto         Kecamatan
23          Sukolilo         Kecamatan
24     Sukomanunggal         Kecamatan
25        Tambaksari         Kecamatan
26            Tandes         Kecamatan
27         Tegalsari         Kecamatan
28         Tenggilis         Kecamatan
29            Wiyung         Kecamatan
30          Wonocolo         Kecamatan
31         Wonokromo         Kecamatan
32             47437    JumlahPenduduk
33             71033    JumlahPenduduk
34             97707    JumlahPenduduk
35             46350    JumlahPenduduk
36             59293    JumlahPenduduk
37             43617    JumlahPenduduk
38             58601    JumlahPenduduk
39            133900    JumlahPenduduk
40             60535    JumlahPenduduk
41             53639    JumlahPenduduk
42             74931    JumlahPenduduk
43            177561    JumlahPenduduk
44            114674    JumlahPenduduk
45             63017    JumlahPenduduk
46             86824    JumlahPenduduk
47             74810    JumlahPenduduk
48             60877    JumlahPenduduk
49            120067    JumlahPenduduk
50             66796    JumlahPenduduk
51            199548    JumlahPenduduk
52            181226    JumlahPenduduk
53             92832    JumlahPenduduk
54            113876    JumlahPenduduk
55            104271    JumlahPenduduk
56            226136    JumlahPenduduk
57             91784    JumlahPenduduk
58             98484    JumlahPenduduk
59             58695    JumlahPenduduk
60             74224    JumlahPenduduk
61             79559    JumlahPenduduk
62            155559    JumlahPenduduk
63  3080.32467532468 KepadatanPenduduk
64  2997.17299578059 KepadatanPenduduk
65  25053.0769230769 KepadatanPenduduk
66  6917.91044776119 KepadatanPenduduk
67  5989.19191919192 KepadatanPenduduk
68  7150.32786885246 KepadatanPenduduk
69  14292.9268292683 KepadatanPenduduk
70           16737.5 KepadatanPenduduk
71  6240.72164948454 KepadatanPenduduk
72  12771.1904761905 KepadatanPenduduk
73  8144.67391304348 KepadatanPenduduk
74  22764.2307692308 KepadatanPenduduk
75  13816.1445783133 KepadatanPenduduk
76  3316.68421052632 KepadatanPenduduk
77   6114.3661971831 KepadatanPenduduk
78  11001.4705882353 KepadatanPenduduk
79  2754.61538461538 KepadatanPenduduk
80  5690.37914691943 KepadatanPenduduk
81  2818.39662447257 KepadatanPenduduk
82             28920 KepadatanPenduduk
83  20593.8636363636 KepadatanPenduduk
84  35704.6153846154 KepadatanPenduduk
85  4804.89451476793 KepadatanPenduduk
86  11333.8043478261 KepadatanPenduduk
87  25126.2222222222 KepadatanPenduduk
88  8268.82882882883 KepadatanPenduduk
89  22903.2558139535 KepadatanPenduduk
90  10671.8181818182 KepadatanPenduduk
91           5937.92 KepadatanPenduduk
92  11699.8529411765 KepadatanPenduduk
93  18301.0588235294 KepadatanPenduduk
94                92      Tuberkulosis
95               115      Tuberkulosis
96               189      Tuberkulosis
97                61      Tuberkulosis
98                58      Tuberkulosis
99                37      Tuberkulosis
100              111      Tuberkulosis
101              180      Tuberkulosis
102               91      Tuberkulosis
103               72      Tuberkulosis
104               71      Tuberkulosis
105              390      Tuberkulosis
106              194      Tuberkulosis
107              119      Tuberkulosis
108               97      Tuberkulosis
109              173      Tuberkulosis
110               60      Tuberkulosis
111              150      Tuberkulosis
112               67      Tuberkulosis
113              415      Tuberkulosis
114              407      Tuberkulosis
115              190      Tuberkulosis
116              150      Tuberkulosis
117              208      Tuberkulosis
118              364      Tuberkulosis
119              258      Tuberkulosis
120              220      Tuberkulosis
121               40      Tuberkulosis
122               68      Tuberkulosis
123              127      Tuberkulosis
124              183      Tuberkulosis
125                2             Kusta
126                1             Kusta
127                1             Kusta
128                0             Kusta
129                0             Kusta
130                0             Kusta
131                5             Kusta
132                4             Kusta
133                0             Kusta
134                2             Kusta
135                0             Kusta
136                8             Kusta
137                7             Kusta
138                1             Kusta
139                0             Kusta
140                2             Kusta
141                2             Kusta
142                0             Kusta
143                2             Kusta
144                5             Kusta
145               15             Kusta
146                4             Kusta
147                0             Kusta
148                4             Kusta
149                2             Kusta
150                5             Kusta
151                0             Kusta
152                0             Kusta
153                2             Kusta
154                0             Kusta
155                3             Kusta
156                1     DemamBerdarah
157                7     DemamBerdarah
158                4     DemamBerdarah
159                2     DemamBerdarah
160                8     DemamBerdarah
161                6     DemamBerdarah
162                4     DemamBerdarah
163                7     DemamBerdarah
164                5     DemamBerdarah
165                8     DemamBerdarah
166                4     DemamBerdarah
167                3     DemamBerdarah
168                2     DemamBerdarah
169               10     DemamBerdarah
170                3     DemamBerdarah
171                0     DemamBerdarah
172                5     DemamBerdarah
173               12     DemamBerdarah
174                5     DemamBerdarah
175                5     DemamBerdarah
176               10     DemamBerdarah
177               20     DemamBerdarah
178                6     DemamBerdarah
179                4     DemamBerdarah
180                5     DemamBerdarah
181                6     DemamBerdarah
182               25     DemamBerdarah
183                0     DemamBerdarah
184                8     DemamBerdarah
185                0     DemamBerdarah
186                6     DemamBerdarah
187             1359           Covid19
188             1071           Covid19
189             1809           Covid19
190             1881           Covid19
191             2725           Covid19
192             1799           Covid19
193             2061           Covid19
194             4850           Covid19
195             7318           Covid19
196             1454           Covid19
197             1731           Covid19
198             1705           Covid19
199             1673           Covid19
200              408           Covid19
201             5343           Covid19
202             1161           Covid19
203             1047           Covid19
204             5195           Covid19
205             2499           Covid19
206             3812           Covid19
207             1162           Covid19
208             1717           Covid19
209             5345           Covid19
210             2884           Covid19
211             5218           Covid19
212             6807           Covid19
213             2204           Covid19
214             1997           Covid19
215             3144           Covid19
216             2760           Covid19
217             3459           Covid19
> library(rmarkdown)
> paged_table(as.data.frame(svdata))

3.4 Statistika Deskriptif

statdeskrip <- summary(df_penyakit)
statdeskrip
describe(df_penyakit)

Secara keseluruhan, sintaks tersebut digunakan untuk memeriksa statistik deskriptif dari data frame df_penyakit menggunakan fungsi summary dan describe. Hal ini membantu untuk mendapatkan pemahaman yang lebih baik tentang distribusi dan karakteristik variabel-variabel dalam data frame tersebut.

3.5 Uji Asumsi Representatif

> str(df_penyakit[,2:7])
'data.frame':   31 obs. of  6 variables:
 $ JumlahPenduduk   : num  47437 71033 97707 46350 59293 ...
 $ KepadatanPenduduk: num  3080 2997 25053 6918 5989 ...
 $ Tuberkulosis     : num  92 115 189 61 58 37 111 180 91 72 ...
 $ Kusta            : num  2 1 1 0 0 0 5 4 0 2 ...
 $ DemamBerdarah    : num  1 7 4 2 8 6 4 7 5 8 ...
 $ Covid19          : num  1359 1071 1809 1881 2725 ...
> KMOp <- KMO(df_penyakit[,2:7])

str(df_penyakit[, 2:7]): Menampilkan struktur data frame df_penyakit untuk kolom ke-2 hingga ke-7. Fungsi str memberikan informasi tentang tipe data dan panjang vektor untuk setiap variabel. KMOp <- KMO(df_penyakit[, 2:7]): Menghitung nilai Keiser-Meyer-Olkin (KMO) untuk mengevaluasi kebolehkerabatan antar variabel dalam subset data frame. KMOp: Menampilkan nilai KMO yang dihasilkan dari analisis Keiser-Meyer-Olkin. Nilai KMO diinterpretasikan untuk mengukur sejauh mana data dapat digunakan untuk analisis faktor.

3.6 Uji Asumsi Non-Multikolinearitas

> VIF_1 <- function(data) {
+   corr = as.matrix(cor(data))
+   VIF = diag(solve(corr))
+   
+   return(VIF)
+ }
> 
> datadfnew <- df_penyakit[,2:7]

VIF_1 <- function(data) { … }: Mendefinisikan fungsi R yang disebut VIF_1. Fungsi ini mengambil satu argumen yaitu data, yang seharusnya berupa data frame. corr = as.matrix(cor(data)): Menghitung matriks korelasi antar variabel dalam data frame menggunakan fungsi cor. Matriks korelasi kemudian dikonversi menjadi matriks untuk digunakan dalam perhitungan selanjutnya. VIF = diag(solve(corr)): Menghitung Variance Inflation Factor (VIF) dengan memecahkan masalah invers dari matriks korelasi. Hasilnya adalah diagonal dari invers matriks korelasi. return(VIF): Mengembalikan nilai VIF sebagai hasil fungsi.

3.7 Penentuan Jumlah Cluster (k)

3.7.1 Metode Elbow

fviz_nbclust(datadfnew, kmeans, method = 'wss')

fviz_nbclust(): fungsi dari paket factoextra yang digunakan untuk memvisualisasikan hasil analisis klaster dan membantu menentukan jumlah optimal kluster. datadfnew: data frame atau matriks yang digunakan dalam analisis klaster. Variabel-variabel di dalam data ini akan digunakan untuk membentuk kluster. kmeans: objek hasil dari analisis klaster menggunakan algoritma K-Means. Sebelum menggunakan fungsi fviz_nbclust, perlu dilakukan analisis klaster menggunakan algoritma K-Means dan menyimpan hasilnya dalam objek kmeans. method = ‘wss’: Parameter ini mengindikasikan bahwa visualisasi yang dihasilkan akan berfokus pada metode Within-Sum-of-Squares (WSS) atau metode Elbow. Metode ini mencoba menentukan jumlah kluster optimal dengan melihat titik “elbow” dalam plot, yang merupakan tempat di mana penurunan WSS mulai melambat.

3.7.2 Metode Silhouette

fviz_nbclust(datadfnew, kmeans, method = 'silhouette')

fviz_nbclust(): fungsi dari paket factoextra yang digunakan untuk memvisualisasikan hasil analisis klaster dan membantu menentukan jumlah optimal kluster. datadfnew: data frame atau matriks yang digunakan dalam analisis klaster. Variabel-variabel di dalam data ini akan digunakan untuk membentuk kluster. kmeans: objek hasil dari analisis klaster menggunakan algoritma K-Means. Sebelum menggunakan fungsi fviz_nbclust, perlu dilakukan analisis klaster menggunakan algoritma K-Means dan menyimpan hasilnya dalam objek kmeans. method = ‘silhouette’: Parameter ini mengindikasikan bahwa visualisasi yang dihasilkan akan berfokus pada metode silhouette. Metode ini menggunakan indeks silhouette untuk mengevaluasi kualitas klaster. Indeks silhouette mengukur seberapa baik setiap objek cocok dengan klaster yang telah ditentukan.

3.8 Analisis Cluster

> set.seed(132)
> penyakit_kmeans <- kmeans(x = datadfnew, centers = 2)

set.seed(132): Fungsi ini digunakan untuk mengatur biji acak (random seed). penyakit_kmeans <- kmeans(x = datadfnew, centers = 2): kmeans(): Ini adalah fungsi R yang digunakan untuk melakukan analisis klaster dengan menggunakan algoritma k-means. x = datadfnew: Ini adalah data yang digunakan untuk analisis klaster, dalam hal ini, data frame datadfnew. centers = 2: Parameter ini mengatur jumlah klaster yang diinginkan, dalam hal ini, jumlah klaster diatur sebanyak 2 sesuai dengan penentuan jumlah cluster sebelumnya. penyakit_kmeans <-: Hasil dari fungsi kmeans disimpan dalam variabel penyakit_kmeans. Variabel ini berisi informasi tentang hasil analisis, termasuk pusat klaster dan klaster yang diassign untuk setiap observasi. penyakit_kmeans: variabel yang menyimpan hasil dari analisis klaster.

3.9 Plot

fviz_cluster(penyakit_kmeans, data = datadfnew,
             palette = c("#E7B800", "#53b647"),
             ellipse.type = "euclid", 
             ellipsestar.plot = TRUE, 
             repel = TRUE, 
             ggtheme = theme_minimal())
fviz_cluster(object = penyakit_kmeans, data = datadfnew)

Visualisasi Dengan Ellipse

fviz_cluster(penyakit_kmeans, data = datadfnew, palette = c(“#E7B800”, “#53b647”), ellipse.type = “euclid”, ellipsestar.plot = TRUE, repel = TRUE, ggtheme = theme_minimal()): penyakit_kmeans: Objek hasil analisis k-means yang disimpan sebelumnya. data = datadfnew: Data frame yang digunakan dalam analisis klaster. palette = c(“#E7B800”, “#53b647”): Warna yang digunakan untuk menunjukkan klaster. Dalam contoh ini, warna kuning (#E7B800) dan hijau (#53b647). ellipse.type = “euclid”: Jenis ellipse yang digunakan untuk mengelilingi klaster. Dalam hal ini, digunakan ellips Euclidean. ellipsestar.plot = TRUE: Membuat plot yang menunjukkan ellips dan bintang klaster. repel = TRUE: Menghindari tumpang tindih label klaster. ggtheme = theme_minimal(): Tema grafik yang diterapkan menggunakan theme_minimal().

Visualisasi Tanpa Argumen Tambahan

fviz_cluster(object = penyakit_kmeans, data = datadfnew): object = penyakit_kmeans: Objek hasil analisis k-means yang disimpan sebelumnya. data = datadfnew: Data frame yang digunakan dalam analisis klaster.

3.10 Profiling

df_penyakit$Cluster <- penyakit_kmeans$cluster
ggRadar(
  data = df_penyakit,
  mapping = aes(colours = Cluster),
  interactive = T
)
data_profil <- df_penyakit %>%
   select(-Kecamatan) %>% 
  group_by(Cluster) %>% 
  summarise_all(mean)
  round(data_profil, 3)

df_penyakit $ Cluster: Menambahkan kolom baru bernama “Cluster” ke dalam data frame df_penyakit. penyakit_kmeans $ cluster: Mengambil informasi klaster yang ditentukan oleh hasil analisis k-means dan menambahkannya sebagai kolom baru “Cluster” pada data frame. Menggunakan ggRadar untuk Visualisasi Radar Plot Interaktif. ggRadar(): Fungsi dari paket fmsb untuk membuat plot radar (spider plot) interaktif. data = df_penyakit: Data frame yang digunakan untuk plot radar. mapping = aes(colours = Cluster): Menentukan bahwa warna dalam plot akan diberikan berdasarkan kolom “Cluster”. interactive = T: Menentukan bahwa plot akan bersifat interaktif. Menghitung Profil Data untuk Setiap Klaster. select(-Kecamatan): Memilih semua kolom kecuali “Kecamatan”. group_by(Cluster): Mengelompokkan data berdasarkan kolom “Cluster”. summarise_all(mean): Menghitung nilai rata-rata untuk setiap variabel dalam setiap klaster. round(data_profil, 3): Membulatkan nilai rata-rata hingga tiga desimal.

4 HASIL DAN PEMBAHASAN

4.1 Statistika Deskriptif

> describe(df_penyakit)
                  vars  n     mean       sd   median  trimmed      mad      min
Kecamatan*           1 31    16.00     9.09    16.00    16.00    11.86     1.00
JumlahPenduduk       2 31 96382.68 47673.18 79559.00 89741.96 30932.97 43617.00
KepadatanPenduduk    3 31 12319.92  8731.35 10671.82 11343.86  7385.48  2754.62
Tuberkulosis         4 31   159.90   108.52   127.00   144.40    88.96    37.00
Kusta                5 31     2.48     3.21     2.00     1.88     2.97     0.00
DemamBerdarah        6 31     6.16     5.30     5.00     5.36     2.97     0.00
Covid19              7 31  2825.74  1798.70  2061.00  2624.08  1220.18   408.00
                        max  range skew kurtosis      se
Kecamatan*            31.00     30 0.00    -1.32    1.63
JumlahPenduduk    226136.00 182519 1.16     0.39 8562.36
KepadatanPenduduk  35704.62  32950 0.90    -0.17 1568.20
Tuberkulosis         415.00    378 1.09     0.18   19.49
Kusta                 15.00     15 2.04     5.00    0.58
DemamBerdarah         25.00     25 1.86     3.97    0.95
Covid19             7318.00   6910 0.95    -0.20  323.06
  • Jumlah penduduk Kota Surabaya bervariasi, dengan rata-rata sekitar 79,559 orang. Standar deviasi yang tinggi menunjukkan variasi yang signifikan di antara daerah-daerah di Kota Surabaya. Wilayah dengan jumlah penduduk terendah memiliki populasi sekitar 43,617 orang. Wilayah dengan jumlah penduduk tertinggi memiliki populasi sekitar 226,136 orang.

  • Kepadatan penduduk Kota Surabaya berkisar dari 2,754.62 hingga 35,704.62 orang per kilometer persegi, dengan rata-rata sekitar 10,671.82 orang per kilometer persegi. Standar deviasi yang tinggi menunjukkan variasi yang besar dalam kepadatan penduduk di berbagai wilayah. Wilayah dengan kepadatan penduduk terendah memiliki sekitar 2,754.62 orang per kilometer persegi. Wilayah dengan kepadatan penduduk tertinggi memiliki sekitar 35,704.62 orang per kilometer persegi.

  • Jumlah kasus tuberkulosis bervariasi di Kota Surabaya, dengan rata-rata sekitar 127 kasus. Standar deviasi yang tinggi menunjukkan variasi yang signifikan dalam distribusi kasus tuberkulosis di berbagai wilayah. Wilayah dengan kasus tuberkulosis terendah memiliki sekitar 37 kasus. Wilayah dengan kasus tuberkulosis tertinggi memiliki sekitar 415 kasus.

  • Kasus kusta juga bervariasi, dengan rata-rata sekitar 2 kasus. Standar deviasi yang relatif tinggi menunjukkan variasi yang signifikan di antara wilayah-wilayah. Wilayah dengan kasus kusta terendah tidak memiliki kasus kusta atau 0 kasus. Wilayah dengan kasus kusta tertinggi memiliki sekitar 15 kasus.

  • Kasus demam berdarah memiliki variasi yang signifikan, dengan rata-rata sekitar 5 kasus. Standar deviasi yang tinggi menunjukkan perbedaan yang besar di antara wilayah-wilayah di Kota Surabaya. Wilayah dengan kasus demam berdarah terendah tidak memiliki kasus demam berdarah atau 0 kasus. Wilayah dengan kasus demam berdarah tertinggi memiliki sekitar 25 kasus.

  • Kasus Covid-19 bervariasi di berbagai wilayah Kota Surabaya, dengan rata-rata sekitar 2,061 kasus. Standar deviasi yang tinggi menunjukkan variasi yang signifikan dalam penyebaran Covid-19 di berbagai daerah. Wilayah dengan kasus Covid-19 terendah memiliki sekitar 408 kasus. Wilayah dengan kasus Covid-19 tertinggi memiliki sekitar 7,318 kasus.

4.2 Uji Sampel Representatif

> KMOp
Kaiser-Meyer-Olkin factor adequacy
Call: KMO(r = df_penyakit[, 2:7])
Overall MSA =  0.67
MSA for each item = 
   JumlahPenduduk KepadatanPenduduk      Tuberkulosis             Kusta 
             0.70              0.78              0.66              0.68 
    DemamBerdarah           Covid19 
             0.50              0.31 

Didapatkan nilai KMO secara keseluruhan adalah 0.67 > 0.5 sehingga dapat disimpulkan bahwa seluruh variabel secara simultan sudah representatif atau mewakili sifat-sifat dan karakteristik dari populasi.

4.3 Uji Multikolinieritas

> VIF_1(df_penyakit[2:7])
   JumlahPenduduk KepadatanPenduduk      Tuberkulosis             Kusta 
         6.186306          2.481780          8.697561          2.397123 
    DemamBerdarah           Covid19 
         1.213714          1.397308 

Didapatkan hasil bahwa nilai VIF untuk \(X_1\) memiliki nilai VIF sebesar 6.186306 < 10, sehingga disimpulkan tidak terdapat 1 multikolinieritas pada variabel \(X_1\). Untuk nilai VIF pada \(X_2\) adalah sebesar 2.481780 < 10, sehingga disimpulkan tidak terdapat multikolinieritas pada variabel \(X_2\). Untuk nilai VIF pada \(X_3\) adalah sebesar 8.697561 < 10, sehingga disimpulkan tidak terdapat multikolinieritas pada variabel \(X_3\). Untuk nilai VIF pada \(X_4\) adalah sebesar 2.397123 < 10, sehingga disimpulkan tidak terdapat multikolinieritas pada variabel \(X_4\). Untuk nilai VIF pada \(X_5\) adalah sebesar 1.213714 < 10, sehingga disimpulkan tidak terdapat multikolinieritas pada variabel \(X_5\). Untuk nilai VIF pada \(X_6\) adalah sebesar 1.397308 < 10, sehingga disimpulkan tidak terdapat multikolinieritas pada variabel \(X_6\). Keseluruhan variabel memenuhi asumsi tidak terjadinya multikolinieritas antar variabel sehingga variabel-variabel yang digunakan pada penelitian ini cukup baik.

4.4 Penentuan Jumlah Cluster

4.4.1 Metode Elbow

> fviz_nbclust(datadfnew, kmeans, method = 'wss')

Berdasarkan grafik di atas, dengan menggunakan Metode Elbow dapat diketahui bahwa posisi grafik curam dari titik pertama, setelah itu pergerakannya mulai melandai sedikit-demi sedikit. Pergerakan grafik yang mulai landai adalah pada titik ke 2-3. Oleh karena itu, jumlah cluster optimum yang disarankan berdasarkan metode ini adalah 2.

4.4.2 Metode Silhouette

> fviz_nbclust(datadfnew, kmeans, method = 'silhouette')

Cara melihat nilai optimum pada Metode Silhoutte adalah dengan melihat titik tertinggi pada garis atau titik yang dituju oleh garis putus-putus secara vertikal. Berdasarkan grafik di atas, garis putus-putus terletak pada titik k = 2. Dengan demikian, jumlah cluster optimum yang disarankan berdasarkan metode ini adalah 2.

Dari hasil kedua grafik tersebut, grafik metode elbow dan silhouette keduanya diperoleh jumlah cluster optimum yang disarankan adalah 2. Selanjutnya, dilakukan pembentukan cluster sebanyak 2 cluster dengan metode K Means Clustering.

4.5 Analisis Cluster

> penyakit_kmeans
K-means clustering with 2 clusters of sizes 25, 6

Cluster means:
  JumlahPenduduk KepadatanPenduduk Tuberkulosis    Kusta DemamBerdarah  Covid19
1       76557.32          9978.983     120.7200 1.600000           6.2 2695.680
2      178988.33         22073.813     323.1667 6.166667           6.0 3367.667

Clustering vector:
       Asemrowo          Benowo         Bubutan           Bulak     Dukuh Pakis 
              1               1               1               1               1 
       Gayungan         Genteng          Gubeng    Gunung Anyar       Jambangan 
              1               1               2               1               1 
  Karang Pilang        Kenjeran      Krembangan     Lakarsantri       Mulyorejo 
              1               2               1               1               1 
Pabean Cantikan           Pakal         Rungkut      Sambikerep         Sawahan 
              1               1               1               1               2 
       Semampir       Simokerto        Sukolilo   Sukomanunggal      Tambaksari 
              2               1               1               1               2 
         Tandes       Tegalsari       Tenggilis          Wiyung        Wonocolo 
              1               1               1               1               1 
      Wonokromo 
              2 

Within cluster sum of squares by cluster:
[1] 13738345132  5349620704
 (between_SS / total_SS =  73.0 %)

Available components:

[1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
[6] "betweenss"    "size"         "iter"         "ifault"      

Berdasarkan output didapatkan anggota cluster 1 sebanyak 25 kecamatan dengan anggota Kecamatan Asemrowo, Gayungan, Karang Pilang, Tandes, Benowo, Genteng, Pakal, Simokerto, Tegalsari, Bubutan, Krembangan, Sukolilo, Rungkut, Tenggilis, Bulak, Gunung Anyar, Lakarsantri, Sambikerep, Sukomanunggal, Wiyung, Dukuh Pakis, Jambangan, Mulyorejo, Wonocoro, dan cluster 2 sebanyak 6 kecamatan dengan anggota kecamatan Semampir, Wonokromo, Kenjeran, Gubeng, Sawahan, Tambaksari. Dengan terbentuknya cluster tersebut, dapat disimpulkan bahwa pada cluster 1 terdapat kemiripan karakteristik jenis penyakit menular yang terjadi pada wilayah-wilayah tersebut, dan pada cluster 2 juga terdapat kemiripan karakteristik penyakit menular yang terjadi pada wilayah tersebut. Untuk mengidentifikasi penyakit apa yang dominan pada masing-masing cluster tersebut, dapat dilakukan pembentukan plot sehingga perbaikan lingkungan lebih lanjut pada tiap cluster dapat dilakukan.

4.6 Plot

> fviz_cluster(penyakit_kmeans, data = datadfnew,
+              palette = c("#E7B800", "#53b647"),
+              ellipse.type = "euclid", 
+              ellipsestar.plot = TRUE, 
+              repel = TRUE, 
+              ggtheme = theme_minimal())

> fviz_cluster(object = penyakit_kmeans, data = datadfnew)

  • Plot 1: Terbentuk 2 cluster yang beranggotakan 31 kecamatan, dimana Cluster 1 ditandai dengan warna kuning dengan notasi lingkaran, dan Cluster 2 ditandai dengan warna hijau dengan notasi segitiga. Cluster 1 beranggotakan lebih banyak kecamatan jika dibandingkan dengan cluster 2. Titik-titik kecamatan yang terletak berdekatan menandakan bahwa kecamatan-kecamatan tersebut memiliki karakteristik Jenis Penyakit Menular seperti Covid-19, Tuberkulosis, Kusta, dan Demam Berdarah yang hampir sama.

  • Plot 2: Terbentuk 2 cluster yang beranggotakan 31 kecamatan, dimana Cluster 1 ditandai dengan warna merah, dan Cluster 2 ditandai dengan warna biru. Cluster 1 beranggotakan lebih banyak kecamatan jika dibandingkan dengan cluster 2. Titik-titik kecamatan yang terletak berdekatan menandakan bahwa kecamatan-kecamatan tersebut memiliki karakteristik Jenis Penyakit Menular seperti Covid-19, Tuberkulosis, Kusta, dan Demam Berdarah yang hampir sama. Plot Elipse dan plot ini menghasilkan gambar plot yang cenderung sama, namun pada plot elipse lebih terlihat jelas hubungan antar kecamatan pada tiap cluster.

4.7 Profiling

> df_penyakit$Cluster <- penyakit_kmeans$cluster
> ggRadar(
+   data = df_penyakit,
+   mapping = aes(colours = Cluster),
+   interactive = T
+ )
> data_profil <- df_penyakit %>%
+    select(-Kecamatan) %>% 
+   group_by(Cluster) %>% 
+   summarise_all(mean)
>   round(data_profil, 3)
# A tibble: 2 × 7
  Cluster JumlahPenduduk KepadatanPenduduk Tuberkulosis Kusta DemamBerdarah
    <dbl>          <dbl>             <dbl>        <dbl> <dbl>         <dbl>
1       1         76557.             9979.         121.  1.6            6.2
2       2        178988.            22074.         323.  6.17           6  
# ℹ 1 more variable: Covid19 <dbl>
  • Cluster 1 memiliki kasus Covid-19, Tuberkolosis, dan Kusta lebih rendah dari cluster 2, sebanding dengan jumlah penduduk dan kepadatan penduduk yang jauh lebih rendah dari cluster 2. Namun, cluster 1 memiliki kasus Demam Berdarah (DBD) yang sedikit lebih tinggi dari cluster 2. Penyakit paling dominan pada cluster 1 ialah Covid-19 walaupun kasusnya tidak sebanyak di cluster 2.

  • Cluster 2 memiliki kasus Covid-19, Tuberkulosis dan Kusta yang lebih tinggi dari cluster 1. Namun, kasus Tuberkulosis terlihat paling tinggi daripada kasus lain. Sehingga pada cluster 2 penyakit yang dominan adalah Tuberkulosis.

5 PENUTUP

5.1 Kesimpulan

Berdasarkan hasil analisis cluster yang telah dilakukan, dapat diambil beberapa kesimpulan yaitu sebagai berikut.

  • Seluruh Asumsi pada Analisis Cluster terpenuhi dengan baik sehingga Analisis Cluster dapat dilakukan.

  • Berdasarkan interpretasi pada plot dan profiling, meskipun Cluster 1 memiliki populasi dan kepadatan penduduk yang lebih rendah, tetapi masih menghadapi tantangan penyakit menular seperti Covid-19 dan DBD. Hal ini menunjukkan pemerintah perlu melakukan pendekatan kesehatan masyarakat yang tepat di wilayah tersebut seperti pemberian instruksi untuk melakukan protokol kesehatan dengan benar.

  • Tingkat kejadian Tuberkulosis sangat tinggi di Cluster 2, yang menunjukkan bahwa penyakit ini menjadi perhatian utama di wilayah tersebut. Kasus - -

  • Tuberkulosis dapat disebabkan oleh beberapa faktor seperti, kondisi kesehatan yang buruk, kurangnya gizi yang dapat melemahkan tubuh dan meningkatkan risiko infeksi TB, kondisi lingkungan yang padat penduduk, sanitasi yang buruk dan akses terbatas terhadap pelayanan kesehatan dapat meningkatkan risiko penularan TB.

  • Hasil analisis cluster ini dapat digunakan sebagai dasar untuk analisis lebih lanjut, seperti penyebab mendasar perbedaan tingkat kejadian, adanya faktor risiko tertentu, dan evaluasi efektivitas langkah-langkah pencegahan atau pengobatan yang sudah ada.

5.2 Saran

Dari hasil analisis yang telah dilakukan, peneliti memiliki beberapa saran yang dapat memberikan manfaat kepada pihak lain yang terkait atas hasil analisis. Adapun saran dari peneliti adalah sebagai berikut :

  • Bagi Peneliti Selanjutnya

Pada bagian uji sampel representatif, peneliti selanjutnya diharapkan menelaah lebih lanjut mengenai variabel penyakit menular Covid-19 karena hasil uji KMO memberikan nilai 0.31 yang berarti variabel tersebut kurang representatif terhadap populasi yang di teliti. Kemudian untuk peneliti selanjutnya diharapkan dapat mengembangkan penelitian ini dengan meneliti variabel lain terkait penyakit menular lain yang ada di Kota Surabaya. Peneliti selanjutnya juga dapat menggunakan metode analisis cluster yang lain baik dalam lingkup metode hirarki maupun non hirarki untuk tahapan analisisnya.

  • Bagi Pemerintah Setempat di masing-masing kecamatan dan Pemerintah Pusat Kota Surabaya

Pemerintah pada masing-masing kecamatan di Kota Surabaya harus meninjau lebih lanjut mengenai penyebab maraknya jenis penyakit menular yang dominan pada wilayahnya dan bekerja sama dengan kecamatan-kecamatan yang masuk dalam cluster yang sama untuk menangani tingkat penularan penyakit tersebut sehingga dapat menciptakan lingkungan yang aman, nyaman, sehat, dan sejahtera bagi masyarakat maupun pemerintah setempat. Pemerintah Kota Surabaya diharapkan dapat memandu dan memfasilitasi keperluan pemerintah di masing-masing kecamatan untuk membangun dan menanggulangi dampak penularan dari penyakit-penyakit yang dominan di wilayah setempat.

6 DAFTAR PUSTAKA

Ajija, Shochrul Rohmatul, dkk. 2011. Cara Cerdas Menguasai Eviews. Jakarta: Salemba Empat.

Badan Pusat Statistik Kota Surabaya. (2022). Jumlah Penduduk Surabaya Menurut Jenis Kelamin dan Kelompok Umur (Jiwa), 2020-2022. Diakses pada 06 November 2023. https://surabayakota.bps.go.id/indicator/12/236/1/jumlah-penduduk-surabaya-menurut-jenis-kelamin-dan-kelompok-umur.html

Badan Pusat Statistik Kota Surabaya. (2015). Luas Wilayah Kota Surabaya Menurut Kecamatan. Diakses pada 06 November 2023. https://surabayakota.bps.go.id/statictable/2016/01/21/499/luas-wilayah-kota-surabaya-tahun-2015-berdasarkan-kecamatan.html

Ghozali, I. (2016) Aplikasi Analisis Multivariete Dengan Program IBM SPSS 23. Edisi 8. Semarang: Badan Penerbit Universitas Diponegoro.

Hidayat, A. (2022). Klasterisasi Penyebaran COVID-19 di Indonesia Berdasarkan Provinsi Menggunakan K-Means Cluster. Diakses pada 06 November 2023. https://rpubs.com/Anoe/lbb-kmeans.

Nurissaidah U. & Rafika V. (2020). Analisis Cluster dalam Pengelompokan Provinsi di Indonesia Berdasarkan Variabel Penyakit Menular Menggunakan Metode Complete Linkage, Average Linkage dan Ward. InfoTekJar: Jurnal Nasional Informatika dan Teknologi Jaringan, 5(1). Hal. 102-104.

Pradita, H. A. (2022, 18 Mei). Analisis Cluster dalam Pengelompokan Provinsi di Indonesia Berdasarkan Faktor-Faktor Penyebab Kekerasan Seksual. Diakses pada 06 November 2023. https://rpubs.com/helvaaldha/PenerapanAnalisisCluster.\ Diakses 06 November 2023.

Rachman, Aninda, dkk. (2019). Analisis Cluster Menggunakan Algoritma K-Means Cluster untuk Clustering Jenis Penyakit Menular Pada Puskesmas di Kecamatan Kota Tangerang. Jurnal Saintika Unpam. 2(1), Hal. 19-21.

Satu Data Indonesia. (2023, 11 Juli). Jumlah Kasus Penyakit Menular Menurut Kecamatan di Kota Surabaya 2019-2022. Diakses pada 06 November 2023. https://katalog.data.go.id/dataset/jumlah-kasus-penyakit-menular-menurut-kecamatan1 Diakses 4 November 2023.