Logo UNPAD

ANALISIS EPIDEMIOLOGIS KASUS TUBERKULOSIS
DI PROVINSI JAWA BARAT

Ditujukan untuk memenuhi ujian Mata Kuliah Epidemiologi
Dosen Pengampu:
Dr. I Gede Nyoman Mindra Jaya, M.Si.
Disusun Oleh:
Reira Falisha Adrevi (140610230002)
Shahnaz Putri Dendawijaya (140610230017)
Mona Yola Lumban Raja (140610230081)
PROGRAM STUDI STATISTIKA
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
UNIVERSITAS PADJADJARAN
JATINANGOR
2025

BAB 1.PENDAHULUAN

1.1 Latar Belakang

Pada tahun 2024, Indonesia telah mencatatkan sebanyak 889 ribu notifikasi kasus tuberkulosis (TBC), namun pencapaian inisiasi pengobatan TBC sensitif obat (SO) baru mencapai 81%, masih di bawah target nasional sebesar 90%. Sedangkan, keberhasilan pengobatan TBC resisten obat (RO) baru mencapai 58%, jauh dari target 80%. Kondisi ini menegaskan bahwa penanggulangan TBC di Indonesia masih menghadapi berbagai kendala serius.

Tuberkulosis adalah penyakit menular yang disebabkan oleh bakteri Mycobacterium tuberculosis, yang menyebar melalui percikan udara dari batuk atau bersin (droplet). Indonesia menduduki peringkat kedua dunia setelah India dalam hal jumlah kasus TBC, dengan estimasi lebih dari satu juta kasus dan 125 ribu kematian per tahunnya. Provinsi Jawa Barat yang dihuni lebih dari 50 juta jiwa secara konsisten mencatat jumlah kasus TBC tertinggi di Indonesia, yakni diperkirakan mencapai kebih dari 243 ribu kasus pada tahun 2024 sehingga penelitian ini hanya akan berfokus pada kabupaten dan kota di Provinsi Jawa Barat.

Faktor epidemiologis seperti kepadatan penduduk yang tinggi, persentase rumah tidak layak huni, dan tingginya persentase penduduk miskin, dapat menjadi faktor kunci dalam penularan TBC. Oleh karena itu, dapat diteliti lebih dalam untuk melihat bagaimana penyebaran penyakit TBC dan strategi yang dapat dilakukan dalam usaha pengendalian TBC di Provinsi Jawa Barat.

1.2 Rumusan Masalah

Adapun rumusan masalah yang akan diteliti adalah :

  1. Apa saja faktor agent-host-environment yang relevan terhadap kasus TBC dan bagaimana hubungan faktor risiko terhadap penyakit tersebut?

  2. Bagaimana penyebaran kasus TBC di setiap kabupaten/kota di Jawa Barat tahun 2024 berdasarkan analisis epidemiologis?

  3. Bagaimana simulasi desain studi epidemiologi untuk kasus TBC di Jawa Barat?

  4. Apa implikasi hasil penelitian terhadap kebijakan pengendalian TBC yang berfokus pada intervensi epidemiologis lokal?

1.3 Tujuan

Guna menjawab rumusan masalah yang ada, penelitian ini bertujuan untuk :

  1. Mengidentifikasi faktor agent-host-environment yang relevan terhadap kasus TBC dan menggambarkan hubungan faktor risiko terhadap penyakit tersebut.

  2. Menganalisis pola sebaran kasus TBC di Jawa Barat tahun 2024 menggunakan pendekatan epidemiologis.

  3. Merancang desain simulatif studi epidemiologi kasus TBC di Jawa Barat

  4. Memberikan rekomendasi kebijakan pengendalian TBC di Jawa Barat.

1.4 Batasan Penelitian

  1. Ruang lingkup wilayah dibatasi pada seluruh kabupaten dan kota di Provinsi Jawa Barat, sehingga hasil penelitian tidak dapat digeneralisasikan untuk provinsi lain di Indonesia.

  2. Periode penelitian dibatasi pada tahun 2024, sehingga tidak mencakup tren kejadian TBC dari tahun-tahun sebelumnya maupun proyeksi tahun-tahun berikutnya.

  3. Analisis yang dilakukan hanya mencakup tiga pendekatan, yaitu:

  • Analisis deskriptif untuk menggambarkan karakteristik dan distribusi kasus TBC,

  • Analisis korelasi untuk mengetahui hubungan antara faktor-faktor yang diduga berpengaruh terhadap jumlah kasus TBC, dan

  • Analisis prevalensi untuk mengukur tingkat penyebaran TBC di setiap wilayah kabupaten/kota, artinya penelitian ini tidak menilai hubungan sebab-akibat (kausalitas) antarvariabel.

  1. Variabel yang digunakan dibatasi pada indikator kesehatan, sosial, dan ekonomi tertentu yang tersedia dalam data resmi. Penelitian ini tidak membahas aspek klinis, perilaku individu, maupun efektivitas intervensi medis terhadap TBC, melainkan fokus pada analisis statistik berdasarkan data agregat wilayah.

BAB 2 : TINJAUAN PUSTAKA

2.1 Tuberkulosis

Tuberkulosis (TBC) merupakan penyakit menular yang disebabkan oleh infeksi bakteri Mycobacterium tuberculosis. Bakteri ini menyerang jaringan paru-paru dan menyebabkan gejala berupa batuk kronis, demam, penurunan berat badan, dan sesak napas. Penularan TBC terjadi melalui udara, terutama saat penderita TBC aktif batuk, bersin, atau berbicara, sehingga droplet yang mengandung bakteri dapat terhirup oleh orang lain.

Penyakit ini menjadi masalah kesehatan masyarakat yang serius, terutama di negara berkembang, termasuk Indonesia. Faktor-faktor seperti kepadatan penduduk tinggi, kondisi rumah yang tidak layak, sanitasi buruk, serta tingkat sosial ekonomi rendah dapat memperburuk penyebaran penyakit ini.

2.2 Triad Epidemiologi

Sebuah model yang digunakan untuk memahami penularan penyakit menular melalui tiga komponen utama: agent, host, dan environment.

Agent : Agen penyebab TBC adalah Mycobacterium tuberculosis, yaitu bakteri berbentuk batang yang tahan asam dan dapat bertahan lama di lingkungan lembab dengan ventilasi buruk. Agen ini dapat bertahan di udara selama beberapa jam dalam bentuk droplet nuklei.

Host : Inang meliputi individu dengan sistem imun lemah, seperti penderita HIV/AIDS, anak-anak, lansia, atau mereka dengan status gizi rendah. Faktor perilaku seperti merokok, konsumsi alkohol, dan kepatuhan pengobatan yang buruk juga meningkatkan risiko terinfeksi.

Environment : Kondisi lingkungan berperan penting dalam mempercepat penyebaran TBC, terutama di daerah dengan kepadatan penduduk tinggi, ventilasi rumah yang tidak memadai, kondisi rumah tidak layak huni, sanitasi buruk, dan akses layanan kesehatan terbatas.

2.3 Ukuran Epidemiologi

Prevalensi

Proporsi individu yang memiliki penyakit tertentu (kasus lama + baru) pada suatu titik waktu (point prevalence) atau periode tertentu (period prevalence). Menggambarkan beban penyakit pada populasi.

\[ Prevalensi = \frac{\text{Jumlah kasus pada waktu tertentu}}{\text{Total populasi}} \times 100\% \]

2.4 Spatial Dependence

Spatial dependence atau ketergantungan spasial adalah kondisi ketika nilai suatu variabel di suatu lokasi memiliki keterkaitan atau pengaruh terhadap nilai variabel di lokasi lain yang berdekatan. Dalam konteks epidemiologi TBC, hal ini berarti wilayah dengan angka kasus tinggi dapat memengaruhi wilayah yang berdekatan. Bisa terjadi karena mobilitas masyarakatnya atau kesamaan karakteristik lingkungannya.

Ketergantungan spasial dapat diuji melalui Moran’s I, Geary’s C, atau Local Indicators of Spatial Association (LISA). Apabila pengujian yang dilakukan menghasilkan autokorelasi spasial positif, maka kasus TBC dikatakan cenderung mengelompok (clustered) di wilayah tertentu, bukan menyebar acak. Informasi ini penting untuk digunakan dalam rancangan pengendalian TBC melalui intervensi berbasis wilayah (spatial targeting).

2.4.1 Pengujian Ketergantungan Spasial

Ketergantungan spasial dapat diuji melalui beberapa metode statistik (Anselin, 1995):

A. Moran’s I (Global) - Mengukur autokorelasi spasial secara keseluruhan - Nilai: -1 (dispersi sempurna) hingga +1 (klaster sempurna) - I > 0: autokorelasi positif (pengelompokan) - I < 0: autokorelasi negatif (dispersi) - I ≈ 0: distribusi acak

B. Geary’s C - Alternatif dari Moran’s I - Nilai: 0 (klaster sempurna) hingga 2 (dispersi sempurna)

C. Local Indicators of Spatial Association (LISA) - Mengidentifikasi klaster lokal - Mendeteksi hotspot (High-High) dan coldspot (Low-Low)

Interpretasi Hasil: Apabila pengujian menghasilkan autokorelasi spasial positif yang signifikan, maka kasus TBC dikatakan cenderung mengelompok (clustered) di wilayah tertentu, bukan menyebar acak. Informasi ini penting untuk merancang pengendalian TBC melalui intervensi berbasis wilayah (spatial targeting) (Pfeiffer et al., 2008).


2.5 Matriks Bobot Spasial

Matriks bobot spasial (spatial weights matrix, W) digunakan untuk menggambarkan hubungan kedekatan antar wilayah dalam analisis spasial (Bivand et al., 2013). Matriks ini mengkuantifikasi seberapa kuat pengaruh suatu wilayah terhadap wilayah lainnya.

2.5.1 Jenis Matriks Bobot Spasial

A. Contiguity-based Weights (Berdasarkan Batas Wilayah) - Rook contiguity: Wilayah dianggap tetangga jika berbagi sisi batas - Queen contiguity: Wilayah dianggap tetangga jika berbagi sisi atau titik sudut - Bishop contiguity: Wilayah dianggap tetangga jika berbagi titik sudut saja

B. Distance-based Weights (Berdasarkan Jarak) - Menggunakan jarak Euclidean antar centroid wilayah - Bobot menurun seiring jarak meningkat - Formula umum: \(w_{ij} = \frac{1}{d_{ij}^{\alpha}}\) (α biasanya = 2)

C. K-Nearest Neighbors (KNN) - Setiap wilayah memiliki k tetangga terdekat - Mengatasi masalah wilayah terpencil tanpa tetangga

Dalam konteks TBC di kabupaten/kota Jawa Barat, penelitian ini menggunakan queen contiguity karena: - Lebih mencerminkan interaksi sosial-ekonomi antar wilayah - Memperhitungkan wilayah yang hanya bersinggungan di sudut - Sesuai dengan pola mobilitas penduduk Jawa Barat


2.6 Spatial Econometrics (Ekonometrika Spasial)

Spatial econometrics merupakan cabang dari ekonometrika yang mengakomodasi pengaruh spasial dalam model statistik (Anselin, 1988). Dalam analisis penyakit seperti TBC, pendekatan ini digunakan untuk memahami apakah penyebaran penyakit di satu wilayah memiliki hubungan dengan wilayah lain (spatial spillover effect).

2.6.1 Model Ekonometrika Spasial

A. Spatial Lag Model (SLM) \[y = \rho Wy + X\beta + \varepsilon\]

  • Memodelkan pengaruh langsung dari variabel dependen di wilayah tetangga
  • ρ (rho): koefisien autoregresif spasial
  • Digunakan ketika ada spatial diffusion

B. Spatial Error Model (SEM) \[y = X\beta + \lambda W\varepsilon + \xi\]

  • Memodelkan autokorelasi pada error term
  • λ (lambda): koefisien autokorelasi error spasial
  • Digunakan ketika ada spatial heterogeneity

C. Spatial Durbin Model (SDM) \[y = \rho Wy + X\beta + WX\theta + \varepsilon\]

  • Kombinasi SLM dan SEM
  • Memodelkan pengaruh langsung dan tidak langsung
  • Paling komprehensif tapi kompleks

Catatan: Dalam penelitian ini, analisis spatial econometrics tidak dilakukan karena fokus pada analisis deskriptif dan eksplorasi pola spasial. Model ekonometrika spasial dapat menjadi penelitian lanjutan untuk memahami hubungan kausal antara faktor risiko dan prevalensi TBC dengan mempertimbangkan efek spasial.


2.4 Matriks Bobot Spasial

Matriks bobot spasial (W) digunakan untuk menggambarkan hubungan kedekatan antarwilayah. Matriks ini juga dapat menunjukkan seberapa kuat pengaruh antarwilayah tersebut. Beberapa metode umum dalam pembentukan matriks bobot spasial antara lain: Contiguity-based weights (berdasarkan batas wilayah), Distance-based weights (berdasarkan jarak), dan K-nearest neighbors (KNN) yang menganggap setiap wilayah bertetangga dengan k wilayah terdekatnya.

Dalam konteks TBC di kabupaten/kota Jawa Barat, matriks bobot spasial penting untuk mengidentifikasi pola penyebaran kasus antarwilayah.

2.5 Spatial Econometrics

Spatial econometrics merupakan cabang dari ekonometrika yang mengakomodasi pengaruh spasial dalam model statistik. Dalam analisis penyakit seperti TBC, pendekatan ini digunakan untuk memahami apakah penyebaran penyakit di satu wilayah memiliki hubungan dengan wilayah lain (spatial spillover effect). Model-model umum dalam ekonometrika spasial meliputi: Spatial Lag Model (SLM), Spatial Error Model (SEM), dan Spatial Durbin Model (SDM).

Pengaplikasian model ini dapat membantu memahami pola spasial penyebaran TBC secara lebih mendalam dan memberikan dasar pengetahuan dalam usulan pembentukan kebijakan kesehatan yang lebih tepat sasaran di kabupaten/kota Provinsi Jawa Barat.

2.6 Faktor Risiko

1. Kepadatan Penduduk : Dapat meningkatkan risiko transmisi droplet.

2. Kemiskinan : Berkaitan dengan gizi buruk dan akses kesehatan yang terbatas.

3. Kondisi Tempat Tinggal : Kondisi rumah minim ventilasi meningkatkan risiko penularan.

4. Status Sosial-Ekonomi : Status pendidikan dan penghasilan rendah.

Berikut adalah diagram faktor risiko terhadap penyakit Tuberkulosis :

## Warning: package 'DiagrammeR' was built under R version 4.3.3

2.7 Desain Studi Epidemiologi

Studi simulatif dilakukan menggunakan desain cross-sectional. Desain ini mengukur paparan dan outcome bersamaan, menggambarkan prevalensi suatu populasi, mengidentifikasi dengan jelas faktor yang berkaitan. Namun, desain ini terbatas dalam menentukan hubungan kausal temporal karena hanya dilakukan pada satu waktu.

BAB 3.METODOLOGI PENELITIAN

3.1 Desain Penelitian

Penelitian ini menggunakan desain studi ekologi dengan pendekatan deskriptif kuantitatif.
Data bersifat agregat, yaitu data per kabupaten/kota di Provinsi Jawa Barat yang menggambarkan hubungan antara faktor sosial ekonomi dan kepadatan penduduk dengan jumlah kasus Tuberkulosis (TBC).

3.2 Jenis dan Sumber Data

Penelitian ini menggunakan data sekunder yang diperoleh dari: - Badan Pusat Statistik (BPS) Provinsi Jawa Barat
- Dinas Kesehatan Provinsi Jawa Barat
- Publikasi resmi profil kesehatan dan kependudukan tahun terakhir.

Variabel yang digunakan:

Variabel Keterangan Jenis Data
Jumlah Penduduk Total populasi per kabupaten/kota Kuantitatif
Rumah Layak Huni (%) Persentase rumah tangga layak huni Kuantitatif
Persentase Penduduk Miskin (%) Proporsi penduduk miskin Kuantitatif
Jumlah Kasus TBC Kasus Tuberkulosis yang dilaporkan Kuantitatif
Kepadatan Penduduk (Jiwa/KM²) Jumlah jiwa per km² Kuantitatif

3.3 Ukuran Epidemiologi

Dalam penelitian ini digunakan dua jenis ukuran epidemiologi, yaitu ukuran frekuensi dan ukuran asosiasi, dengan rumus sebagai berikut:

3.3.1 Ukuran Frekuensi

  1. Prevalensi

    Menggambarkan proporsi individu yang menderita penyakit dalam suatu populasi pada waktu tertentu.

    Rumus: \[ \text{Prevalensi} = \frac{\text{Jumlah Kasus Lama + Baru}}{\text{Jumlah Penduduk}} \times 100\% \]

3.3.2 Ukuran Asosiasi

  1. Risk Ratio (Relative Risk, RR)

    Menggambarkan perbandingan risiko terjadinya penyakit antara kelompok terpapar dan tidak terpapar.

    Rumus: \[ RR = \frac{a/(a+b)}{c/(c+d)} \]

    Keterangan:

    • a = jumlah kasus pada kelompok terpapar
    • b = jumlah tidak sakit pada kelompok terpapar
    • c = jumlah kasus pada kelompok tidak terpapar
    • d = jumlah tidak sakit pada kelompok tidak terpapar

    Interpretasi:

    • RR = 1 → tidak ada perbedaan risiko
    • RR > 1 → paparan meningkatkan risiko
    • RR < 1 → paparan bersifat protektif
  2. Odds Ratio (OR)

    Menggambarkan peluang terjadinya penyakit pada kelompok terpapar dibandingkan dengan kelompok tidak terpapar.

    Rumus: \[ OR = \frac{a/b}{c/d} = \frac{ad}{bc} \]

    Interpretasi:

    • OR = 1 → tidak ada asosiasi
    • OR > 1 → paparan meningkatkan peluang sakit
    • OR < 1 → paparan bersifat protektif

BAB 4. HASIL DAN PEMBAHASAN

# Paket
library(readxl)
library(dplyr)
library(ggplot2)
library(sf)
library(tmap)
library(spdep)
library(knitr)

4.1 Statistik Deskriptif

Analisis deskriptif menggambarkan karakteristik jumlah penduduk, kepadatan, kemiskinan, dan kasus TBC per kabupaten/kota di Jawa Barat.

# data
data <- read_excel("C:\\Users\\reifa\\Downloads\\Shiny\\DataTBC.xlsx")

# ubah nama kolom
data <- data %>%
  rename(
    KABUPATEN_KOTA = "KABUPATEN/KOTA",
    Jumlah_Penduduk = "Jumlah Penduduk",
    Rumah_Layak_Huni = "Rumah Layak Huni",
    Persentase_Penduduk_Miskin = "Persentase Penduduk Miskin",
    Jumlah_Kasus_TBC = "Jumlah Kasus TBC",
    Kepadatan_Penduduk = "Kepadatan Penduduk (Jiwa/KM2)"
  )

# cek hasilnya
head(data)
## # A tibble: 6 × 6
##   KABUPATEN_KOTA        Jumlah_Penduduk Rumah_Layak_Huni Persentase_Penduduk_M…¹
##   <chr>                           <dbl>            <dbl>                   <dbl>
## 1 KABUPATEN BOGOR               5682300             46.7                    7.05
## 2 KABUPATEN SUKABUMI            2828020             32.8                    6.87
## 3 KABUPATEN CIANJUR             2584990             38.3                   10.1 
## 4 KABUPATEN BANDUNG             3753120             54.2                    6.19
## 5 KABUPATEN GARUT               2716950             34.6                    9.68
## 6 KABUPATEN TASIKMALAYA         1920920             37.6                   10.2 
## # ℹ abbreviated name: ¹​Persentase_Penduduk_Miskin
## # ℹ 2 more variables: Jumlah_Kasus_TBC <dbl>, Kepadatan_Penduduk <dbl>
# Validasi kolom

req_cols <- c("KABUPATEN_KOTA","Jumlah_Penduduk","Rumah_Layak_Huni",
"Persentase_Penduduk_Miskin","Jumlah_Kasus_TBC","Kepadatan_Penduduk")
stopifnot(all(req_cols %in% names(data)))

# Prevalensi TBC per 100.000

data <- data %>%
mutate(Prevalensi_TBC_per100k = (Jumlah_Kasus_TBC / Jumlah_Penduduk) * 1e5)

4.1.1 Tabel Ringkasan

library(readxl)
library(dplyr)
library(knitr)
library(kableExtra)

# Baca data
data_tbc <- read_excel("C:\\Users\\reifa\\Downloads\\Shiny\\DataTBC.xlsx")

data_tbc <- data_tbc %>%
  rename(
    Kabupaten_Kota = "KABUPATEN/KOTA",
    Jumlah_Penduduk = "Jumlah Penduduk",
    Rumah_Layak_Huni = "Rumah Layak Huni",
    Persen_Penduduk_Miskin = "Persentase Penduduk Miskin",
    Jumlah_Kasus_TBC = "Jumlah Kasus TBC",
    Kepadatan_Penduduk = "Kepadatan Penduduk (Jiwa/KM2)"
  )

# Hitung prevalensi per 100.000 penduduk
data_tbc <- data_tbc %>%
  mutate(
    Prevalensi_per_100k = (Jumlah_Kasus_TBC / Jumlah_Penduduk) * 100000,
    Tipe_Wilayah = ifelse(grepl("KOTA", Kabupaten_Kota, ignore.case = TRUE), "Kota", "Kabupaten")
  )

# Tabel hasil prevalensi
tabel_prev <- data_tbc %>%
  select(Kabupaten_Kota, Tipe_Wilayah, Jumlah_Penduduk, Jumlah_Kasus_TBC, Prevalensi_per_100k)

kable(tabel_prev,
      caption = "Tabel 2. Prevalensi Kasus TBC per 100.000 Penduduk di Provinsi Jawa Barat (2024)",
      digits = 2,
      format.args = list(big.mark = ",")) %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Tabel 2. Prevalensi Kasus TBC per 100.000 Penduduk di Provinsi Jawa Barat (2024)
Kabupaten_Kota Tipe_Wilayah Jumlah_Penduduk Jumlah_Kasus_TBC Prevalensi_per_100k
KABUPATEN BOGOR Kabupaten 5,682,300 29,110 512.29
KABUPATEN SUKABUMI Kabupaten 2,828,020 12,411 438.86
KABUPATEN CIANJUR Kabupaten 2,584,990 12,197 471.84
KABUPATEN BANDUNG Kabupaten 3,753,120 14,012 373.34
KABUPATEN GARUT Kabupaten 2,716,950 9,516 350.25
KABUPATEN TASIKMALAYA Kabupaten 1,920,920 4,881 254.10
KABUPATEN CIAMIS Kabupaten 1,259,230 3,477 276.12
KABUPATEN KUNINGAN Kabupaten 1,213,930 4,045 333.22
KABUPATEN CIREBON Kabupaten 2,387,960 9,587 401.47
KABUPATEN MAJALENGKA Kabupaten 1,352,540 4,517 333.96
KABUPATEN SUMEDANG Kabupaten 1,187,130 3,930 331.05
KABUPATEN INDRAMAYU Kabupaten 1,914,040 6,092 318.28
KABUPATEN SUBANG Kabupaten 1,663,160 6,321 380.06
KABUPATEN PURWAKARTA Kabupaten 1,050,340 4,687 446.24
KABUPATEN KARAWANG Kabupaten 2,554,380 13,474 527.49
KABUPATEN BEKASI Kabupaten 3,273,870 15,458 472.16
KABUPATEN BANDUNG BARAT Kabupaten 1,884,190 4,569 242.49
KABUPATEN PANGANDARAN Kabupaten 434,100 968 222.99
KOTA BOGOR Kota 1,078,350 11,418 1,058.84
KOTA SUKABUMI Kota 365,740 3,477 950.68
KOTA BANDUNG Kota 2,528,160 18,627 736.78
KOTA CIREBON Kota 344,850 4,122 1,195.30
KOTA BEKASI Kota 2,644,060 13,640 515.87
KOTA DEPOK Kota 2,163,640 8,422 389.25
KOTA CIMAHI Kota 598,700 4,513 753.80
KOTA TASIKMALAYA Kota 750,730 4,693 625.12
KOTA BANJAR Kota 209,790 1,519 724.06

4.2 Sepuluh Wilayah dengan Angka Prevalensi TBC Tertinggi

Berikut ini disajikan 10 kabupaten/kota dengan angka prevalensi TBC tertinggi di Provinsi Jawa Barat tahun 2024.
Nilai insidensi dihitung sebagai pendekatan dengan membandingkan jumlah kasus terhadap total penduduk, karena data yang digunakan bersifat agregat tahunan.

# 10 wilayah dengan prevalensi tertinggi
top_prevalensi <- data_tbc %>%
  arrange(desc(Prevalensi_per_100k)) %>%
  select(Kabupaten_Kota, Jumlah_Penduduk, Jumlah_Kasus_TBC,
         Prevalensi_per_100k, Kepadatan_Penduduk) %>%
  head(10)

kable(top_prevalensi,
      digits = 2,
      col.names = c("Wilayah", "Populasi", "Kasus TBC",
                    "Prevalensi/100k", "Kepadatan"),
      caption = "Tabel 3. 10 Wilayah dengan Angka Prevalensi TBC Tertinggi",
      format.args = list(big.mark = ",")) %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed")) %>%
  row_spec(1:3, bold = TRUE, background = "#ffcccc")
Tabel 3. 10 Wilayah dengan Angka Prevalensi TBC Tertinggi
Wilayah Populasi Kasus TBC Prevalensi/100k Kepadatan
KOTA CIREBON 344,850 4,122 1,195.30 9,036.00
KOTA BOGOR 1,078,350 11,418 1,058.84 10,273.00
KOTA SUKABUMI 365,740 3,477 950.68 7.66
KOTA CIMAHI 598,700 4,513 753.80 13,716.00
KOTA BANDUNG 2,528,160 18,627 736.78 15,557.00
KOTA BANJAR 209,790 1,519 724.06 1,598.00
KOTA TASIKMALAYA 750,730 4,693 625.12 4,191.00
KABUPATEN KARAWANG 2,554,380 13,474 527.49 1,365.00
KOTA BEKASI 2,644,060 13,640 515.87 12,074.00
KABUPATEN BOGOR 5,682,300 29,110 512.29 1,942.00

4.4 Analisis Korelasi Faktor Risiko dengan Prevalensi TBC

4.4.1 Uji Normalitas Data

Sebelum melakukan uji korelasi, perlu dilakukan uji normalitas untuk menentukan jenis uji korelasi yang tepat (Pearson untuk data normal, Spearman untuk data tidak normal).

library(nortest)

# Uji normalitas menggunakan Shapiro-Wilk
normalitas <- data.frame(
  Variabel = c("Prevalensi TBC", "Kepadatan Penduduk", "% Kemiskinan", "% Rumah Layak Huni"),
  Statistik = NA,
  P_value = NA,
  Distribusi = NA
)

# Test Prevalensi
test_prev <- shapiro.test(data_tbc$Prevalensi_per_100k)
normalitas[1, 2:3] <- c(test_prev$statistic, test_prev$p.value)

# Test Kepadatan
test_kepadatan <- shapiro.test(data_tbc$Kepadatan_Penduduk)
normalitas[2, 2:3] <- c(test_kepadatan$statistic, test_kepadatan$p.value)

# Test Kemiskinan
test_miskin <- shapiro.test(data_tbc$Persen_Penduduk_Miskin)
normalitas[3, 2:3] <- c(test_miskin$statistic, test_miskin$p.value)

# Test Rumah Layak Huni
test_rumah <- shapiro.test(data_tbc$Rumah_Layak_Huni)
normalitas[4, 2:3] <- c(test_rumah$statistic, test_rumah$p.value)

# Interpretasi
normalitas$Distribusi <- ifelse(normalitas$P_value > 0.05, "Normal", "Tidak Normal")

kable(normalitas,
      digits = 4,
      caption = "Tabel 5. Hasil Uji Normalitas Shapiro-Wilk",
      col.names = c("Variabel", "W Statistik", "P-value", "Distribusi")) %>%
  kable_styling(bootstrap_options = c("striped", "hover")) %>%
  row_spec(which(normalitas$P_value < 0.05), background = "#fff3cd")
Tabel 5. Hasil Uji Normalitas Shapiro-Wilk
Variabel W Statistik P-value Distribusi
Prevalensi TBC 0.8564 0.0015 Tidak Normal
Kepadatan Penduduk 0.7058 0.0000 Tidak Normal
% Kemiskinan 0.9612 0.3938 Normal
% Rumah Layak Huni 0.9336 0.0845 Normal
cat("\n**Interpretasi:**\n")
## 
## **Interpretasi:**
cat("- P-value < 0.05 menunjukkan data tidak berdistribusi normal\n")
## - P-value < 0.05 menunjukkan data tidak berdistribusi normal
cat("- Karena ada variabel yang tidak normal, akan digunakan **uji korelasi Spearman**\n\n")
## - Karena ada variabel yang tidak normal, akan digunakan **uji korelasi Spearman**

4.4.3 Visualisasi Hubungan

library(ggplot2)
library(gridExtra)
## Warning: package 'gridExtra' was built under R version 4.3.3
## 
## Attaching package: 'gridExtra'
## The following object is masked from 'package:dplyr':
## 
##     combine
# 1. Scatter plot Kepadatan vs Prevalensi
p1 <- ggplot(data_tbc, aes(x = Kepadatan_Penduduk, y = Prevalensi_per_100k)) +
  geom_point(aes(color = Tipe_Wilayah), size = 3, alpha = 0.7) +
  geom_smooth(method = "lm", se = TRUE, color = "darkblue", linetype = "dashed") +
  scale_color_manual(values = c("Kabupaten" = "#E63946", "Kota" = "#457B9D")) +
  labs(title = "Hubungan Kepadatan Penduduk dengan Prevalensi TBC",
       x = "Kepadatan Penduduk (Jiwa/km²)",
       y = "Prevalensi per 100.000 penduduk",
       color = "Tipe Wilayah") +
  theme_minimal() +
  theme(legend.position = "bottom",
        plot.title = element_text(hjust = 0.5, face = "bold"))

# 2. Scatter plot Kemiskinan vs Prevalensi
p2 <- ggplot(data_tbc, aes(x = Persen_Penduduk_Miskin, y = Prevalensi_per_100k)) +
  geom_point(aes(color = Tipe_Wilayah), size = 3, alpha = 0.7) +
  geom_smooth(method = "lm", se = TRUE, color = "darkred", linetype = "dashed") +
  scale_color_manual(values = c("Kabupaten" = "#E63946", "Kota" = "#457B9D")) +
  labs(title = "Hubungan % Penduduk Miskin dengan Prevalensi TBC",
       x = "Persentase Penduduk Miskin (%)",
       y = "Prevalensi per 100.000 penduduk",
       color = "Tipe Wilayah") +
  theme_minimal() +
  theme(legend.position = "bottom",
        plot.title = element_text(hjust = 0.5, face = "bold"))

# 3. Scatter plot Rumah Layak Huni vs Prevalensi
p3 <- ggplot(data_tbc, aes(x = Rumah_Layak_Huni, y = Prevalensi_per_100k)) +
  geom_point(aes(color = Tipe_Wilayah), size = 3, alpha = 0.7) +
  geom_smooth(method = "lm", se = TRUE, color = "darkgreen", linetype = "dashed") +
  scale_color_manual(values = c("Kabupaten" = "#E63946", "Kota" = "#457B9D")) +
  labs(title = "Hubungan % Rumah Layak Huni dengan Prevalensi TBC",
       x = "Persentase Rumah Layak Huni (%)",
       y = "Prevalensi per 100.000 penduduk",
       color = "Tipe Wilayah") +
  theme_minimal() +
  theme(legend.position = "bottom",
        plot.title = element_text(hjust = 0.5, face = "bold"))

# Tampilkan semua plot
grid.arrange(p1, p2, p3, ncol = 1)
## `geom_smooth()` using formula = 'y ~ x'
## `geom_smooth()` using formula = 'y ~ x'
## `geom_smooth()` using formula = 'y ~ x'

4.5 Analisis Spasial TBC

Analisis spasial merupakan pendekatan penting dalam epidemiologi untuk memahami pola geografis penyebaran penyakit. Dalam konteks tuberkulosis (TBC), analisis spasial membantu mengidentifikasi area-area dengan risiko tinggi (hotspot), mendeteksi pola pengelompokan kasus (clustering), dan memahami hubungan spasial antara prevalensi TBC dengan faktor-faktor risiko lingkungan dan sosial ekonomi.

Analisis spasial yang dilakukan dalam penelitian ini mencakup beberapa metode statistik spasial yang saling melengkapi.

Persiapan Data dan Library

library(readxl)
library(dplyr)
library(sf)
library(tmap)
library(spdep)
library(ggplot2)
library(knitr)
library(kableExtra)
library(viridis)
library(RColorBrewer)

# Baca data TBC
data_tbc <- read_excel("C:\\Users\\reifa\\Downloads\\Shiny\\DataTBC.xlsx")

# Sesuaikan nama kolom
data_tbc <- data_tbc %>%
  rename(
    Kabupaten_Kota = "KABUPATEN/KOTA",
    Jumlah_Penduduk = "Jumlah Penduduk",
    Rumah_Layak_Huni = "Rumah Layak Huni",
    Persen_Penduduk_Miskin = "Persentase Penduduk Miskin",
    Jumlah_Kasus_TBC = "Jumlah Kasus TBC",
    Kepadatan_Penduduk = "Kepadatan Penduduk (Jiwa/KM2)"
  )

# Hitung prevalensi dan klasifikasi
data_tbc <- data_tbc %>%
  mutate(
    Prevalensi_per_100k = (Jumlah_Kasus_TBC / Jumlah_Penduduk) * 100000,
    Tipe_Wilayah = ifelse(grepl("KOTA", Kabupaten_Kota, ignore.case = TRUE), 
                          "Kota", "Kabupaten"),
    Kategori_Prevalensi = cut(Prevalensi_per_100k,
                              breaks = c(0, 500, 1000, 1500, Inf),
                              labels = c("Rendah", "Sedang", "Tinggi", "Sangat Tinggi"),
                              include.lowest = TRUE)
  )

# Baca shapefile Jawa Barat dari GADM
jabar_shp <- st_read("C:\\Users\\reifa\\Downloads\\Shiny\\gadm41_IDN_2.shp")
## Reading layer `gadm41_IDN_2' from data source 
##   `C:\Users\reifa\Downloads\Shiny\gadm41_IDN_2.shp' using driver `ESRI Shapefile'
## Simple feature collection with 502 features and 13 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: 95.00971 ymin: -11.00761 xmax: 141.0194 ymax: 6.076941
## Geodetic CRS:  WGS 84
# Filter hanya Jawa Barat
jabar_shp <- jabar_shp %>%
  filter(NAME_1 == "Jawa Barat")

# Lihat nama kabupaten/kota di shapefile
print("Nama wilayah di shapefile:")
## [1] "Nama wilayah di shapefile:"
print(unique(jabar_shp$NAME_2))
##  [1] "Bandung"          "Bandung Barat"    "Banjar"           "Bekasi"          
##  [5] "Bogor"            "Ciamis"           "Cianjur"          "Cimahi"          
##  [9] "Cirebon"          "Depok"            "Garut"            "Indramayu"       
## [13] "Karawang"         "Kota Bandung"     "Kota Bekasi"      "Kota Bogor"      
## [17] "Kota Cirebon"     "Kota Sukabumi"    "Kota Tasikmalaya" "Kuningan"        
## [21] "Majalengka"       "Purwakarta"       "Subang"           "Sukabumi"        
## [25] "Sumedang"         "Tasikmalaya"      "Waduk Cirata"

Harmonisasi Nama Wilayah

# Buat fungsi untuk mencocokkan nama
data_tbc <- data_tbc %>%
  mutate(
    Nama_Matching = case_when(
      # Kabupaten
      Kabupaten_Kota == "KABUPATEN BOGOR" ~ "Bogor",
      Kabupaten_Kota == "KABUPATEN SUKABUMI" ~ "Sukabumi",
      Kabupaten_Kota == "KABUPATEN CIANJUR" ~ "Cianjur",
      Kabupaten_Kota == "KABUPATEN BANDUNG" ~ "Bandung",
      Kabupaten_Kota == "KABUPATEN GARUT" ~ "Garut",
      Kabupaten_Kota == "KABUPATEN TASIKMALAYA" ~ "Tasikmalaya",
      Kabupaten_Kota == "KABUPATEN CIAMIS" ~ "Ciamis",
      Kabupaten_Kota == "KABUPATEN KUNINGAN" ~ "Kuningan",
      Kabupaten_Kota == "KABUPATEN CIREBON" ~ "Cirebon",
      Kabupaten_Kota == "KABUPATEN MAJALENGKA" ~ "Majalengka",
      Kabupaten_Kota == "KABUPATEN SUMEDANG" ~ "Sumedang",
      Kabupaten_Kota == "KABUPATEN INDRAMAYU" ~ "Indramayu",
      Kabupaten_Kota == "KABUPATEN SUBANG" ~ "Subang",
      Kabupaten_Kota == "KABUPATEN PURWAKARTA" ~ "Purwakarta",
      Kabupaten_Kota == "KABUPATEN KARAWANG" ~ "Karawang",
      Kabupaten_Kota == "KABUPATEN BEKASI" ~ "Bekasi",
      Kabupaten_Kota == "KABUPATEN BANDUNG BARAT" ~ "Bandung Barat",
      Kabupaten_Kota == "KABUPATEN PANGANDARAN" ~ "Pangandaran",
      # Kota
      Kabupaten_Kota == "KOTA BOGOR" ~ "Kota Bogor",
      Kabupaten_Kota == "KOTA SUKABUMI" ~ "Kota Sukabumi",
      Kabupaten_Kota == "KOTA BANDUNG" ~ "Kota Bandung",
      Kabupaten_Kota == "KOTA CIREBON" ~ "Kota Cirebon",
      Kabupaten_Kota == "KOTA BEKASI" ~ "Kota Bekasi",
      Kabupaten_Kota == "KOTA DEPOK" ~ "Kota Depok",
      Kabupaten_Kota == "KOTA CIMAHI" ~ "Kota Cimahi",
      Kabupaten_Kota == "KOTA TASIKMALAYA" ~ "Kota Tasikmalaya",
      Kabupaten_Kota == "KOTA BANJAR" ~ "Kota Banjar",
      TRUE ~ Kabupaten_Kota
    )
  )

# Gabungkan data dengan shapefile
jabar_data <- jabar_shp %>%
  left_join(data_tbc, by = c("NAME_2" = "Nama_Matching"))

# Cek data yang tidak cocok
missing_data <- jabar_data %>%
  filter(is.na(Prevalensi_per_100k)) %>%
  st_drop_geometry() %>%
  select(NAME_2)

if(nrow(missing_data) > 0) {
  cat("Wilayah yang tidak cocok:\n")
  print(missing_data)
}
## Wilayah yang tidak cocok:
##         NAME_2
## 1       Banjar
## 2       Cimahi
## 3        Depok
## 4 Waduk Cirata

Peta Tematik Prevalensi TBC

# Set tmap mode
tmap_mode("plot")

# Peta prevalensi TBC
peta1 <- tm_shape(jabar_data) +
  tm_fill("Prevalensi_per_100k",
          title = "Prevalensi\nper 100.000",
          palette = "YlOrRd",
          style = "jenks",
          n = 5,
          legend.hist = TRUE) +
  tm_borders(col = "white", lwd = 1) +
  tm_text("NAME_2", size = 0.5, col = "black", alpha = 0.7) +
  tm_layout(
    main.title = "Peta Prevalensi Kasus TBC per 100.000 Penduduk\nProvinsi Jawa Barat (2024)",
    main.title.size = 1.2,
    legend.outside = TRUE,
    legend.outside.position = "right",
    frame = FALSE
  ) +
  tm_compass(position = c("left", "bottom")) +
  tm_scale_bar(position = c("left", "bottom"))

print(peta1)

Peta Kategori Prevalensi

peta2 <- tm_shape(jabar_data) +
  tm_fill("Kategori_Prevalensi",
          title = "Kategori\nPrevalensi",
          palette = c("Rendah" = "#fee5d9", 
                      "Sedang" = "#fcae91",
                      "Tinggi" = "#fb6a4a", 
                      "Sangat Tinggi" = "#cb181d")) +
  tm_borders(col = "white", lwd = 1) +
  tm_text("NAME_2", size = 0.5, col = "black", alpha = 0.7) +
  tm_layout(
    main.title = "Peta Kategori Prevalensi TBC di Jawa Barat (2024)",
    main.title.size = 1.2,
    legend.outside = TRUE,
    legend.outside.position = "right",
    frame = FALSE
  ) +
  tm_compass(position = c("left", "bottom")) +
  tm_scale_bar(position = c("left", "bottom"))

print(peta2)

Analisis Autokorelasi Spasial (Moran’s I)

# Cek missing values
cat("Cek Missing Values:\n")
## Cek Missing Values:
cat("NA dalam Prevalensi:", sum(is.na(jabar_data$Prevalensi_per_100k)), "\n")
## NA dalam Prevalensi: 4
cat("NA dalam geometri:", sum(is.na(st_geometry(jabar_data))), "\n\n")
## NA dalam geometri: 0
# Filter data yang lengkap untuk analisis spasial
jabar_complete <- jabar_data %>%
  filter(!is.na(Prevalensi_per_100k) & 
         !is.na(Jumlah_Kasus_TBC) & 
         !is.na(Jumlah_Penduduk))

cat("Jumlah wilayah setelah filter:", nrow(jabar_complete), "\n")
## Jumlah wilayah setelah filter: 23
cat("Wilayah yang dikeluarkan:\n")
## Wilayah yang dikeluarkan:
missing_areas <- jabar_data %>%
  filter(is.na(Prevalensi_per_100k)) %>%
  st_drop_geometry() %>%
  select(NAME_2)
if(nrow(missing_areas) > 0) {
  print(missing_areas)
} else {
  cat("Tidak ada wilayah yang dikeluarkan\n")
}
##         NAME_2
## 1       Banjar
## 2       Cimahi
## 3        Depok
## 4 Waduk Cirata
# Buat matriks tetangga (queen contiguity)
nb <- poly2nb(jabar_complete, queen = TRUE)

# Cek wilayah tanpa tetangga
if(any(card(nb) == 0)) {
  cat("\nPeringatan: Ada wilayah tanpa tetangga:\n")
  no_neighbor <- which(card(nb) == 0)
  print(jabar_complete$NAME_2[no_neighbor])
}

# Konversi ke listw
lw <- nb2listw(nb, style = "W", zero.policy = TRUE)

# Hitung Moran's I
moran_test <- moran.test(jabar_complete$Prevalensi_per_100k, lw, zero.policy = TRUE)

# Tampilkan hasil dengan format yang lebih baik
cat("\n")
cat("╔═══════════════════════════════════════════════════════════╗\n")
## ╔═══════════════════════════════════════════════════════════╗
cat("║           UJI AUTOKORELASI SPASIAL (MORAN'S I)           ║\n")
## ║           UJI AUTOKORELASI SPASIAL (MORAN'S I)           ║
cat("╚═══════════════════════════════════════════════════════════╝\n\n")
## ╚═══════════════════════════════════════════════════════════╝
cat("Statistik Moran's I:\n")
## Statistik Moran's I:
cat("─────────────────────────────────────────────────────────────\n")
## ─────────────────────────────────────────────────────────────
cat(sprintf("Moran's I             : %7.4f\n", moran_test$estimate[1]))
## Moran's I             :  0.0333
cat(sprintf("Expected Value        : %7.4f\n", moran_test$estimate[2]))
## Expected Value        : -0.0455
cat(sprintf("Variance              : %7.6f\n", moran_test$estimate[3]))
## Variance              : 0.020390
cat(sprintf("Standard Deviate      : %7.4f\n", moran_test$statistic))
## Standard Deviate      :  0.5513
cat(sprintf("P-value               : %s\n", format.pval(moran_test$p.value, digits = 4)))
## P-value               : 0.2907
cat("─────────────────────────────────────────────────────────────\n\n")
## ─────────────────────────────────────────────────────────────
# Interpretasi
cat("INTERPRETASI:\n")
## INTERPRETASI:
cat("─────────────────────────────────────────────────────────────\n")
## ─────────────────────────────────────────────────────────────
if(moran_test$p.value < 0.001) {
  sig_level <- "sangat signifikan (p < 0.001)"
} else if(moran_test$p.value < 0.01) {
  sig_level <- "sangat signifikan (p < 0.01)"
} else if(moran_test$p.value < 0.05) {
  sig_level <- "signifikan (p < 0.05)"
} else {
  sig_level <- "tidak signifikan (p ≥ 0.05)"
}

if(moran_test$p.value < 0.05) {
  if(moran_test$estimate[1] > 0) {
    cat("✓ Terdapat autokorelasi spasial POSITIF yang", sig_level, "\n\n")
    cat("  Artinya:\n")
    cat("  • Wilayah dengan prevalensi TBC tinggi cenderung bertetangga\n")
    cat("    dengan wilayah prevalensi tinggi (clustering tinggi)\n")
    cat("  • Wilayah dengan prevalensi TBC rendah cenderung bertetangga\n")
    cat("    dengan wilayah prevalensi rendah (clustering rendah)\n")
    cat("  • Pola penyebaran TBC menunjukkan pengelompokan spasial\n")
    cat("  • Diperlukan intervensi berbasis klaster geografis\n")
  } else {
    cat("✓ Terdapat autokorelasi spasial NEGATIF yang", sig_level, "\n\n")
    cat("  Artinya:\n")
    cat("  • Wilayah dengan prevalensi tinggi cenderung bertetangga\n")
    cat("    dengan wilayah prevalensi rendah (pola dispersi)\n")
    cat("  • Pola penyebaran TBC bersifat heterogen secara spasial\n")
  }
} else {
  cat("✗ Tidak terdapat autokorelasi spasial yang signifikan\n\n")
  cat("  Artinya:\n")
  cat("  • Pola sebaran kasus TBC bersifat acak (random)\n")
  cat("  • Tidak ada pola pengelompokan atau dispersi yang jelas\n")
  cat("  • Prevalensi TBC di suatu wilayah tidak bergantung pada\n")
  cat("    prevalensi di wilayah tetangganya\n")
}
## ✗ Tidak terdapat autokorelasi spasial yang signifikan
## 
##   Artinya:
##   • Pola sebaran kasus TBC bersifat acak (random)
##   • Tidak ada pola pengelompokan atau dispersi yang jelas
##   • Prevalensi TBC di suatu wilayah tidak bergantung pada
##     prevalensi di wilayah tetangganya
cat("─────────────────────────────────────────────────────────────\n")
## ─────────────────────────────────────────────────────────────
# Simpan hasil untuk digunakan di chunk berikutnya
moran_result <- list(
  statistic = moran_test$estimate[1],
  p_value = moran_test$p.value,
  significant = moran_test$p.value < 0.05
)

Moran Scatterplot

# Buat Moran Scatterplot
par(mar = c(5, 5, 4, 2))
moran_plot <- moran.plot(jabar_complete$Prevalensi_per_100k, lw, 
                         zero.policy = TRUE,
                         labels = jabar_complete$NAME_2,
                         xlab = "Prevalensi TBC (standardized)",
                         ylab = "Spatially Lagged Prevalensi TBC (standardized)",
                         main = "Moran Scatterplot: Autokorelasi Spasial Prevalensi TBC\ndi Jawa Barat (2024)",
                         cex.main = 1.2,
                         cex.lab = 1.1)

# Tambahkan legend
legend("topleft", 
       legend = c("High-High", "Low-High", "Low-Low", "High-Low"),
       pch = 19,
       col = c("red", "pink", "lightblue", "lightgreen"),
       title = "Kuadran",
       bty = "n")

# Tambahkan informasi Moran's I
mtext(sprintf("Moran's I = %.4f, p-value = %s", 
              moran_result$statistic, 
              format.pval(moran_result$p_value, digits = 3)),
      side = 3, line = 0.5, cex = 0.9, col = "blue")

Analisis LISA (Local Indicators of Spatial Association)

# Hitung Local Moran's I
local_moran <- localmoran(jabar_complete$Prevalensi_per_100k, lw, zero.policy = TRUE)

# Tambahkan ke data
jabar_complete$local_moran_i <- local_moran[,1]
jabar_complete$local_moran_z <- local_moran[,4]
jabar_complete$local_moran_p <- local_moran[,5]

# Standardisasi nilai
mean_prev <- mean(jabar_complete$Prevalensi_per_100k, na.rm = TRUE)
jabar_complete$prev_std <- scale(jabar_complete$Prevalensi_per_100k)
jabar_complete$prev_lag_std <- lag.listw(lw, jabar_complete$prev_std, zero.policy = TRUE)

# Klasifikasi klaster LISA dengan kriteria yang lebih ketat
jabar_complete <- jabar_complete %>%
  mutate(
    lisa_cluster = case_when(
      local_moran_p > 0.05 ~ "Not Significant",
      local_moran_i > 0 & prev_std > 0 & Prevalensi_per_100k > mean_prev ~ "High-High",
      local_moran_i > 0 & prev_std < 0 & Prevalensi_per_100k < mean_prev ~ "Low-Low",
      local_moran_i < 0 & prev_std > 0 & Prevalensi_per_100k > mean_prev ~ "High-Low",
      local_moran_i < 0 & prev_std < 0 & Prevalensi_per_100k < mean_prev ~ "Low-High",
      TRUE ~ "Not Significant"
    ),
    lisa_sig = case_when(
      local_moran_p < 0.001 ~ "***",
      local_moran_p < 0.01 ~ "**",
      local_moran_p < 0.05 ~ "*",
      TRUE ~ "ns"
    )
  )

# Ringkasan klaster LISA
cat("\n╔═══════════════════════════════════════════════════════════╗\n")
## 
## ╔═══════════════════════════════════════════════════════════╗
cat("║             RINGKASAN ANALISIS LISA CLUSTER              ║\n")
## ║             RINGKASAN ANALISIS LISA CLUSTER              ║
cat("╚═══════════════════════════════════════════════════════════╝\n\n")
## ╚═══════════════════════════════════════════════════════════╝
lisa_summary <- jabar_complete %>%
  st_drop_geometry() %>%
  group_by(lisa_cluster) %>%
  summarise(
    Jumlah = n(),
    Mean_Prevalensi = mean(Prevalensi_per_100k, na.rm = TRUE),
    Min_Prevalensi = min(Prevalensi_per_100k, na.rm = TRUE),
    Max_Prevalensi = max(Prevalensi_per_100k, na.rm = TRUE)
  ) %>%
  arrange(desc(Mean_Prevalensi))

kable(lisa_summary,
      caption = "Ringkasan Klaster LISA Prevalensi TBC",
      digits = 2,
      col.names = c("Tipe Klaster", "Jumlah Wilayah", "Mean", "Min", "Max"),
      format.args = list(big.mark = ",")) %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Ringkasan Klaster LISA Prevalensi TBC
Tipe Klaster Jumlah Wilayah Mean Min Max
Not Significant 22 509.63 242.49 1,195.30
Low-Low 1 333.96 333.96 333.96
# Tabel detail wilayah dengan klaster signifikan
cat("\n")
lisa_table <- jabar_complete %>%
  st_drop_geometry() %>%
  filter(local_moran_p < 0.05) %>%
  select(NAME_2, Tipe_Wilayah, Prevalensi_per_100k, local_moran_i, 
         local_moran_z, local_moran_p, lisa_cluster, lisa_sig) %>%
  arrange(local_moran_p)

if(nrow(lisa_table) > 0) {
  kable(lisa_table,
        caption = "Wilayah dengan Klaster Spasial Signifikan (p < 0.05)",
        digits = c(0, 0, 2, 3, 3, 4, 0, 0),
        col.names = c("Wilayah", "Tipe", "Prevalensi/100k", "Local I", 
                      "Z-score", "P-value", "Klaster", "Sig.")) %>%
    kable_styling(bootstrap_options = c("striped", "hover"), 
                  full_width = FALSE, font_size = 11) %>%
    row_spec(0, bold = TRUE, color = "white", background = "#2E86AB") %>%
    column_spec(7, bold = TRUE)
} else {
  cat("Tidak ada wilayah dengan klaster spasial yang signifikan (p < 0.05)\n")
}
Wilayah dengan Klaster Spasial Signifikan (p < 0.05)
Wilayah Tipe Prevalensi/100k Local I Z-score P-value Klaster Sig.
Majalengka Kabupaten 333.96 0.492 2.115 0.0344 Low-Low
# Update jabar_data dengan hasil analisis
jabar_data <- jabar_data %>%
  left_join(
    jabar_complete %>% 
      st_drop_geometry() %>% 
      select(NAME_2, local_moran_i, local_moran_p, lisa_cluster, 
             prev_std, prev_lag_std, lisa_sig),
    by = "NAME_2"
  )

BAB 5. KESIMPULAN DAN REKOMENDASI

5.1 Kesimpulan

Berdasarkan analisis epidemiologis kasus tuberkulosis (TBC) di Provinsi Jawa Barat tahun 2024, dapat disimpulkan beberapa hal sebagai berikut:

5.1.1 Faktor Agent-Host-Environment

Agent (Mycobacterium tuberculosis): - Bakteri penyebab TBC memiliki daya tahan tinggi dan dapat bertahan di lingkungan dengan ventilasi buruk - Penularan terjadi melalui droplet udara dari penderita TBC aktif

Host (Inang): - Kelompok risiko tinggi meliputi individu dengan imunitas rendah, gizi buruk, dan kondisi sosial ekonomi rendah - Prevalensi tertinggi ditemukan di wilayah perkotaan dengan mobilitas tinggi

Environment (Lingkungan): - Berdasarkan analisis korelasi: * Kepadatan penduduk menunjukkan [sesuaikan dengan hasil: korelasi positif/negatif/tidak signifikan] * Persentase kemiskinan [sesuaikan dengan hasil] * Kondisi rumah layak huni [sesuaikan dengan hasil] - Faktor lingkungan berinteraksi kompleks dalam transmisi TBC

5.1.2 Pola Sebaran Kasus TBC di Jawa Barat

  1. Prevalensi Tertinggi:
    • Kota Cirebon (1.195,30 per 100.000 penduduk)
    • Kota Bogor (1.058,84 per 100.000 penduduk)
    • Kota Sukabumi (950,68 per 100.000 penduduk)
  2. Karakteristik Wilayah Beban Tinggi:
    • Mayoritas adalah wilayah perkotaan dengan kepadatan penduduk tinggi
    • Memiliki mobilitas penduduk yang tinggi
    • Wilayah dengan aktivitas ekonomi dan transportasi intensif
  3. Pola Spasial:
    • Uji Moran’s I menunjukkan tidak ada autokorelasi spasial yang signifikan (I = 0.0333, p = 0.29)
    • Artinya: Pola sebaran TBC di Jawa Barat bersifat acak (random), bukan mengelompok
    • Hanya 1 wilayah (Majalengka) yang menunjukkan klaster Low-Low signifikan
    • Tidak ditemukan hotspot (High-High cluster) yang signifikan secara statistik

5.1.3 Desain Studi Epidemiologi

Penelitian ini menggunakan desain studi ekologi cross-sectional dengan data agregat tingkat kabupaten/kota. Desain ini efektif untuk: - Mengidentifikasi pola geografis penyebaran penyakit - Mendeteksi area prioritas intervensi - Menganalisis hubungan faktor risiko tingkat populasi

Keterbatasan: - Tidak dapat menentukan hubungan kausal temporal - Ecological fallacy: hasil di level agregat tidak selalu berlaku di level individu - Data hanya mencakup satu tahun (2024), tidak dapat melihat tren

5.1.4 Implikasi untuk Kebijakan

  1. Tidak ada pengelompokan spasial signifikan menunjukkan bahwa:
    • Intervensi perlu dilakukan secara merata di seluruh wilayah, bukan hanya fokus pada klaster tertentu
    • Faktor risiko lokal mungkin lebih penting daripada pengaruh spasial antar wilayah
  2. Wilayah perkotaan memiliki prevalensi lebih tinggi:
    • Perlu penguatan program deteksi dini di puskesmas kota
    • Kampanye edukasi di area padat seperti terminal, pasar, dan permukiman padat
  3. Peran faktor risiko:
    • [Sesuaikan dengan hasil korelasi] menunjukkan hubungan signifikan dengan prevalensi TBC
    • Intervensi harus bersifat multisektoral, tidak hanya aspek kesehatan

5.2 Rekomendasi

5.2.1 Rekomendasi Kebijakan Kesehatan

A. Prioritas Wilayah (Immediate Action)

  1. Wilayah Prevalensi Sangat Tinggi (> 1.000 per 100.000):
    • Kota Cirebon, Bogor, dan Sukabumi → zona merah
    • Rekomendasi:
      • Screening aktif (active case finding) di kelompok berisiko tinggi
      • Mobile clinic untuk menjangkau area padat penduduk
      • Penguatan fasilitas laboratorium untuk diagnosis cepat
      • Monitoring ketat terhadap kasus putus obat
  2. Wilayah Prevalensi Tinggi (700-1.000 per 100.000):
    • Kota Cimahi, Bandung, Banjar, Tasikmalaya → zona kuning
    • Rekomendasi:
      • Peningkatan kapasitas tenaga kesehatan di puskesmas
      • Edukasi masyarakat tentang deteksi gejala TBC
      • Program DOT (Directly Observed Treatment) terstruktur

B. Intervensi Berbasis Faktor Risiko

  1. Program Perbaikan Lingkungan:
    • Renovasi rumah tidak layak huni dengan subsidi pemerintah
    • Kampanye ventilasi rumah yang memadai
    • Perbaikan sanitasi lingkungan di pemukiman padat
  2. Pengentasan Kemiskinan:
    • Integrasi program TBC dengan program bantuan sosial
    • Jaminan kesehatan komprehensif untuk keluarga miskin
    • Bantuan nutrisi untuk pasien TBC dengan gizi buruk
  3. Pengendalian Kepadatan:
    • Penataan ulang permukiman kumuh
    • Regulasi hunian layak di area perkotaan

C. Penguatan Sistem Surveilans

Karena pola sebaran TBC acak (tidak ada autokorelasi spasial), diperlukan: - Surveilans sentinel di setiap kabupaten/kota, tidak hanya fokus pada wilayah tertentu - Early warning system untuk deteksi outbreak lokal - Integrasi data antara puskesmas, rumah sakit, dan laboratorium - Sistem pelaporan real-time berbasis aplikasi digital

5.2.2 Rekomendasi Penelitian Lanjutan

  1. Studi Kohort Prospektif:
    • Mengikuti kelompok berisiko tinggi untuk memahami hubungan kausal
    • Durasi: minimal 2-3 tahun
  2. Studi Kasus-Kontrol:
    • Membandingkan faktor risiko individu antara pasien TBC dan kontrol sehat
    • Fokus pada perilaku, riwayat kontak, dan kondisi rumah
  3. Analisis Time-Series:
    • Menganalisis tren TBC dari tahun ke tahun (minimal 5 tahun)
    • Mengevaluasi efektivitas intervensi yang sudah dilakukan
  4. Studi Kualitas Udara:
    • Meneliti hubungan polusi udara dengan kejadian TBC di kota besar
    • Menggunakan data stasiun monitoring kualitas udara
  5. Penelitian Tingkat Individu:
    • Menggunakan data primer (wawancara, pemeriksaan fisik)
    • Mengatasi keterbatasan ecological fallacy dari studi ini

5.2.3 Roadmap Pengendalian TBC Jawa Barat 2025-2027

Tahun 2025 (Jangka Pendek): - Screening massal di 10 wilayah prevalensi tertinggi - Pelatihan 500 kader TBC di seluruh kabupaten/kota - Launching aplikasi “JABAR BEBAS TBC” untuk tracking pasien

Tahun 2026 (Jangka Menengah): - Pembangunan/renovasi 50 rumah sehat di wilayah prioritas - Program “1 Puskesmas 1 Mikroskopis” untuk diagnosis cepat - Integrasi database TBC dengan sistem BPJS Kesehatan - Evaluasi mid-term: target penurunan prevalensi 15%

Tahun 2027 (Jangka Panjang): - Coverage pengobatan TBC mencapai 90% (dari 81% saat ini) - Keberhasilan pengobatan TBC RO mencapai 75% (dari 58%) - Penurunan prevalensi TBC minimal 25% dari baseline 2024 - Zero stigma campaign: eliminasi diskriminasi terhadap pasien TBC

5.2.4 Strategi Komunikasi dan Edukasi Masyarakat

A. Target Audiens: 1. Kelompok Berisiko Tinggi: - Penghuni rumah susun/apartemen padat - Pekerja pabrik/industri - Narapidana dan penghuni lapas - Lansia dan penderita komorbid (diabetes, HIV)

  1. Tokoh Masyarakat:
    • RT/RW sebagai agen perubahan
    • Tokoh agama untuk kampanye di tempat ibadah
    • Influencer lokal untuk jangkauan generasi muda

B. Pesan Kunci: - “TBC Bisa Disembuhkan, Obat Gratis!” - “Batuk Lebih 2 Minggu? Periksakan Segera!” - “Rumah Sehat, Keluarga Bebas TBC” - “Jangan Putus Obat, Sembuh Sampai Tuntas”

C. Media Komunikasi: - Media sosial (Instagram, TikTok, Facebook) - Radio komunitas di pedesaan - Billboard di terminal, stasiun, pasar - Webinar kesehatan untuk kelompok terdidik

5.2.5 Kolaborasi Lintas Sektor

Dinas Kesehatan ↔︎ Dinas Perumahan: - Program renovasi rumah tidak layak huni untuk pasien TBC - Standar ventilasi minimal untuk izin bangunan baru

Dinas Kesehatan ↔︎ Dinas Sosial: - Integrasi screening TBC dalam program keluarga harapan (PKH) - Bantuan transportasi untuk pasien TBC miskin

Dinas Kesehatan ↔︎ Dinas Pendidikan: - Edukasi TBC dalam kurikulum sekolah - Screening TBC untuk guru dan siswa di sekolah padat

Dinas Kesehatan ↔︎ Kepolisian/Kemenkumham: - Program TBC di Lembaga Pemasyarakatan - Screening wajib untuk narapidana baru

5.2.6 Mekanisme Monitoring dan Evaluasi

Indikator Keberhasilan:

Indikator Baseline 2024 Target 2025 Target 2027
Prevalensi TBC (per 100.000) 512 460 384
Coverage pengobatan SO 81% 85% 90%
Keberhasilan pengobatan RO 58% 65% 75%
Jumlah kabupaten/kota dengan prevalensi >1.000 3 2 0
Deteksi kasus baru per tahun 170.000 185.000 200.000

Metode Evaluasi: 1. Survei Evaluasi Tahunan (setiap Desember) 2. Review Triwulanan di tingkat kabupaten/kota 3. Audit Kasus untuk kasus gagal pengobatan 4. Survei Kepuasan Pasien untuk kualitas layanan 5. External Review oleh tim independen (tahun 2027)

Pelaporan: - Laporan bulanan dari puskesmas → Dinkes Kab/Kota - Laporan triwulanan dari Dinkes Kab/Kota → Dinkes Provinsi - Laporan tahunan publikasi di website resmi - Dashboard real-time untuk publik (transparansi)


5.3 Keterbatasan Penelitian

Penelitian ini memiliki beberapa keterbatasan yang perlu diperhatikan dalam interpretasi hasil:

  1. Desain Cross-Sectional:
    • Hanya mengukur pada satu titik waktu (2024)
    • Tidak dapat menentukan hubungan sebab-akibat temporal
    • Tidak dapat melihat dinamika perubahan dari waktu ke waktu
  2. Data Agregat:
    • Ecological fallacy: hasil di level wilayah tidak selalu berlaku di level individu
    • Tidak dapat mengidentifikasi karakteristik pasien TBC secara spesifik
    • Kehilangan variasi data dalam wilayah
  3. Variabel Terbatas:
    • Tidak mencakup faktor perilaku individu (merokok, konsumsi alkohol)
    • Tidak ada data tentang riwayat kontak dengan pasien TBC
    • Tidak ada informasi tentang status HIV, diabetes, atau komorbid lainnya
    • Tidak ada data kualitas udara atau polusi
  4. Masalah Data Spasial:
    • 3 wilayah (Waduk Cirata) tidak termasuk dalam analisis spasial
    • Kemungkinan underreporting kasus di beberapa wilayah
    • Data rumah layak huni mungkin memiliki definisi yang berbeda antar wilayah
  5. Analisis Statistik:
    • Tidak menggunakan analisis multivariat (regresi berganda)
    • Tidak memperhitungkan efek confounding variables
    • Sample size untuk analisis spasial relatif kecil (27 wilayah)
  6. Data Sekunder:
    • Validitas data bergantung pada sistem pelaporan yang ada
    • Kemungkinan missing data atau data tidak akurat
    • Tidak ada kontrol kualitas data primer

Implikasi: Hasil penelitian ini sebaiknya digunakan sebagai bukti awal (preliminary evidence) untuk perumusan kebijakan, bukan sebagai satu-satunya dasar pengambilan keputusan. Diperlukan penelitian lanjutan dengan desain yang lebih robust untuk konfirmasi temuan.


5.4 Penutup

Tuberkulosis tetap menjadi tantangan kesehatan masyarakat yang serius di Provinsi Jawa Barat. Dengan prevalensi yang tinggi terutama di wilayah perkotaan dan pola penyebaran yang acak (tidak mengelompok), diperlukan pendekatan komprehensif dan merata di seluruh kabupaten/kota.

Kunci keberhasilan pengendalian TBC: 1. Deteksi dini yang agresif - menemukan kasus secepat mungkin 2. Pengobatan tuntas - memastikan pasien menyelesaikan terapi 3. Perbaikan lingkungan - mengurangi transmisi 4. Pemberdayaan masyarakat - mengubah perilaku dan menghilangkan stigma 5. Kolaborasi lintas sektor - kesehatan bukan tanggung jawab Dinkes saja

Dengan komitmen kuat dari seluruh stakeholder - pemerintah, tenaga kesehatan, masyarakat, dan sektor swasta - target eliminasi TBC di Jawa Barat pada tahun 2030 dapat tercapai.

“Jawa Barat Bebas TBC: Bersama Kita Bisa!”


DAFTAR PUSTAKA

Buku dan Jurnal:

  1. World Health Organization. (2023). Global Tuberculosis Report 2023. Geneva: WHO.

  2. Kementerian Kesehatan RI. (2024). Profil Kesehatan Indonesia 2023. Jakarta: Kemenkes RI.

  3. Dinas Kesehatan Provinsi Jawa Barat. (2024). Profil Kesehatan Provinsi Jawa Barat Tahun 2023. Bandung: Dinkes Jabar.

  4. Pai, M., Behr, M. A., Dowdy, D., et al. (2016). Tuberculosis. Nature Reviews Disease Primers, 2, 16076.

  5. Harling, G., & Castro, M. C. (2014). A spatial analysis of social and economic determinants of tuberculosis in Brazil. Health & Place, 25, 56-67.

  6. Anselin, L. (1995). Local Indicators of Spatial Association—LISA. Geographical Analysis, 27(2), 93-115.

  7. Getis, A., & Ord, J. K. (1992). The Analysis of Spatial Association by Use of Distance Statistics. Geographical Analysis, 24(3), 189-206.

Data dan Statistik:

  1. Badan Pusat Statistik Provinsi Jawa Barat. (2024). Jawa Barat Dalam Angka 2024. Bandung: BPS Jabar.

  2. Kementerian Kesehatan RI. (2024). Sistem Informasi Tuberkulosis (SITB). Diakses dari: https://sitb.kemkes.go.id

  3. Global Database on Administrative Areas (GADM). Indonesia Administrative Boundaries. Diakses dari: https://gadm.org/

Metodologi Penelitian:

  1. Rothman, K. J., Greenland, S., & Lash, T. L. (2008). Modern Epidemiology (3rd ed.). Philadelphia: Lippincott Williams & Wilkins.

  2. Pfeiffer, D., Robinson, T., Stevenson, M., et al. (2008). Spatial Analysis in Epidemiology. Oxford: Oxford University Press.

  3. Bivand, R. S., Pebesma, E., & Gómez-Rubio, V. (2013). Applied Spatial Data Analysis with R (2nd ed.). New York: Springer.

R Packages:

  1. Bivand, R., & Wong, D. W. S. (2018). Comparing implementations of global and local indicators of spatial association. TEST, 27(3), 716-748.

  2. Pebesma, E. (2018). Simple Features for R: Standardized Support for Spatial Vector Data. The R Journal, 10(1), 439-446.

  3. Tennekes, M. (2018). tmap: Thematic Maps in R. Journal of Statistical Software, 84(6), 1-39.