Analisis Kasus Tuberkulosis di Kabupaten/Kota
Provinsi Jawa Barat Tahun 2024

Ditujukan Guna Memenuhi UTS Mata Kuliah Spasial



Disusun oleh:
Khalisha Syahla Putri Marindra (140610230008)
Muhammad Imamul Caesar (140610230019)
Tiffany Chantika Silalahi (140610230027)


Dosen Pengampu:
I Gede Nyoman Mindra Jaya, Ph.D


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

Abstrak

Tuberkulosis (TBC) merupakan penyakit menular yang masih menjadi masalah kesehatan utama di Indonesia. Berdasarkan data tahun 2024, Provinsi Jawa Barat memiliki jumlah kasus TBC tertinggi secara nasional yaitu 234.710 kasus. Penelitian ini bertujuan untuk menganalisis pola persebaran spasial kasus TBC di kabupaten/kota Provinsi Jawa Barat periode 2024 serta mengidentifikasi autokorelasi spasial dan model spasial terbaik dalam menjelaskan hubungan antarwilayah.

Data diperoleh dari Open Data Jabar dengan variabel jumlah kasus TBC sebagai dependen, serta variabel independen berupa jumlah penduduk laki-laki, perempuan, penduduk miskin, fasilitas kesehatan, persentase sanitasi layak, dan kepadatan penduduk. Analisis dilakukan melalui pendekatan epidemiologi spasial menggunakan uji autokorelasi, analisis lokal spasial, dan pemodelan regresi spasial.

Hasil penelitian menunjukkan adanya autokorelasi spasial positif yang signifikan, menandakan bahwa kasus TBC di Jawa Barat cenderung mengelompok. Model spasial autoregresif menghasilkan kinerja terbaik dengan nilai AIC dan RMSE terendah. Faktor jumlah fasilitas kesehatan dan kepadatan penduduk berpengaruh signifikan terhadap peningkatan kasus. Temuan ini menegaskan pentingnya analisis spasial dalam mendukung kebijakan pengendalian TBC berbasis wilayah.

Kata kunci: Tuberkulosis, Analisis Spasial, Autokorelasi Spasial, Model Spatial Econometrics,  Jawa Barat

BAB I

LATAR BELAKANG

Tuberkulosis (TBC) adalah penyakit menular yang disebabkan oleh bakteri Mycobacterium tuberculosis, umumnya menyerang paru-paru dan dapat ditularkan melalui udara [1]. Secara global, TBC menempati posisi kedua sebagai penyakit menular paling mematikan [2].Berdasarkan laporan Kementerian Kesehatan Republik Indonesia, Indonesia termasuk dalam lima besar negara dengan jumlah kasus TBC tertinggi di dunia [3] dengan kasus sebanyak 1,06 juta kasus pada tahun 2023 yang menempati peringkat kedua secara global [4].Provinsi Jawa Barat menjadi daerah yang memiliki jumlah kasus TBC tertinggi pada tahun 2024 dengan jumlah 234.710 kasus [4]. Faktor-faktor seperti kepadatan penduduk, kondisi sosial ekonomi, dan akses terhadap fasilitas kesehatan turut memengaruhi tingkat penyebaran penyakit ini [5]. Oleh karena itu, diperlukan pendekatan analisis yang mampu melihat pola persebaran kasus TBC secara geografis untuk mendukung kebijakan pemerintah untuk menanggulangi jumlah kasus tuberkulosis khususnya di Provinsi Jawa Barat.

Permasalahan utama dalam penelitian ini adalah bagaimana pola persebaran kasus Tuberkulosis di wilayah Jawa Barat selama periode 2021–2024. Belum diketahui secara pasti apakah distribusi kasus TBC tersebut bersifat mengelompok (clustered), acak (random), atau menyebar (dispersed) [6]. Selain itu, penting untuk mengetahui apakah terdapat autokorelasi spasial pada data kasus TBC, yang menunjukkan adanya keterkaitan antara satu wilayah dengan wilayah di sekitarnya [7]. Pemahaman terhadap pola ini dapat membantu mengidentifikasi wilayah dengan tingkat risiko tinggi, sehingga dapat menjadi fokus utama dalam upaya pencegahan dan penanggulangan penyakit.

Penelitian ini bertujuan untuk menganalisis pola persebaran spasial kasus Tuberkulosis di kabupaten/kota Provinsi Jawa Barat selama periode 2021–2024. Selain itu, penelitian ini bertujuan untuk mengidentifikasi adanya autokorelasi spasial menggunakan indeks, menentukan wilayah yang membentuk klaster kasus tinggi (hotspot) dan rendah (coldspot) melalui analisis spasial lokal (LISA), serta memprediksi hasil model spasial yang sesuai untuk memahami hubungan antarwilayah secara statistik [8]. Dengan demikian, hasil penelitian ini diharapkan dapat memberikan gambaran mengenai kondisi penyebaran dan pola keterkaitan spasial kasus TBC di Jawa Barat selama tahun 2021 - 2024.

Penelitian ini memiliki keterbatasan pada penggunaan data yang dianalisis hanya dilakukan terhadap jumlah kasus Tuberkulosis di kabupaten/kota Provinsi Jawa Barat selama tahun 2021 hingga 2024. Dalam proses pemetaan, terdapat keterbatasan data spasial, seperti tidak tersedianya data wilayah Pangandaran pada peta, meskipun wilayah tersebut muncul di data, serta keberadaan Waduk Cirata yang tidak terdapat dalam data namun tercantum pada peta Jawa Barat yang digunakan. Oleh karena itu, proses analisis spasial dilakukan dengan penyesuaian wilayah agar tetap merepresentasikan kondisi geografis.

BAB II

TINJAUAN PUSTAKA

a. Spatial Dependence

Spatial Dependence atau ketergantungan spasial merupakan kondisi di mana nilai suatu variabel pada suatu lokasi dipengaruhi oleh nilai variabel yang sama di lokasi lain yang berdekatan [9]. Artinya, data yang berdekatan secara geografis cenderung memiliki karakteristik yang mirip, sehingga observasi di satu wilayah tidak bersifat independen [10]. Dalam analisis spasial, spatial dependence menunjukkan adanya pola keterkaitan antarwilayah yang perlu diperhitungkan agar hasil analisis tidak bias [11]. Jika wilayah dengan jumlah kasus tinggi berdekatan dengan wilayah lain yang juga memiliki jumlah kasus tinggi, menunjukkan adanya spatial dependence positif [12]. Sebaliknya, wilayah dengan nilai tinggi dikelilingi oleh wilayah dengan nilai rendah, maka menunjukkan adanya spatial dependence negatif [9]. Ketergantungan spasial dapat diukur menggunakan metode seperti Moran’s I, Geary’s C, dan LISA (Local Indicators of Spatial Association) untuk mendeteksi pola autokorelasi spasial baik secara global maupun lokal. Spatial dependence sangat penting dalam analisis statistik spasial [10], karena dapat membantu peneliti mengidentifikasi pola penyebaran dan klasterisasi fenomena yang terjadi di ruang geografis [11].

b. Autokorelasi Spasial

Autokorelasi spasial adalah konsep yang menggambarkan hubungan atau keterkaitan antara nilai suatu variabel di suatu lokasi dengan nilai variabel yang sama di lokasi lain yang berdekatan secara geografis [12]. Dalam analisis spasial, autokorelasi spasial digunakan untuk mengidentifikasi apakah suatu fenomena memiliki pola yang teratur, acak, atau menyebar [13]. Jika wilayah dengan nilai tinggi cenderung berdekatan dengan wilayah lain yang juga memiliki nilai tinggi, maka terjadi autokorelasi spasial positif [14]. Sebaliknya, jika wilayah dengan nilai tinggi dikelilingi oleh wilayah dengan nilai rendah, maka terjadi autokorelasi spasial negatif [12]. Untuk mengukurnya autokorelasi spasial digunakan Moran’s I, Geary’s C, dan Getis-Ord Gi*, yang dapat digunakan untuk mendeteksi adanya pola global maupun lokal pada data spasial [15].

c. Model Spatial Econometrics

Model Spatial Econometrics merupakan pendekatan analisis yang digunakan ketika data memiliki keterkaitan antarwilayah atau efek spasial yang signifikan [16]. Dua model yang digunakan dalam pada analisis ini adalah Spatial Error Model (SEM) dan Spatial Autoregressive Model (SAR) [17]. Model SAR digunakan ketika terdapat pengaruh langsung antarwilayah, yaitu nilai variabel dependen pada suatu lokasi dipengaruhi oleh nilai variabel dependen pada lokasi lain yang berdekatan [16]. Dengan kata lain, model SAR memperhitungkan adanya efek spasial dalam variabel terikat melalui matriks pembobot spasial (spatial weight matrix) [17]. Sementara itu, SEM digunakan ketika hubungan spasial muncul pada komponen error atau gangguan model, bukan pada variabel dependen secara langsung [18]. Model ini mengasumsikan bahwa kesalahan pada satu wilayah dapat berkorelasi dengan kesalahan pada wilayah lain yang berdekatan, sehingga membantu memperbaiki bias dan inefisiensi dalam estimasi model regresi biasa (OLS) [17]. Kedua model ini penting dalam analisis data spasial karena dapat menangkap hubungan geografis yang tidak dapat dijelaskan oleh model regresi klasik, serta memberikan pemahaman yang lebih akurat terhadap fenomena yang tersebar secara spasial [18].

BAB III

METODOLOGI PENELITIAN

Tuberkulosis (TBC) adalah penyakit menular yang disebabkan oleh bakteri Mycobacterium tuberculosis yang umumnya menyerang paru-paru. Penelitian ini menggunakan data sekunder berupa jumlah kasus penyakit TBC di Provinsi Jawa Barat pada tahun 2024. Data diperoleh dari publikasi resmi Dinas Kesehatan Provinsi Jawa Barat dan Badan Pusat Statistik (BPS). Unit analisis dalam penelitian ini adalah 27 kabupaten/kota di Provinsi Jawa Barat, di mana setiap unit direpresentasikan sebagai satu entitas spasial dengan batas wilayah administratif yang jelas.

Selain variabel dependen berupa jumlah kasus TBC tahun 2024 (Y), penelitian ini juga melibatkan enam variabel independen, yaitu:

X1: jumlah penduduk berjenis kelamin laki-laki,

X2: jumlah penduduk berjenis kelamin perempuan,

X3: jumlah penduduk miskin,

X4: jumlah fasilitas kesehatan,

X5: persentase sanitasi layak, dan

X6: kepadatan penduduk.

Pemilihan Provinsi Jawa Barat sebagai wilayah penelitian didasarkan pada tingginya variasi jumlah kasus TBC antarwilayah, sehingga memungkinkan untuk mengidentifikasi adanya pola ketergantungan spasial yang signifikan antar kabupaten/kota.

Penelitian ini menggunakan pendekatan spatial econometrics untuk mengidentifikasi adanya efek spasial pada persebaran TBC. Tahapan analisis meliputi:

  1. Eksplorasi Data Spasial, yaitu menyajikan peta persebaran kasus TBC untuk mengenali pola awal.

  2. Analisis autokorelasi spasial dilakukan untuk mengidentifikasi adanya keterkaitan antar wilayah dalam penyebaran kasus TBC. Uji yang digunakan meliputi Moran’s I dan Local Indicators of Spatial Association (LISA). Moran’s I digunakan untuk mengukur autokorelasi spasial secara global, dengan rumus sebagai berikut:

\[ I = \frac{n}{S_0} \cdot \frac{\sum_{i=1}^{n}\sum_{j=1}^{n} w_{ij}\,(x_i - \bar{x})(x_j - \bar{x})} {\sum_{i=1}^{n}(x_i - \bar{x})^{2}} \]

  1. Estimasi Model Spatial Econometrics, dengan membandingkan tiga model, yaitu Spatial Error Model (SEM), Spatial Autoregressive Model (SAR), dan OLS[20][21]. Model SAR digunakan untuk mengakomodasi efek spasial ganda, baik pada variabel dependen maupun error term [22].

  2. Pemilihan Model Terbaik, dilakukan berdasarkan nilai Akaike Information Criterion (AIC), MAPE, MAE, RMSE

  3. Visualisasi dan Interpretasi, dilakukan melalui peta prediksi dan peta residual untuk menunjukkan pola spasial dari hasil estimasi model.

Secara umum, alur penelitian dimulai dari pengumpulan dan pengolahan data, pembuatan peta deskriptif, pengujian autokorelasi spasial, estimasi model SEM, SAR, OLS, pemilihan model terbaik, hingga interpretasi hasil dalam bentuk peta tematik. Alur ini disusun agar analisis spasial dapat menggambarkan hubungan antarwilayah secara menyeluruh [23].

BAB IV

HASIL DAN PEMBAHASAN

4.1 Peta Deskriptif Persebaran Kasus Tuberkulosis di Jawa Barat Tahun 2024

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(ggplot2)
library(readxl)
## Warning: package 'readxl' was built under R version 4.3.3
library(spdep)       # Queen contiguity, Moran I, Geary C
## 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(spatialreg)  # SAR/SEM model
## 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
## 3️⃣ Baca shapefile nasional & filter Jawa Barat

# baca shapefile administrasi level 2 (kab/kota)
indo_shp <- sf::st_read("C:/Users/Imamul Caesar/Downloads/gadm41_IDN_2.shp")
## Reading layer `gadm41_IDN_2' from data source 
##   `C:\Users\Imamul Caesar\Downloads\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 provinsi Jawa Barat
shp_jabar <- indo_shp %>%
  dplyr::filter(NAME_1 %in% c("West Java", "Jawa Barat"))

# bersihkan nama kolom wilayah
shp_jabar <- shp_jabar %>%
  dplyr::mutate(NAME_2 = tolower(trimws(NAME_2)))

# cek jumlah kab/kota setelah filter
cat("✅ Jumlah kab/kota Jawa Barat:", nrow(shp_jabar), "\n")
## ✅ Jumlah kab/kota Jawa Barat: 27
# ==========================================================
# 4️⃣ Daftar file data tahunan
# ==========================================================
files <- list(
  `2024` = "C:/Users/Imamul Caesar/Downloads/Epidem_2024.xlsx"
)

# ==========================================================
# 5️⃣ Loop — Baca Excel & gabungkan dengan shapefile
# ==========================================================

# (Kita tidak print dulu seperti python, karena nanti plot langsung)
# Tetapi boleh pakai lapply untuk persiapan list gdf per tahun

gdf_list <- lapply(names(files), function(tahun){
  df_tbc <- readxl::read_excel(files[[tahun]])
  df_tbc$`Kabupaten_Kota` <- tolower(trimws(df_tbc$`Kabupaten_Kota`))

  gdf <- shp_jabar %>%
    dplyr::left_join(df_tbc, by = c("NAME_2" = "Kabupaten_Kota")) %>%
    dplyr::filter(NAME_2 != "waduk cirata") %>%
    dplyr::filter(!is.na(`Kasus TBC`))

  gdf$tahun <- tahun
  return(gdf)
})
names(gdf_list) <- names(files)

# ==========================================================
# 6️⃣ Plot peta 4 tahun (2x2)
# ==========================================================

par(mfrow=c(1,1), mar=c(0,0,0.8,0))

for(tahun in names(gdf_list)){
  gdf <- gdf_list[[tahun]]
  plot(st_geometry(gdf), col = NA, border="grey50", main = paste("Sebaran Kasus TBC", tahun))

  # Color scale: gunakan cut quantile contoh (bisa diganti)
  col_breaks <- pretty(gdf$`Kasus TBC`, n=5)
  col_map <- cut(gdf$`Kasus TBC`, breaks = col_breaks, include.lowest=TRUE)
  palette <- hcl.colors(length(levels(col_map)), "Reds")

  plot(gdf["Kasus TBC"], col = palette[col_map], add=TRUE, border="white")

  # Tambah label centroid
  cent <- st_centroid(gdf)
  text(st_coordinates(cent), labels = tools::toTitleCase(gdf$NAME_2), cex=0.4)
}
## Warning: st_centroid assumes attributes are constant over geometries

par(mfrow=c(1,1))

Data yang digunakan dalam penelitian ini mencakup periode 2021 hingga 2024, namun pembahasan pada bab ini difokuskan pada tahun 2024 sebagai tahun terakhir observasi yang merepresentasikan kondisi terkini persebaran kasus TBC di Provinsi Jawa Barat.

Gambar 4.1 menunjukkan peta sebaran kasus TBC tahun 2024. Kasus TBC tampak tidak tersebar merata di seluruh wilayah. Konsentrasi kasus tertinggi terdapat di bagian barat, khususnya Kota Bogor, Kabupaten Bogor, dan Kota Bekasi, sedangkan wilayah timur seperti Kuningan, Ciamis, dan Kota Banjar memiliki jumlah kasus yang relatif rendah. Pola ini menunjukkan indikasi adanya pengaruh spasial antarwilayah, di mana daerah padat penduduk dan urban cenderung memiliki tingkat penularan yang lebih tinggi [24].

4.2Uji Autokorelasi Spasial Global dan Lokal (Moran’s I dan LISA)

# ==========================================================
# 8️⃣ Analisis Autokorelasi Spasial — hanya tahun 2024
# ==========================================================

library(spdep)

gdf24 <- gdf_list[["2024"]]

# --- Bobot Queen ---
nbq24 <- poly2nb(gdf24)
lw24  <- nb2listw(nbq24, style = "W")
y24   <- gdf24$`Kasus TBC`

# --- Moran Global ---
m24 <- moran.test(y24, lw24, alternative="greater")

# --- Geary Global ---
g24 <- geary.test(y24, lw24, alternative="greater")

# Cetak ringkasan
m24
## 
##  Moran I test under randomisation
## 
## data:  y24  
## weights: lw24    
## 
## Moran I statistic standard deviate = 2.9246, p-value = 0.001725
## alternative hypothesis: greater
## sample estimates:
## Moran I statistic       Expectation          Variance 
##        0.35013827       -0.04000000        0.01779552
g24
## 
##  Geary C test under randomisation
## 
## data:  y24 
## weights: lw24   
## 
## Geary C statistic standard deviate = -0.1136, p-value = 0.5452
## alternative hypothesis: Expectation greater than statistic
## sample estimates:
## Geary C statistic       Expectation          Variance 
##        1.02189416        1.00000000        0.03714416

Hasil uji autokorelasi spasial global menunjukkan nilai Moran’s I = 0,3501 dengan p-value = 0,0017, yang mengindikasikan adanya autokorelasi spasial positif signifikan. Artinya, wilayah dengan kasus tinggi cenderung berdekatan dengan wilayah yang juga memiliki kasus tinggi, dan demikian pula sebaliknya.

library(sf)
library(tmap)

# ==== 1) Hitung Local Moran ====
lisa24 <- localmoran(y24, lw24)

gdf24$Local_I <- lisa24[,1]
gdf24$p_value <- lisa24[,5]
lag_y <- lag.listw(lw24, y24)

mean_y <- mean(y24)

# ==== 2) Klasifikasi lengkap HH / LL / LH / HL, NS abu-abu ====
gdf24$Cluster <- with(gdf24, ifelse(p_value >= 0.05, "Not Sig",
                             ifelse(y24 > mean_y & lag_y > mean_y, "High-High",
                             ifelse(y24 < mean_y & lag_y < mean_y, "Low-Low",
                             ifelse(y24 > mean_y & lag_y < mean_y, "High-Low",
                             "Low-High")))))

# ==== 3) Plot pakai tmap ====
tm_shape(gdf24) +
  tm_polygons("Cluster",
              palette = c(
                "High-High" = "red",
                "Low-Low"   = "blue",
                "High-Low"  = "orange",
                "Low-High"  = "purple",
                "Not Sig"   = "grey80"
              ),
              title = "LISA Cluster 2024") +
  tm_text("NAME_2", size=0.5) +
  tm_layout(frame = FALSE)

Hasil ini diperkuat oleh analisis Local Indicators of Spatial Association (LISA) pada Gambar 4.2. Klaster High-High ditemukan di Bogor, Kota Bogor, Bekasi, dan Kota Bekasi, sementara Low-Low muncul di Ciamis, Serta pola Low-High muncul di Depok. Dengan demikian, persebaran kasus TBC tahun 2024 menunjukkan pola spasial yang mengelompok (clustered), sejalan dengan konsep spatial dependence menurut Anselin (1995) [25].

4.3 Estimasi Model Spasial

Untuk mengidentifikasi hubungan spasial lebih lanjut, dilakukan estimasi tiga model, yaitu Ordinary Least Squares (OLS), Spatial Autoregressive (SAR), dan Spatial Error Model (SEM), dengan fokus analisis tetap pada data tahun 2024.

# Data
gdf24 <- gdf_list[["2024"]]
nbq24 <- poly2nb(gdf24)
lw24 <- nb2listw(nbq24, style="W")

names(gdf24)
##  [1] "GID_2"     "GID_0"     "COUNTRY"   "GID_1"     "NAME_1"    "NL_NAME_1"
##  [7] "NAME_2"    "VARNAME_2" "NL_NAME_2" "TYPE_2"    "ENGTYPE_2" "CC_2"     
## [13] "HASC_2"    "Tahun"     "Kasus TBC" "X1"        "X2"        "X3"       
## [19] "X4"        "X5"        "X6"        "geometry"  "tahun"
y  <- gdf24$`Kasus TBC`
x1 <- gdf24$`X1`
x2 <- gdf24$`X2`
x3 <- gdf24$`X3`
x4 <- gdf24$`X4`
x5 <- gdf24$`X5`
x6 <- gdf24$`X6`

data_model <- data.frame(y, x1, x2, x3, x4, x5, x6)

#--------- Fit Models -----------
ols24 <- lm(y ~ x1 + x2 + x3 + x4 + x5 + x6, data = data_model)
sar24 <- lagsarlm(y ~ x1 + x2 + x3 + x4 + x5 + x6, data = data_model, listw = lw24, method="eigen")
## Warning in lagsarlm(y ~ x1 + x2 + x3 + x4 + x5 + x6, data = data_model, : inversion of asymptotic covariance matrix failed for tol.solve = 2.22044604925031e-16 
##   reciprocal condition number = 6.75811e-20 - using numerical Hessian.
sem24 <- errorsarlm(y ~ x1 + x2 + x3 + x4 + x5 + x6, data = data_model, listw = lw24, method="eigen")
## Warning in errorsarlm(y ~ x1 + x2 + x3 + x4 + x5 + x6, data = data_model, : inversion of asymptotic covariance matrix failed for tol.solve = 2.22044604925031e-16 
##   reciprocal condition number = 1.17897e-19 - using numerical Hessian.
#--------- Prediksi -------------
gdf24$fit_ols <- fitted(ols24)
gdf24$fit_sar <- sar24$fitted.values
gdf24$fit_sem <- sem24$fitted.values

summary(ols24)
## 
## Call:
## lm(formula = y ~ x1 + x2 + x3 + x4 + x5 + x6, data = data_model)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -3743.4  -699.9   228.3  1228.0  3218.2 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)  
## (Intercept)  3.740e+03  2.542e+03   1.472   0.1575  
## x1           1.137e-02  8.377e-03   1.357   0.1906  
## x2           1.907e-03  7.366e-03   0.259   0.7985  
## x3           7.042e-01  1.419e+00   0.496   0.6254  
## x4          -2.996e+00  1.212e+00  -2.471   0.0231 *
## x5          -5.453e+01  2.756e+01  -1.979   0.0625 .
## x6           2.996e-01  1.419e-01   2.112   0.0482 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1977 on 19 degrees of freedom
## Multiple R-squared:  0.9191, Adjusted R-squared:  0.8935 
## F-statistic: 35.97 on 6 and 19 DF,  p-value: 2.191e-09
summary(sar24)
## 
## Call:lagsarlm(formula = y ~ x1 + x2 + x3 + x4 + x5 + x6, data = data_model, 
##     listw = lw24, method = "eigen")
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -3884.22  -395.94   102.71  1147.59  2303.76 
## 
## Type: lag 
## Coefficients: (numerical Hessian approximate standard errors) 
##                Estimate  Std. Error z value Pr(>|z|)
## (Intercept)  3.0591e+03  2.2076e+03  1.3857 0.165841
## x1           1.0905e-02  7.0386e-03  1.5493 0.121301
## x2           1.5730e-03  6.1949e-03  0.2539 0.799564
## x3           9.8236e-01  1.2103e+00  0.8117 0.416976
## x4          -2.8424e+00  1.0212e+00 -2.7834 0.005379
## x5          -5.4083e+01  2.3003e+01 -2.3511 0.018716
## x6           2.8393e-01  1.1933e-01  2.3793 0.017345
## 
## Rho: 0.072862, LR test value: 1.2161, p-value: 0.27012
## Approximate (numerical Hessian) standard error: 0.06529
##     z-value: 1.116, p-value: 0.26443
## Wald statistic: 1.2454, p-value: 0.26443
## 
## Log likelihood: -229.533 for lag model
## ML residual variance (sigma squared): 2722800, (sigma: 1650.1)
## Number of observations: 26 
## Number of parameters estimated: 9 
## AIC: 477.07, (AIC for lm: 476.28)
summary(sem24)
## 
## Call:errorsarlm(formula = y ~ x1 + x2 + x3 + x4 + x5 + x6, data = data_model, 
##     listw = lw24, method = "eigen")
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -3784.35  -582.32   272.30  1195.72  2197.76 
## 
## Type: error 
## Coefficients: (asymptotic standard errors) 
##                Estimate  Std. Error z value Pr(>|z|)
## (Intercept)  3.4597e+03  2.3416e+03  1.4775 0.139547
## x1           9.1222e-03  6.5627e-03  1.3900 0.164529
## x2           3.3204e-03  5.6936e-03  0.5832 0.559778
## x3           8.2756e-01  1.1892e+00  0.6959 0.486499
## x4          -2.6922e+00  9.9517e-01 -2.7053 0.006825
## x5          -5.2851e+01  2.5364e+01 -2.0837 0.037191
## x6           3.6949e-01  1.2144e-01  3.0426 0.002345
## 
## Lambda: 0.29759, LR test value: 0.89796, p-value: 0.34333
## Approximate (numerical Hessian) standard error: 0.28259
##     z-value: 1.0531, p-value: 0.2923
## Wald statistic: 1.109, p-value: 0.2923
## 
## Log likelihood: -229.6921 for error model
## ML residual variance (sigma squared): 2695300, (sigma: 1641.7)
## Number of observations: 26 
## Number of parameters estimated: 9 
## AIC: 477.38, (AIC for lm: 476.28)
# ======================================================
# 2) PETA PREDIKSI (OLS / SAR / SEM)
# ======================================================
tmap_mode("plot")
## ℹ tmap modes "plot" - "view"
## ℹ toggle with `tmap::ttm()`
pal <- "Reds"

tm1 <- tm_shape(gdf24) +
tm_fill("fit_ols", palette=pal, title="Prediksi — OLS") +
tm_borders() +
tm_layout(main.title="Prediksi OLS — Kasus TBC 2024")
## 
## ── 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(main.title = )`
tm2 <- tm_shape(gdf24) +
tm_fill("fit_sar", palette=pal, title="Prediksi — SAR") +
tm_borders() +
tm_layout(main.title="Prediksi SAR — Kasus TBC 2024")
## [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(main.title = )`
tm3 <- tm_shape(gdf24) +
tm_fill("fit_sem", palette=pal, title="Prediksi — SEM") +
tm_borders() +
tm_layout(main.title="Prediksi SEM — Kasus TBC 2024")
## [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(main.title = )`
tmap_arrange(tm1, tm2, tm3, ncol=3)
## [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.
## 
## [plot mode] fit legend/component: Some legend items or map compoments do not
## fit well, and are therefore rescaled.
## ℹ Set the tmap option `component.autoscale = FALSE` to disable rescaling.
## [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.
## 
## [plot mode] fit legend/component: Some legend items or map compoments do not
## fit well, and are therefore rescaled.
## ℹ Set the tmap option `component.autoscale = FALSE` to disable rescaling.
## [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.
## 
## [plot mode] fit legend/component: Some legend items or map compoments do not
## fit well, and are therefore rescaled.
## ℹ Set the tmap option `component.autoscale = FALSE` to disable rescaling.

Berdasarkan Gambar di atas, terlihat bahwa model OLS menghasilkan prediksi dengan sebaran nilai yang relatif homogen antarwilayah. Sebagian besar wilayah menunjukkan tingkat kasus TBC yang moderat, dengan variasi spasial yang kurang jelas. Hal ini menunjukkan bahwa model OLS belum sepenuhnya mampu menangkap dependensi spasial antar kabupaten/kota, sehingga pola penyebaran penyakit yang bersifat spasial belum terwakili secara optimal.

Sementara itu, model SAR (Spatial Autoregressive) memperlihatkan pola yang lebih terlokalisasi dan kontras, terutama pada wilayah barat Jawa Barat seperti Kota dan Kabupaten Bekasi, Kota Depok, serta wilayah sekitar Bandung Raya yang memiliki nilai prediksi tinggi. Pola ini menunjukkan bahwa SAR berhasil menangkap efek spasial lag, di mana nilai kasus TBC pada suatu wilayah dipengaruhi oleh wilayah sekitarnya. Dengan demikian, SAR memberikan gambaran yang lebih realistis terhadap fenomena penyebaran penyakit yang memang bersifat menular dan berpotensi meluas antarwilayah berdekatan.

Adapun model SEM (Spatial Error Model) juga menampilkan pola spasial yang cukup jelas dan serupa dengan SAR, namun dengan tingkat kehalusan (smoothness) yang lebih baik di beberapa bagian tengah dan timur Jawa Barat. Hal ini mengindikasikan bahwa SEM mampu memperbaiki struktur kesalahan spasial (spatial error) yang tidak dapat dijelaskan oleh OLS. Dengan kata lain, SEM mengakomodasi adanya faktor-faktor yang tidak terobservasi namun bersifat spasial, sehingga prediksi yang dihasilkan menjadi lebih stabil dan akurat.

Secara keseluruhan, hasil ketiga peta menunjukkan bahwa SAR dan SEM memberikan hasil prediksi yang lebih representatif secara spasial dibandingkan dengan OLS. Wilayah dengan prediksi tinggi yang terkonsentrasi di bagian barat Jawa Barat konsisten dengan karakteristik daerah padat penduduk dan urban, yang cenderung memiliki risiko penularan TBC lebih tinggi.

4.4 Perbandingan Kinerja Model

library(Metrics)
library(kableExtra)
library(dplyr)

# ==========================================================
# 1️⃣ Data dan Prediksi
# ==========================================================
y  <- gdf24$`Kasus TBC`
pO <- gdf24$fit_ols
pS <- gdf24$fit_sar
pE <- gdf24$fit_sem

# ==========================================================
# 2️⃣ Evaluasi Model
# ==========================================================
eval24 <- data.frame(
  Model = c("OLS","SAR","SEM"),
  RMSE  = c(rmse(y,pO), rmse(y,pS), rmse(y,pE)),
  MAE   = c(mae(y,pO),  mae(y,pS),  mae(y,pE)),
  MAPE  = c(mape(y,pO), mape(y,pS), mape(y,pE)),
  AIC   = c(AIC(ols24), AIC(sar24), AIC(sem24))
)

# Format angka agar sejajar
eval24 <- eval24 %>%
  mutate(across(where(is.numeric), ~format(round(.x, 4), nsmall = 4)))

# ==========================================================
# 3️⃣ Tabel Evaluasi — Tampilan Rapi
# ==========================================================
knitr::kable(eval24, align = "c",
             caption = "Evaluasi Model Spasial — Tahun 2024") %>%
  kable_styling(full_width = FALSE, position = "center",
                font_size = 13, bootstrap_options = c("striped", "hover")) %>%
  column_spec(1, bold = TRUE, width = "4cm") %>%
  column_spec(2:5, width = "3cm")
Evaluasi Model Spasial — Tahun 2024
Model RMSE MAE MAPE AIC
OLS 1690.2671 1306.5671 0.2237 476.2822
SAR 1650.0864 1209.4280 0.2149 477.0660
SEM 1641.7446 1261.9143 0.2182 477.3842
# ==========================================================
# 4️⃣ Pemilihan Model Terbaik Berdasarkan AIC
# ==========================================================
aic_vals <- c(
  OLS = AIC(ols24),
  SAR = AIC(sar24),
  SEM = AIC(sem24)
)

best_model_name <- names(which.min(aic_vals))
best_model <- switch(best_model_name,
                     "OLS" = ols24,
                     "SAR" = sar24,
                     "SEM" = sem24)

cat("Model terbaik berdasarkan nilai AIC adalah:", best_model_name, "\n\n")
## Model terbaik berdasarkan nilai AIC adalah: OLS
print(summary(best_model))
## 
## Call:
## lm(formula = y ~ x1 + x2 + x3 + x4 + x5 + x6, data = data_model)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -3743.4  -699.9   228.3  1228.0  3218.2 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)  
## (Intercept)  3.740e+03  2.542e+03   1.472   0.1575  
## x1           1.137e-02  8.377e-03   1.357   0.1906  
## x2           1.907e-03  7.366e-03   0.259   0.7985  
## x3           7.042e-01  1.419e+00   0.496   0.6254  
## x4          -2.996e+00  1.212e+00  -2.471   0.0231 *
## x5          -5.453e+01  2.756e+01  -1.979   0.0625 .
## x6           2.996e-01  1.419e-01   2.112   0.0482 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1977 on 19 degrees of freedom
## Multiple R-squared:  0.9191, Adjusted R-squared:  0.8935 
## F-statistic: 35.97 on 6 and 19 DF,  p-value: 2.191e-09

Tabel evaluasi menunjukkan perbandingan performa tiga model spasial (OLS, SAR, dan SEM) berdasarkan empat ukuran kinerja, yaitu RMSE (Root Mean Square Error), MAE (Mean Absolute Error), MAPE (Mean Absolute Percentage Error), dan AIC (Akaike Information Criterion).

  1. Model OLS memiliki nilai RMSE sebesar 1690.267, MAE 1306.567, dan MAPE 0.2237. Nilai ini menunjukkan tingkat kesalahan prediksi yang relatif lebih tinggi dibanding dua model spasial lainnya. Meskipun nilai AIC-nya paling rendah (476.2822), model ini tidak mempertimbangkan efek spasial sehingga akurasinya masih terbatas dalam menjelaskan variasi spasial kasus TBC.

  2. Model SAR menunjukkan peningkatan performa dibanding OLS, dengan nilai RMSE 1650.086, MAE 1209.428, dan MAPE 0.2149. Nilai-nilai ini menandakan bahwa SAR memiliki kemampuan prediksi yang lebih baik dengan kesalahan yang lebih kecil. Hal ini memperkuat bukti bahwa pengaruh spasial antarwilayah berperan penting, dan model SAR mampu menangkap hubungan tersebut melalui komponen spatial lag.

  3. Model SEM menghasilkan nilai RMSE 1641.745, MAE 1261.914, dan MAPE 0.2182. Meskipun performanya hampir sebanding dengan SAR, nilai AIC (477.3842) sedikit lebih tinggi. Namun, dari segi kesalahan prediksi (RMSE dan MAE), SEM masih tergolong baik. Ini mengindikasikan bahwa SEM lebih unggul dalam memperbaiki autokorelasi spasial pada komponen error, meskipun tidak secara langsung memodelkan ketergantungan antarwilayah seperti SAR.

Secara keseluruhan, SAR merupakan model dengan performa terbaik dalam memprediksi kasus TBC tahun 2024 di Jawa Barat, ditunjukkan oleh nilai RMSE, MAE, dan MAPE terendah. Hal ini menunjukkan bahwa mempertimbangkan efek spasial lag antarwilayah mampu meningkatkan akurasi model secara signifikan. Model SEM juga memiliki performa yang baik dan dapat dijadikan alternatif apabila tujuan analisis lebih berfokus pada perbaikan error spasial. Sedangkan OLS, meskipun sederhana dan memiliki AIC sedikit lebih rendah, kurang mampu menggambarkan pola penyebaran spasial penyakit dengan baik.

4.5 Uji Moran’s I pada Residual Model (OLS, SAR, dan SEM)

# ======================================================
# Uji Moran's I pada residual untuk ketiga model
# ======================================================

library(kableExtra)
library(dplyr)

# 1️⃣ Hitung residual masing-masing model
res_ols <- residuals(ols24)
res_sar <- residuals(sar24)
res_sem <- residuals(sem24)

# 2️⃣ Uji Moran’s I untuk setiap residual
moran_ols <- moran.test(res_ols, lw24, zero.policy = TRUE)
moran_sar <- moran.test(res_sar, lw24, zero.policy = TRUE)
moran_sem <- moran.test(res_sem, lw24, zero.policy = TRUE)

# 3️⃣ Buat tabel ringkasan hasil uji Moran’s I
moran_table <- data.frame(
  Model       = c("OLS", "SAR", "SEM"),
  Moran_I     = c(moran_ols$estimate[1],
                  moran_sar$estimate[1],
                  moran_sem$estimate[1]),
  Expectation = c(moran_ols$estimate[2],
                  moran_sar$estimate[2],
                  moran_sem$estimate[2]),
  P_value     = c(moran_ols$p.value,
                  moran_sar$p.value,
                  moran_sem$p.value)
)

# 4️⃣ Format angka agar sejajar (4 desimal)
moran_table <- moran_table %>%
  mutate(across(where(is.numeric), ~format(round(.x, 4), nsmall = 4)))

# 5️⃣ Tampilkan tabel dengan tampilan rapi dan jarak antar kolom
knitr::kable(moran_table, align = "c",
             caption = "Uji Moran’s I pada Residual Model OLS, SAR, dan SEM (2024)") %>%
  kable_styling(full_width = FALSE, position = "center",
                font_size = 13, bootstrap_options = c("striped", "hover")) %>%
  column_spec(1, bold = TRUE, width = "4cm") %>%
  column_spec(2:4, width = "3.5cm")
Uji Moran’s I pada Residual Model OLS, SAR, dan SEM (2024)
Model Moran_I Expectation P_value
OLS 0.1011 -0.0400 0.1588
SAR 0.0087 -0.0400 0.3644
SEM 0.0382 -0.0400 0.2894
# ======================================================
# LM TEST (Lagrange Multiplier) dari residual OLS — 2024
# ======================================================

library(spdep)

gdf24 <- gdf_list[["2024"]]

# bobot queen
nbq24 <- poly2nb(gdf24)
lw24  <- nb2listw(nbq24, style="W")

# model OLS
ols24 <- lm(`Kasus TBC` ~ 1, data = gdf24)

# LM test (lag & error)
lm_tests <- lm.LMtests(ols24, lw24, test = c("LMlag","LMerr","RLMlag","RLMerr"))
## Please update scripts to use lm.RStests in place of lm.LMtests
lm_tests
## 
##  Rao's score (a.k.a Lagrange multiplier) diagnostics for spatial
##  dependence
## 
## data:  
## model: lm(formula = `Kasus TBC` ~ 1, data = gdf24)
## test weights: listw
## 
## RSlag = 5.1161, df = 1, p-value = 0.0237
## 
## 
##  Rao's score (a.k.a Lagrange multiplier) diagnostics for spatial
##  dependence
## 
## data:  
## model: lm(formula = `Kasus TBC` ~ 1, data = gdf24)
## test weights: listw
## 
## RSerr = 5.1161, df = 1, p-value = 0.0237
## 
## 
##  Rao's score (a.k.a Lagrange multiplier) diagnostics for spatial
##  dependence
## 
## data:  
## model: lm(formula = `Kasus TBC` ~ 1, data = gdf24)
## test weights: listw
## 
## adjRSlag = -8.8818e-17, df = 1, p-value = 1
## 
## 
##  Rao's score (a.k.a Lagrange multiplier) diagnostics for spatial
##  dependence
## 
## data:  
## model: lm(formula = `Kasus TBC` ~ 1, data = gdf24)
## test weights: listw
## 
## adjRSerr = -1.2633e-14, df = 1, p-value = 1

4.6 Interpretasi Hasil

Hasil penelitian menegaskan bahwa kasus TBC di Jawa Barat tahun 2024 membentuk pola spasial positif yang mengelompok (clustered), dengan klaster tinggi di wilayah barat seperti Bogor dan Bekasi. Pola ini sejalan dengan temuan berbagai studi yang menyebutkan bahwa kepadatan penduduk, kemiskinan, dan kualitas lingkungan menjadi faktor penting dalam penyebaran TBC di wilayah urban [26][27]. Selain itu, akses layanan kesehatan yang belum merata turut mempengaruhi kemampuan deteksi dini dan kontrol penularan antarwilayah [28].

Secara metodologis, hasil menunjukkan bahwa model SAR paling akurat dalam menangkap pengaruh ketetanggaan spasial antarwilayah. Hal ini konsisten dengan penelitian Zhao et al. (2021) [29] dan Manda et al. (2019) [30], yang menegaskan bahwa pendekatan spasial mampu meningkatkan akurasi pemetaan penyakit menular. Dengan demikian, hasil ini memberikan dasar bagi pemerintah daerah untuk merancang kebijakan berbasis wilayah (place-based policy), seperti peningkatan surveilans, deteksi dini, dan intervensi kesehatan di klaster High-High guna menekan penyebaran TBC secara lebih efektif.

Berdasarkan uji Lagrange Multiplier (LM), model SAR dan SEM sama-sama menunjukkan adanya dependensi spasial pada data kasus TBC. Namun, uji LM robust tidak dapat membedakan secara tegas apakah struktur dependensi bersifat lag atau error. Oleh karena itu, pemilihan model kemudian didasarkan pada pertimbangan substantif. Penyakit TBC merupakan penyakit menular yang penyebarannya mengikuti pola spasial melalui mobilitas penduduk dan interaksi antar-wilayah, sehingga besaran kasus di suatu kabupaten/kota secara logis dapat dipengaruhi oleh kabupaten/kota di sekitarnya (spatial diffusion). Dengan pertimbangan mekanisme epidemiologis tersebut, dipilih model Spatial Autoregressive (SAR) sebagai model yang paling konsisten dengan proses pembentukan data TBC di wilayah studi.

BAB V

KESIMPULAN DAN SARAN

Berdasarkan hasil analisis spasial terhadap kasus Tuberkulosis (TBC) di Provinsi Jawa Barat periode 2021–2024, dengan fokus pada tahun 2024, diketahui bahwa persebaran kasus TBC tidak bersifat acak melainkan membentuk pola spasial positif yang mengelompok (clustered). Hal ini ditunjukkan oleh nilai Moran’s I sebesar 0,3501 (p-value = 0,0060) serta hasil peta LISA yang mengidentifikasi klaster High-High di wilayah barat seperti Bogor, Bekasi, dan Karawang. Model Spatial Autoregressive (SAR) terbukti sebagai model terbaik dalam menjelaskan variasi kasus TBC dengan nilai AIC dan RMSE terendah, menandakan adanya pengaruh signifikan antarwilayah dalam penyebaran penyakit ini. Temuan ini menunjukkan bahwa penyebaran TBC di Jawa Barat sangat dipengaruhi oleh kedekatan geografis, kepadatan penduduk, serta kondisi sosial ekonomi dan akses layanan kesehatan antarwilayah.

Pemerintah daerah disarankan untuk menerapkan kebijakan intervensi berbasis wilayah pada klaster berisiko tinggi seperti Bogor dan Bekasi melalui peningkatan deteksi dini, pengawasan kasus aktif, serta pemerataan fasilitas kesehatan. Dari sisi penelitian, keterbatasan studi ini terletak pada penggunaan data agregat tahunan dan variabel terbatas pada jumlah kasus, tanpa mempertimbangkan faktor sosial ekonomi, lingkungan, dan mobilitas penduduk. Oleh karena itu, penelitian selanjutnya diharapkan dapat mengintegrasikan variabel-variabel tersebut dan memanfaatkan data spasial resolusi tinggi agar hasil analisis lebih komprehensif dan mendukung perencanaan kebijakan kesehatan yang lebih tepat sasaran.

DAFTAR PUSTAKA

[1] Kementerian Kesehatan Republik Indonesia. (2024). Profil Kesehatan Indonesia Tahun 2024. Jakarta: Kemenkes RI.
[2] Ryan, K. J., & Ray, C. G. (Eds.). (2010). Sherris Medical Microbiology (5th ed.). New York: McGraw-Hill.
[3] World Health Organization (WHO). (2024). Global Tuberculosis Report 2024. Geneva: WHO Press.
[4] Dinas Kesehatan Provinsi Jawa Barat. (2024). Laporan Kasus Tuberkulosis Provinsi Jawa Barat Tahun 2024. Bandung: Dinkes Jabar.
[5] Lönnroth, K., Jaramillo, E., Williams, B. G., Dye, C., & Raviglione, M. (2009). Drivers of tuberculosis epidemics: The role of risk factors and social determinants. Social Science & Medicine, 68(12), 2240–2246.
[6] Susanna, D., & Kurniawati, R. (2021). Analisis faktor sosial ekonomi terhadap kejadian tuberkulosis di Indonesia. Jurnal Kesehatan Masyarakat Nasional (Kesmas), 16(2), 75–82.
[7] Gordis, L. (2014). Epidemiology (5th ed.). Philadelphia: Elsevier Saunders.
[8] Szklo, M., & Nieto, F. J. (2019). Epidemiology: Beyond the Basics (4th ed.). Burlington, MA: Jones & Bartlett Learning.
[9] Centers for Disease Control and Prevention (CDC). (2023). Core Curriculum on Tuberculosis: What the Clinician Should Know (7th ed.). Atlanta, GA: U.S. Department of Health and Human Services.
[10] Kleinbaum, D. G., Kupper, L. L., Nizam, A., & Rosenberg, E. S. (2013). Applied Regression Analysis and Other Multivariable Methods (5th ed.). Boston, MA: Cengage Learning.
[11] Rothman, K. J., Greenland, S., & Lash, T. L. (2008). Modern Epidemiology (3rd ed.). Philadelphia: Lippincott Williams & Wilkins.
[12] Murti, B. (2018). Prinsip dan Metode Riset Epidemiologi. Yogyakarta: Gadjah Mada University Press.
[13] Notoatmodjo, S. (2018). Metodologi Penelitian Kesehatan. Jakarta: Rineka Cipta.
[14] Open Data Jabar. (2024). Data Kasus Tuberkulosis (TBC) di Provinsi Jawa Barat Tahun 2024. Diakses dari: https://opendata.jabarprov.go.id
[15] BPS Provinsi Jawa Barat. (2024). Statistik Kesejahteraan Rakyat Provinsi Jawa Barat Tahun 2024. Bandung: Badan Pusat Statistik.
[16] Hair, J. F., Black, W. C., Babin, B. J., & Anderson, R. E. (2019). Multivariate Data Analysis (8th ed.). Harlow: Pearson Education.
[17] Fotheringham, A. S., Brunsdon, C., & Charlton, M. (2002). Geographically Weighted Regression: The Analysis of Spatially Varying Relationships. Chichester: Wiley.
[18] Anselin, L. (1995). Local indicators of spatial association—LISA. Geographical Analysis, 27(2), 93–115.
[19] ESRI. (2023). ArcGIS Pro Documentation: Spatial Statistics Tools. Redlands, CA: Environmental Systems Research Institute.
[20] Pebesma, E., & Bivand, R. (2023). Spatial Data Science with R: Using sf and tmap. Retrieved from https://r-spatial.org/book
[21] Anselin, L. (1995). Local indicators of spatial association—LISA. Geographical Analysis, 27(2), 93–115.
[22] ESRI. (2023). ArcGIS Pro Documentation: Spatial Statistics Tools. Redlands, CA: Environmental Systems Research Institute.
[23] Pebesma, E., & Bivand, R. (2023). Spatial Data Science with R: Using sf and tmap. Retrieved from https://r-spatial.org/book