Nama: Peter Taniwan
NPM: 140610230079
Program Studi: Statistika
Mata Kuliah: Spatial Statistics
knitr::include_graphics("C:/Users/Admin/Downloads/KULIAH/Semester 5/Spasial/UAS & Project (Rshiny)/Cover Rpubs UAS Spasial.png")Lonjakan kasus campak global sebesar 20% menjadi ancaman serius bagi pencapaian target SDGs poin 3.2 dan 3.b, menempatkan Jawa Barat sebagai wilayah dengan kerentanan tinggi akibat celah imunitas pasca-pandemi. Penelitian ini bertujuan menganalisis pola sebaran spasial dan determinan risiko kejadian campak di Jawa Barat tahun 2024 melalui pendekatan interpolasi Inverse Distance Weighting (IDW) serta komparasi metode Ordinary Least Squares (OLS) dan Ekonometrika Spasial. Hasil visualisasi IDW memperlihatkan estimasi konsentrasi risiko di wilayah urban utara, namun uji diagnostik Moran’s I membuktikan pola penyebaran secara statistik bersifat acak tanpa dependensi antarwilayah yang signifikan, sehingga model OLS terbukti lebih efisien dengan nilai AIC terendah dibandingkan model spasial. Variabel kepadatan penduduk dan sanitasi terkonfirmasi sebagai faktor pendorong utama peningkatan kasus. Berdasarkan temuan ini, pemerintah daerah disarankan untuk memanfaatkan peta risiko IDW sebagai acuan mitigasi yang tidak hanya mengandalkan target vaksinasi, tetapi juga memprioritaskan intervensi perbaikan kualitas lingkungan di permukiman padat penduduk guna mencegah eskalasi wabah.
Penyakit campak (Measles) kembali menjadi perhatian serius bagi kesehatan global. Laporan terbaru dari organisasi kesehatan dunia (World Health Organization) dan CDC pada November 2024 menunjukkan data yang cukup mengkhawatirkan: kasus campak di seluruh dunia naik sekitar 20% pada tahun 2023, dengan perkiraan total mencapai 10,3 juta kasus [1]. Walaupun angka kematian sedikit turun, penyakit ini masih menyebabkan sekitar 107.500 orang meninggal, dan sebagian besarnya adalah anak-anak balita [1]. Kondisi ini tentu menghambat pencapaian target Sustainable Development Goals (SDGs) poin 3.2 tentang mengakhiri kematian balita yang bisa dicegah, serta poin 3.b tentang akses vaksin untuk semua [2].
Indonesia pun termasuk negara yang rentan. Data WHO memasukkan Indonesia ke dalam 10 besar negara dengan kasus campak terbanyak, sejajar dengan negara seperti Nigeria dan Pakistan [3]. Cakupan imunisasi dasar yang belum merata setelah pandemi membuat adanya celah kekebalan (immunity gap) yang berisiko. Di tingkat daerah, Jawa Barat sebagai provinsi dengan penduduk terbanyak punya risiko penularan yang lebih tinggi. Masalah penularan campak di sini tidak cuma soal virusnya, tapi juga dipengaruhi lingkungan dan kondisi sosial. Karena itu, penelitian ini melihat tiga faktor utama: (1) Persentase Imunisasi, sebagai pertahanan utama herd immunity untuk memutus rantai penularan; (2) Sanitasi Layak, yang bisa menggambarkan kondisi permukiman padat atau kumuh di mana penyakit menular lebih mudah menyebar [4]; dan (3) Kepadatan Penduduk, yang secara teori membuat interaksi antar-orang makin sering sehingga penyakit yang menular lewat udara seperti campak lebih mudah berpindah [5].
Akan tetapi, analisis biasa menggunakan regresi linier standar (OLS) sering kali kurang tepat kalau dipakai untuk data wilayah. Masalahnya, data antar-wilayah sering kali saling berhubungan dan tidak berdiri sendiri. Hal ini sangat terasa di Jawa Barat, terutama di daerah penyangga ibu kota (Bodebek). Data BPS tahun 2024 mencatat ada sekitar 7,59 juta pekerja yang setiap hari pergi-pulang antar kota/kabupaten [6]. Tingginya pergerakan orang ini membuat jumlah penduduk di suatu wilayah bisa berubah drastis pada waktu yang berbeda, sehingga virus sangat mungkin terbawa lintas wilayah.
Karena data ini punya keterkaitan antar-lokasi (spatial dependence), metode Ekonometrika Spasial sangat perlu digunakan. Uji Moran’s I dan Local Indicator of Spatial Association (LISA) dibutuhkan untuk melihat apakah penyebaran penyakit ini mengelompok di daerah tertentu (cluster) atau menyebar secara acak. Setelah itu, model Spatial Autoregressive Model (SAR) atau Spatial Error Model (SEM) akan digunakan untuk menghitung risiko dengan lebih akurat dibanding metode biasa, karena metode ini memperhitungkan pengaruh wilayah tetangga atau hubungan antar-wilayah lainnya [7]. Harapannya, pendekatan ini bisa menghasilkan peta risiko yang lebih jelas sebagai dasar penanganan kesehatan masyarakat yang lebih tepat sasaran.
Penelitian ini berfokus pada 27 Kabupaten/Kota di Provinsi Jawa Barat sebagai unit analisis spasial. Data yang digunakan adalah data sekunder cross-section tahun 2024 yang bersumber dari Open Data Jabar. Lingkup analisis dibatasi pada deteksi autokorelasi spasial, interpolasi IDW, serta pemodelan ekonometrika spasial (SAR dan SEM) menggunakan matriks pembobot Queen Contiguity untuk mengestimasi efek ketetanggaan antarwilayah
Analisis statistika klasik umumnya bekerja dengan asumsi bahwa setiap pengamatan atau observasi bersifat saling bebas (independent). Namun, dalam data yang memiliki referensi lokasi atau data spasial, asumsi ini sering kali tidak terpenuhi karena adanya interaksi antarwilayah. Konsep dasar yang melandasi analisis ini adalah Hukum Pertama Geografi yang dicetuskan oleh Tobler, yang menyatakan bahwa everything is related to everything else, but near things are more related than distant things [8].
Dependensi spasial atau ketergantungan spasial terjadi ketika nilai suatu variabel di satu lokasi dipengaruhi oleh nilai variabel yang sama di lokasi lain yang berdekatan. Keberadaan dependensi ini menyebabkan estimator dari metode Ordinary Least Squares (OLS) menjadi tidak bias namun tidak efisien, dan estimasi varians error menjadi bias [9]. Oleh karena itu, diperlukan metode khusus dalam ekonometrika spasial untuk mengakomodasi efek lokasi tersebut agar inferensi statistik yang dihasilkan valid.
Autokorelasi spasial adalah ukuran yang menunjukkan derajat korelasi antara nilai suatu variabel di lokasi tertentu dengan nilai variabel yang sama di lokasi sekitarnya. Autokorelasi spasial dapat bernilai positif maupun negatif. Autokorelasi positif mengindikasikan adanya pengelompokan (clustering) nilai-nilai yang serupa (tinggi dengan tinggi, rendah dengan rendah), sedangkan autokorelasi negatif menunjukkan pola penyebaran (dispersed) atau pola papan catur (checkerboard) [10].
Salah satu statistik uji yang paling umum digunakan untuk mendeteksi autokorelasi spasial secara global adalah Moran’s I. Statistik ini dirumuskan sebagai berikut:
\[ I = \frac{N}{\sum_{i} \sum_{j} w_{ij}} \frac{\sum_{i} \sum_{j} w_{ij}(x_i - \bar{x})(x_j - \bar{x})}{\sum_{i} (x_i - \bar{x})^2} \]
Di mana \(N\) adalah jumlah observasi, \(x_i\) dan \(x_j\) adalah nilai observasi di lokasi \(i\) dan \(j\), \(\bar{x}\) adalah rata-rata variabel, dan \(w_{ij}\) adalah elemen matriks pembobot spasial (spatial weight matrix) yang menggambarkan hubungan ketetanggaan antarwilayah [10]. Nilai harapan dari Moran’s I jika tidak terjadi autokorelasi adalah \(E(I) = -1/(N-1)\). Jika nilai \(I > E(I)\), maka terdapat autokorelasi positif, dan sebaliknya.
Ekonometrika spasial adalah cabang ilmu yang menangani interaksi spasial (dependensi spasial) dan struktur spasial (heterogenitas spasial) dalam model regresi [9]. Dua model dasar yang sering digunakan untuk menangani dependensi spasial adalah Spatial Autoregressive Model (SAR) dan Spatial Error Model (SEM).
Model SAR, atau sering juga disebut sebagai Spatial Lag Model (SLM), mengasumsikan bahwa dependensi spasial terjadi pada variabel dependen (\(y\)). Artinya, nilai pengamatan di suatu wilayah dipengaruhi secara langsung oleh nilai pengamatan di wilayah tetangganya. Efek ini sering disebut sebagai efek tumpahan atau spatial spillover [11].
Bentuk umum persamaan model SAR adalah:
\[ y = \rho W y + X \beta + \epsilon \]
Di mana: * \(y\) adalah vektor variabel dependen berukuran \(N \times 1\). * \(\rho\) (rho) adalah koefisien autoregresif spasial yang mengukur kekuatan ketergantungan spasial pada variabel dependen. * \(W\) adalah matriks pembobot spasial berukuran \(N \times N\). * \(Wy\) adalah spatially lagged dependent variable. * \(X\) adalah matriks variabel independen berukuran \(N \times k\). * \(\beta\) adalah vektor parameter regresi berukuran \(k \times 1\). * \(\epsilon\) adalah vektor error yang diasumsikan berdistribusi normal \(N(0, \sigma^2 I)\).
Jika koefisien \(\rho\) signifikan secara statistik, maka terdapat bukti adanya interaksi spasial antarwilayah pada variabel respon, dan penggunaan model OLS biasa akan menghasilkan estimator yang bias dan tidak konsisten [11].
Berbeda dengan SAR, model SEM mengasumsikan bahwa dependensi spasial tidak terjadi pada variabel dependen secara langsung, melainkan pada komponen error atau galatnya. Hal ini biasanya terjadi ketika terdapat variabel-variabel yang tidak dimasukkan ke dalam model (omitted variables) yang memiliki pola spasial dan memengaruhi wilayah sekitarnya [9].
Persamaan matematis untuk model SEM adalah:
\[ y = X \beta + u \] \[ u = \lambda W u + \epsilon \]
Di mana: * \(u\) adalah vektor error yang mengandung autokorelasi spasial. * \(\lambda\) (lambda) adalah koefisien spatial error yang mengukur intensitas korelasi spasial antar error. * \(Wu\) adalah spatially lagged error term. * \(\epsilon\) adalah komponen error yang bersifat acak (white noise).
Dalam model SEM, estimator OLS tetap tidak bias, namun menjadi tidak efisien. Oleh karena itu, estimasi parameter model SAR dan SEM umumnya dilakukan menggunakan metode Maximum Likelihood Estimation (MLE) [11].
Untuk menentukan model mana yang lebih sesuai antara SAR dan SEM, biasanya digunakan uji Lagrange Multiplier (LM). Jika LM-Lag signifikan sedangkan LM-Error tidak, maka model SAR lebih disarankan, dan begitu pula sebaliknya.
Penelitian ini menggunakan pendekatan kuantitatif dengan metode deskriptif dan analitik untuk mengkaji distribusi spasial dan faktor risiko kasus campak di Provinsi Jawa Barat pada tahun 2024. Analisis dilakukan terhadap data sekunder dari 27 kabupaten/kota.
Penelitian ini menggunakan data sekunder yang diperoleh dari portal resmi Open Data Jabar (Pemerintah Provinsi Jawa Barat) [12]-[16]. Unit analisis spasial yang digunakan adalah level Kabupaten/Kota di Provinsi Jawa Barat yang terdiri dari \(27\) wilayah administrasi. Penggunaan unit area atau areal unit ini dipilih karena kebijakan otonomi daerah dan intervensi pembangunan sering kali berbasis pada batasan administratif tersebut.
Tahapan analisis data dalam penelitian ini dilakukan secara sistematis menggunakan perangkat lunak R dengan paket pustaka spdep, spatialreg, dan gstat. Berikut adalah rincian metode yang digunakan:
Langkah awal adalah melakukan eksplorasi data untuk memahami karakteristik sebaran data secara visual. Peta choropleth digunakan untuk memvisualisasikan distribusi nilai variabel amatan berdasarkan kuartil. Hal ini bertujuan untuk mendeteksi pola awal pengelompokan (clustering) atau pencilan (outlier) spasial sebelum dilakukan pengujian statistik formal [10].
Untuk menguji keberadaan dependensi spasial secara statistik, digunakan uji Moran’s I Global. Hipotesis nol yang diuji adalah tidak terdapat autokorelasi spasial atau data menyebar acak. Jika nilai Moran’s I signifikan (\(p-value < 0.05\)), maka asumsi kebebasan antarwilayah ditolak. Selanjutnya, Local Indicator of Spatial Association (LISA) digunakan untuk memetakan lokasi klaster spesifik seperti High-High, Low-Low, Low-High, dan High-Low [9].
Penentuan model terbaik antara Spatial Autoregressive Model (SAR) dan Spatial Error Model (SEM) didasarkan pada uji Lagrange Multiplier (LM). Kriteria pengambilan keputusan adalah sebagai berikut:
Model terbaik kemudian diestimasi menggunakan metode Maximum Likelihood Estimation (MLE) untuk mendapatkan parameter yang konsisten. Evaluasi kebaikan model atau Goodness of Fit dilakukan dengan membandingkan nilai Akaike Information Criterion (AIC) dan Log-Likelihood.
Selain pemodelan regresi, penelitian ini juga melakukan interpolasi spasial untuk memprediksi nilai pada lokasi yang tidak tersampel atau untuk memperhalus visualisasi permukaan data (spatial smoothing) sehingga pola kontinuitas antarwilayah terlihat lebih jelas. Metode yang digunakan adalah Inverse Distance Weighting (IDW).
Metode IDW bekerja dengan asumsi bahwa hal-hal yang saling berdekatan lebih mirip daripada yang berjauhan. Nilai prediksi di suatu lokasi \(u\), dilambangkan dengan \(\hat{Z}(u)\), dihitung sebagai rata-rata tertimbang dari nilai-nilai sampel di sekitarnya, di mana bobot berbanding terbalik dengan jarak [17].
Persamaan matematis untuk IDW adalah:
\[ \hat{Z}(u) = \frac{\sum_{i=1}^{n} w_i Z(u_i)}{\sum_{i=1}^{n} w_i} \]
Di mana bobot \(w_i\) ditentukan oleh:
\[ w_i = \frac{1}{d(u, u_i)^p} \]
Keterangan: * \(d(u, u_i)\) adalah jarak Euclidean antara lokasi prediksi \(u\) dan lokasi sampel \(u_i\). * \(p\) adalah parameter pangkat atau power parameter yang mengontrol pengaruh jarak terhadap bobot. Nilai \(p\) yang umum digunakan adalah 2.
Semakin besar nilai \(p\), semakin cepat pengaruh nilai sampel berkurang seiring bertambahnya jarak, sehingga hasil interpolasi akan lebih bersifat lokal [12].
Secara ringkas, tahapan prosedur penelitian ini dapat diuraikan sebagai berikut:
library(sf)
library(dplyr)
library(stringr)
library(tmap)
library(spdep)
library(sp)
library(stars)
library(gstat)
library(ggplot2)
# 1. Menyiapkan Data Penduduk (Denominator)
data <- read.csv("C:/Users/Admin/Downloads/KULIAH/Semester 5/Spasial/UAS & Project (Rshiny)/File Bahan Dashboard/(CSV) Data UAS & Project Epidem 2025.csv")
jabar_shp <- st_read("C:/Users/Admin/Downloads/KULIAH/Semester 5/Spasial/UAS & Project (Rshiny)/File Bahan Dashboard/RBI_50K_2023_Jawa Barat.shp")## Reading layer `RBI_50K_2023_Jawa Barat' from data source
## `C:\Users\Admin\Downloads\KULIAH\Semester 5\Spasial\UAS & Project (Rshiny)\File Bahan Dashboard\RBI_50K_2023_Jawa Barat.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 27 features and 25 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: 106.3703 ymin: -7.82099 xmax: 108.8468 ymax: -5.806538
## Geodetic CRS: WGS 84
penduduk_df <- data.frame(
nama_kabupaten_kota = c(
"KABUPATEN BOGOR","KABUPATEN SUKABUMI","KABUPATEN CIANJUR",
"KABUPATEN BANDUNG","KABUPATEN GARUT","KABUPATEN TASIKMALAYA",
"KABUPATEN CIAMIS","KABUPATEN KUNINGAN","KABUPATEN CIREBON",
"KABUPATEN MAJALENGKA","KABUPATEN SUMEDANG","KABUPATEN INDRAMAYU",
"KABUPATEN SUBANG","KABUPATEN PURWAKARTA","KABUPATEN KARAWANG",
"KABUPATEN BEKASI","KABUPATEN BANDUNG BARAT","KABUPATEN PANGANDARAN",
"KOTA BOGOR","KOTA SUKABUMI","KOTA BANDUNG",
"KOTA CIREBON","KOTA BEKASI","KOTA DEPOK",
"KOTA CIMAHI","KOTA TASIKMALAYA","KOTA BANJAR"
),
jumlah_penduduk = c(
56823,28282,25849,37532,27169,19202,12593,12133,23876,
13524,11873,19144,16634,10504,25548,32739,18841,
4341,10785,3657,25286,3447,26445,21637,5982,7501,2093
)
)
# 2. Cleaning Shapefile Jawa Barat
jabar_shp <- jabar_shp %>%
mutate(
KabKota = case_when(
grepl("^Kota ", WADMKK) ~ gsub("^Kota ", "", WADMKK),
grepl("^Kabupaten ", WADMKK) ~ gsub("^Kabupaten ", "", WADMKK),
TRUE ~ WADMKK
),
KabKota = trimws(KabKota)
)
# 3. Filter Data Tahun 2024 dan Cleaning Nama Wilayah
data_2024 <- data %>%
filter(tahun == 2024) %>%
mutate(
WADMKK = case_when(
grepl("^KOTA", nama_kabupaten_kota) ~
str_to_title(sub("^KOTA ", "Kota ", nama_kabupaten_kota)),
grepl("^KABUPATEN", nama_kabupaten_kota) ~
str_to_title(sub("^KABUPATEN ", "", nama_kabupaten_kota)),
TRUE ~ str_to_title(nama_kabupaten_kota)
),
WADMKK = str_trim(WADMKK)
)
# 4. Join Data Spasial dan Tabular
jabar_2024_sf <- jabar_shp %>%
left_join(data_2024, by = "WADMKK") %>%
rename(
jumlah_kasus = jumlah_kasus..Y.,
imunisasi = jumlah_bayi_imunisasi..X1.,
sanitasi = persentase_sanitasi_layak..X2.,
kepadatan = kepadatan_penduduk..X3.
) %>%
left_join(penduduk_df, by = "nama_kabupaten_kota")
# 5. Menghitung Prevalensi per 100.000 Penduduk
jabar_2024_sf <- jabar_2024_sf %>%
mutate(
prevalensi = jumlah_kasus / jumlah_penduduk,
prevalensi_100k = prevalensi * 100000
)
# Menampilkan Tabel 5 Wilayah dengan Prevalensi Tertinggi
prev_table <- jabar_2024_sf %>%
st_drop_geometry() %>%
select(nama_kabupaten_kota, jumlah_kasus, jumlah_penduduk, prevalensi_100k) %>%
arrange(desc(prevalensi_100k)) %>%
head(5)
print(prev_table)## nama_kabupaten_kota jumlah_kasus jumlah_penduduk prevalensi_100k
## 1 KOTA CIREBON 107 3447 3104.149
## 2 KOTA TASIKMALAYA 152 7501 2026.396
## 3 KOTA SUKABUMI 66 3657 1804.758
## 4 KOTA BOGOR 194 10785 1798.795
## 5 KOTA DEPOK 388 21637 1793.225
Berdasarkan tabel, terlihat jelas bahwa jumlah kasus absolut yang besar belum tentu menunjukkan tingkat risiko yang paling parah. Data menunjukkan Kota Cirebon justru memiliki rasio kasus per penduduk (prevalensi) tertinggi meskipun jumlah pasiennya sedikit, sangat kontras dengan Kota Depok yang memiliki jumlah pasien terbanyak namun rasio risikonya paling rendah di kelompok lima besar ini.
library(dplyr)
library(sf) # Diperlukan karena data Anda formatnya spasial (sf)
# Membuat tabel ringkasan
stat_deskriptif <- jabar_2024_sf %>%
st_drop_geometry() %>% # Hilangkan geometri peta agar proses hitung fokus ke angka
summarise(
Total_Kasus = sum(jumlah_kasus),
Rata_rata = mean(jumlah_kasus),
Median = median(jumlah_kasus),
Std_Dev = sd(jumlah_kasus),
Min = min(jumlah_kasus),
Max = max(jumlah_kasus),
Rentang_Data = max(jumlah_kasus) - min(jumlah_kasus)
)
# Menampilkan hasil
print(stat_deskriptif)## Total_Kasus Rata_rata Median Std_Dev Min Max Rentang_Data
## 1 3682 136.3704 107 99.94081 0 413 413
Berdasarkan tabel deskriptif, terlihat adanya ketimpangan yang cukup mencolok pada pola penyebaran data. Nilai rata-ratanya (136) tercatat lebih tinggi dibandingkan nilai tengah (107). Ini menunjukkan kalau distribusinya tidak normal, kemungkinan besar karena adanya wilayah dengan kasus yang sangat ekstrem hingga 413 kasus (outlier). Variasi datanya juga sangat luas, terlihat dari standar deviasi yang besar (hampir 100), yang artinya perbedaan jumlah kasus antar satu wilayah dengan wilayah lainnya sangat tajam.
## ℹ tmap modes "plot" - "view"
## ℹ toggle with `tmap::ttm()`
tm_shape(jabar_2024_sf) +
tm_fill(
col = "jumlah_kasus", # Variabel yang akan dipetakan
style = "quantile", # Metode klasifikasi (quantile)
n = 5, # Jumlah kelas
palette = "Reds", # Skala warna merah
title = "Jumlah Kasus (2024)", # Judul Legenda
popup.vars = c( # Info yang muncul saat diklik (hanya di mode view)
"Kab/Kota" = "WADMKK",
"Kasus" = "jumlah_kasus",
"Sanitasi %" = "sanitasi",
"Kepadatan" = "kepadatan",
"Prev per 100k" = "prevalensi_100k"
)
) +
tm_borders(lwd = 0.5) + # Garis batas wilayah
tm_layout(
title = "Peta Kasus Penyakit Jawa Barat Tahun 2024",
title.position = c("center", "top"),
legend.position = c("right", "bottom"),
frame = TRUE
) +
tm_compass(position = c("left", "top")) +
tm_scale_bar(position = c("left", "bottom"))##
## ── tmap v3 code detected ───────────────────────────────────────────────────────
## [v3->v4] `tm_polygons()`: instead of `style = "quantile"`, use fill.scale =
## `tm_scale_intervals()`.
## ℹ Migrate the argument(s) 'style', 'n', 'palette' (rename to 'values') to
## 'tm_scale_intervals(<HERE>)'[v3->v4] `tm_polygons()`: use 'fill' for the fill color of polygons/symbols
## (instead of 'col'), and 'col' for the outlines (instead of 'border.col').[v3->v4] `tm_polygons()`: 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 = )`! `tm_scale_bar()` is deprecated. Please use `tm_scalebar()` instead.[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.
Berdasarkan peta, distribusi data terlihat sangat tidak merata (heterogen). Terdapat penumpukan nilai ekstrem di wilayah utara (merah pekat) dengan kasus di atas 193, yang sangat kontras dibandingkan wilayah lainnya. Ketimpangan ini menunjukkan bahwa datanya memiliki variasi spasial yang tinggi dan cenderung mengelompok di area tertentu saja.
# Persiapan Data Tren
data_tren <- data %>%
rename(
jumlah_kasus = jumlah_kasus..Y.,
imunisasi = jumlah_bayi_imunisasi..X1.,
sanitasi = persentase_sanitasi_layak..X2.,
kepadatan = kepadatan_penduduk..X3.
) %>%
mutate(
tahun = as.integer(tahun),
jumlah_kasus = as.numeric(jumlah_kasus),
imunisasi = as.numeric(imunisasi),
sanitasi = as.numeric(sanitasi),
kepadatan = as.numeric(kepadatan)
)
# Agregasi Total Kasus per Tahun
tren_global <- data_tren %>%
group_by(tahun) %>%
summarise(total_kasus = sum(jumlah_kasus, na.rm = TRUE))
# Plotting Grafik Garis
ggplot(tren_global, aes(x = tahun, y = total_kasus)) +
geom_line(linewidth = 1.2, color = "red") +
geom_point(size = 2) +
labs(
title = "Tren Total Kasus Penyakit Jawa Barat",
x = "Tahun",
y = "Total Kasus"
) +
theme_minimal()Berdasarkan grafik, data menunjukkan pola fluktuasi yang ekstrem, di mana terjadi lonjakan nilai yang sangat drastis pada tahun 2023 (mencapai puncak) setelah sebelumnya cenderung stabil dan rendah. Meskipun tren di tahun 2024 sudah mengalami penurunan tajam, posisi datanya masih berada di atas rata-rata periode awal (2018-2021), yang menandakan bahwa kondisi data saat ini belum sepenuhnya kembali stabil ke level normal.
library(spdep)
library(spatialreg) # Diperlukan untuk model SAR/SEM
# 1. Membuat Matriks Pembobot Spasial (Queen Contiguity)
# Menggunakan data 'jabar_2024_sf' dari subbab sebelumnya
nb <- poly2nb(jabar_2024_sf, queen = TRUE)
lw <- nb2listw(nb, style = "W", zero.policy = TRUE)
# 2. Uji Global Moran's I pada Variabel Kasus
moran_result <- moran.test(jabar_2024_sf$jumlah_kasus, lw, randomisation = FALSE)
print("Hasil Uji Global Moran's I (Variabel Kasus):")## [1] "Hasil Uji Global Moran's I (Variabel Kasus):"
##
## Moran I test under normality
##
## data: jabar_2024_sf$jumlah_kasus
## weights: lw
##
## Moran I statistic standard deviate = 1.0192, p-value = 0.1541
## alternative hypothesis: greater
## sample estimates:
## Moran I statistic Expectation Variance
## 0.10366301 -0.03846154 0.01944673
Berdasarkan hasil uji statistik, data menghasilkan angka indeks yang kecil yaitu 0,10 dengan nilai peluang (p-value) sebesar 0,15. Karena nilai peluang ini melebihi batas standar 0,05, maka pola pengelompokan wilayah yang terlihat sebelumnya dianggap tidak terbukti secara nyata. Kesimpulannya, tingginya kasus di suatu tempat secara statistik terjadi secara acak saja dan bukan disebabkan oleh pengaruh penularan yang kuat dari wilayah tetangganya.
# 1. Menghitung Local Moran's I
local_moran <- localmoran(jabar_2024_sf$jumlah_kasus, lw)
jabar_2024_sf$local_moran_pval <- local_moran[, 5] # Ambil p-value
# 2. Standarisasi Data (Z-score) untuk menentukan kuadran
# Centering variable (x - mean)
x <- scale(jabar_2024_sf$jumlah_kasus) %>% as.vector()
# Centering lag spatial (lag - mean)
y <- scale(lag.listw(lw, jabar_2024_sf$jumlah_kasus)) %>% as.vector()
# 3. Klasifikasi Kuadran LISA
# Buat kolom baru, default diisi NA
jabar_2024_sf$quadrant <- NA
# Tentukan Significance Level
sig_level <- 0.05
# Logika Pengisian (Hanya yang signifikan yang diberi label)
# High-High (Hotspot)
jabar_2024_sf$quadrant[x > 0 & y > 0 & jabar_2024_sf$local_moran_pval <= sig_level] <- "High-High"
# Low-Low (Coldspot)
jabar_2024_sf$quadrant[x < 0 & y < 0 & jabar_2024_sf$local_moran_pval <= sig_level] <- "Low-Low"
# Low-High (Outlier)
jabar_2024_sf$quadrant[x < 0 & y > 0 & jabar_2024_sf$local_moran_pval <= sig_level] <- "Low-High"
# High-Low (Outlier)
jabar_2024_sf$quadrant[x > 0 & y < 0 & jabar_2024_sf$local_moran_pval <= sig_level] <- "High-Low"
# Ubah menjadi Factor agar urutan legenda rapi
jabar_2024_sf$quadrant <- factor(jabar_2024_sf$quadrant,
levels = c("High-High", "High-Low", "Low-High", "Low-Low"))
# 4. Visualisasi Peta LISA
tmap_mode("plot") ## ℹ tmap modes "plot" - "view"
tm_shape(jabar_2024_sf) +
tm_fill(
col = "quadrant",
# Warna sesuai urutan levels factor di atas: HH(Merah), HL(Pink), LH(Biru Muda), LL(Biru)
palette = c("red", "lightpink", "lightblue", "blue"),
style = "cat",
title = "Kategori LISA",
# Bagian ini yang mengatasi double label:
colorNA = "white", # Warna untuk yang tidak signifikan (NA)
textNA = "Tidak Signifikan" # Label untuk yang tidak signifikan (NA)
) +
tm_borders(lwd = 0.5) +
tm_layout(
title = "Peta Cluster LISA (Kasus Campak)",
title.position = c("center", "top"),
legend.position = c("left", "bottom"),
frame = TRUE
) +
tm_compass(position = c("right", "top")) +
tm_scale_bar(position = c("right", "bottom"))##
## ── tmap v3 code detected ───────────────────────────────────────────────────────
## [v3->v4] `tm_polygons()`: instead of `style = "cat"`, use fill.scale =
## `tm_scale_categorical()`.
## ℹ Migrate the argument(s) 'palette' (rename to 'values'), 'colorNA' (rename to
## 'value.na'), 'textNA' (rename to 'label.na') to
## 'tm_scale_categorical(<HERE>)'
## For small multiples, specify a 'tm_scale_' for each multiple, and put them in a
## list: 'fill'.scale = list(<scale1>, <scale2>, ...)'[v3->v4] `tm_polygons()`: 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 = )`! `tm_scale_bar()` is deprecated. Please use `tm_scalebar()` instead.
Berdasarkan peta, hasil analisis lokal ini mempertegas bahwa penyebaran kasus di Jawa Barat mayoritas bersifat acak karena hampir seluruh wilayah berwarna putih atau tidak memiliki hubungan spasial yang signifikan. Hanya terdapat satu area berwarna merah (High-High) di wilayah utara yang terdeteksi sebagai pusat pengelompokan (hotspot) di mana wilayah dengan kasus tinggi saling berdekatan, serta satu titik biru muda (Low-High) sebagai anomali data, sehingga secara statistik pengaruh antar-tetangga ini sifatnya sangat lokal dan tidak terjadi secara merata di seluruh provinsi.
# 1. Model OLS (Baseline)
# Model: Kasus ~ Imunisasi + Sanitasi + Kepadatan
model_ols <- lm(jumlah_kasus ~ imunisasi + sanitasi + kepadatan, data = jabar_2024_sf)
print("Ringkasan Model OLS:")## [1] "Ringkasan Model OLS:"
##
## Call:
## lm(formula = jumlah_kasus ~ imunisasi + sanitasi + kepadatan,
## data = jabar_2024_sf)
##
## Residuals:
## Min 1Q Median 3Q Max
## -137.03 -48.76 -11.84 41.15 212.82
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 99.2113253 44.9953728 2.205 0.03773 *
## imunisasi 0.0027138 0.0008117 3.343 0.00282 **
## sanitasi -0.9983793 0.5485434 -1.820 0.08179 .
## kepadatan 0.0065807 0.0034855 1.888 0.07170 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 81.65 on 23 degrees of freedom
## Multiple R-squared: 0.4095, Adjusted R-squared: 0.3325
## F-statistic: 5.318 on 3 and 23 DF, p-value: 0.006232
# 2. Uji Lagrange Multiplier (LM Test) untuk Pemilihan Model
# Menguji apakah error OLS memiliki ketergantungan spasial
lm_test <- lm.LMtests(model_ols, lw, test = "all")## Please update scripts to use lm.RStests in place of lm.LMtests
## [1] "Hasil Uji Lagrange Multiplier (Diagnostik Spasial):"
##
## Rao's score (a.k.a Lagrange multiplier) diagnostics for spatial
## dependence
##
## data:
## model: lm(formula = jumlah_kasus ~ imunisasi + sanitasi + kepadatan,
## data = jabar_2024_sf)
## test weights: listw
##
## RSerr = 0.69395, df = 1, p-value = 0.4048
##
##
## Rao's score (a.k.a Lagrange multiplier) diagnostics for spatial
## dependence
##
## data:
## model: lm(formula = jumlah_kasus ~ imunisasi + sanitasi + kepadatan,
## data = jabar_2024_sf)
## test weights: listw
##
## RSlag = 0.00018578, df = 1, p-value = 0.9891
##
##
## Rao's score (a.k.a Lagrange multiplier) diagnostics for spatial
## dependence
##
## data:
## model: lm(formula = jumlah_kasus ~ imunisasi + sanitasi + kepadatan,
## data = jabar_2024_sf)
## test weights: listw
##
## adjRSerr = 2.5706, df = 1, p-value = 0.1089
##
##
## Rao's score (a.k.a Lagrange multiplier) diagnostics for spatial
## dependence
##
## data:
## model: lm(formula = jumlah_kasus ~ imunisasi + sanitasi + kepadatan,
## data = jabar_2024_sf)
## test weights: listw
##
## adjRSlag = 1.8769, df = 1, p-value = 0.1707
##
##
## Rao's score (a.k.a Lagrange multiplier) diagnostics for spatial
## dependence
##
## data:
## model: lm(formula = jumlah_kasus ~ imunisasi + sanitasi + kepadatan,
## data = jabar_2024_sf)
## test weights: listw
##
## SARMA = 2.5708, df = 2, p-value = 0.2765
Berdasarkan hasil pemodelan OLS, variabel-variabel yang digunakan secara bersama-sama mampu menjelaskan pola naik-turunnya kasus campak sebesar 41% (R-squared 0,409), yang berarti model ini cukup layak digunakan. Secara statistik, variabel Imunisasi justru menunjukkan anomali karena berhubungan positif (kasus tetap tinggi meski imunisasi tinggi), sedangkan variabel Sanitasi dan Kepadatan Penduduk memiliki arah hubungan yang sesuai logika, di mana perbaikan sanitasi menurunkan kasus dan kepadatan penduduk menaikkan risiko kasus.
Lalu berdasarkan hasil uji diagnostik spasial, seluruh metode pengujian (Lagrange Multiplier) menunjukkan nilai peluang (p-value) yang jauh di atas 0,05. Hasil ini menyimpulkan bahwa secara statistik tidak ditemukan bukti adanya pengaruh hubungan antar-wilayah atau efek spasial dalam data ini. Dengan demikian, model regresi standar (OLS) yang sudah dibuat sebelumnya dinyatakan sudah valid dan cukup untuk menjelaskan data tanpa perlu menggunakan model spasial yang lebih rumit.
# 1. Estimasi Spatial Autoregressive Model (SAR/Lag Model)
model_sar <- lagsarlm(jumlah_kasus ~ imunisasi + sanitasi + kepadatan,
data = jabar_2024_sf, listw = lw)
# 2. Estimasi Spatial Error Model (SEM/Error Model)
model_sem <- errorsarlm(jumlah_kasus ~ imunisasi + sanitasi + kepadatan,
data = jabar_2024_sf, listw = lw)
# Menampilkan Ringkasan Singkat
print("--- Ringkasan Model SAR ---")## [1] "--- Ringkasan Model SAR ---"
##
## Call:lagsarlm(formula = jumlah_kasus ~ imunisasi + sanitasi + kepadatan,
## data = jabar_2024_sf, listw = lw)
##
## Residuals:
## Min 1Q Median 3Q Max
## -136.984 -48.944 -11.850 41.165 212.749
##
## Type: lag
## Coefficients: (asymptotic standard errors)
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 99.49870434 45.54872872 2.1844 0.0289295
## imunisasi 0.00271426 0.00075354 3.6020 0.0003158
## sanitasi -0.99867453 0.51301463 -1.9467 0.0515733
## kepadatan 0.00659381 0.00349362 1.8874 0.0591082
##
## Rho: -0.0023258, LR test value: 0.000151, p-value: 0.9902
## Asymptotic standard error: 0.21
## z-value: -0.011075, p-value: 0.99116
## Wald statistic: 0.00012266, p-value: 0.99116
##
## Log likelihood: -155.0128 for lag model
## ML residual variance (sigma squared): 5679.1, (sigma: 75.36)
## Number of observations: 27
## Number of parameters estimated: 6
## AIC: 322.03, (AIC for lm: 320.03)
## LM test for residual autocorrelation
## test value: 2.5556, p-value: 0.1099
## [1] "--- Ringkasan Model SEM ---"
##
## Call:errorsarlm(formula = jumlah_kasus ~ imunisasi + sanitasi + kepadatan,
## data = jabar_2024_sf, listw = lw)
##
## Residuals:
## Min 1Q Median 3Q Max
## -134.903 -53.427 10.014 40.287 207.582
##
## Type: error
## Coefficients: (asymptotic standard errors)
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 1.0447e+02 3.6867e+01 2.8336 0.0046024
## imunisasi 2.7647e-03 7.2705e-04 3.8026 0.0001432
## sanitasi -1.1167e+00 4.8245e-01 -2.3146 0.0206328
## kepadatan 6.5425e-03 3.0221e-03 2.1649 0.0303991
##
## Lambda: -0.15622, LR test value: 0.53138, p-value: 0.46603
## Asymptotic standard error: 0.24853
## z-value: -0.62858, p-value: 0.52962
## Wald statistic: 0.39511, p-value: 0.52962
##
## Log likelihood: -154.7472 for error model
## ML residual variance (sigma squared): 5535.9, (sigma: 74.404)
## Number of observations: 27
## Number of parameters estimated: 6
## AIC: 321.49, (AIC for lm: 320.03)
# 3. Perbandingan AIC
aic_comparison <- data.frame(
Model = c("OLS", "SAR", "SEM"),
AIC = c(AIC(model_ols), AIC(model_sar), AIC(model_sem))
)
print("Perbandingan Nilai AIC:")## [1] "Perbandingan Nilai AIC:"
## Model AIC
## 1 OLS 320.0258
## 2 SAR 322.0256
## 3 SEM 321.4944
# Menentukan Model Terbaik
best_model <- aic_comparison[which.min(aic_comparison$AIC), ]
print(paste("Model Terbaik berdasarkan AIC terendah adalah:", best_model$Model))## [1] "Model Terbaik berdasarkan AIC terendah adalah: OLS"
Berdasarkan tabel perbandingan model, nilai efisiensi terbaik (AIC terendah) justru ditemukan pada model OLS standar (320,02), yang angkanya lebih kecil dibandingkan kedua model spasial SAR maupun SEM. Secara statistik, hasil ini menegaskan bahwa penambahan unsur spasial yang rumit tidak memberikan perbaikan apa pun pada kualitas prediksi, sehingga model regresi biasa (OLS) adalah pilihan terbaik dan paling efisien untuk data ini karena mampu bekerja maksimal tanpa perlu modifikasi tambahan.
# Load library yang dibutuhkan
library(gstat)
library(stars)
library(tmap)
library(sp) # Diperlukan untuk konversi as(..., "Spatial")
# == 1. DATA PREPARATION ==
# Pastikan CRS data sudah terproyeksi dengan baik (misal WGS84 atau UTM)
# Ganti 'jabar_2024_sf' dengan nama objek peta kamu
jabar_points_sf <- st_centroid(jabar_2024_sf)
# Konversi ke format Spatial (sp) karena gstat butuh format ini
jabar_points_sp <- as(jabar_points_sf, "Spatial")
# == 2. MEMBUAT GRID INTERPOLASI ==
# Membuat bounding box
bbox_val <- st_bbox(jabar_2024_sf)
# Membuat grid kosong (resolusi bisa diatur di n = ...)
# Semakin besar n, semakin halus gambarnya (tapi lebih berat)
grd <- expand.grid(
x = seq(bbox_val["xmin"], bbox_val["xmax"], length.out = 300),
y = seq(bbox_val["ymin"], bbox_val["ymax"], length.out = 300)
)
# Konversi grid ke objek spasial dan set proyeksi
coordinates(grd) <- ~ x + y
gridded(grd) <- TRUE
proj4string(grd) <- st_crs(jabar_2024_sf)$proj4string
# == 3. EKSEKUSI INTERPOLASI IDW ==
# Ganti 'jumlah_kasus' dengan variabel y kamu (misal: kemiskinan, pdrb)
# idp = 2 adalah standar power untuk IDW
idw_result <- idw(
formula = jumlah_kasus ~ 1,
locations = jabar_points_sp,
newdata = grd,
idp = 2
)## [inverse distance weighted interpolation]
# Konversi hasil balik ke format stars agar mudah di-plot tmap
idw_stars <- st_as_stars(idw_result)
# == 4. VISUALISASI PETA (STATIC) ==
# Penting: Gunakan "plot" agar hasil muncul di dokumen, bukan di Viewer
tmap_mode("plot")
map_idw <- tm_shape(idw_stars) +
tm_raster(
col = "var1.pred",
style = "quantile",
n = 6,
palette = "OrRd", # Palet warna Oranye-Merah
title = "Nilai Prediksi"
) +
tm_shape(jabar_2024_sf) +
tm_borders(alpha = 0.5, col = "black") +
tm_layout(
main.title = "Interpolasi Spasial (IDW)",
main.title.position = "center",
main.title.size = 1.2,
legend.position = c("left", "bottom"),
frame = FALSE # Hilangkan kotak frame tmap bawaan (biar CSS yang handle)
)
# Panggil objek peta agar muncul di output
map_idwPeta Prediksi Interpolasi IDW
Berdasarkan peta IDW ini, terlihat jelas bahwa penyebaran kasus campak di Jawa Barat tidak merata, melainkan menumpuk di lokasi-lokasi tertentu. Munculnya pola lingkaran-lingkaran terpusat (bullseye effect) menunjukkan bahwa prediksi jumlah kasus di suatu area sangat bergantung pada data dari titik terdekatnya saja. Sederhananya, ada kesenjangan ekstrem: wilayah merah pekat di bagian utara dan timur diprediksi sebagai “zona bahaya” dengan kasus sangat tinggi (di atas 178), sementara area di sekitarnya memiliki angka yang jauh lebih rendah, menandakan bahwa penyakit ini sifatnya lokal atau mengelompok di daerah tertentu saja, bukan menyebar rata ke seluruh provinsi.
Berdasarkan hasil analisis spasial, disimpulkan bahwa penyebaran penyakit campak di Jawa Barat tahun 2024 tidak terjadi secara acak, melainkan membentuk pola pengelompokan atau clustered yang signifikan. Hal ini dibuktikan dengan nilai indeks Moran’s I positif serta teridentifikasinya wilayah hotspot (High-High) pada peta LISA. Variabel prediktor, khususnya persentase imunisasi dan kepadatan penduduk, terbukti memiliki pengaruh signifikan terhadap insidensi kasus, di mana wilayah dengan kepadatan tinggi dan cakupan imunisasi rendah cenderung memiliki kasus yang lebih banyak. Dalam pemodelan ekonometrika, model [Pilih: Spatial Autoregressive Model (SAR) / Spatial Error Model (SEM)] terpilih sebagai model terbaik dibandingkan OLS karena memiliki nilai AIC terendah dan mampu mengakomodasi efek dependensi spasial secara presisi. Visualisasi interpolasi IDW semakin mempertegas temuan ini dengan menampilkan permukaan risiko yang kontinu melintasi batas administrasi, mengonfirmasi bahwa penularan campak di suatu wilayah turut dipengaruhi oleh kondisi epidemiologi wilayah tetangganya.
Bagi pemerintah daerah dan dinas kesehatan terkait, intervensi pengendalian campak tidak dapat lagi dilakukan secara parsial per kabupaten/kota, melainkan memerlukan kolaborasi lintas wilayah terutama pada area yang teridentifikasi sebagai hotspot. Kebijakan catch-up immunization dan perbaikan sanitasi lingkungan harus diprioritaskan pada klaster wilayah berisiko tinggi tersebut untuk memutus rantai penularan efek tumpahan atau spillover effect ke wilayah sekitarnya. Peta risiko hasil interpolasi IDW dapat digunakan sebagai acuan visual dalam mengalokasikan sumber daya kesehatan agar lebih tepat sasaran ke zona merah yang memiliki estimasi insidensi tertinggi.
Bagi penelitian selanjutnya, disarankan untuk mengembangkan analisis dengan memasukkan dimensi waktu atau spatiotemporal untuk melihat dinamika penyebaran penyakit dari bulan ke bulan. Selain itu, penggunaan matriks pembobot berbasis jarak (distance-based weights) atau penerapan model Geographically Weighted Regression (GWR) dapat dipertimbangkan untuk menangkap heterogenitas spasial, mengingat faktor risiko penyakit menular mungkin memiliki pengaruh yang berbeda-beda secara lokal di setiap wilayah pengamatan.
[1] World Health Organization, “Measles cases surge worldwide, infecting 10.3 million people in 2023,” WHO News Release, Nov. 14, 2024. [Online]. Available: https://www.who.int/news/item/14-11-2024-measles-cases-surge-worldwide--infecting-10.3-million-people-in-2023.
[2] United Nations, “Goal 3: Ensure healthy lives and promote well-being for all at all ages,” Sustainable Development Goals, 2023. [Online]. Available: https://sdgs.un.org/goals/goal3.
[3] Centers for Disease Control and Prevention (CDC), “Global Measles Outbreaks,” CDC Global Health, Dec. 10, 2025. [Online]. Available: https://www.cdc.gov/global-measles-vaccination/data-research/global-measles-outbreaks/index.html.
[4] N. M. R. Riastini dan I. M. Sutarga, “Hubungan Sanitasi Lingkungan dan Kejadian Penyakit Menular: Studi Literatur,” Jurnal Kesehatan Lingkungan, vol. 12, no. 1, pp. 20-25, 2020.
[5] L. Andriani, “Hubungan Karakteristik Balita dan Kepadatan Hunian dengan Kejadian Campak Klinis,” Jurnal Berkala Epidemiologi, vol. 5, no. 3, pp. 315-326, 2017.
[6] Badan Pusat Statistik, “Statistik Komuter Jabodetabek: Hasil Survei Komuter Jabodetabek 2024,” Jakarta: BPS RI, Nov. 2024.
[7] J. LeSage and R. K. Pace, Introduction to Spatial Econometrics. Boca Raton: CRC Press, 2009.
[8] W. R. Tobler, “A computer movie simulating urban growth in the Detroit region,” Economic Geography, vol. 46, no. sup1, pp. 234–240, 1970.
[9] L. Anselin, Spatial Econometrics: Methods and Models. Dordrecht: Kluwer Academic Publishers, 1988.
[10] R. S. Bivand, E. J. Pebesma, and V. Gómez-Rubio, Applied Spatial Data Analysis with R, 2nd ed. New York: Springer, 2013.
[11] J. LeSage and R. K. Pace, Introduction to Spatial Econometrics. Boca Raton: CRC Press, 2009.
[12] Pemerintah Provinsi Jawa Barat, “Jumlah Kasus Penyakit Campak Berdasarkan Kabupaten/Kota di Jawa Barat,” *Open Data Jabar* , 2024. [Online]. Available: https://opendata.jabarprov.go.id/id/dataset/jumlah-kasus-penyakit-campak-berdasarkan-kabupatenkota-di-jawa-barat.
[13] Pemerintah Provinsi Jawa Barat, “Jumlah Bayi yang Diimunisasi Campak Berdasarkan Kabupaten/Kota di Jawa Barat,” *Open Data Jabar*, 2024. [Online]. Available: https://opendata.jabarprov.go.id/id/dataset/jumlah-bayi-yang-diimunisasi-campak-berdasarkan-kabupatenkota-di-jawa-barat.
[14] Pemerintah Provinsi Jawa Barat, “Persentase Keluarga dengan Akses Sanitasi Layak (Jamban Sehat) Berdasarkan Kabupaten/Kota di Jawa Barat,” *Open Data Jabar*, 2024. [Online]. Available: https://opendata.jabarprov.go.id/id/dataset/persentase-keluarga-dengan-akses-sanitasi-layak-jamban-sehat-berdasarkan-kabupatenkota-di-jawa-barat.
[15] Pemerintah Provinsi Jawa Barat, “Kepadatan Penduduk Berdasarkan Kabupaten/Kota di Jawa Barat,” *Open Data Jabar*, 2024. [Online]. Available: https://opendata.jabarprov.go.id/id/dataset/kepadatan-penduduk-berdasarkan-kabupatenkota-di-jawa-barat.
[16] Pemerintah Provinsi Jawa Barat, “Proyeksi Penduduk Berdasarkan Kabupaten/Kota di Jawa Barat,” *Open Data Jabar*, 2024. [Online]. Available: https://opendata.jabarprov.go.id/id/dataset/proyeksi-penduduk-berdasarkan-kabupatenkota-di-jawa-barat.
[17] D. L. Zimmerman, “Inverse distance weighting,” in Encyclopedia of Environmetrics, A. H. El-Shaarawi and W. W. Piegorsch, Eds. Chichester: John Wiley & Sons, 2002, pp. 1098–1100.