Tujuan analisis:
Sumber data. Jumlah kasus pneumonia balita dan jumlah balita per kecamatan bersumber dari Profil Kesehatan Kota Bandung (Dinas Kesehatan Kota Bandung). Batas wilayah kecamatan bersumber dari data GeoJSON administrasi Kota Bandung. Unit analisis: 30 kecamatan; periode: 2016-2021 (enam tahun, 30 kecamatan).
Variabel penelitian. Data memuat variabel respons (jumlah kasus pneumonia balita), populasi berisiko (jumlah balita), serta enam covariate:
| Variabel | Peran |
|---|---|
| Pneumonia | Respons |
| exclusive_breastfeeding | Prediktor |
| DPT_HB_Hib | Prediktor |
| measles | Prediktor |
| vit_A | Prediktor |
| population | Offset |
| poverty | Prediktor |
| altitude | Prediktor |
Ukuran Epidemiologi. \[ IR=\frac{O_i}{P_i}\times 100{.}000, \quad E_i=P_i\times\frac{\sum O}{\sum P}, \quad SIR_i=\frac{O_i}{E_i} \] dengan \(O_i\) kasus teramati, \(P_i\) populasi balita berisiko. SIR > 1 mengindikasikan risiko di atas rata-rata kota (Clayton & Kaldor, 1987).
Disease mapping. Peta risiko kasar (crude SIR) dan penghalusan Empirical Bayes menggunakan estimator global berdasarkan metode Marshall (1991) untuk menstabilkan estimasi pada wilayah berpopulasi kecil. Autokorelasi spasial diuji dengan Moran’s I (Moran, 1950; Cliff & Ord, 1981)
## [1] "shp/bandung_kecamatan/bandung_kecamatan.shp"
Berdasarkan data pada Tabel 2, kasus & populasi balita per tahun menunjukkan tren penurunan yang sangat positif pada beban penyakit pneumonia, yang tecermin tidak hanya dari penurunan jumlah absolut total kasus tetapi juga secara proporsional melalui angka Incidence Rate kota (IR_kota) dari tahun 2016 hingga 2021. Meskipun total populasi balita berfluktuasi secara dinamis di kisaran 134 ribu hingga 178 ribu jiwa, total kasus pneumonia terus merosot dari 12.579 kasus pada tahun 2016 menjadi hanya 1.733 kasus pada tahun 2021, yang berdampak pada penurunan tajam nilai IR_kota dari 9350,5 menjadi 988,0.
| Tahun | Total_Kasus | Total_Balita | IR_kota |
|---|---|---|---|
| 2016 | 12579 | 134527 | 9350.5 |
| 2017 | 10735 | 173222 | 6197.2 |
| 2018 | 10525 | 168898 | 6231.6 |
| 2019 | 9716 | 178042 | 5457.1 |
| 2020 | 4572 | 163895 | 2789.6 |
| 2021 | 1733 | 175410 | 988.0 |
Secara keseluruhan, grafik garis ini menunjukkan tren penurunan total kasus pneumonia pada balita yang sangat signifikan sebesar 86,2% dalam kurun waktu lima tahun, yaitu dari 12.579 kasus (2016) menjadi hanya 1.733 kasus (2021). Penurunan ini tidak berjalan konstan melainkan terbagi ke dalam dua fase kontras, dimulai dengan fase penurunan gradual atau alamiah (2016–2019) ketika kasus berkurang landai secara berkala dari 12.579 ke 9.716 kasus sebagai hasil dari program intervensi kesehatan rutin yang berjalan normal. Namun, memasuki tahun 2020 terjadi patahan tren (trend break) yang sangat curam, di mana kasus anjlok sebesar 52,9% dalam satu tahun menjadi 4.572 kasus dan terus merosot tajam sebesar 62,1% hingga menyentuh titik terendah di tahun 2021. Penurunan tajam yang tidak biasa pasca-2019 ini mengindikasikan adanya korelasi kuat dengan intervensi pandemi COVID-19 melalui dua aspek utama; pertama, dampak nyata protokol kesehatan seperti pembatasan sosial yang membuat balita tetap di rumah serta peningkatan higienitas (PHBS) yang secara tidak sengaja memutus rantai penularan droplet udara, dan kedua, adanya faktor administratif (underreporting) akibat keengganan orang tua mengunjungi faskes karena takut tertular serta pergeseran fokus tenaga kesehatan pada penanganan COVID-19 yang menurunkan intensitas skrining aktif. Dengan demikian, meskipun grafik ini merekam keberhasilan pengurangan beban penyakit pneumonia balita yang luar biasa, penurunan ekstrem tersebut merupakan sebuah anomali positif.
Gambar 1. Tren total kasus pneumonia balita.
Untuk melihat sebaran risiko relatif pneumonia pada balita di tingkat wilayah, dilakukan analisis terhadap nilai Standardized Incidence Ratio (SIR) di 30 kecamatan dari tahun 201 sampai dengan 2021 (Gambar 2).
Gambar 2. Heatmap SIR pneumonia balita per kecamatan, 2017-2021. Merah = risiko di atas rata-rata kota (SIR>1), biru = di bawah rata-rata; kecamatan diurutkan menurun berdasarkan SIR 2021.
Sepuluh kecamatan dengan SIR tertinggi untuk tiap tahun (klik tab tahun). SIR > 1 menandakan risiko di atas rata-rata kota.
| Kecamatan | Kasus | Balita | IR | Expected | SIR |
|---|---|---|---|---|---|
| Andir | 1435 | 5254 | 27312.5 | 263.5 | 5.44 |
| Cicendo | 1292 | 5020 | 25737.1 | 251.8 | 5.13 |
| Bandung Kidul | 812 | 3296 | 24635.9 | 165.3 | 4.91 |
| Cinambo | 221 | 1523 | 14510.8 | 76.4 | 2.89 |
| Sumur Bandung | 247 | 1772 | 13939.1 | 88.9 | 2.78 |
| Cibeunying Kidul | 740 | 6061 | 12209.2 | 304.0 | 2.43 |
| Cidadap | 359 | 2985 | 12026.8 | 149.7 | 2.40 |
| Coblong | 723 | 6169 | 11719.9 | 309.4 | 2.34 |
| Bandung Kulon | 828 | 7435 | 11136.5 | 372.9 | 2.22 |
| Cibiru | 474 | 4265 | 11113.7 | 213.9 | 2.22 |
| Kecamatan | Kasus | Balita | IR | Expected | SIR |
|---|---|---|---|---|---|
| Cicendo | 1583 | 6490 | 24391.4 | 325.5 | 4.86 |
| Bandung Kidul | 860 | 4245 | 20259.1 | 212.9 | 4.04 |
| Andir | 913 | 6683 | 13661.5 | 335.2 | 2.72 |
| Cinambo | 201 | 1945 | 10334.2 | 97.6 | 2.06 |
| Sukasari | 499 | 5103 | 9778.6 | 256.0 | 1.95 |
| Astanaanyar | 445 | 4919 | 9046.6 | 246.7 | 1.80 |
| Panyileukan | 244 | 2723 | 8960.7 | 136.6 | 1.79 |
| Cidadap | 265 | 3790 | 6992.1 | 190.1 | 1.39 |
| Bandung Kulon | 664 | 9549 | 6953.6 | 479.0 | 1.39 |
| Gedebage | 200 | 2883 | 6937.2 | 144.6 | 1.38 |
| Kecamatan | Kasus | Balita | IR | Expected | SIR |
|---|---|---|---|---|---|
| Andir | 1155 | 6341 | 18214.8 | 318.1 | 3.63 |
| Cicendo | 871 | 6200 | 14048.4 | 311.0 | 2.80 |
| Bandung Kidul | 578 | 4185 | 13811.2 | 209.9 | 2.75 |
| Sumur Bandung | 277 | 2190 | 12648.4 | 109.9 | 2.52 |
| Sukasari | 563 | 5015 | 11226.3 | 251.6 | 2.24 |
| Cibeunying Kidul | 709 | 7572 | 9363.4 | 379.8 | 1.87 |
| Bandung Kulon | 832 | 9337 | 8910.8 | 468.4 | 1.78 |
| Bojongloa Kidul | 544 | 6136 | 8865.7 | 307.8 | 1.77 |
| Cinambo | 152 | 1902 | 7991.6 | 95.4 | 1.59 |
| Astanaanyar | 357 | 4566 | 7818.7 | 229.0 | 1.56 |
| Kecamatan | Kasus | Balita | IR | Expected | SIR |
|---|---|---|---|---|---|
| Bandung Kulon | 1107 | 9997 | 11073.3 | 501.5 | 2.21 |
| Panyileukan | 284 | 2921 | 9722.7 | 146.5 | 1.94 |
| Cicendo | 560 | 6466 | 8660.7 | 324.3 | 1.73 |
| Cinambo | 158 | 2002 | 7892.1 | 100.4 | 1.57 |
| Bandung Kidul | 344 | 4363 | 7884.5 | 218.9 | 1.57 |
| Andir | 530 | 6737 | 7867.0 | 337.9 | 1.57 |
| Astanaanyar | 354 | 4784 | 7399.7 | 240.0 | 1.48 |
| Sumur Bandung | 170 | 2314 | 7346.6 | 116.1 | 1.46 |
| Cibeunying Kidul | 575 | 7863 | 7312.7 | 394.4 | 1.46 |
| Sukasari | 383 | 5323 | 7195.2 | 267.0 | 1.43 |
| Kecamatan | Kasus | Balita | IR | Expected | SIR |
|---|---|---|---|---|---|
| Bandung Kidul | 723 | 4016 | 18003.0 | 201.4 | 3.59 |
| Cinambo | 171 | 1853 | 9228.3 | 92.9 | 1.84 |
| Bandung Kulon | 472 | 8971 | 5261.4 | 450.0 | 1.05 |
| Astanaanyar | 183 | 4354 | 4203.0 | 218.4 | 0.84 |
| Cicendo | 241 | 6003 | 4014.7 | 301.1 | 0.80 |
| Bojongloa Kidul | 213 | 5802 | 3671.1 | 291.0 | 0.73 |
| Andir | 219 | 6226 | 3517.5 | 312.3 | 0.70 |
| Sumur Bandung | 75 | 2133 | 3516.2 | 107.0 | 0.70 |
| Cibeunying Kidul | 244 | 7304 | 3340.6 | 366.4 | 0.67 |
| Panyileukan | 80 | 2777 | 2880.8 | 139.3 | 0.57 |
| Kecamatan | Kasus | Balita | IR | Expected | SIR |
|---|---|---|---|---|---|
| Cinambo | 126 | 1926 | 6542.1 | 96.6 | 1.30 |
| Arcamanik | 174 | 5726 | 3038.8 | 287.2 | 0.61 |
| Astanaanyar | 118 | 4560 | 2587.7 | 228.7 | 0.52 |
| Babakan Ciparay | 212 | 10629 | 1994.5 | 533.2 | 0.40 |
| Lengkong | 65 | 4185 | 1553.2 | 209.9 | 0.31 |
| Sumur Bandung | 34 | 2253 | 1509.1 | 113.0 | 0.30 |
| Bojongloa Kidul | 89 | 6199 | 1435.7 | 310.9 | 0.29 |
| Andir | 88 | 6570 | 1339.4 | 329.6 | 0.27 |
| Sukasari | 66 | 5148 | 1282.1 | 258.2 | 0.26 |
| Cibeunying Kidul | 95 | 7646 | 1242.5 | 383.5 | 0.25 |
| No | Kecamatan | No | Kecamatan |
|---|---|---|---|
| 1 | Andir | 16 | Cicendo |
| 2 | Antapani | 17 | Cidadap |
| 3 | Arcamanik | 18 | Cinambo |
| 4 | Astanaanyar | 19 | Coblong |
| 5 | Babakan Ciparay | 20 | Gedebage |
| 6 | Bandung Kidul | 21 | Kiaracondong |
| 7 | Bandung Kulon | 22 | Lengkong |
| 8 | Bandung Wetan | 23 | Mandalajati |
| 9 | Batununggal | 24 | Panyileukan |
| 10 | Bojongloa Kaler | 25 | Rancasari |
| 11 | Bojongloa Kidul | 26 | Regol |
| 12 | Buahbatu | 27 | Sukajadi |
| 13 | Cibeunying Kaler | 28 | Sukasari |
| 14 | Cibeunying Kidul | 29 | Sumur Bandung |
| 15 | Cibiru | 30 | Ujungberung |
Secara visual, peta crude dan EB tampak serupa karena penyesuaian Empirical Bayes umumnya kecil. Untuk melihat besarnya penyesuaian, tabel berikut menyajikan lima kecamatan dengan selisih |crude − EB| terbesar tiap tahun.
| Tahun | Kecamatan | Balita | Crude_SIR | EB_SIR | Selisih |
|---|---|---|---|---|---|
| 2016 | Bandung Kidul | 3296 | 4.91 | 4.89 | 0.02 |
| Andir | 5254 | 5.44 | 5.43 | 0.01 | |
| Antapani | 4380 | 0.40 | 0.41 | 0.01 | |
| Arcamanik | 4186 | 1.03 | 1.04 | 0.01 | |
| Bandung Wetan | 1381 | 0.74 | 0.75 | 0.01 | |
| 2017 | Bandung Kidul | 4245 | 4.04 | 4.02 | 0.02 |
| Bandung Wetan | 1766 | 0.37 | 0.38 | 0.01 | |
| Cicendo | 6490 | 4.86 | 4.85 | 0.01 | |
| Cinambo | 1945 | 2.06 | 2.05 | 0.01 | |
| Mandalajati | 5352 | 0.44 | 0.45 | 0.01 | |
| 2018 | Sumur Bandung | 2190 | 2.52 | 2.50 | 0.02 |
| Andir | 6341 | 3.63 | 3.62 | 0.01 | |
| Arcamanik | 5357 | 0.86 | 0.87 | 0.01 | |
| Bandung Kidul | 4185 | 2.75 | 2.74 | 0.01 | |
| Bandung Kulon | 9337 | 1.78 | 1.77 | 0.01 | |
| 2019 | Panyileukan | 2921 | 1.94 | 1.91 | 0.03 |
| Cidadap | 3777 | 0.62 | 0.64 | 0.02 | |
| Cinambo | 2002 | 1.57 | 1.55 | 0.02 | |
| Andir | 6737 | 1.57 | 1.56 | 0.01 | |
| Antapani | 5935 | 0.72 | 0.73 | 0.01 | |
| 2020 | Bandung Kidul | 4016 | 3.59 | 3.56 | 0.03 |
| Cinambo | 1853 | 1.84 | 1.82 | 0.02 | |
| Bandung Wetan | 1602 | 0.17 | 0.18 | 0.01 | |
| Andir | 6226 | 0.70 | 0.70 | 0.00 | |
| Antapani | 5588 | 0.25 | 0.25 | 0.00 | |
| 2021 | Cinambo | 1926 | 1.30 | 1.24 | 0.06 |
| Arcamanik | 5726 | 0.61 | 0.60 | 0.01 | |
| Astanaanyar | 4560 | 0.52 | 0.51 | 0.01 | |
| Bandung Kidul | 4310 | 0.03 | 0.04 | 0.01 | |
| Bandung Wetan | 1667 | 0.05 | 0.06 | 0.01 |
Interpretasi.
| Tahun | Moran_I | p_value |
|---|---|---|
| 2016 | 0.014 | 0.319 |
| 2017 | 0.022 | 0.253 |
| 2018 | 0.076 | 0.151 |
| 2019 | -0.001 | 0.392 |
| 2020 | -0.050 | 0.529 |
| 2021 | -0.052 | 0.537 |
Interpretasi. Uji Moran’s I pada SIR menunjukkan tidak ada autokorelasi spasial yang signifikan pada seluruh tahun yang digunakan pada makalah ini (p > 0,05, dengan nilai Moran’s I mendekati nol).
Selain Moran’s I per tahun, perlu diuji pula autokorelasi spasio-temporal melalui perluasan indeks Moran dengan bobot gabungan ruang dan waktu (Lee & Li, 2017). Uji ini menilai apakah SIR tinggi mengelompok tidak hanya secara geografis, tetapi juga terbawa dari tahun ke tahun.
## Moran's I spasio-temporal: 0.221 | p-value (permutasi): 0.001
Interpretasi. Uji Moran’s I spasial per tahun menunjukkan tidak adanya autokorelasi spasial yang signifikan (p > 0,05 pada seluruh tahun, dengan nilai mendekati nol). Sebaliknya, Moran’s I spasio-temporal bernilai 0,221 dan signifikan (p = 0,001). Kontras ini menandakan bahwa autokorelasi pada data pneumonia balita didominasi oleh dimensi temporal, bukan spasial. Risiko suatu kecamatan lebih persisten antarwaktu daripada mengelompok secara geografis dalam satu tahun.
## R version 4.6.0 (2026-04-24 ucrt)
## Platform: x86_64-w64-mingw32/x64
## Running under: Windows 11 x64 (build 26200)
##
## Matrix products: default
## LAPACK version 3.12.1
##
## locale:
## [1] LC_COLLATE=Dutch_Belgium.utf8 LC_CTYPE=Dutch_Belgium.utf8
## [3] LC_MONETARY=Dutch_Belgium.utf8 LC_NUMERIC=C
## [5] LC_TIME=Dutch_Belgium.utf8
##
## time zone: Europe/Brussels
## tzcode source: internal
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] glmmTMB_1.1.14 patchwork_1.3.2 scales_1.4.0 MASS_7.3-65
## [5] kableExtra_1.4.0 knitr_1.51 spdep_1.4-2 spData_2.3.5
## [9] sf_1.1-1 readxl_1.5.0 lubridate_1.9.5 forcats_1.0.1
## [13] stringr_1.6.0 dplyr_1.2.1 purrr_1.2.2 readr_2.2.0
## [17] tidyr_1.3.2 tibble_3.3.1 ggplot2_4.0.3 tidyverse_2.0.0
##
## loaded via a namespace (and not attached):
## [1] tidyselect_1.2.1 viridisLite_0.4.3 farver_2.1.2
## [4] S7_0.2.2 fastmap_1.2.0 digest_0.6.39
## [7] timechange_0.4.0 lifecycle_1.0.5 magrittr_2.0.5
## [10] compiler_4.6.0 rlang_1.2.0 sass_0.4.10
## [13] tools_4.6.0 igraph_2.3.2 yaml_2.3.12
## [16] labeling_0.4.3 sp_2.2-1 classInt_0.4-11
## [19] xml2_1.5.2 RColorBrewer_1.1-3 KernSmooth_2.23-26
## [22] numDeriv_2016.8-1.1 withr_3.0.2 grid_4.6.0
## [25] e1071_1.7-17 cli_3.6.6 rmarkdown_2.31
## [28] reformulas_0.4.4 generics_0.1.4 otel_0.2.0
## [31] rstudioapi_0.19.0 tzdb_0.5.0 minqa_1.2.8
## [34] DBI_1.3.0 cachem_1.1.0 proxy_0.4-29
## [37] splines_4.6.0 s2_1.1.11 cellranger_1.1.0
## [40] vctrs_0.7.3 sandwich_3.1-1 boot_1.3-32
## [43] Matrix_1.7-5 jsonlite_2.0.0 hms_1.1.4
## [46] systemfonts_1.3.2 jquerylib_0.1.4 units_1.0-1
## [49] glue_1.8.1 nloptr_2.2.1 stringi_1.8.7
## [52] gtable_0.3.6 deldir_2.0-4 lme4_2.0-1
## [55] pillar_1.11.1 htmltools_0.5.9 R6_2.6.1
## [58] TMB_1.9.21 wk_0.9.5 textshaping_1.0.5
## [61] Rdpack_2.6.6 evaluate_1.0.5 lattice_0.22-9
## [64] rbibutils_2.4.1 bslib_0.11.0 class_7.3-23
## [67] Rcpp_1.1.1-1.1 svglite_2.2.2 nlme_3.1-169
## [70] mgcv_1.9-4 xfun_0.58 zoo_1.8-15
## [73] pkgconfig_2.0.3