ANALISIS SPASIAL SEBARAN KASUS TUBERKULOSIS DI PROVINSI JAWA BARAT

Dosen Pembimbing: Dr. I Gede Nyoman Mindra Jaya, M.Si.

Disusun Oleh: Kevin Jonathan (140610230040)

PROGRAM STUDI S-1 STATISTIKA
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
UNIVERSITAS PADJADJARAN
JATINANGOR
2025


Daftar Isi

Abstrak

Penelitian ini menganalisis sebaran spasial kasus Tuberkulosis (TBC) di Provinsi Jawa Barat serta faktor-faktor yang memengaruhinya menggunakan pendekatan ekonometrika spasial. Data diperoleh dari Dinas Kesehatan dan BPS, dengan variabel independen seperti kasus HIV/AIDS, penderita Diabetes Mellitus, kepadatan penduduk, dan persentase penduduk miskin. Analisis dilakukan melalui peta deskriptif, uji autokorelasi spasial, serta pemodelan SAR dan SEM. Hasil menunjukkan adanya pengelompokan kasus TBC antarwilayah, dengan klaster signifikan di daerah padat dan kurang padat penduduk. Variabel kepadatan penduduk dan kemiskinan berpengaruh signifikan terhadap jumlah kasus TBC. Pendekatan spasial ini memberikan pemahaman lebih mendalam tentang pola penyebaran TBC dan dapat menjadi dasar kebijakan kesehatan berbasis wilayah.

BAB I. Pendahuluan

1.1 Latar Belakang

Tuberkulosis (TBC) masih menjadi salah satu masalah kesehatan utama di Indonesia, termasuk di Provinsi Jawa Barat yang mencatat jumlah kasus tinggi setiap tahunnya (BPS). Penyakit yang disebabkan oleh Mycobacterium tuberculosis ini mudah menular melalui udara, terutama di lingkungan padat penduduk dengan sanitasi yang kurang baik. Berbagai faktor sosial, ekonomi, dan kesehatan seperti jumlah penderita HIV/AIDS, Diabetes Mellitus, kepadatan penduduk, serta persentase penduduk miskin turut berperan dalam peningkatan kasus TBC. Kondisi tersebut menunjukkan bahwa penyebaran TBC tidak hanya dipengaruhi oleh aspek medis, tetapi juga oleh karakteristik wilayah dan kesejahteraan masyarakat. Oleh karena itu, analisis spasial diperlukan untuk mengidentifikasi pola persebaran dan faktor-faktor yang memengaruhi TBC di kabupaten/kota Jawa Barat, sehingga strategi penanggulangan dapat dirancang secara lebih tepat sasaran dan efektif.

1.2 Identifikasi Masalah

Berdasarkan latar belakang tersebut, permasalahan yang diidentifikasi dalam penelitian ini adalah bagaimana pola sebaran kasus TBC di kabupaten/kota Provinsi Jawa Barat serta bagaimana pengaruh berbagai faktor terhadap persebaran tersebut. Faktor-faktor yang dimaksud antara lain jumlah kasus HIV/AIDS yang dapat melemahkan sistem kekebalan tubuh sehingga meningkatkan risiko infeksi TBC (Qi et al., 2023), jumlah penderita Diabetes Mellitus yang cenderung memiliki kerentanan lebih tinggi terhadap reaktivasi infeksi laten TBC (Franco et al., 2024), kepadatan penduduk yang memengaruhi tingkat transmisi penyakit antarindividu, serta persentase penduduk miskin yang seringkali berkorelasi dengan keterbatasan akses terhadap fasilitas kesehatan dan kondisi lingkungan yang kurang sehat (Sihaloho, 2019). Penelitian ini bertujuan untuk memahami interaksi faktor-faktor tersebut secara spasial, sehingga dapat mengidentifikasi wilayah-wilayah dengan risiko tinggi serta memberikan dasar bagi perumusan strategi intervensi yang lebih efektif dan tepat sasaran dalam upaya penanggulangan TBC di Jawa Barat.

1.3 Tujuan Penelitian

Penelitian ini dibatasi pada wilayah administratif kabupaten/kota di Provinsi Jawa Barat dengan menggunakan data sekunder pada periode tertentu. Variabel independen yang digunakan meliputi jumlah kasus HIV/AIDS (X1), jumlah penderita Diabetes Mellitus (X2), kepadatan penduduk per km² (X3), dan persentase penduduk miskin (X4), sedangkan variabel dependen adalah jumlah kasus TBC. Analisis difokuskan pada hubungan spasial antarwilayah tanpa meninjau faktor individual atau temporal secara mendalam.

BAB II. Tinjauan Pustaka

2.1 Teori Dasar Spatial Dependence

Spatial dependence atau ketergantungan spasial menggambarkan kondisi di mana suatu fenomena pada satu lokasi dipengaruhi oleh fenomena di lokasi sekitarnya. Dalam konteks kesehatan masyarakat, seperti kasus TBC, wilayah dengan tingkat kejadian tinggi cenderung berdekatan dengan wilayah lain yang juga memiliki tingkat kejadian tinggi. Prinsip ini sejalan dengan Tobler’s First Law of Geography yang menyatakan bahwa “everything is related to everything else, but near things are more related than distant things.” Oleh karena itu, analisis spasial diperlukan untuk mengidentifikasi adanya pola keterkaitan antarwilayah, yang tidak dapat dijelaskan hanya dengan analisis statistik konvensional.

2.2 Autokorelasi Spasial

Autokorelasi spasial digunakan untuk mengukur sejauh mana nilai suatu variabel di satu lokasi berkorelasi dengan nilai di lokasi lain yang berdekatan. Terdapat dua jenis analisis autokorelasi spasial, yaitu Global Moran’s I dan Local Moran’s I (LISA). Global Moran’s I digunakan untuk menilai apakah pola spasial secara keseluruhan bersifat mengelompok (clustered), acak (random), atau menyebar (dispersed), sedangkan Local Moran’s I digunakan untuk mengidentifikasi lokasi-lokasi spesifik yang membentuk klaster signifikan, seperti wilayah dengan kasus TBC tinggi yang berdekatan dengan wilayah serupa (High-High) atau rendah dengan rendah (Low-Low). Kedua ukuran ini penting untuk memahami pola sebaran penyakit dan mendeteksi daerah prioritas penanganan.

2.3 Model Spatial Econometrics yang Digunakan

Model spasial digunakan untuk menganalisis hubungan antarvariabel dengan mempertimbangkan efek spasial. Dua model utama yang umum digunakan adalah Spatial Error Model (SEM) dan Spatial Autoregressive Model (SAR). Model SAR memasukkan ketergantungan spasial melalui variabel dependen, menunjukkan bahwa nilai TBC di suatu wilayah dipengaruhi oleh nilai TBC di wilayah sekitar. Sebaliknya, model SEM memperhitungkan korelasi spasial pada komponen error, yang menunjukkan adanya faktor spasial yang tidak teramati tetapi memengaruhi variabel dependen. Dengan membandingkan kedua model ini, dapat diketahui apakah pengaruh spasial lebih dominan berasal dari interaksi antarwilayah atau dari faktor-faktor tak teramati dalam struktur residual.

BAB III. Metodologi Penelitian

3.1 Data

Data yang digunakan dalam penelitian ini merupakan data sekunder yang diperoleh dari sumber resmi, antara lain Dinas Kesehatan Provinsi Jawa Barat dan Badan Pusat Statistik (BPS). Variabel dependen penelitian adalah jumlah kasus Tuberkulosis (TBC) di setiap kabupaten/kota, sedangkan variabel independennya meliputi jumlah kasus HIV/AIDS baru (X1), jumlah penderita Diabetes Mellitus (X2), kepadatan penduduk per km² (X3), serta persentase penduduk miskin (X4). Data yang dikumpulkan mencerminkan kondisi sosial, ekonomi, dan kesehatan masyarakat pada periode penelitian yang telah ditentukan, sehingga memungkinkan analisis hubungan antarvariabel dan pemetaan persebaran TBC secara spasial dengan akurat.

3.2 Unit Spasial

Unit spasial yang digunakan dalam penelitian ini adalah wilayah administratif tingkat kabupaten/kota di Provinsi Jawa Barat. Setiap unit spasial direpresentasikan dalam bentuk poligon pada peta digital (shapefile), yang memungkinkan analisis hubungan spasial antarwilayah secara lebih akurat. Pemilihan unit kabupaten/kota didasarkan pada ketersediaan data yang lengkap serta peran strategisnya sebagai pelaksana utama program pengendalian TBC di tingkat daerah. Dengan menggunakan unit spasial ini, penelitian dapat mengidentifikasi pola persebaran kasus TBC, mengamati klaster atau hotspot, serta menganalisis keterkaitan antara faktor-faktor sosial, ekonomi, dan kesehatan dengan distribusi penyakit di masing-masing wilayah.

3.3 Metode Analisis

Analisis yang digunakan terdiri atas analisis deskriptif spasial, autokorelasi spasial, dan model ekonometrika spasial. Analisis deskriptif dilakukan untuk memvisualisasikan persebaran kasus TBC di Jawa Barat. Autokorelasi spasial dihitung menggunakan Global Moran’s I untuk mendeteksi pola sebaran secara keseluruhan dan Local Moran’s I (LISA) untuk mengidentifikasi klaster signifikan antarwilayah. Selanjutnya, dilakukan pemodelan menggunakan Spatial Autoregressive Model (SAR) dan Spatial Error Model (SEM) untuk menganalisis pengaruh variabel independen terhadap jumlah kasus TBC dengan mempertimbangkan efek spasial, serta membandingkan model mana yang memberikan hasil paling sesuai.

3.4 Alur Kerja Penelitian

Penelitian ini diawali dengan pengumpulan dan pengolahan data sekunder dari berbagai sumber resmi, kemudian dilakukan penyusunan peta dan pembentukan matriks pembobot spasial (spatial weights matrix). Selanjutnya dilakukan analisis autokorelasi spasial untuk mendeteksi adanya ketergantungan spasial antarwilayah. Setelah itu dilakukan pemodelan menggunakan model SAR dan SEM untuk mengetahui faktor-faktor yang memengaruhi jumlah kasus TBC. Tahap akhir penelitian adalah interpretasi hasil analisis, penarikan kesimpulan, dan penyusunan rekomendasi kebijakan berbasis spasial untuk penanggulangan TBC di Jawa Barat.

BAB IV. Hasil dan Pembahasan

4.1 Peta Deskriptif

Provinsi Jawa Barat merupakan salah satu provinsi dengan jumlah penduduk terbanyak di Indonesia. Tingginya kepadatan penduduk di beberapa wilayah mempengaruhi risiko penularan penyakit menular, termasuk Tuberkulosis (TBC). Untuk memahami pola penyebaran TBC, peta berikut menggambarkan sebaran kasus di setiap kabupaten/kota pada tahun 2023.

# =========================================================
# --- LIBRARY ---
# =========================================================
library(sf)
## Warning: package 'sf' was built under R version 4.3.3
## Linking to GEOS 3.11.2, GDAL 3.8.2, PROJ 9.3.1; sf_use_s2() is TRUE
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.3.3
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(spdep)
## Warning: package 'spdep' was built under R version 4.3.3
## Loading required package: spData
## Warning: package 'spData' was built under R version 4.3.3
## To access larger datasets in this package, install the spDataLarge
## package with: `install.packages('spDataLarge',
## repos='https://nowosad.github.io/drat/', type='source')`
library(tmap)

# =========================================================
# --- 1. SHAPEFILE & DATA ---
# =========================================================
indo_lvl2 <- st_read("C:/Users/Kevin Jonathan/Downloads/Epidem_UTS")
## Reading layer `gadm41_IDN_2' from data source 
##   `C:\Users\Kevin Jonathan\Downloads\Epidem_UTS' 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
jabar_shp <- indo_lvl2 %>%
  filter(NAME_1 == "Jawa Barat") %>%
  mutate(KabKota = NAME_2) %>%
  filter(KabKota != "Waduk Cirata")

# --- Membaca data CSV ---
data <- read.csv(file.choose())

# --- Penyesuaian nama kabupaten/kota ---
data <- data %>%
  mutate(KabKota = dplyr::recode(Kabupaten.Kota,
                                 "Kota Banjar" = "Banjar",
                                 "Kota Cimahi" = "Cimahi",
                                 "Kota Depok" = "Depok",
                                 .default = Kabupaten.Kota))

# --- Join shapefile dan data ---
jabar_data <- left_join(jabar_shp, data, by = "KabKota") %>%
  st_as_sf()

# --- Eksplorasi awal ---
summary(jabar_data$Jumlah.Kasus.Penyakit...Angka.Penemuan.TBC..Y.)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1140    3994    5467    7781   10574   26912
hist(jabar_data$Jumlah.Kasus.Penyakit...Angka.Penemuan.TBC..Y.,
     main = "Distribusi Kasus TBC Jawa Barat",
     xlab = "Jumlah Kasus",
     col = "lightblue", border = "white")

# --- Peta Deskriptif Awal ---
tmap_mode("plot")
## ℹ tmap modes "plot" - "view"
## ℹ toggle with `tmap::ttm()`
## This message is displayed once per session.
tm_shape(jabar_data) +
  tm_fill("Jumlah.Kasus.Penyakit...Angka.Penemuan.TBC..Y.",
          style = "quantile",
          palette = "Reds",
          title = "Kasus TBC (Awal)") +
  tm_borders() +
  tm_layout(title = "Peta Distribusi Awal Kasus TBC di Jawa Barat (2023)")
## 
## ── tmap v3 code detected ───────────────────────────────────────────────────────
## [v3->v4] `tm_fill()`: instead of `style = "quantile"`, use fill.scale =
## `tm_scale_intervals()`.
## ℹ Migrate the argument(s) 'style', 'palette' (rename to 'values') to
##   'tm_scale_intervals(<HERE>)'[v3->v4] `tm_fill()`: migrate the argument(s) related to the legend of the
## visual variable `fill` namely 'title' to 'fill.legend = tm_legend(<HERE>)'[v3->v4] `tm_layout()`: use `tm_title()` instead of `tm_layout(title = )`[cols4all] color palettes: use palettes from the R package cols4all. Run
## `cols4all::c4a_gui()` to explore them. The old palette name "Reds" is named
## "brewer.reds"Multiple palettes called "reds" found: "brewer.reds", "matplotlib.reds". The first one, "brewer.reds", is returned.

Jumlah kasus TBC di Jawa Barat tahun 2023 berkisar antara 1.140–26.912 kasus dengan rata-rata 7.781 kasus. Peta menunjukkan sebaran tidak merata, dengan konsentrasi kasus tinggi di wilayah perkotaan padat penduduk.

4.2 Hasil Uji Autokorelasi

# =========================================================
# --- SPATIAL WEIGHT & UJI MORAN GLOBAL ---
# =========================================================
nb <- poly2nb(jabar_data, queen = TRUE)
lw <- nb2listw(nb, style = "W", zero.policy = TRUE)

# --- Uji Moran Global ---
moran.test(jabar_data$Jumlah.Kasus.Penyakit...Angka.Penemuan.TBC..Y.,
            lw, zero.policy = TRUE)
## 
##  Moran I test under randomisation
## 
## data:  jabar_data$Jumlah.Kasus.Penyakit...Angka.Penemuan.TBC..Y.  
## weights: lw    
## 
## Moran I statistic standard deviate = 2.9365, p-value = 0.00166
## alternative hypothesis: greater
## sample estimates:
## Moran I statistic       Expectation          Variance 
##        0.34378742       -0.04000000        0.01708125
# =========================================================
# --- LOCAL MORAN’S I (LISA) ---
# =========================================================
local_moran <- localmoran(jabar_data$Jumlah.Kasus.Penyakit...Angka.Penemuan.TBC..Y.,
                          lw, zero.policy = TRUE)

# Tambahkan hasil ke data spasial
jabar_data$Ii    <- local_moran[, 1]
jabar_data$Z.Ii  <- local_moran[, 4]
jabar_data$Pval  <- local_moran[, 5]

# =========================================================
# --- KLASIFIKASI CLUSTER LISA ---
# =========================================================
mean_val <- mean(jabar_data$Jumlah.Kasus.Penyakit...Angka.Penemuan.TBC..Y., na.rm = TRUE)
lag_val  <- lag.listw(lw, jabar_data$Jumlah.Kasus.Penyakit...Angka.Penemuan.TBC..Y., zero.policy = TRUE)

jabar_data$Quadrant <- "Not Sig."
for (i in 1:nrow(jabar_data)) {
  if (jabar_data$Pval[i] <= 0.05) {
    if (jabar_data$Jumlah.Kasus.Penyakit...Angka.Penemuan.TBC..Y.[i] >= mean_val & lag_val[i] >= mean(lag_val, na.rm = TRUE)) {
      jabar_data$Quadrant[i] <- "High-High"
    } else if (jabar_data$Jumlah.Kasus.Penyakit...Angka.Penemuan.TBC..Y.[i] <= mean_val & lag_val[i] <= mean(lag_val, na.rm = TRUE)) {
      jabar_data$Quadrant[i] <- "Low-Low"
    } else if (jabar_data$Jumlah.Kasus.Penyakit...Angka.Penemuan.TBC..Y.[i] >= mean_val & lag_val[i] <= mean(lag_val, na.rm = TRUE)) {
      jabar_data$Quadrant[i] <- "High-Low"
    } else if (jabar_data$Jumlah.Kasus.Penyakit...Angka.Penemuan.TBC..Y.[i] <= mean_val & lag_val[i] >= mean(lag_val, na.rm = TRUE)) {
      jabar_data$Quadrant[i] <- "Low-High"
    }
  }
}

Nilai Moran’s I = 0.3438 dengan p-value = 0.00166 (< 0.05) menunjukkan adanya autokorelasi spasial positif. Artinya, wilayah dengan kasus TBC tinggi cenderung berdekatan dengan wilayah lain yang juga memiliki kasus tinggi.

# =========================================================
# --- VISUALISASI HASIL LISA ---
# =========================================================
tmap_mode("view")
## ℹ tmap modes "plot" - "view"
# --- Peta Klaster LISA ---
tm_shape(jabar_data) +
  tm_fill("Quadrant",
          palette = c("red", "blue", "orange", "cyan", "grey"),
          title = "LISA Cluster TBC") +
  tm_borders() +
  tm_text("KabKota", size = 0.7, col = "black") +
  tm_layout(title = "Peta Interaktif LISA Kasus TBC Jawa Barat (2023)")
## 
## ── tmap v3 code detected ───────────────────────────────────────────────────────
## [v3->v4] `tm_tm_fill()`: migrate the argument(s) related to the scale of the
## visual variable `fill` namely 'palette' (rename to 'values') to fill.scale =
## tm_scale(<HERE>).[v3->v4] `tm_fill()`: migrate the argument(s) related to the legend of the
## visual variable `fill` namely 'title' to 'fill.legend = tm_legend(<HERE>)'[v3->v4] `tm_layout()`: use `tm_title()` instead of `tm_layout(title = )`
# --- Peta Signifikansi ---
tm_shape(jabar_data) +
  tm_fill("Pval",
          style = "fixed",
          breaks = c(0, 0.05, 1),
          palette = c("red", "white"),
          title = "Signifikan (p < 0.05)") +
  tm_borders() +
  tm_text("KabKota", size = 0.7, col = "black") +
  tm_layout(title = "Peta Interaktif Signifikansi Local Moran's I")
## 
## ── tmap v3 code detected ───────────────────────────────────────────────────────
## [v3->v4] `tm_fill()`: instead of `style = "fixed"`, use fill.scale =
## `tm_scale_intervals()`.
## ℹ Migrate the argument(s) 'style', 'breaks', 'palette' (rename to 'values') to
##   'tm_scale_intervals(<HERE>)'[v3->v4] `tm_fill()`: migrate the argument(s) related to the legend of the
## visual variable `fill` namely 'title' to 'fill.legend = tm_legend(<HERE>)'[v3->v4] `tm_layout()`: use `tm_title()` instead of `tm_layout(title = )`

Analisis Local Moran’s I (LISA) mengidentifikasi klaster High-High di wilayah padat dan Low-Low di wilayah berpenduduk jarang. Pola ini menunjukkan adanya pengelompokan lokal yang signifikan dalam penyebaran TBC.

4.3 Pemodelan Spasial

Bagian ini menjelaskan langkah-langkah analisis spasial untuk mendeteksi adanya autokorelasi spasial dan pola klaster pada kasus TBC di Jawa Barat. Analisis dilakukan melalui uji Moran’s I global dan lokal serta visualisasi peta LISA.

# --- 4. Spatial Weights ---
nb <- poly2nb(jabar_data, queen = TRUE)
lw <- nb2listw(nb, style = "W", zero.policy = TRUE)

# --- 5. Moran Test ---
moran.test(jabar_data$Jumlah.Kasus.Penyakit...Angka.Penemuan.TBC..Y., lw)
## 
##  Moran I test under randomisation
## 
## data:  jabar_data$Jumlah.Kasus.Penyakit...Angka.Penemuan.TBC..Y.  
## weights: lw    
## 
## Moran I statistic standard deviate = 2.9365, p-value = 0.00166
## alternative hypothesis: greater
## sample estimates:
## Moran I statistic       Expectation          Variance 
##        0.34378742       -0.04000000        0.01708125
# --- 6. Local Moran ---
local_moran <- localmoran(jabar_data$Jumlah.Kasus.Penyakit...Angka.Penemuan.TBC..Y., lw)
jabar_data$Ii    <- local_moran[, 1]
jabar_data$Z.Ii  <- local_moran[, 4]
jabar_data$Pval  <- local_moran[, 5]

# --- 7. Klasifikasi LISA Cluster ---
mean_val <- mean(jabar_data$Jumlah.Kasus.Penyakit...Angka.Penemuan.TBC..Y., na.rm = TRUE)
lag_val  <- lag.listw(lw, jabar_data$Jumlah.Kasus.Penyakit...Angka.Penemuan.TBC..Y.)
jabar_data$Quadrant <- "Not Sig."
for (i in 1:nrow(jabar_data)) {
  if (jabar_data$Pval[i] <= 0.05) {
    if (jabar_data$Jumlah.Kasus.Penyakit...Angka.Penemuan.TBC..Y.[i] >= mean_val & lag_val[i] >= mean(lag_val, na.rm = TRUE)) {
      jabar_data$Quadrant[i] <- "High-High"
    } else if (jabar_data$Jumlah.Kasus.Penyakit...Angka.Penemuan.TBC..Y.[i] <= mean_val & lag_val[i] <= mean(lag_val, na.rm = TRUE)) {
      jabar_data$Quadrant[i] <- "Low-Low"
    } else if (jabar_data$Jumlah.Kasus.Penyakit...Angka.Penemuan.TBC..Y.[i] >= mean_val & lag_val[i] <= mean(lag_val, na.rm = TRUE)) {
      jabar_data$Quadrant[i] <- "High-Low"
    } else if (jabar_data$Jumlah.Kasus.Penyakit...Angka.Penemuan.TBC..Y.[i] <= mean_val & lag_val[i] >= mean(lag_val, na.rm = TRUE)) {
      jabar_data$Quadrant[i] <- "Low-High"
    }
  }
}

# --- 8. Visualisasi Interaktif ---
tmap_mode("view")
## ℹ tmap modes "plot" - "view"
tm_shape(jabar_data) +
  tm_fill("Quadrant",
          palette = c("red", "blue", "orange", "cyan", "grey"),
          title = "LISA Cluster TBC") +
  tm_borders() +
  tm_text("KabKota", size = 0.7, col = "black")
## 
## ── tmap v3 code detected ───────────────────────────────────────────────────────
## [v3->v4] `tm_tm_fill()`: migrate the argument(s) related to the scale of the
## visual variable `fill` namely 'palette' (rename to 'values') to fill.scale =
## tm_scale(<HERE>).[v3->v4] `tm_fill()`: migrate the argument(s) related to the legend of the
## visual variable `fill` namely 'title' to 'fill.legend = tm_legend(<HERE>)'
tm_shape(jabar_data) +
  tm_fill("Pval",
          style = "fixed",
          breaks = c(0, 0.05, 1),
          palette = c("red", "white"),
          title = "Signifikan (p < 0.05)") +
  tm_borders() +
  tm_text("KabKota", size = 0.7, col = "black")
## 
## ── tmap v3 code detected ───────────────────────────────────────────────────────
## [v3->v4] `tm_fill()`: instead of `style = "fixed"`, use fill.scale =
## `tm_scale_intervals()`.
## ℹ Migrate the argument(s) 'style', 'breaks', 'palette' (rename to 'values') to
##   'tm_scale_intervals(<HERE>)'[v3->v4] `tm_fill()`: migrate the argument(s) related to the legend of the
## visual variable `fill` namely 'title' to 'fill.legend = tm_legend(<HERE>)'

4.4 Perbandingan dan Interpretasi Hasil

Bagian ini meliputi estimasi model OLS, SAR, dan SEM untuk menganalisis pengaruh faktor-faktor independen terhadap kasus TBC serta membandingkan kinerja model berdasarkan nilai AIC dan autokorelasi residual.

Sebelum pemodelan spasial, dilakukan uji multikolinearitas menggunakan Variance Inflation Factor (VIF). Nilai VIF seluruh variabel berada di bawah 10 (sekitar 1,7–2,6), sehingga tidak terdapat indikasi multikolinearitas yang berarti antarvariabel independen.

# --- Persiapan data dan model ---
library(spatialreg)
## Warning: package 'spatialreg' was built under R version 4.3.3
## Loading required package: Matrix
## 
## Attaching package: 'spatialreg'
## The following objects are masked from 'package:spdep':
## 
##     get.ClusterOption, get.coresOption, get.mcOption,
##     get.VerboseOption, get.ZeroPolicyOption, set.ClusterOption,
##     set.coresOption, set.mcOption, set.VerboseOption,
##     set.ZeroPolicyOption
library(car)
## Warning: package 'car' was built under R version 4.3.3
## Loading required package: carData
## 
## Attaching package: 'car'
## The following object is masked from 'package:dplyr':
## 
##     recode
Y_var <- "Jumlah.Kasus.Penyakit...Angka.Penemuan.TBC..Y."
X_vars <- c("Jumlah.Kasus.Penyakit...HIV.AIDS.Kasus.Baru..X1.",
            "Jumlah.Penderita...Diabetes.Mellitus..X2.",
            "Kepadatan.Penduduk.per.km.2..X3.",
            "Persentase.Penduduk.Miskin..X4.")

model_df <- jabar_data %>%
  dplyr::select(all_of(c("KabKota", Y_var, X_vars))) %>%
  st_set_geometry(NULL) %>%
  na.omit()

fmla <- as.formula(paste(Y_var, "~", paste(X_vars, collapse = " + ")))

# --- Uji multikolinearitas ---
lm_plain <- lm(fmla, data = model_df)
vif(lm_plain)
## Jumlah.Kasus.Penyakit...HIV.AIDS.Kasus.Baru..X1. 
##                                         1.739899 
##        Jumlah.Penderita...Diabetes.Mellitus..X2. 
##                                         1.713478 
##                 Kepadatan.Penduduk.per.km.2..X3. 
##                                         2.562068 
##                  Persentase.Penduduk.Miskin..X4. 
##                                         2.504310
# --- Model spasial ---
idx_keep <- match(model_df$KabKota, jabar_data$KabKota)
nb_sub <- nb[idx_keep]
class(nb_sub) <- "nb"
lw_sub <- nb2listw(nb_sub, style = "W", zero.policy = TRUE)

model_df_std <- model_df %>%
  mutate(across(all_of(X_vars), ~ scale(.x)))

sar_model <- lagsarlm(fmla, data = model_df_std, listw = lw_sub, method = "eigen")
sem_model <- errorsarlm(fmla, data = model_df_std, listw = lw_sub, method = "eigen")

# --- Perbandingan model ---
AIC(sar_model)
## [1] 501.6042
AIC(sem_model)
## [1] 500.2111

Model SAR dan SEM kemudian diestimasi dengan menggunakan matriks bobot spasial berbasis kedekatan antarwilayah. Berdasarkan hasil perbandingan nilai Akaike Information Criterion (AIC), model SEM memiliki nilai AIC lebih kecil (500,21) dibandingkan SAR (501,60). Hal ini menunjukkan bahwa model SEM memberikan kinerja yang lebih baik dalam menjelaskan variasi spasial kasus TBC di Jawa Barat.

# --- Uji Moran pada residual ---
moran.test(residuals(sar_model), lw_sub)
## 
##  Moran I test under randomisation
## 
## data:  residuals(sar_model)  
## weights: lw_sub    
## 
## Moran I statistic standard deviate = 0.92493, p-value = 0.1775
## alternative hypothesis: greater
## sample estimates:
## Moran I statistic       Expectation          Variance 
##        0.08998998       -0.04000000        0.01975178
moran.test(residuals(sem_model), lw_sub)
## 
##  Moran I test under randomisation
## 
## data:  residuals(sem_model)  
## weights: lw_sub    
## 
## Moran I statistic standard deviate = 0.28056, p-value = 0.3895
## alternative hypothesis: greater
## sample estimates:
## Moran I statistic       Expectation          Variance 
##     -0.0004791961     -0.0400000000      0.0198427224

Selanjutnya, dilakukan uji Moran’s I terhadap residual untuk memastikan tidak ada autokorelasi spasial yang tersisa. Hasil uji menunjukkan bahwa baik model SAR (p-value = 0,1775) maupun SEM (p-value = 0,3895) memiliki p-value > 0,05, yang berarti tidak terdapat autokorelasi spasial signifikan pada residual. Dengan kata lain, kedua model telah mampu menangkap efek spasial secara memadai.

# --- Peta residual ---
model_df$pred_sar <- predict(sar_model)
## This method assumes the response is known - see manual page
model_df$resid_sar <- residuals(sar_model)
model_df$pred_sem <- predict(sem_model)
## This method assumes the response is known - see manual page
model_df$resid_sem <- residuals(sem_model)

jabar_data_mod <- jabar_data %>%
  left_join(model_df %>% dplyr::select(KabKota, pred_sar, resid_sar, pred_sem, resid_sem),
            by = "KabKota")

tmap_mode("plot")
## ℹ tmap modes "plot" - "view"
tm_shape(jabar_data_mod) +
  tm_fill("resid_sar", style = "quantile", title = "Residual SAR") +
  tm_borders()
## 
## ── tmap v3 code detected ───────────────────────────────────────────────────────
## [v3->v4] `tm_fill()`: instead of `style = "quantile"`, use fill.scale =
## `tm_scale_intervals()`.
## ℹ Migrate the argument(s) 'style' to 'tm_scale_intervals(<HERE>)'
## [v3->v4] `tm_fill()`: migrate the argument(s) related to the legend of the
## visual variable `fill` namely 'title' to 'fill.legend = tm_legend(<HERE>)'
## [scale] tm_fill:() the data variable assigned to 'fill' contains positive and negative values, so midpoint is set to 0. Set 'midpoint = NA' in 'fill.scale = tm_scale_intervals(<HERE>)' to use all visual values (e.g. colors)

tm_shape(jabar_data_mod) +
  tm_fill("resid_sem", style = "quantile", title = "Residual SEM") +
  tm_borders()
## 
## ── tmap v3 code detected ───────────────────────────────────────────────────────
## [v3->v4] `tm_fill()`: instead of `style = "quantile"`, use fill.scale =
## `tm_scale_intervals()`.
## ℹ Migrate the argument(s) 'style' to 'tm_scale_intervals(<HERE>)'[v3->v4] `tm_fill()`: migrate the argument(s) related to the legend of the
## visual variable `fill` namely 'title' to 'fill.legend = tm_legend(<HERE>)'[scale] tm_fill:() the data variable assigned to 'fill' contains positive and negative values, so midpoint is set to 0. Set 'midpoint = NA' in 'fill.scale = tm_scale_intervals(<HERE>)' to use all visual values (e.g. colors)

Peta residual SAR dan SEM memperlihatkan distribusi sisa yang acak tanpa pola spasial tertentu, memperkuat hasil uji Moran sebelumnya. Secara keseluruhan, model SEM dinilai lebih baik dalam menggambarkan hubungan antara faktor-faktor sosial ekonomi dengan kasus TBC di Jawa Barat. Temuan ini menegaskan pentingnya mempertimbangkan efek spasial pada komponen error, mengingat adanya keterkaitan antarwilayah dalam penyebaran penyakit menular seperti TBC.

BAB V. Kesimpulan dan Saran

5.1 Kesimpulan

Berdasarkan hasil analisis yang dilakukan, dapat disimpulkan bahwa angka kasus tuberkulosis di kabupaten/kota di Jawa Barat memiliki hubungan yang signifikan dengan beberapa indikator ekonomi, seperti tingkat kemiskinan, kepadatan penduduk, dan pengeluaran per kapita. Wilayah dengan kondisi ekonomi yang lebih rendah cenderung memiliki prevalensi TBC yang lebih tinggi.

5.2 Saran

Pemerintah daerah diharapkan dapat memperkuat program penanggulangan TBC dengan memperhatikan kondisi sosial ekonomi masyarakat setempat. Peningkatan akses terhadap layanan kesehatan, edukasi kesehatan masyarakat, serta perbaikan kondisi ekonomi dan lingkungan menjadi langkah strategis dalam menekan angka kasus TBC.

Refrensi

Qi, C.-C., Xu, L.-R., Zhao, C.-J., Zhang, H.-Y., Li, Q.-Y., Liu, M.-J., Zhang, Y.-X., Tang, Z., & Ma, X.-X. (2023). Prevalence and risk factors of tuberculosis among people living with HIV/AIDS in China: A systematic review and meta-analysis. BMC Infectious Diseases, 23(1), 456. https://doi.org/10.1186/s12879-023-08015-2

Sihaloho, E. D., Alfarizy, I. L., & Sagala, E. B. (2019). Indikator ekonomi dan angka tuberkulosis di kabupaten/kota di Jawa Barat. Jurnal Ilmu Ekonomi dan Pembangunan (JIEP), 19(2), 128–140. ISSN 1412-2200. https://doi.org/

Franco, J. V. A., Bongaerts, B., Metzendorf, M.-I., Risso, A., Guo, Y., Peña Silva, L., Boeckmann, M., Schlesinger, S., Damen, J. A. A. G., Richter, B., Baddeley, A., Bastard, M., Carlqvist, A., Garcia-Casal, M. N., Hemmingsen, B., Mavhunga, F., Manne-Goehler, J., & Viney, K. (2024). Diabetes as a risk factor for tuberculosis disease (Version published August 23, 2024). Cochrane Database of Systematic Reviews, 2024(8), CD016013. https://doi.org/10.1002/14651858.CD016013.pub2

Lampiran

Link Dataset: https://jabar.bps.go.id/id/statistics-table/3/YTA1Q1ptRmhUMEpXWTBsQmQyZzBjVzgwUzB4aVp6MDkjMyMzMjAw/kasus-penyakit-menurut-kabupaten-kota-dan-jenis-penyakit-di-provinsi-jawa-barat.html?year=2024

Link File Gis: https://drive.google.com/file/d/1eysx8iFUVhscUaIRgeNbGXn-DtCXE05f/view?usp=sharing

Link Dashboard: https://kevinjonathan2023.shinyapps.io/TBCA/