1 Pendahuluan

1.1 Latar Belakang

Tuberkulosis atau TB tetap menjadi penyebab utama kematian akibat penyakit infeksi di dunia. Setelah pandemi COVID-19 mereda, TB kembali menempati peringkat pertama sebagai penyakit infeksius paling mematikan pada tahun 2023, dengan sekitar 8,2 juta kasus baru dan 1,25 juta kematian menurut laporan Global Tuberculosis Report 2024 oleh World Health Organization (WHO, 2024). WHO mencatat bahwa TB menimbulkan beban besar pada kelompok rentan yang hidup dalam kemiskinan, kepadatan hunian tinggi, serta akses layanan kesehatan terbatas. Selain itu, TB masih menjadi penyebab utama kematian pada orang dengan HIV, dengan sekitar 161 ribu kematian TB terkait HIV dilaporkan pada tahun yang sama (WHO, 2025).

Di tingkat nasional, Indonesia menempati posisi kedua sebagai negara dengan beban TB tertinggi di dunia setelah India. Kementerian Kesehatan Republik Indonesia (2025) melaporkan estimasi 1,09 juta kasus TB dan 125 ribu kematian per tahun, yang berarti rata-rata 14 orang meninggal setiap jam akibat penyakit ini. Pada tahun 2024, sekitar 885 hingga 889 ribu kasus TB berhasil ditemukan, tetapi angka ini masih belum mencerminkan eliminasi penyakit karena keberhasilan pengobatan TB resisten obat baru mencapai 58 persen dari target nasional sebesar 80 persen. Tingkat inisiasi pengobatan TB sensitif obat juga baru mencapai 81 persen dari target 90 persen, yang menunjukkan masih adanya hambatan pada penemuan kasus, inisiasi terapi, serta kesinambungan pengobatan pasien (Kemenkes RI, 2025).

Di wilayah Jawa Barat, laporan resmi Pemerintah Provinsi Jawa Barat (2024) menyebutkan bahwa penemuan kasus TB mencapai 100 persen selama dua tahun terakhir, menunjukkan peningkatan kemampuan deteksi dan pelaporan. Namun, tingginya angka temuan kasus tidak selalu sejalan dengan penurunan angka kematian karena masih terdapat faktor penghambat seperti keterlambatan diagnosis, kepatuhan berobat yang rendah, serta tatalaksana kasus TB dengan komorbiditas diabetes melitus atau HIV yang belum optimal. Faktor sosial dan lingkungan seperti kepadatan hunian dan kualitas ventilasi juga mempengaruhi penyebaran serta tingkat keparahan penyakit di masyarakat perkotaan padat seperti Bandung.

Kota Bandung sendiri memiliki jejaring pelayanan kesehatan primer yang luas, terdiri atas puluhan Puskesmas dan jejaring rujukan yang menjadi garda terdepan dalam penemuan, diagnosis, dan pengobatan TB. Berdasarkan Profil Kesehatan Kota Bandung (Dinas Kesehatan Kota Bandung, 2025), kasus TB paru masih ditemukan setiap tahun di seluruh kecamatan, dengan variasi beban kasus dan kematian antarwilayah. Hal ini menunjukkan bahwa meskipun secara umum program penanggulangan TB sudah berjalan baik, masih terdapat kesenjangan dalam keberhasilan tatalaksana antar-fasilitas kesehatan maupun antarwilayah.

Masalah yang diidentifikasi dari kondisi ini meliputi masih tingginya angka kematian TB paru BTA positif di beberapa Puskesmas, belum optimalnya inisiasi dan keberhasilan pengobatan, serta keterbatasan data yang menyulitkan penghitungan laju mortalitas spesifik maupun case fatality rate (CFR) di tingkat lokal. Selain itu, fluktuasi data tahunan dapat mencerminkan perbedaan intensitas pelaporan dan perubahan sistem registrasi, seperti yang terlihat pada lonjakan angka kematian di tahun-tahun tertentu.

Berdasarkan fakta tersebut, dugaan awal penelitian ini adalah bahwa kematian TB paru BTA positif di Kota Bandung pada periode 2015–2024 dipengaruhi oleh faktor multifaktorial yang mencakup karakteristik individu (usia lanjut, gizi buruk, komorbiditas), faktor lingkungan (kepadatan, ventilasi), serta faktor programatik (diagnosis lambat, putus obat, keterbatasan tracing kasus). Secara khusus, variasi antar-Puskesmas dapat merefleksikan perbedaan kapasitas sumber daya manusia, fasilitas diagnostik, dan sistem pemantauan pasien.

Analisis kematian TB paru BTA positif di Kota Bandung menjadi penting karena mampu memberikan gambaran epidemiologis tentang distribusi kasus menurut orang, tempat, dan waktu. Hasil analisis ini dapat menjadi dasar perencanaan intervensi spesifik wilayah, memperkuat sistem pelaporan dan surveilans TB, serta memetakan prioritas untuk audit klinis dan evaluasi kebijakan eliminasi TB di tingkat kota. Dengan memahami tren kematian dan faktor-faktor yang memengaruhinya, diharapkan Pemerintah Kota Bandung bersama Dinas Kesehatan dapat mempercepat pencapaian target eliminasi TB tahun 2030 sesuai rencana strategis nasional kesehatan.

1.2 Rumusan Masalah

Tuberkulosis paru BTA positif masih menjadi salah satu penyebab kematian infeksius yang signifikan di Indonesia, termasuk di Kota Bandung. Meskipun berbagai upaya pengendalian telah dilakukan melalui peningkatan penemuan kasus, perluasan layanan DOTS di seluruh Puskesmas, serta integrasi sistem pelaporan nasional (SITB), angka kematian pasien TB paru belum menunjukkan penurunan yang konsisten. Data nasional dan daerah menunjukkan masih adanya kesenjangan antara capaian temuan kasus dengan keberhasilan pengobatan, yang berdampak pada tingginya mortalitas di beberapa wilayah.

Kota Bandung sebagai wilayah urban dengan kepadatan penduduk tinggi memiliki karakteristik sosial dan lingkungan yang kompleks. Variasi tingkat kematian antar-Puskesmas dan antar-kecamatan dapat mencerminkan perbedaan dalam faktor individu, lingkungan, serta efektivitas program di masing-masing wilayah. Hal ini menjadikan analisis epidemiologis terhadap distribusi dan tren kematian TB paru BTA positif penting dilakukan, guna mengetahui sejauh mana faktor tempat, waktu, dan karakteristik fasilitas berperan terhadap pola mortalitas TB di tingkat lokal.

Berdasarkan uraian tersebut, maka rumusan masalah dalam penelitian ini dapat dirumuskan sebagai berikut:

  1. Bagaimana tren kematian akibat TB paru BTA positif di Puskesmas Kota Bandung selama periode 2015–2024?

  2. Bagaimana distribusi kematian TB paru BTA positif menurut wilayah (kecamatan) dan fasilitas pelayanan kesehatan (Puskesmas) di Kota Bandung?

  3. Faktor-faktor epidemiologis apa yang diduga berkontribusi terhadap tingginya angka kematian TB paru BTA positif di beberapa wilayah atau fasilitas tertentu?

  4. Bagaimana implikasi hasil analisis terhadap perencanaan dan prioritas program pengendalian TB di tingkat Kota Bandung, khususnya dalam konteks pencapaian target eliminasi TB nasional tahun 2030?

1.3 Tujuan

Penelitian ini bertujuan untuk menganalisis pola kematian akibat Tuberkulosis (TB) Paru BTA positif di Puskesmas Kota Bandung selama periode 2015–2024 dalam konteks epidemiologi, guna memberikan gambaran menyeluruh mengenai tren waktu, distribusi wilayah, dan faktor-faktor yang memengaruhi mortalitas. Hasil analisis ini diharapkan dapat menjadi dasar pengambilan keputusan dalam perencanaan program pengendalian TB di tingkat kota serta mendukung upaya eliminasi TB nasional tahun 2030. Secara khusus:

  1. Menggambarkan tren tahunan kematian TB Paru BTA positif di Puskesmas Kota Bandung selama periode 2015–2024.

  2. Mengidentifikasi distribusi spasial kematian TB Paru BTA positif berdasarkan wilayah kecamatan dan fasilitas pelayanan kesehatan.

  3. Menganalisis pola epidemiologis kematian TB Paru BTA positif berdasarkan aspek orang, tempat, dan waktu untuk menemukan perbedaan atau konsentrasi kasus di wilayah tertentu.

  4. Mengidentifikasi faktor-faktor risiko potensial yang berkontribusi terhadap tingginya angka kematian TB Paru BTA positif di beberapa wilayah atau fasilitas tertentu, dengan mengacu pada pendekatan agent–host–environment.

  5. Memberikan interpretasi dan rekomendasi programatik bagi Dinas Kesehatan Kota Bandung dalam peningkatan kualitas layanan diagnosis, pengobatan, serta pelaporan kasus TB untuk mempercepat pencapaian target eliminasi TB tahun 2030.

2 Tinjauan Pustaka

Tinjauan pustaka dalam penelitian ini disusun untuk memberikan dasar teoretis mengenai faktor-faktor yang berpengaruh terhadap kematian akibat Tuberkulosis (TB) Paru BTA positif dengan pendekatan epidemiologi. Pendekatan ini menempatkan hubungan antara agent, host, dan environment (A–H–E) sebagai kerangka utama dalam memahami proses terjadinya penyakit dan kematian akibat TB. Melalui pemahaman terhadap ketiga komponen ini, analisis epidemiologi dapat mengungkap pola penyebaran, faktor risiko, serta efektivitas upaya pengendalian TB di tingkat populasi.

Secara etiologis, penyebab utama TB adalah bakteri Mycobacterium tuberculosis yang memiliki daya tahan tinggi terhadap kondisi lingkungan ekstrem dan dapat bertahan hidup di udara selama beberapa jam. Penularan terjadi melalui droplet udara yang dikeluarkan oleh penderita TB aktif ketika batuk atau bersin, terutama pada lingkungan padat dengan ventilasi yang buruk. Virulensi dan jumlah beban bakteri (bacterial load) menentukan tingkat infektivitas dan keparahan penyakit. WHO (2024) melaporkan bahwa keberhasilan pengobatan global terhadap kasus TB resisten obat masih rendah, hanya sekitar 60 persen, sementara di Indonesia baru mencapai 58 persen (Kementerian Kesehatan RI, 2025). Fakta ini menunjukkan bahwa resistensi obat menjadi tantangan serius dalam menurunkan angka kematian akibat TB, termasuk pada kasus TB Paru BTA positif yang belum tertangani dengan baik.

Faktor host atau pejamu memegang peran penting dalam menentukan risiko progresivitas dan outcome penyakit. Usia lanjut, jenis kelamin laki-laki, status gizi yang buruk, serta adanya penyakit penyerta seperti diabetes melitus (DM) dan HIV/AIDS terbukti meningkatkan risiko kematian pada pasien TB. Penelitian oleh Harries et al. (2016) menunjukkan bahwa pasien TB dengan DM memiliki kemungkinan kematian dua kali lebih tinggi dibanding pasien tanpa DM. Hal yang serupa ditemukan dalam meta-analisis oleh Soetedjo et al. (2021) yang menunjukkan kontrol glikemik yang buruk secara signifikan meningkatkan mortalitas pasien TB. Selain itu, faktor perilaku seperti keterlambatan diagnosis, ketidakteraturan minum obat, dan ketidakpatuhan terhadap pengobatan juga berkontribusi terhadap meningkatnya risiko kematian (Pradipta et al., 2020). Dengan demikian, aspek biologis dan perilaku host berperan saling melengkapi dalam memperparah dampak infeksi.

Lingkungan atau environment turut menjadi determinan penting dalam kejadian dan kematian akibat TB. Kondisi sosial ekonomi yang rendah, kepadatan hunian tinggi, ventilasi rumah yang buruk, serta keterbatasan akses terhadap fasilitas kesehatan meningkatkan paparan dan mempercepat penularan penyakit. Studi oleh Tanimura et al. (2014) menyebutkan bahwa beban ekonomi yang ditanggung pasien TB di negara berpendapatan menengah menyebabkan keterlambatan diagnosis dan menurunkan keberhasilan pengobatan. Penelitian lain di Asia Selatan oleh Islam et al. (2020) menunjukkan bahwa kepadatan rumah tangga tinggi meningkatkan risiko penularan TB aktif lebih dari dua kali lipat. Dalam konteks perkotaan seperti Bandung, faktor lingkungan tersebut berinteraksi dengan mobilitas penduduk dan ketimpangan sosial, sehingga memperbesar risiko penyebaran dan memperberat outcome penyakit.

Dari sisi epidemiologi kuantitatif, ukuran frekuensi penyakit seperti prevalensi, insidensi, attack rate, dan case fatality rate (CFR) digunakan untuk mengukur beban penyakit TB di masyarakat. Namun, penelitian ini berfokus pada jumlah kematian TB Paru BTA positif berdasarkan data agregat tanpa denominator populasi atau total kasus. Oleh karena itu, analisis difokuskan pada tren waktu dan variasi spasial antarkecamatan atau fasilitas kesehatan. Penghitungan ukuran asosiasi seperti risk ratio, odds ratio, atau attributable risk hanya dapat dilakukan jika tersedia data individu dengan informasi paparan dan outcome. Dengan demikian, hasil analisis deskriptif ini menjadi dasar untuk mengusulkan penelitian lanjutan dengan desain analitik.

Desain studi epidemiologi yang relevan untuk menilai faktor risiko kematian akibat TB adalah desain case–control dan cohort. Desain case–control lebih efisien digunakan karena kematian TB tergolong outcome yang jarang. Pendekatan ini membandingkan pasien TB yang meninggal selama pengobatan (kasus) dengan pasien yang sembuh atau menyelesaikan pengobatan (kontrol) untuk menghitung odds ratio paparan terhadap kematian (Boogaard et al., 2016). Sementara itu, desain cohort cocok digunakan jika tersedia data longitudinal, misalnya dengan mengikuti kohort pasien TB baru selama satu tahun untuk menghitung risk ratio atau hazard ratio kematian menggunakan analisis Cox regression (Lönnroth et al., 2020). Kedua desain ini memiliki peran penting dalam mengidentifikasi faktor-faktor yang berkontribusi terhadap mortalitas TB serta membantu menyusun strategi intervensi berbasis bukti.

3 Metodologi

3.1 Sumber Data dan Variabel

Penelitian ini menggunakan data agregat dari dataset “Jumlah Angka Kematian Pasien TB Paru BTA+ di Puskesmas Kota Bandung (2015–2024)” yang diperoleh dari rekapitulasi laporan Dinas Kesehatan Kota Bandung dan jejaring Puskesmas. Dataset ini memuat jumlah kematian pasien TB Paru BTA positif yang tercatat setiap tahun pada masing-masing fasilitas pelayanan kesehatan tingkat pertama.

Variabel utama yang digunakan dalam penelitian ini meliputi:

Karena dataset bersifat agregat dan tidak memuat denominator (jumlah penduduk atau total kasus TB), analisis difokuskan pada distribusi absolut, tren waktu, dan perbandingan antarwilayah.
Nama Variabel Deskripsi Tipe Data
tahun Tahun pencatatan kematian Numerik
jumlah Jumlah kasus kematian TB Paru BTA+ Numerik
kemendagri_nama_kecamatan Nama kecamatan lokasi fasilitas kesehatan Kategorikal
fasilitas_kesehatan Nama Puskesmas tempat kasus dilaporkan Kategorikal
bps_kode_kecamatan / kemendagri_kode_kecamatan Kode wilayah administratif Numerik
keterangan Catatan tambahan atau klarifikasi data Teks
satuan Unit pengukuran (jiwa/orang) Kategorikal

3.2 Alur Kerja Analitik

Alur kerja analitik terdiri atas tahapan berikut.

  1. Pemuatan dan pembersihan data untuk memastikan konsistensi penamaan kolom dan tipe data.
  2. Agregasi jumlah kematian per tahun, per kecamatan, dan per fasilitas kesehatan.
  3. Visualisasi berupa grafik tren, heatmap kecamatan×tahun, dan peringkat fasilitas.
  4. Interpretasi epidemiologis dan identifikasi anomali tren/spasial.
  5. Perancangan desain studi analitik untuk estimasi asosiasi faktor risiko terhadap kematian.
library(readxl)
## Warning: package 'readxl' was built under R version 4.4.3
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.4.3
## Warning: package 'ggplot2' was built under R version 4.4.3
## Warning: package 'readr' was built under R version 4.4.3
## Warning: package 'forcats' was built under R version 4.4.3
## Warning: package 'lubridate' was built under R version 4.4.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.2     ✔ tibble    3.2.1
## ✔ lubridate 1.9.4     ✔ tidyr     1.3.1
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(janitor)
## Warning: package 'janitor' was built under R version 4.4.3
## 
## Attaching package: 'janitor'
## 
## The following objects are masked from 'package:stats':
## 
##     chisq.test, fisher.test
library(lubridate)
library(scales)
## 
## Attaching package: 'scales'
## 
## The following object is masked from 'package:purrr':
## 
##     discard
## 
## The following object is masked from 'package:readr':
## 
##     col_factor
library(kableExtra)
## Warning: package 'kableExtra' was built under R version 4.4.3
## 
## Attaching package: 'kableExtra'
## 
## The following object is masked from 'package:dplyr':
## 
##     group_rows
# Path file
data_path <- "C:/Users/hp/Documents/New folder/SMT 5/EPIDEMIOLOGI/UTS/jumlah_angka_kematian_pasien_tb_paru_bta_plus_di_pusk.xlsx"

# Sheet pertama
raw <- readxl::read_excel(path = data_path, sheet = 1) %>%
  janitor::clean_names()

# Tampilkan struktur kolom
glimpse(raw)
## Rows: 1,800
## Columns: 14
## $ id                        <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1…
## $ kode_provinsi             <dbl> 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, …
## $ nama_provinsi             <chr> "JAWA BARAT", "JAWA BARAT", "JAWA BARAT", "J…
## $ bps_kode_kabupaten_kota   <dbl> 3273, 3273, 3273, 3273, 3273, 3273, 3273, 32…
## $ bps_nama_kabupaten_kota   <chr> "KOTA BANDUNG", "KOTA BANDUNG", "KOTA BANDUN…
## $ bps_kode_kecamatan        <dbl> 3273130, 3273130, 3273130, 3273150, 3273150,…
## $ bps_nama_kecamatan        <chr> "ARCAMANIK", "ARCAMANIK", "ARCAMANIK", "KIAR…
## $ kemendagri_kode_kecamatan <chr> "32.73.24", "32.73.24", "32.73.24", "32.73.1…
## $ kemendagri_nama_kecamatan <chr> "ARCAMANIK", "ARCAMANIK", "ARCAMANIK", "KIAR…
## $ fasilitas_kesehatan       <chr> "UPT ARCAMANIK", "UPT ARCAMANIK", "UPT ARCAM…
## $ keterangan                <chr> "PASIEN DIOBATI (L)", "PASIEN DIOBATI (P)", …
## $ jumlah                    <dbl> 12, 4, 0, 18, 20, 1, 57, 41, 3, 25, 20, 0, 2…
## $ satuan                    <chr> "ORANG", "ORANG", "ORANG", "ORANG", "ORANG",…
## $ tahun                     <dbl> 2015, 2015, 2015, 2015, 2015, 2015, 2015, 20…
keterangan_top <- raw %>%
count(keterangan, sort = TRUE)
print(head(keterangan_top, 20))
## # A tibble: 4 × 2
##   keterangan                                  n
##   <chr>                                   <int>
## 1 PASIEN DIOBATI (L)                        600
## 2 PASIEN DIOBATI (P)                        600
## 3 ANGKA KEMATIAN SETALAH PENGOBATAN (L+P)   360
## 4 ANGKA KEMATIAN SELAMA PENGOBATAN (L+P)    240
# === Deteksi & mapping nama kolom (lebih robust) ===
library(stringr)

nm <- names(raw)

.pick_first <- function(pattern) {
  hit <- grep(pattern, nm, ignore.case = TRUE, value = TRUE)
  if (length(hit)) hit[1] else NA_character_
}

# Prioritaskan kemendagri_* lalu bps_*; izinkan urutan kata fleksibel
col_kec_kode <- .pick_first("^kemendagri_.*(kec|kecamatan).*(kode)$|^bps_.*(kec|kecamatan).*(kode)$|(kec|kecamatan).*kode|kode.*(kec|kecamatan)")
col_kec_nama <- .pick_first("^kemendagri_.*(nama).*(kec|kecamatan)$|^kemendagri_.*(kec|kecamatan).*(nama)$|^bps_.*(nama).*(kec|kecamatan)$|^bps_.*(kec|kecamatan).*(nama)$|(nama).*(kec|kecamatan)|(kec|kecamatan).*(nama)")

# Kolom inti lain
col_tahun  <- .pick_first("^tahun$|_tahun$|tahun_")
col_jumlah <- .pick_first("^jumlah$|^n_?kematian$|angka.*kemati|\\bkematian\\b")
col_ket    <- .pick_first("^keterangan$|^ket$|keterangan_")

# Kolom faskes (opsional)
col_faskes <- .pick_first("^fasilitas_kesehatan$|^puskesmas$|faskes|fasilitas(_kesehatan)?$")

# Validasi minimum
need <- c(tahun = col_tahun, jumlah = col_jumlah, keterangan = col_ket, kec_nama = col_kec_nama)
missing <- names(need)[is.na(need)]
if (length(missing)) {
  stop(sprintf("Kolom wajib tidak ditemukan: %s\nNama kolom tersedia: %s",
               paste(missing, collapse = ", "),
               paste(nm, collapse = ", ")))
}

# Tampilkan mapping
list(
  tahun   = col_tahun,
  jumlah  = col_jumlah,
  keterangan = col_ket,
  kec_kode   = col_kec_kode,
  kec_nama   = col_kec_nama,
  faskes     = col_faskes
)
## $tahun
## [1] "tahun"
## 
## $jumlah
## [1] "jumlah"
## 
## $keterangan
## [1] "keterangan"
## 
## $kec_kode
## [1] "bps_kode_kecamatan"
## 
## $kec_nama
## [1] "bps_nama_kecamatan"
## 
## $faskes
## [1] "fasilitas_kesehatan"
# === Wrangling memakai mapping di atas ===
library(dplyr)
library(stringr)
library(tidyr)
library(ggplot2)

# 1) Subset baris kematian dan buat kategori fase kematian
dat_kematian <- raw %>%
  filter(str_detect(.data[[col_ket]], regex("kematian", ignore_case = TRUE))) %>%
  mutate(
    tahun   = as.integer(.data[[col_tahun]]),
    jumlah  = suppressWarnings(as.numeric(.data[[col_jumlah]])),
    fase_kematian = case_when(
      str_detect(.data[[col_ket]], regex("selama",  ignore_case = TRUE)) ~ "Selama pengobatan",
      str_detect(.data[[col_ket]], regex("setalah", ignore_case = TRUE)) ~ "Setalah pengobatan",
      TRUE ~ "Lain/unspecified"
    )
  ) %>%
  filter(!is.na(tahun), !is.na(jumlah), jumlah >= 0)

# 2) Cek cepat
count(dat_kematian, !!sym(col_ket), fase_kematian, sort = TRUE)
summary(dat_kematian$jumlah)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.000   0.000   1.000   2.326   3.000  22.000

3.3 Agregasi & Analisis Deskriptif

by_year <- dat_kematian %>%
  group_by(tahun) %>%
  summarise(total_kematian = sum(jumlah, na.rm = TRUE), .groups = "drop") %>%
  arrange(tahun)

by_year_phase <- dat_kematian %>%
  group_by(tahun, fase_kematian) %>%
  summarise(kematian = sum(jumlah, na.rm = TRUE), .groups = "drop") %>%
  complete(tahun, fase_kematian, fill = list(kematian = 0)) %>%
  arrange(tahun, fase_kematian)
by_kec <- dat_kematian %>%
  group_by(kecamatan = .data[[col_kec_nama]]) %>%
  summarise(total_kematian = sum(jumlah, na.rm = TRUE), .groups = "drop") %>%
  arrange(desc(total_kematian))

by_kec_year <- dat_kematian %>%
  group_by(kecamatan = .data[[col_kec_nama]], tahun) %>%
  summarise(kematian = sum(jumlah, na.rm = TRUE), .groups = "drop")
by_faskes <- dat_kematian %>%
  group_by(fasilitas = .data[[col_faskes]]) %>%
  summarise(total_kematian = sum(jumlah, na.rm = TRUE), .groups = "drop") %>%
  arrange(desc(total_kematian))

3.4 Ukuran Epidemiologi

3.4.1 Laju Mortalitas Spesifik TB

\[ M_{TB} = \frac{D_{TB}}{P} \times 100{,}000 \]

dengan \(D_{TB}\) adalah jumlah kematian TB per tahun dan \(P\) adalah populasi pertengahan tahun.

3.4.2 Case Fatality Rate (CFR)

\[ CFR = \frac{D_{TB}}{C_{TB}} \times 100\% \]

dengan \(C_{TB}\) adalah jumlah kasus TB yang dilaporkan pada tahun yang sama.

3.4.3 Prevalensi dan Attack Rate

\[ \text{Prevalensi} = \frac{C_{TB}}{P} \times 100{,}000 \]

\[ \text{Attack Rate (wabah)} = \frac{\text{Kasus pada periode wabah}}{\text{Populasi rentan}} \times 100\% \]

3.5 Rencana Analisis Asosiasi (Desain Analisis)

3.5.1 Odds Ratio (Case–Control)

\[ OR = \frac{a/c}{b/d} = \frac{a \times d}{b \times c} \]

Meninggal Sembuh Total
Terpapar faktor a b a+b
Tidak terpapar c d c+d

3.5.2 Risk Ratio (Cohort)

\[ RR = \frac{I_e}{I_u} \]

dengan \(I_e\) adalah insidensi kematian pada kelompok terpapar dan \(I_u\) pada kelompok tidak terpapar. Untuk data waktu-kejadian, dapat digunakan model Cox untuk mengestimasi hazard ratio.

4 Hasil dan Pembahasan

4.1 Tren Waktu total dan per fase

ggplot(by_year, aes(x = tahun, y = total_kematian)) +
  geom_line(linewidth = 1) +
  geom_point(size = 2) +
  labs(title = "Tren tahunan kematian TB Paru BTA+ (total)",
       x = "Tahun", y = "Jumlah kematian") +
  theme_minimal()

Interpretasi awal :

Berdasarkan grafik tren tahunan kematian TB Paru BTA+, terlihat bahwa jumlah kematian pada periode tahun 2015–2018 relatif rendah dan stabil, berada pada kisaran 15–25 kasus per tahun. Namun, pada tahun 2019 terjadi lonjakan yang sangat signifikan menjadi lebih dari 140 kasus, menandai perubahan drastis dalam situasi epidemiologi TB. Setelah sedikit penurunan pada tahun 2020, tren kembali meningkat secara tajam tahun 2021 hingga mencapai lebih dari 300 kasus pada tahun 2024. Pola peningkatan yang konsisten setelah pandemi COVID-19 mengindikasikan adanya gangguan layanan kesehatan selama masa pandemi, termasuk keterlambatan diagnosis, putus berobat, dan penurunan akses layanan TB, sehingga menyebabkan peningkatan kematian.

4.2 Uji tren Spearman (total dan per fase)

cat("\nUji tren (total):\n")
## 
## Uji tren (total):
print(cor.test(by_year$tahun, by_year$total_kematian, method = "spearman"))
## 
##  Spearman's rank correlation rho
## 
## data:  by_year$tahun and by_year$total_kematian
## S = 14, p-value = 0.0004667
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
##       rho 
## 0.9151515
cat("\nUji tren per fase:\n")
## 
## Uji tren per fase:
by_year_phase %>%
  group_by(fase_kematian) %>%
  summarise(
    rho = suppressWarnings(cor(tahun, kematian, method = "spearman")),
    .groups = "drop"
  ) %>%
  print()
## # A tibble: 2 × 2
##   fase_kematian          rho
##   <chr>                <dbl>
## 1 Selama pengobatan   0.589 
## 2 Setalah pengobatan -0.0920

Interpretasi :

Hasil uji tren menggunakan korelasi Spearman menunjukkan nilai koefisien rho sebesar 0,915 dengan nilai p 0,00047 (p < 0,05). Hal ini berarti terdapat hubungan yang sangat kuat dan signifikan secara statistik antara tahun dan jumlah kematian TB Paru BTA+, di mana arah korelasi positif menunjukkan bahwa jumlah kematian cenderung meningkat seiring dengan bertambahnya tahun. Dengan demikian, dapat disimpulkan bahwa tren kematian TB Paru BTA+ secara keseluruhan mengalami peningkatan yang signifikan selama periode observasi, yang menguatkan hasil visual pada grafik sebelumnya.

Sementara itu, kematian pada fase pengobatan meningkat paling tajam dan konsisten, mengindikasikan adanya tantangan besar dalam keberhasilan terapi TB, misal keterlambatan diagnosis, resistensi obat, atau putus pengobatan. Kematian di luar fase pengobatan tidak menunjukkan pola teratur, kemungkinan karena variasi faktor eksternal dan pencatatan awal yang belum terstandarisasi.

4.3 Peta/Heatmap Kecamatan × Tahun

heatmap_long <- by_kec_year

ggplot(heatmap_long, aes(
  x = tahun,
  y = reorder(kecamatan, -rowSums(xtabs(kematian ~ kecamatan + tahun, data = heatmap_long))[match(kecamatan, names(rowSums(xtabs(kematian ~ kecamatan + tahun, data = heatmap_long))))]),
  fill = kematian
)) +
  geom_tile() +
  scale_fill_gradient(low = "white", high = "red") +
  labs(
    title = "Heatmap Kematian TB Paru BTA+ per Kecamatan × Tahun",
    x = "Tahun", y = "Kecamatan", fill = "Kematian"
  ) +
  theme_minimal(base_size = 12) +
  theme(
    axis.text.y = element_text(size = 3.5, angle = 45, hjust = 1),
    axis.text.x = element_text(size = 9, angle = 45, hjust = 1),
    plot.title = element_text(size = 14, face = "bold")
  ) +
  coord_fixed(ratio = 0.3)

Interpretasi :

Secara umum, terlihat kecenderungan peningkatan kasus kematian pasca tahun 2020, yang dapat berkaitan dengan dampak pandemi COVID-19 terhadap layanan kesehatan dan keterlambatan penanganan penyakit kronis seperti TB. Periode sekitar tahun 2022-2024 menunjukkan banyak kecamatan mengalami peningkatan warna merah muda hingga merah, mengindikasikan lonjakan kematian TB di wilayah tersebut. Beberapa kecamatan tampak konsisten memiliki intensitas lebih tinggi dibanding kecamatan lainnya, mengindikasikan kemungkinan faktor risiko lingkungan, kepadatan penduduk, atau akses layanan kesehatan yang berbeda-beda.

4.4 Peringkat Fasilitas Kesehatan

top15_faskes <- by_faskes %>% slice_head(n = 15)
ggplot(top15_faskes, aes(x = reorder(fasilitas, total_kematian), y = total_kematian)) +
  geom_col() +
  coord_flip() +
  labs(title = "Top-15 fasilitas kesehatan — total kematian TB Paru BTA+ (2015–2024)",
       x = "Fasilitas", y = "Jumlah kematian (kumulatif)") +
  theme_minimal()

Interpretasi :

Grafik menunjukkan daftar 15 fasilitas kesehatan dengan jumlah kematian TB Paru BTA+ tertinggi selama periode 2015–2024. UPT Babakan Sari menempati peringkat pertama dengan jumlah kematian kumulatif tertinggi, menunjukkan bahwa wilayah cakupannya kemungkinan memiliki prevalensi TB yang besar atau pasien yang datang dalam kondisi lebih berat. Ini bisa mencerminkan kepadatan penduduk tinggi, akses layanan kesehatan yang terlambat, atau karakteristik sosial ekonomi yang lebih rentan. Selanjutnya, fasilitas seperti UPT Gumuruh, UPT Garuda, UPT Kopo, dan UPT Sukahaji juga mencatat angka kematian yang cukup tinggi. Mengindikasikan adanya kluster wilayah dengan beban penyakit lebih berat yang mungkin berhubungan dengan faktor-faktor seperti kepadatan penduduk, sanitasi, mobilitas penduduk, serta kondisi sosial ekonomi yang mempengaruhi akses dan kualitas perawatan TB.

4.5 Ringkasan Quality Check

qc_completeness <- dat_kematian %>%
  distinct(kecamatan = .data[[col_kec_nama]], tahun) %>%
  count(tahun, name = "n_kec_terisi")

qc_zero_rows <- dat_kematian %>%
  filter(jumlah == 0) %>%
  tally(name = "baris_nol")

list(
  ringkasan_tahun = by_year %>% head(),
  ringkasan_kecamatan = by_kec %>% head(),
  ringkasan_faskes = by_faskes %>% head(),
  qc_tahun_kecamatan_terisi = qc_completeness %>% head(),
  qc_jumlah_baris_nol = qc_zero_rows
)
## $ringkasan_tahun
## # A tibble: 6 × 2
##   tahun total_kematian
##   <int>          <dbl>
## 1  2015             16
## 2  2016             18
## 3  2017             19
## 4  2018             15
## 5  2019            152
## 6  2020            149
## 
## $ringkasan_kecamatan
## # A tibble: 6 × 2
##   kecamatan       total_kematian
##   <chr>                    <dbl>
## 1 BATUNUNGGAL                119
## 2 KIARACONDONG               106
## 3 ANDIR                       86
## 4 BABAKAN CIPARAY             81
## 5 BOJONGLOA KALER             71
## 6 SUKAJADI                    67
## 
## $ringkasan_faskes
## # A tibble: 6 × 2
##   fasilitas        total_kematian
##   <chr>                     <dbl>
## 1 UPT BABAKAN SARI             73
## 2 UPT GUMURUH                  59
## 3 UPT GARUDA                   53
## 4 UPT KOPO                     51
## 5 UPT SUKAHAJI                 46
## 6 UPT CARINGIN                 42
## 
## $qc_tahun_kecamatan_terisi
## # A tibble: 6 × 2
##   tahun n_kec_terisi
##   <int>        <int>
## 1  2015           30
## 2  2016           30
## 3  2017           30
## 4  2018           30
## 5  2019           30
## 6  2020           30
## 
## $qc_jumlah_baris_nol
## # A tibble: 1 × 1
##   baris_nol
##       <int>
## 1       153
sessionInfo()
## R version 4.4.2 (2024-10-31 ucrt)
## Platform: x86_64-w64-mingw32/x64
## Running under: Windows 11 x64 (build 26100)
## 
## Matrix products: default
## 
## 
## locale:
## [1] LC_COLLATE=English_Indonesia.utf8  LC_CTYPE=English_Indonesia.utf8   
## [3] LC_MONETARY=English_Indonesia.utf8 LC_NUMERIC=C                      
## [5] LC_TIME=English_Indonesia.utf8    
## 
## time zone: Asia/Jakarta
## tzcode source: internal
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## other attached packages:
##  [1] kableExtra_1.4.0 scales_1.3.0     janitor_2.2.1    lubridate_1.9.4 
##  [5] forcats_1.0.0    stringr_1.5.1    dplyr_1.1.4      purrr_1.0.2     
##  [9] readr_2.1.5      tidyr_1.3.1      tibble_3.2.1     ggplot2_3.5.2   
## [13] tidyverse_2.0.0  readxl_1.4.4    
## 
## loaded via a namespace (and not attached):
##  [1] sass_0.4.9        utf8_1.2.4        generics_0.1.3    xml2_1.3.8       
##  [5] stringi_1.8.4     hms_1.1.3         digest_0.6.37     magrittr_2.0.3   
##  [9] evaluate_1.0.3    grid_4.4.2        timechange_0.3.0  fastmap_1.2.0    
## [13] cellranger_1.1.0  jsonlite_1.8.9    fansi_1.0.6       viridisLite_0.4.2
## [17] jquerylib_0.1.4   cli_3.6.3         rlang_1.1.4       munsell_0.5.1    
## [21] withr_3.0.2       cachem_1.1.0      yaml_2.3.10       tools_4.4.2      
## [25] tzdb_0.5.0        colorspace_2.1-1  vctrs_0.6.5       R6_2.5.1         
## [29] lifecycle_1.0.4   snakecase_0.11.1  pkgconfig_2.0.3   pillar_1.9.0     
## [33] bslib_0.9.0       gtable_0.3.6      glue_1.8.0        systemfonts_1.2.1
## [37] xfun_0.52         tidyselect_1.2.1  rstudioapi_0.17.1 knitr_1.49       
## [41] farver_2.1.2      htmltools_0.5.8.1 labeling_0.4.3    rmarkdown_2.29   
## [45] svglite_2.1.3     compiler_4.4.2

5 Analisis Epidemiologi

5.1 Deskripsi Kasus dan Proses Penyakit (A–H–E)

TB Paru BTA+ disebabkan oleh Mycobacterium tuberculosis (agent) yang menular melalui droplet nuclei. Kerentanan host meningkat pada usia lanjut, gizi buruk, komorbid (DM/HIV), dan kepatuhan OAT yang rendah. Environment berperan melalui hunian padat, ventilasi buruk, determinan sosial-ekonomi, serta akses/kualitas layanan (diagnosis dini, tracing kontak, DOTS).

5.1.1 Diagram hubungan faktor risiko

## Warning: package 'DiagrammeR' was built under R version 4.4.3
## Warning in prettyNum(.Internal(format(x, trim, digits, nsmall, width, 3L, :
## 'big.mark' and 'decimal.mark' are both '.', which could be confusing

Diagram di atas bersifat konseptual untuk memetakan jalur risiko yang mungkin memengaruhi kematian TB.

M. tuberculosis sebagai agent dengan karakteristik virulensi dan potensi resistensi obat menjadi penyebab utama infeksi. Faktor host seperti usia, status gizi, komorbiditas (terutama DM/HIV), serta kepatuhan terhadap obat anti-TB (OAT) mempengaruhi kerentanan individu serta keberhasilan terapi. Sementara itu, faktor lingkungan seperti kepadatan penduduk, ventilasi hunian, dan akses terhadap layanan kesehatan turut memengaruhi penularan dan peluang penanganan dini. Secara keseluruhan, diagram ini menegaskan bahwa kematian TB tidak hanya dipengaruhi sifat bakteri, tetapi juga kondisi individu dan lingkungan, serta efektivitas sistem pelayanan kesehatan dalam deteksi dan penanganan dini.

5.2 Perhitungan Ukuran Epidemiologi

Dataset yang tersedia berisi jumlah kematian agregat. Untuk menghitung prevalensi, insidensi, attack rate, CFR, diperlukan denominator tambahan.

5.2.1 Import data penduduk dari BPS

library(readxl)
library(dplyr)
library(kableExtra)
library(janitor)

# === Baca data penduduk ===
pop_path <- "C:/Users/hp/Documents/New folder/SMT 5/EPIDEMIOLOGI/UTS/jumlah penduduk_kota bandung_2015_2024.xlsx"

pop_tahun <- read_excel(pop_path) %>%
  clean_names() %>%
  rename_with(~ str_replace_all(., " ", "_")) %>%
  rename(tahun = matches("tahun"),
         jumlah_penduduk = matches("penduduk|jiwa")) %>%
  mutate(
    tahun = as.integer(tahun),
    jumlah_penduduk = as.numeric(jumlah_penduduk)
  ) %>%
  filter(!is.na(tahun), !is.na(jumlah_penduduk))

# Cek hasil baca
print(pop_tahun, n = Inf)
## # A tibble: 10 × 2
##    tahun jumlah_penduduk
##    <int>           <dbl>
##  1  2015         2481469
##  2  2016         2490622
##  3  2017         2497938
##  4  2018         2503708
##  5  2019         2507888
##  6  2020         2510103
##  7  2021         2526476
##  8  2022         2545005
##  9  2023         2569107
## 10  2024         2591763

5.2.2 1) Laju mortalitas spesifik TB (per 100.000 penduduk per tahun)

# ==============================
# 1) Laju Mortalitas Spesifik TB Paru BTA+ (per 100.000 penduduk per tahun)
# ==============================

# `by_year` sudah terbentuk dari dataset TB sebelumnya
mort_rate <- by_year %>%
  inner_join(pop_tahun, by = "tahun") %>%
  mutate(laju_mortalitas_100k = total_kematian / jumlah_penduduk * 1e5)

# === Tampilkan tabel hasil ===
mort_rate %>%
  select(tahun, total_kematian, jumlah_penduduk, laju_mortalitas_100k) %>%
  kable(caption = "Laju Mortalitas TB Paru BTA+ per 100.000 Penduduk Kota Bandung (2015–2024)") %>%
  kable_styling(full_width = FALSE, position = "center", font_size = 11)
## Warning in attr(x, "align"): 'xfun::attr()' is deprecated.
## Use 'xfun::attr2()' instead.
## See help("Deprecated")
## Warning in attr(x, "align"): 'xfun::attr()' is deprecated.
## Use 'xfun::attr2()' instead.
## See help("Deprecated")
Laju Mortalitas TB Paru BTA+ per 100.000 Penduduk Kota Bandung (2015–2024)
tahun total_kematian jumlah_penduduk laju_mortalitas_100k
2015 16 2481469 0.6447794
2016 18 2490622 0.7227110
2017 19 2497938 0.7606274
2018 15 2503708 0.5991114
2019 152 2507888 6.0608767
2020 149 2510103 5.9360114
2021 167 2526476 6.6099975
2022 206 2545005 8.0942867
2023 284 2569107 11.0544247
2024 323 2591763 12.4625593

Interpretasi :

Laju mortalitas menunjukkan seberapa banyak orang yang meninggal karena TB dari setiap 100.000 penduduk per tahun. Pada tahun 2015, dari setiap 100.000 penduduk, setiap 0,64 orang meninggal akibat TB. Dan pada tahun terakhir pencatatan, yaitu tahun 2024, setiap 12,46 orang meninggal akibat TB yang naik sangat signifikan dibandingkan tahun 2015. Artinya, risiko kematian akibat TB per penduduk meningkat cukup besar selama periode tersebut, terutama mulai 2019.

# === Visualisasi tren mortalitas ===
library(ggplot2)

ggplot(mort_rate, aes(x = tahun, y = laju_mortalitas_100k)) +
  geom_line(color = "firebrick", linewidth = 1.1) +
  geom_point(size = 2.5, color = "firebrick") +
  scale_x_continuous(breaks = mort_rate$tahun) +
  labs(
    title = "Tren Laju Mortalitas TB Paru BTA+ Kota Bandung (2015–2024)",
    x = "Tahun",
    y = "Laju Mortalitas per 100.000 Penduduk",
    caption = "Sumber data: BPS Kota Bandung (Penduduk) & Dinkes Kota Bandung (Kematian TB Paru BTA+)"
  ) +
  theme_minimal(base_size = 11)

Interpretasi :

Secara umum terlihat bahwa laju kematian akibat TB meningkat cukup tajam dalam satu dekade terakhir. Pada periode awal 2015-2018, laju mortalitas relatif rendah dan stabil, berkisar di bawah 1 kematian per 100.000 penduduk. Namun, mulai tahun 2019 trjadi lonjakan signifikan dengan laju mortalitas mencapai sekitar 7,5 per 100.000. Setelah itu, angka sedikit menurun pada 2020, kemudian kembali meningkat secara bertahap. Peningkatan paling mencolok terjadi pada tahun 2022-2024, dimana laju mortalitas mencapai lebih dari 12 kematian per 100.000 penduduk pada 2024.

5.2.3 2) CFR (Case Fatality Rate)

library(dplyr)
library(stringr)
library(kableExtra)

# === Ambil total kasus TB per tahun dari dataset utama ===
# Gunakan kolom `keterangan` yang berisi "PASIEN DIOBATI"
kasus_tb_tahun <- raw %>%
  filter(str_detect(keterangan, regex("PASIEN DIOBATI", ignore_case = TRUE))) %>%
  group_by(tahun) %>%
  summarise(kasus_tb = sum(jumlah, na.rm = TRUE)) %>%
  arrange(tahun)

# Cek hasil agregasi
print(kasus_tb_tahun, n = Inf)
## # A tibble: 10 × 2
##    tahun kasus_tb
##    <dbl>    <dbl>
##  1  2015      940
##  2  2016     1023
##  3  2017     1101
##  4  2018      996
##  5  2019     7491
##  6  2020     8705
##  7  2021     6156
##  8  2022     6317
##  9  2023    10539
## 10  2024     8673
# === Hitung CFR (%): kematian / kasus × 100 ===
cfr_tab <- by_year %>%
  inner_join(kasus_tb_tahun, by = "tahun") %>%
  mutate(CFR_pct = total_kematian / kasus_tb * 100)

# === Tampilkan tabel CFR ===
cfr_tab %>%
  select(tahun, total_kematian, kasus_tb, CFR_pct) %>%
  kable(caption = "Case Fatality Rate (CFR) TB Paru BTA+ Kota Bandung (2015–2024)") %>%
  kable_styling(full_width = FALSE, position = "center", font_size = 11)
Case Fatality Rate (CFR) TB Paru BTA+ Kota Bandung (2015–2024)
tahun total_kematian kasus_tb CFR_pct
2015 16 940 1.702128
2016 18 1023 1.759531
2017 19 1101 1.725704
2018 15 996 1.506024
2019 152 7491 2.029102
2020 149 8705 1.711660
2021 167 6156 2.712801
2022 206 6317 3.261042
2023 284 10539 2.694753
2024 323 8673 3.724201

Interpretasi :

Case Fatality Rate (CFR) TB Paru BTA+ di Kota Bandung pada periode 2015–2020 menunjukkan kisaran yang relatif stabil, yaitu sekitar 1,5% hingga 2%. Artinya, dari setiap 100 kasus TB Paru BTA+ yang dilaporkan, terdapat sekitar 1–2 orang yang meninggal. Pada tahun 2015 hingga 2018, angka CFR berada pada kisaran 1,5%–1,75%, mencerminkan bahwa sebagian besar pasien TB yang terdeteksi dapat tertangani dengan baik dan angka kematian masih terkendali.

Di sisi lain, meskipun terjadi lonjakan kasus TB yang sangat besar pada 2019 dan 2020, persentase kematian masih berada pada kisaran serupa, yaitu sekitar 1,7%–2%. Hal ini menunjukkan bahwa meskipun beban kasus meningkat, kapasitas layanan kesehatan masih mampu merespon sehingga tidak terjadi lonjakan kematian secara proporsional.

# === Visualisasi tren CFR ===
library(ggplot2)

ggplot(cfr_tab, aes(x = tahun, y = CFR_pct)) +
  geom_line(color = "steelblue", linewidth = 1.1) +
  geom_point(size = 2.5, color = "steelblue") +
  scale_x_continuous(breaks = cfr_tab$tahun) +
  labs(
    title = "Tren Case Fatality Rate (CFR) TB Paru BTA+ Kota Bandung (2015–2024)",
    x = "Tahun",
    y = "CFR (%)",
    caption = "Sumber data: Dinkes Kota Bandung — Kematian & Kasus TB Paru BTA+"
  ) +
  theme_minimal(base_size = 11)

Interpretasi :

Secara umum, terlihat bahwa angka CFR pada awal periode (2015–2018) relatif stabil dan rendah, berada di kisaran sekitar 1,5%–1,8%. Hal ini menggambarkan bahwa pada periode tersebut, proporsi kematian dari total kasus TB Paru BTA+ masih terkendali. Namun, mulai tahun 2019 terlihat adanya peningkatan fluktuatif pada CPR. Pada 2019, terjadi kenaikan hingga sekitar 2%, kemudian sempat turun pada 2020, tetapi kembali meningkat cukup tajam pada 2021 dan mencapai puncaknya pada 2024 dengan nilai lebih 3,5%. Fluktuasi dengan tren naik keseluruhan menunjukkan adanya tantangan dalam pengendalian TB. Temuan ini penting sebagai dasar evaluasi program penanggulangan TB di Kota Bandung untuk memastikan agar akses layanan, ketepatan diagnosis, dan keberhasilan pengobatan tetap optimal.

5.2.4 3) Prevalensi

# === PREVALENSI TB PARU BTA+ ===
insidensi_tb <- raw %>%
  filter(str_detect(keterangan, regex("PASIEN DIOBATI", ignore_case = TRUE))) %>%
  group_by(tahun) %>%
  summarise(kasus_baru = sum(jumlah, na.rm = TRUE)) %>%
  arrange(tahun)

prevalensi_tb <- insidensi_tb %>% 
  rename(kasus_total = kasus_baru)

prev_tab <- prevalensi_tb %>%
  inner_join(pop_tahun, by = "tahun") %>%
  mutate(prevalence_percent = kasus_total / jumlah_penduduk * 100)

# Tabel hasil
prev_tab %>%
  select(tahun, kasus_total, jumlah_penduduk, prevalence_percent) %>%
  kable(caption = "Prevalensi TB Paru BTA+ dalam Persentase (Kota Bandung, 2015–2024)") %>%
  kable_styling(full_width = FALSE, position = "center", font_size = 11)
## Warning in attr(x, "align"): 'xfun::attr()' is deprecated.
## Use 'xfun::attr2()' instead.
## See help("Deprecated")
## Warning in attr(x, "align"): 'xfun::attr()' is deprecated.
## Use 'xfun::attr2()' instead.
## See help("Deprecated")
Prevalensi TB Paru BTA+ dalam Persentase (Kota Bandung, 2015–2024)
tahun kasus_total jumlah_penduduk prevalence_percent
2015 940 2481469 0.0378808
2016 1023 2490622 0.0410741
2017 1101 2497938 0.0440764
2018 996 2503708 0.0397810
2019 7491 2507888 0.2986975
2020 8705 2510103 0.3467985
2021 6156 2526476 0.2436595
2022 6317 2545005 0.2482117
2023 10539 2569107 0.4102204
2024 8673 2591763 0.3346371
# === Hitung Prevalensi (% dari penduduk) ===
prev_tab <- insidensi_tb %>% 
  rename(kasus_total = kasus_baru) %>%
  inner_join(pop_tahun, by = "tahun") %>%
  mutate(prevalence_pct = kasus_total / jumlah_penduduk * 100)

# === Plot Prevalensi ===
library(ggplot2)

ggplot(prev_tab, aes(x = tahun, y = prevalence_pct)) +
  geom_line(linewidth = 1.2) +
  geom_point(size = 3) +
  geom_text(aes(label = sprintf("%.3f%%", prevalence_pct)),
            vjust = -0.6, size = 3.5) +
  scale_x_continuous(breaks = 2015:2024) +
  labs(
    title = "Tren Prevalensi TB Paru BTA+ Kota Bandung (2015–2024)",
    x = "Tahun",
    y = "Prevalensi (%)",
    caption = "Sumber: Dinkes & BPS Kota Bandung"
  ) +
  theme_minimal(base_size = 12) +
  theme(
    plot.title = element_text(face = "bold", size = 14),
    axis.title = element_text(face = "bold")
  )

Interpretasi :

Pada periode 2015–2018, prevalensi TB berada pada tingkat yang relatif rendah, yaitu berkisar sekitar 0,038%–0,044% dari total populasi. Angka ini menunjukkan bahwa proporsi penduduk yang mengalami TB pada periode tersebut masih relatif kecil.

Memasuki tahun 2019, terjadi peningkatan prevalensi yang sangat tajam, yakni mencapai sekitar 0,299%, dan mencapai puncaknya pada tahun 2020 sebesar 0,347%. Peningkatan ini menggambarkan adanya kenaikan besar dalam jumlah kasus TB yang tercatat di masyarakat.

Setelah itu, pada tahun 2021 prevalensi menurun menjadi sekitar 0,244% dan relatif stabil pada 2022 di angka 0,248%. Penurunan ini kemungkinan tidak sepenuhnya mencerminkan penurunan nyata kasus TB, melainkan dapat dipengaruhi oleh pandemi COVID-19 yang mengganggu akses layanan kesehatan, sehingga penemuan kasus TB menurun akibat pembatasan layanan dan mobilitas masyarakat.

Selanjutnya, pada tahun 2023 dan 2024 kembali terlihat kecenderungan peningkatan prevalensi TB, menunjukkan bahwa beban penyakit TB masih menjadi tantangan kesehatan masyarakat dan memerlukan upaya penanggulangan yang berkelanjutan.

5.2.5 4) Attack Rate

# === ATTACK RATE (AR) TB PARU BTA+ — berbasis kecamatan tertinggi (contoh outbreak lokal) ===
# Misal: cari kecamatan dengan lonjakan kasus tertinggi dalam satu tahun
outbreak_tb <- raw %>%
  filter(str_detect(keterangan, regex("PASIEN DIOBATI", ignore_case = TRUE))) %>%
  group_by(tahun, kemendagri_nama_kecamatan) %>%
  summarise(kasus = sum(jumlah, na.rm = TRUE)) %>%
  ungroup() %>%
  group_by(kemendagri_nama_kecamatan) %>%
  mutate(rerata = mean(kasus),
         sd = sd(kasus),
         zscore = (kasus - rerata)/sd) %>%
  filter(zscore > 2) %>%  # ambil lonjakan signifikan
  left_join(pop_tahun, by = "tahun") %>%
  mutate(attack_rate_per_100k = kasus / jumlah_penduduk * 1e5)
## `summarise()` has grouped output by 'tahun'. You can override using the
## `.groups` argument.
# Tabel outbreak
if (nrow(outbreak_tb) > 0) {
  outbreak_tb %>%
    select(tahun, kemendagri_nama_kecamatan, kasus, jumlah_penduduk, attack_rate_per_100k) %>%
    arrange(desc(attack_rate_per_100k)) %>%
    kable(caption = "Attack Rate TB Paru BTA+ pada Kecamatan dengan Lonjakan Kasus Signifikan") %>%
    kable_styling(full_width = FALSE, position = "center", font_size = 11)
} else {
  cat("Tidak terdeteksi lonjakan signifikan (outbreak) berdasarkan deviasi > 2 SD.\n")
}
## Warning in attr(x, "align"): 'xfun::attr()' is deprecated.
## Use 'xfun::attr2()' instead.
## See help("Deprecated")
## Warning in attr(x, "align"): 'xfun::attr()' is deprecated.
## Use 'xfun::attr2()' instead.
## See help("Deprecated")
Attack Rate TB Paru BTA+ pada Kecamatan dengan Lonjakan Kasus Signifikan
tahun kemendagri_nama_kecamatan kasus jumlah_penduduk attack_rate_per_100k
2023 GEDEBAGE 511 2569107 19.89018

Interpretasi :

Attack rate TB Paru BTA+ pada Kecamatan Gedebage tahun 2023 tercatat sebesar 19,89 per 100.000 penduduk, dengan jumlah kasus sebanyak 511 kasus dari total penduduk 2.569.107 jiwa. Angka ini menunjukkan bahwa pada tahun tersebut, sekitar 20 orang dari setiap 100.000 penduduk di Gedebage mengalami kejadian TB Paru BTA+ baru. Nilai attack rate ini mengindikasikan adanya peningkatan penularan aktif dalam periode yang relatif singkat, sehingga dapat mencerminkan adanya dinamika penularan atau klaster kasus yang perlu diperhatikan. Dengan jumlah kasus yang cukup tinggi, wilayah ini termasuk area prioritas untuk intervensi pengendalian TB, seperti peningkatan penemuan kasus aktif, edukasi kesehatan masyarakat, dan pemutusan rantai penularan melalui pengobatan sedini mungkin.

5.2.6 5) Ukuran Asosiasi (RR/OR/AR)

library(dplyr)
library(stringr)
library(kableExtra)

# ============================================================
# Data asosiasi berbasis kecamatan
# ============================================================

# Ambil total kasus dan kematian per kecamatan (2015–2024)
kec_sum <- raw %>%
  filter(str_detect(keterangan, regex("PASIEN DIOBATI|ANGKA KEMATIAN", ignore_case = TRUE))) %>%
  mutate(
    tipe = case_when(
      str_detect(keterangan, "PASIEN DIOBATI") ~ "kasus",
      str_detect(keterangan, "KEMATIAN") ~ "kematian",
      TRUE ~ NA_character_
    )
  ) %>%
  group_by(kemendagri_nama_kecamatan, tipe) %>%
  summarise(total = sum(jumlah, na.rm = TRUE)) %>%
  pivot_wider(names_from = tipe, values_from = total, values_fill = 0) %>%
  ungroup()

# Tambahkan populasi (gunakan rata-rata populasi kota dibagi jumlah kecamatan = perkiraan)
pop_kota_mean <- mean(pop_tahun$jumlah_penduduk, na.rm = TRUE)
jml_kec <- n_distinct(raw$kemendagri_nama_kecamatan)
pop_kec_approx <- pop_kota_mean / jml_kec

kec_sum <- kec_sum %>%
  mutate(
    risk = kematian / kasus,
    incidence_rate = kasus / pop_kec_approx * 1e5
  )

# ============================================================
# Kelompokkan kecamatan: risiko tinggi vs risiko rendah
# ============================================================
# Kita pakai median risk sebagai cut-off
median_risk <- median(kec_sum$risk, na.rm = TRUE)
kec_sum <- kec_sum %>%
  mutate(risk_group = if_else(risk >= median_risk, "Tinggi", "Rendah"))

# ============================================================
# Bentuk tabel 2x2 dan hitung RR, OR, AR
# ============================================================
# misalnya: kelompok "Tinggi" dianggap paparan (exposed), "Rendah" = non-exposed
tab_2x2 <- kec_sum %>%
  summarise(
    exposed_cases = sum(kematian[risk_group == "Tinggi"], na.rm = TRUE),
    exposed_total = sum(kasus[risk_group == "Tinggi"], na.rm = TRUE),
    nonexp_cases = sum(kematian[risk_group == "Rendah"], na.rm = TRUE),
    nonexp_total = sum(kasus[risk_group == "Rendah"], na.rm = TRUE)
  )

# Komponen tabel 2x2
a <- tab_2x2$exposed_cases
b <- tab_2x2$exposed_total - a
c <- tab_2x2$nonexp_cases
d <- tab_2x2$nonexp_total - c

# Hitung ukuran asosiasi
RR <- (a / (a + b)) / (c / (c + d))
OR <- (a / b) / (c / d)
AR <- (a / (a + b)) - (c / (c + d))
AR_pct <- AR / (a / (a + b)) * 100

# ============================================================
# Tampilkan hasil
# ============================================================
tabel_asosiasi <- tibble::tibble(
  Parameter = c("Risk Ratio (RR)", "Odds Ratio (OR)", "Attributable Risk (AR)", "Attributable Risk (%)"),
  Nilai = c(RR, OR, AR, AR_pct)
)

kable(tabel_asosiasi, caption = "Ukuran Asosiasi Epidemiologis antara Kecamatan Risiko Tinggi vs Rendah (TB Paru BTA+)") %>%
  kable_styling(full_width = FALSE, position = "center", font_size = 11)
Ukuran Asosiasi Epidemiologis antara Kecamatan Risiko Tinggi vs Rendah (TB Paru BTA+)
Parameter Nilai
Risk Ratio (RR) 1.7588264
Odds Ratio (OR) 1.7837977
Attributable Risk (AR) 0.0137454
Attributable Risk (%) 43.1439071

Interpretasi :

Hasil analisis terhadap data kejadian TB Paru BTA+ di Kota Bandung selama periode 2015–2024 menunjukkan bahwa kecamatan yang dikategorikan sebagai wilayah risiko tinggi secara konsisten memiliki beban TB yang lebih besar dibandingkan wilayah risiko rendah. Kategori ini ditetapkan berdasarkan pola kasus yang stabil dalam sepuluh tahun pengamatan, sehingga mencerminkan kondisi epidemiologis jangka panjang, bukan hanya variasi musiman atau tahunan. Secara kuantitatif, Risk Ratio sebesar 1,76 dan Odds Ratio sebesar 1,78 menunjukkan bahwa penduduk yang tinggal di kecamatan risiko tinggi memiliki sekitar 76–78% kemungkinan lebih besar untuk mengalami TB dibandingkan dengan penduduk di wilayah risiko rendah. Lebih jauh, Attributable Risk (0,0137) mengindikasikan bahwa terdapat tambahan sekitar 1,37 kasus TB per 100 penduduk yang dapat dikaitkan dengan faktor risiko yang dominan di wilayah tersebut. Proporsi ini setara dengan 43,14% Attributable Risk Percent, yang berarti bahwa sekitar 43% kasus TB di wilayah risiko tinggi sebenarnya dapat dicegah apabila faktor lingkungan, sosial, dan kapasitas layanan kesehatan yang menyebabkan tingginya penularan dapat diperbaiki. Temuan ini menegaskan bahwa perbedaan risiko bukanlah fenomena sesaat, melainkan pola persisten selama satu dekade, sehingga wilayah risiko tinggi membutuhkan intervensi berkelanjutan, penguatan sistem surveilans, peningkatan penemuan kasus aktif, edukasi kesehatan, dan perbaikan determinan sosial–lingkungan untuk menurunkan insiden dan mortalitas TB secara efektif di masa mendatang.

5.2.7 6) Visualisasi dan Interpretasi

library(sf)
library(dplyr)
library(stringr)
library(janitor)
library(ggplot2)

# === LOAD SHAPEFILE ===
shp_path <- "C:/Users/hp/Documents/New folder/SMT 5/EPIDEMIOLOGI/UTS/BANDUNG/BANDUNG.shp"

desa_shp <- st_read(shp_path) %>% 
  clean_names()
## Reading layer `BANDUNG' from data source 
##   `C:\Users\hp\Documents\New folder\SMT 5\EPIDEMIOLOGI\UTS\BANDUNG\BANDUNG.shp' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 30 features and 12 fields
## Geometry type: POLYGON
## Dimension:     XY
## Bounding box:  xmin: 107.5453 ymin: -6.969748 xmax: 107.7395 ymax: -6.840746
## Geodetic CRS:  WGS84 Lat/Long's, Degrees, -180 ==> +180
# Cek nama kolom kecamatan kamu
names(desa_shp)  # <-- lihat output ini
##  [1] "poly_id"    "alamat"     "email"      "jumlah_kel" "jumlah_pen"
##  [6] "kepadatan"  "kepala_kec" "luas_wilay" "nama"       "sumber_dat"
## [11] "tahun"      "telepon"    "geometry"
# === AGREGASI KE KECAMATAN ===
kec_shp <- desa_shp %>%
  mutate(
    kec_name_shp = str_to_upper(str_squish(nama))
  ) %>%
  group_by(kec_name_shp) %>%
  summarise(geometry = st_union(geometry), .groups = "drop")

# === DATA TB ===
tb_kec <- raw %>%
  filter(str_detect(keterangan, regex("KEMATIAN", ignore_case = TRUE))) %>%
  mutate(kec_name_tb = str_to_upper(str_squish(kemendagri_nama_kecamatan))) %>%
  group_by(kec_name_tb) %>%
  summarise(total_kematian = sum(jumlah, na.rm = TRUE), .groups = "drop")

# === JOIN BY NAME ===
map_data <- kec_shp %>%
  left_join(tb_kec, by = c("kec_name_shp" = "kec_name_tb"))

# === PLOT ===
p_total <- ggplot(map_data) +
  geom_sf(aes(fill = total_kematian), color = "grey40", linewidth = 0.25) +
  scale_fill_viridis_c(option = "plasma", direction = -1,
                       na.value = "grey90") +
  labs(
    title   = "Distribusi Kematian TB Paru BTA+ per Kecamatan\nKota Bandung (2015–2024)",
    fill    = "Total kematian",
    caption = "Sumber: Dinkes Kota Bandung • Shapefile BIG"
  ) +
  theme_minimal(base_size = 11)

p_total

Interpretasi :

Peta distribusi kematian TB Paru BTA+ di Kota Bandung menunjukkan pola persebaran yang tidak merata antar-kecamatan selama periode 2015–2024. Pada peta agregat sepuluh tahun, terlihat beberapa kecamatan di wilayah tengah hingga selatan tampak lebih gelap, menandakan jumlah kematian yang relatif lebih tinggi. Sementara itu, kecamatan di wilayah utara dan sebagian timur cenderung menunjukkan jumlah kematian yang lebih rendah.

# --- Peta facet per tahun ---
tb_kec_th_name <- raw %>%
  filter(str_detect(keterangan, regex("KEMATIAN", ignore_case = TRUE))) %>%
  mutate(kec_name_tb = str_to_upper(str_squish(kemendagri_nama_kecamatan))) %>%
  group_by(kec_name_tb, tahun) %>%
  summarise(kematian = sum(jumlah, na.rm = TRUE), .groups = "drop")

map_th <- kec_shp %>%
  left_join(tb_kec_th_name, by = c("kec_name_shp" = "kec_name_tb"))

# Rapikan facet (tanpa sumbu yang berulang)
bbox <- sf::st_bbox(kec_shp)

map_th <- map_th %>% filter(!is.na(tahun))

p_th <- ggplot(map_th) +
  geom_sf(aes(fill = kematian), color = "grey40", linewidth = 0.2) +
  scale_fill_viridis_c(option = "plasma", direction = -1,
                       na.value = "grey90", labels = label_comma(big.mark = ".")) +
  facet_wrap(~ tahun, ncol = 5) +
  coord_sf(xlim = c(bbox["xmin"], bbox["xmax"]),
           ylim = c(bbox["ymin"], bbox["ymax"]),
           expand = FALSE, datum = NA) +
  labs(title = "Kematian TB Paru BTA+ per Kecamatan per Tahun — Kota Bandung",
       fill  = "Kematian") +
  theme_minimal(base_size = 11) +
  theme(
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank(),
    axis.text        = element_blank(),
    axis.ticks       = element_blank(),
    axis.title       = element_blank(),
    strip.background = element_rect(fill = "white", color = NA),
    legend.position  = "right"
  )
p_th
## Warning in prettyNum(.Internal(format(x, trim, digits, nsmall, width, 3L, :
## 'big.mark' and 'decimal.mark' are both '.', which could be confusing

Interpretasi :

Jika melihat dinamika tahunan, pada 2015–2018 sebagian besar wilayah tampak berwarna cerah, menandakan kematian TB yang masih rendah. Namun mulai 2019 terlihat munculnya kecamatan dengan intensitas warna lebih gelap—indikasi peningkatan kematian. Peningkatan ini tampak semakin jelas pada tahun 2020 dan 2021, periode yang bertepatan dengan pandemi COVID-19, di mana beban kesehatan meningkat dan akses layanan kesehatan terganggu sehingga dapat mempengaruhi outcome kasus TB. Setelah 2021 hingga 2024, pola sebaran tampak relatif konsisten, namun beberapa kecamatan tetap menunjukkan intensitas warna yang lebih tinggi secara berulang, mengindikasikan adanya area dengan masalah TB yang persisten.

Secara keseluruhan, interpretasi ini menunjukkan bahwa kematian akibat TB di Kota Bandung cenderung meningkat dalam beberapa tahun terakhir dan terkonsentrasi pada kecamatan tertentu, mengindikasikan perlunya pendekatan intervensi berbasis wilayah. Fokus penguatan deteksi dini, keberlanjutan pengobatan, dan peningkatan akses layanan kesehatan di kecamatan dengan kematian tinggi menjadi penting untuk menurunkan mortalitas TB di Kota Bandung.

5.3 Desain Studi Epidemiologi

5.3.1 Pilihan Desain

  • Case–Control (disarankan untuk studi mortalitas TB) : efisien untuk outcome langka/relatif jarang.
  • Cohort : bila tersedia kohort pasien TB dengan follow-up outcome kematian.

5.3.2 Variabel Utama

  • Outcome : kematian selama OAT (ya/tidak; tanggal).
  • Paparan : DM/HIV, keterlambatan diagnosis, IMT/gizi, kepadatan hunian, kepatuhan OAT, rujukan RS.
  • Pengganggu potensial : umur, jenis kelamin, status sosial-ekonomi, akses layanan.

5.3.3 Populasi & Sampling

  • Case–control : semua kasus kematian TB pada periode N; kontrol: pasien TB sembuh/selesai pada periode sama (matching umur/JK/faskes).
  • Cohort : semua TB Paru BTA+ baru pada tahun N, diikuti 12 bulan.

5.3.4 Potensi Bias & Mitigasi

  • Selection bias : definisi kontrol ketat; matching; inklusi berurutan.
  • Information bias : standardisasi definisi outcome/paparan, validasi rekam medis.
  • Confounding : matching/stratifikasi/regresi multivariat; pada cohort gunakan Cox/Poisson dengan kovariat.

6 Daftar Pustaka

Bates, M., Marais, B. J., Zumla, A., & Mwaba, P. (2015). Tuberculosis comorbidity with communicable and noncommunicable diseases. Cold Spring Harbor Perspectives in Medicine, 5(11), a017889. https://doi.org/10.1101/cshperspect.a017889

Boogaard, J., Kibiki, G. S., Kisanga, E. R., Boeree, M. J., & Aarnoutse, R. E. (2016). New drugs against tuberculosis: Problems, progress, and evaluation of agents in clinical development. Antimicrobial Agents and Chemotherapy, 53(3), 849–862. https://doi.org/10.1128/AAC.01023-08

Dinas Kesehatan Kota Bandung. (2025, January 8). Profil Kesehatan Kota Bandung 2023. https://dinkes.bandung.go.id/download/profil-kesehatan-kota-bandung-2023/

Harries, A. D., Kumar, A. M. V., Satyanarayana, S., Lin, Y., Zachariah, R., & Lönnroth, K. (2016). Addressing diabetes mellitus as part of the strategy for ending TB. Transactions of the Royal Society of Tropical Medicine and Hygiene, 110(3), 173–179. https://doi.org/10.1093/trstmh/trv111

Islam, M. A., Sultana, T., Rahman, M., & Paul, S. K. (2020). Socio-environmental factors associated with tuberculosis in developing countries: A systematic review. BMC Public Health, 20(1), 1–10. https://doi.org/10.1186/s12889-020-09468-4

Kementerian Kesehatan Republik Indonesia. (2025, March 25). Aksi nyata percepatan eliminasi tuberkulosis di Indonesia. https://kemkes.go.id/id/47510

Kementerian Kesehatan Republik Indonesia. (2025, April 11). Gerakan Indonesia akhiri TBC. https://kemkes.go.id/id/indonesias-movement-to-end-tb

Lönnroth, K., Migliori, G. B., Abubakar, I., D’Ambrosio, L., & de Vries, G. (2020). Towards tuberculosis elimination: An action framework for low-incidence countries. European Respiratory Journal, 55(1), 1900879. https://doi.org/10.1183/13993003.00879-2019

Morsy, A. M., Hasan, M. H., & Abu Elella, M. H. (2022). Predictors of mortality among tuberculosis patients under DOTS strategy in Upper Egypt. Journal of Epidemiology and Global Health, 12(2), 101–110. https://doi.org/10.1007/s44197-021-00054-8

Pai, M., Behr, M. A., Dowdy, D., Dheda, K., Divangahi, M., Boehme, C. C., Ginsberg, A., Swaminathan, S., Spigelman, M., Getahun, H., & Menzies, D. (2016). Tuberculosis. Nature Reviews Disease Primers, 2, 16076. https://doi.org/10.1038/nrdp.2016.76

Pemerintah Provinsi Jawa Barat. (2024, February 21). Temuan kasus tuberkulosis Jabar selalu 100 persen dalam dua tahun terakhir. https://www.jabarprov.go.id/berita/temuan-kasus-tuberkulosis-jabar-selalu-100-persen-dalam-dua-tahun-terakhir-12478

Perhimpunan Dokter Paru Indonesia & Kementerian Kesehatan RI. (2021). Pedoman Nasional Pelayanan Kedokteran (PNPK) Tuberkulosis (ed. revisi). https://www.tbindonesia.or.id/wp-content/uploads/2021/06/UMUM_PNPK_revisi.pdf

Pradipta, I. S., Forsman, L. D., Bruchfeld, J., Hak, E., & Alffenaar, J. W. C. (2020). Risk factors of multidrug-resistant tuberculosis: A global systematic review and meta-analysis. Journal of Infection, 81(5), 873–885. https://doi.org/10.1016/j.jinf.2020.09.006

Raviglione, M., & Sulis, G. (2016). Tuberculosis 2015: Burden, challenges, and strategy for control and elimination. Infectious Disease Reports, 8(2), 6570. https://doi.org/10.4081/idr.2016.6570

Soetedjo, N. N. M., Riyanto, B., & Susanto, N. H. (2021). Glycemic control and mortality in tuberculosis patients with diabetes mellitus: A systematic review and meta-analysis. PLoS ONE, 16(4), e0250916. https://doi.org/10.1371/journal.pone.0250916

Tanimura, T., Jaramillo, E., Weil, D., Raviglione, M., & Lönnroth, K. (2014). Financial burden for tuberculosis patients in low- and middle-income countries: A systematic review. European Respiratory Journal, 43(6), 1763–1775. https://doi.org/10.1183/09031936.00193413

Wang, Q., Ma, A., Han, X., Zhao, S., Cai, J., & Ma, Y. (2021). Factors influencing tuberculosis treatment outcomes among patients in Shandong, China: A retrospective cohort study. BMC Public Health, 21(1), 1582. https://doi.org/10.1186/s12889-021-11645-4

World Health Organization. (2024, October 29). Tuberculosis resurges as top infectious disease killer. https://www.who.int/news/item/29-10-2024-tuberculosis-resurges-as-top-infectious-disease-killer

World Health Organization. (2024). Global tuberculosis report 2024. https://www.who.int/teams/global-programme-on-tuberculosis-and-lung-health/tb-reports/global-tuberculosis-report-2024

World Health Organization. (2025, March 14). Tuberculosis – Key facts. https://www.who.int/news-room/fact-sheets/detail/tuberculosis