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:
- 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
- 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 34593.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.06Jumlah 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.