Nama: Peter Taniwan
NPM: 140610230079
Program Studi: Statistika
Mata Kuliah: Epidemiologi
knitr::include_graphics("C:/Users/Admin/Downloads/KULIAH/Semester 5/Epidem/UAS & Project (Rshiny)/Cover Rpubs UAS Epidem.png")Lonjakan kasus campak global sebesar 20% menjadi ancaman serius bagi pencapaian target Sustainable Development Goals (SDGs) poin 3.2 dan 3.b, menempatkan Jawa Barat sebagai wilayah dengan kerentanan tinggi akibat adanya celah imunitas pasca-pandemi. Penelitian ini bertujuan menganalisis pola sebaran spasial dan determinan risiko kejadian campak di Jawa Barat tahun 2024 dengan menggunakan variabel imunisasi, sanitasi layak, dan kepadatan penduduk melalui komparasi metode Ordinary Least Squares (OLS) dan Ekonometrika Spasial. Berdasarkan hasil analisis, ditemukan bahwa meskipun secara visual kasus terkonsentrasi di wilayah urban utara, uji diagnostik spasial (Moran’s I) membuktikan pola penyebaran bersifat acak (random) tanpa adanya dependensi antar-wilayah yang signifikan, sehingga model OLS terbukti lebih efisien (AIC terendah) dibandingkan model spasial. Secara statistik, variabel kepadatan penduduk dan sanitasi terkonfirmasi sebagai faktor pendorong utama peningkatan kasus, mengindikasikan bahwa strategi pengendalian wabah tidak cukup hanya mengandalkan target vaksinasi, tetapi harus disertai intervensi perbaikan kualitas lingkungan di permukiman padat penduduk.
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.
Dalam memahami pola penyebaran dan penyebab penyakit, epidemiologi menggunakan konsep dasar yang dikenal sebagai Segitiga Epidemiologi (Epidemiologic Triad). Model ini menggambarkan bahwa penyakit muncul akibat adanya interaksi antara tiga komponen utama, yaitu Agent (penyebab penyakit), Host (inang/manusia), dan Environment (lingkungan) [8], [9].
Kondisi kesehatan sangat bergantung pada keseimbangan ketiga faktor tersebut. Jika keseimbangan ini terganggu misalnya agen penyakit menjadi lebih ganas, daya tahan tubuh menurun, atau kondisi lingkungan mendukung penularan maka penyakit akan terjadi [8].
Agen merupakan penyebab utama yang keberadaannya mutlak diperlukan agar suatu penyakit bisa muncul. Secara umum, agen penyebab penyakit ini bisa dibagi menjadi beberapa kelompok [9], [10]:
Selain jenisnya, karakteristik agen juga sangat menentukan, seperti infektivitas (kemampuannya untuk masuk dan berkembang biak dalam tubuh), patogenisitas (kemampuannya menyebabkan sakit), serta virulensi (seberapa parah penyakit yang ditimbulkannya) [9].
Penjamu atau host adalah sebutan untuk manusia atau organisme yang rentan terkena penyakit. Karakteristik yang dimiliki oleh penjamu ini sangat menentukan seberapa besar risiko mereka tertular serta tingkat keparahan penyakit yang akan dialami. Faktor-faktor tersebut meliputi [8], [10]:
Lingkungan merupakan faktor eksternal yang mempengaruhi kondisi agen maupun penjamu. Secara umum, lingkungan terbagi menjadi beberapa aspek [9], [10]:
Dalam epidemiologi, langkah paling dasar adalah mengukur kejadian penyakit serta hubungannya dengan paparan tertentu. Bagian ini akan membahas tiga ukuran utama: Prevalensi sebagai ukuran frekuensi, serta Prevalence Ratio (PR) dan Prevalence Odds Ratio (POR) sebagai ukuran asosiasi, terutama dalam studi cross-sectional [8], [9].
Untuk mempermudah perhitungan rumus selanjutnya, data diasumsikan tersusun dalam tabel kontingensi \(2 \times 2\) sebagai berikut:
| Sakit (Kasus) | Tidak Sakit | Total | |
|---|---|---|---|
| Terpapar | \(a\) | \(b\) | \(a+b\) |
| Tidak Terpapar | \(c\) | \(d\) | \(c+d\) |
Prevalensi menggambarkan proporsi individu dalam populasi yang sedang mengalami penyakit atau kondisi tertentu, baik pada satu titik waktu (point prevalence) maupun dalam rentang waktu tertentu (period prevalence). Berbeda dengan insidensi yang hanya mencatat kasus baru, prevalensi mencakup gabungan antara kasus baru dan kasus lama yang masih ada [8], [10].
Secara matematis, prevalensi (\(P\)) dapat dihitung menggunakan rumus:
\[ P = \frac{\text{Jumlah kasus yang ada (lama + baru)}}{\text{Total populasi berisiko}} \]
Atau berdasarkan notasi tabel di atas, prevalensi penyakit dalam total populasi studi adalah:
\[ P = \frac{a + c}{a + b + c + d} \]
Prevalensi dipengaruhi oleh dua faktor utama: laju insidensi (munculnya kasus baru) dan durasi penyakit. Jika penyakit bersifat kronis dan tidak mematikan dengan cepat, prevalensi akan cenderung tinggi [10].
Prevalence Ratio (PR) merupakan ukuran asosiasi yang membandingkan prevalensi penyakit pada kelompok terpapar dengan kelompok tidak terpapar. Ukuran ini lebih sering digunakan dalam studi cross-sectional ketika penyakit yang diteliti cukup umum (prevalensinya tinggi), karena memberikan gambaran risiko yang lebih mudah dipahami dibandingkan Odds Ratio [11].
Adapun rumus untuk menghitung Prevalence Ratio adalah:
\[ PR = \frac{\text{Prevalensi pada Kelompok Terpapar}}{\text{Prevalensi pada Kelompok Tidak Terpapar}} \]
Dalam notasi aljabar:
\[ PR = \frac{a / (a+b)}{c / (c+d)} \]
Interpretasi nilai PR: * \(PR = 1\): Tidak ada hubungan antara paparan dan penyakit. * \(PR > 1\): Paparan merupakan faktor risiko (meningkatkan prevalensi). * \(PR < 1\): Paparan bersifat protektif (menurunkan prevalensi).
Prevalence Odds Ratio (POR) adalah perbandingan odds penyakit antara kelompok yang terpapar dengan kelompok yang tidak terpapar. Walaupun perhitungan rumusnya sama persis dengan Odds Ratio (OR) dalam studi kasus-kontrol, POR secara khusus dihitung menggunakan data prevalensi yang diperoleh dari studi cross-sectional [8], [11].
Rumus untuk menghitung Prevalence Odds Ratio adalah: \[ POR = \frac{\text{Odds Sakit pada Terpapar}}{\text{Odds Sakit pada Tidak Terpapar}} = \frac{a/b}{c/d} \]
Disederhanakan menjadi rumus silang:
\[ POR = \frac{ad}{bc} \]
Penting untuk dicatat bahwa jika penyakit yang diteliti jarang terjadi (prevalensi < 10%), nilai POR akan mendekati nilai PR. Namun, jika prevalensi penyakit tinggi, POR cenderung memberikan angka yang lebih ekstrem (lebih jauh dari angka 1) dibandingkan PR, sehingga dapat menaksir risiko secara berlebihan (overestimation) [2], [4].
Studi cross-sectional atau potong lintang merupakan desain penelitian observasional di mana pengukuran paparan (faktor risiko) dan penyakit (outcome) dilakukan secara bersamaan pada satu waktu. Karena karakteristiknya ini, studi tersebut sering diibaratkan sebagai “potret” (snapshot) kondisi populasi. Unit analisisnya umumnya adalah individu, dengan tujuan utama mengestimasi prevalensi penyakit serta menjajaki hubungan awal antar variabel [8], [9]. Karena tidak melibatkan pemantauan berkelanjutan (follow-up), ukuran frekuensi yang dihasilkan adalah prevalensi, sedangkan ukuran asosiasinya menggunakan Prevalence Ratio (PR) atau Prevalence Odds Ratio (POR) [11].
Keunggulan utama dari desain ini adalah efisiensi dari segi waktu dan biaya, serta sangat berguna untuk memetakan beban penyakit sebagai dasar perencanaan layanan kesehatan, misalnya pada survei nasional [8]. Namun, kelemahan signifikannya adalah ketidakmampuan memastikan urutan waktu (temporal relationship) antara sebab dan akibat. Selain itu, desain ini rentan terhadap bias prevalensi karena cenderung hanya menjaring kasus yang bertahan hidup lama (survivor bias) dan melewatkan kasus yang cepat sembuh atau fatal [9], [11].
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 jenis data sekunder yang diperoleh dari portal resmi Open Data Jabar (Pemerintah Provinsi Jawa Barat). Data yang dikumpulkan mencakup data penyakit (kasus campak), data demografi (kependudukan), dan data faktor risiko terkait di level Kabupaten/Kota [12]-[16].
Variabel dalam penelitian ini diklasifikasikan berdasarkan peranannya dalam analisis asosiasi dan perhitungan frekuensi. Variabel Jumlah Penduduk ditempatkan sebagai Variabel Z (Variabel Tambahan/Denominator) yang berfungsi untuk menstandarisasi jumlah kasus menjadi ukuran frekuensi (Prevalensi/Insidensi) agar dapat dibandingkan antarwilayah.
Berikut adalah tabel operasional variabel:
| Kategori Variabel | Nama Variabel | Definisi Operasional | Peran dalam Analisis | Skala Data |
|---|---|---|---|---|
| Variabel Dependen (Y) | Jumlah Kasus Campak | Jumlah kejadian kasus campak yang tercatat di fasilitas kesehatan pada periode waktu tertentu. | Outcome (Akibat) | Rasio (Diskrit) |
| Variabel Independen (X1) | Cakupan Imunisasi | Persentase target populasi yang menerima vaksinasi campak di suatu wilayah. | Exposure (Paparan/Faktor Risiko) | Rasio (Kontinu) |
| Variabel Independen (X2) | Persentase Akses Sanitasi Layak | Persentase rumah tangga yang memiliki akses terhadap sanitasi layak | Exposure (Faktor Lingkungan) | Rasio (Kontinu) |
| Variabel Independen (X3) | Kepadatan Penduduk | Jumlah penduduk dibagi dengan luas wilayah (\(jiwa/km^2\)). | Exposure (Faktor Lingkungan) | Rasio (Kontinu) |
| Variabel Tambahan (Z) | Jumlah Penduduk | Total populasi yang berisiko (population at risk) di wilayah tersebut. | Denominator (Pembagi) untuk menghitung Rate/Proporsi | Rasio (Diskrit) |
Analisis data dilakukan secara bertahap menggunakan perangkat lunak statistik (R/RStudio). Tahapan analisis meliputi analisis deskriptif, perhitungan ukuran epidemiologis, hingga pemodelan ekonometrika spasial.
Langkah pertama adalah melakukan eksplorasi data untuk memahami karakteristik awalnya. Tahapan ini mencakup tiga bagian utama:
Pada tahap ini, dilakukan perhitungan statistik menggunakan data agregat yang mencakup:
Analisis ini dilakukan untuk menangkap efek ketergantungan antarwilayah atau spatial dependence, hal yang sering kali luput dalam analisis regresi biasa.
Uji Autokorelasi Spasial Global (Global Moran’s I) Langkah ini dipakai untuk melihat apakah ada autokorelasi spasial pada variabel terikat di seluruh wilayah Jawa Barat secara umum. Tujuannya untuk menguji hipotesis apakah penyebaran kasusnya bersifat acak (random), mengelompok (clustered), atau justru menyebar (dispersed).
Uji Autokorelasi Spasial Lokal (LISA) Local Indicators of Spatial Association atau LISA digunakan untuk melacak lokasi-lokasi spesifik yang punya hubungan spasial kuat. Hasilnya nanti dibagi menjadi empat kategori:
Estimasi Model Regresi Ada tiga model yang akan dibangun dan dibandingkan dalam penelitian ini:
Pemilihan Model Terbaik Untuk menentukan mana model yang paling pas, dilakukan beberapa tes diagnostik:
Secara garis besar, alur pengerjaan penelitian ini dibagi menjadi beberapa tahapan:
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/Epidem/UAS & Project (Rshiny)/File Bahan Dashboard/(CSV) Data UAS & Project Epidem 2025.csv")
jabar_shp <- st_read("C:/Users/Admin/Downloads/KULIAH/Semester 5/Epidem/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\Epidem\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.
# Menggunakan data 'jabar_2024_sf' yang sudah dihitung pada subbab 4.1
# Menampilkan ringkasan statistik Prevalensi
summary_prev <- summary(jabar_2024_sf$prevalensi_100k)
# Menampilkan wilayah dengan prevalensi terendah dan tertinggi
min_prev <- jabar_2024_sf %>%
arrange(prevalensi_100k) %>%
slice(1) %>%
select(WADMKK, prevalensi_100k) %>%
st_drop_geometry()
max_prev <- jabar_2024_sf %>%
arrange(desc(prevalensi_100k)) %>%
slice(1) %>%
select(WADMKK, prevalensi_100k) %>%
st_drop_geometry()
print("Ringkasan Statistik Prevalensi per 100.000 Penduduk:")## [1] "Ringkasan Statistik Prevalensi per 100.000 Penduduk:"
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.0 534.1 678.1 954.6 1311.7 3104.1
## [1] "Prevalensi Terendah: Sukabumi ( 0 )"
print(paste("Prevalensi Tertinggi:", max_prev$WADMKK, "(", round(max_prev$prevalensi_100k, 2), ")"))## [1] "Prevalensi Tertinggi: Kota Cirebon ( 3104.15 )"
Berdasarkan ringkasan statistik, data menunjukkan ketimpangan yang cukup ekstrem karena nilai rata-rata (954,6) posisinya jauh lebih tinggi dibandingkan nilai tengah (678,1). Kondisi ini menandakan bahwa sebaran data “tertarik” ke atas oleh nilai ekstrem di Kota Cirebon (3.104) yang angkanya melompat sangat jauh meninggalkan mayoritas wilayah lain, sehingga menciptakan rentang data yang sangat lebar dari 0 hingga 3.000-an.
# 1. Menentukan Cut-off (Rata-rata)
mean_kasus <- mean(jabar_2024_sf$jumlah_kasus, na.rm = TRUE)
mean_imun <- mean(jabar_2024_sf$imunisasi, na.rm = TRUE)
# 2. Membentuk Tabel Kontingensi 2x2
# a: Exposed (Imun Rendah) & Sakit (Kasus Tinggi)
a <- nrow(filter(jabar_2024_sf, imunisasi < mean_imun & jumlah_kasus >= mean_kasus))
# b: Exposed (Imun Rendah) & Tidak Sakit (Kasus Rendah)
b <- nrow(filter(jabar_2024_sf, imunisasi < mean_imun & jumlah_kasus < mean_kasus))
# c: Unexposed (Imun Tinggi) & Sakit (Kasus Tinggi)
c <- nrow(filter(jabar_2024_sf, imunisasi >= mean_imun & jumlah_kasus >= mean_kasus))
# d: Unexposed (Imun Tinggi) & Tidak Sakit (Kasus Rendah)
d <- nrow(filter(jabar_2024_sf, imunisasi >= mean_imun & jumlah_kasus < mean_kasus))
# Membuat Matrix Tampilan
tabel_2x2_imun <- matrix(c(a, c, b, d), nrow = 2, byrow = TRUE)
colnames(tabel_2x2_imun) <- c("Kasus Tinggi", "Kasus Rendah")
rownames(tabel_2x2_imun) <- c("Imunisasi Rendah (Risk)", "Imunisasi Tinggi (Ref)")
print("Tabel Kontingensi 2x2 (Imunisasi vs Kasus):")## [1] "Tabel Kontingensi 2x2 (Imunisasi vs Kasus):"
## Kasus Tinggi Kasus Rendah
## Imunisasi Rendah (Risk) 4 9
## Imunisasi Tinggi (Ref) 12 2
# 3. Menghitung PR dan POR
# Prevalence Ratio
PR_imun <- (a / (a + b)) / (c / (c + d))
# Prevalence Odds Ratio
POR_imun <- (a * d) / (b * c)
print(paste("Prevalence Ratio (PR) Imunisasi:", round(PR_imun, 3)))## [1] "Prevalence Ratio (PR) Imunisasi: 0.306"
## [1] "Prevalence Odds Ratio (POR) Imunisasi: 0.074"
Berdasarkan hasil analisis statistik, data memperlihatkan hubungan yang terbalik (anomali) dari dugaan umum. Wilayah dengan status Imunisasi Rendah justru tercatat memiliki risiko yang jauh lebih kecil (nilai rasio 0,3) untuk mengalami kejadian “Kasus Tinggi” dibandingkan wilayah dengan Imunisasi Tinggi. Secara statistik, data ini menunjukkan bahwa kejadian luar biasa (kasus tinggi) justru menumpuk di kelompok wilayah yang cakupan imunisasinya baik. Kemungkinan besar karena wilayah tersebut adalah kota padat penduduk yang memudahkan penularan sementara wilayah dengan imunisasi rendah justru didominasi oleh kasus yang sedikit.
# 1. Menentukan Cut-off
mean_sanitasi <- mean(jabar_2024_sf$sanitasi, na.rm = TRUE)
# 2. Membentuk Tabel Kontingensi 2x2
# a: Exposed (Sanitasi Buruk) & Sakit (Kasus Tinggi)
a_san <- nrow(filter(jabar_2024_sf, sanitasi < mean_sanitasi & jumlah_kasus >= mean_kasus))
# b: Exposed (Sanitasi Buruk) & Tidak Sakit (Kasus Rendah)
b_san <- nrow(filter(jabar_2024_sf, sanitasi < mean_sanitasi & jumlah_kasus < mean_kasus))
# c: Unexposed (Sanitasi Baik) & Sakit (Kasus Tinggi)
c_san <- nrow(filter(jabar_2024_sf, sanitasi >= mean_sanitasi & jumlah_kasus >= mean_kasus))
# d: Unexposed (Sanitasi Baik) & Tidak Sakit (Kasus Rendah)
d_san <- nrow(filter(jabar_2024_sf, sanitasi >= mean_sanitasi & jumlah_kasus < mean_kasus))
# Membuat Matrix Tampilan
tabel_2x2_san <- matrix(c(a_san, c_san, b_san, d_san), nrow = 2, byrow = TRUE)
colnames(tabel_2x2_san) <- c("Kasus Tinggi", "Kasus Rendah")
rownames(tabel_2x2_san) <- c("Sanitasi Buruk (Risk)", "Sanitasi Baik (Ref)")
print("Tabel Kontingensi 2x2 (Sanitasi vs Kasus):")## [1] "Tabel Kontingensi 2x2 (Sanitasi vs Kasus):"
## Kasus Tinggi Kasus Rendah
## Sanitasi Buruk (Risk) 8 5
## Sanitasi Baik (Ref) 7 7
# 3. Menghitung PR dan POR
# Prevalence Ratio
PR_san <- (a_san / (a_san + b_san)) / (c_san / (c_san + d_san))
# Prevalence Odds Ratio
POR_san <- (a_san * d_san) / (b_san * c_san)
print(paste("Prevalence Ratio (PR) Sanitasi:", round(PR_san, 3)))## [1] "Prevalence Ratio (PR) Sanitasi: 1.28"
## [1] "Prevalence Odds Ratio (POR) Sanitasi: 1.6"
Berdasarkan hasil analisis statistik, data menunjukkan pola hubungan yang positif (sejalan) di mana faktor lingkungan berperan nyata. Wilayah dengan status Sanitasi Buruk tercatat memiliki risiko 1,28 kali lebih besar untuk mengalami kejadian “Kasus Tinggi” dibandingkan wilayah dengan sanitasi baik. Angka ini mengonfirmasi secara data bahwa buruknya kondisi kebersihan berbanding lurus dengan peningkatan peluang terjadinya lonjakan kasus di suatu wilayah.
# 1. Menentukan Cut-off
mean_kepadatan <- mean(jabar_2024_sf$kepadatan, na.rm = TRUE)
# 2. Membentuk Tabel Kontingensi 2x2
# a: Exposed (Padat) & Sakit (Kasus Tinggi)
a_kep <- nrow(filter(jabar_2024_sf, kepadatan >= mean_kepadatan & jumlah_kasus >= mean_kasus))
# b: Exposed (Padat) & Tidak Sakit (Kasus Rendah)
b_kep <- nrow(filter(jabar_2024_sf, kepadatan >= mean_kepadatan & jumlah_kasus < mean_kasus))
# c: Unexposed (Jarang) & Sakit (Kasus Tinggi)
c_kep <- nrow(filter(jabar_2024_sf, kepadatan < mean_kepadatan & jumlah_kasus >= mean_kasus))
# d: Unexposed (Jarang) & Tidak Sakit (Kasus Rendah)
d_kep <- nrow(filter(jabar_2024_sf, kepadatan < mean_kepadatan & jumlah_kasus < mean_kasus))
# Membuat Matrix Tampilan
tabel_2x2_kep <- matrix(c(a_kep, c_kep, b_kep, d_kep), nrow = 2, byrow = TRUE)
colnames(tabel_2x2_kep) <- c("Kasus Tinggi", "Kasus Rendah")
rownames(tabel_2x2_kep) <- c("Kepadatan Tinggi (Risk)", "Kepadatan Rendah (Ref)")
print("Tabel Kontingensi 2x2 (Kepadatan vs Kasus):")## [1] "Tabel Kontingensi 2x2 (Kepadatan vs Kasus):"
## Kasus Tinggi Kasus Rendah
## Kepadatan Tinggi (Risk) 5 8
## Kepadatan Rendah (Ref) 3 11
# 3. Menghitung PR dan POR
# Prevalence Ratio
PR_kep <- (a_kep / (a_kep + b_kep)) / (c_kep / (c_kep + d_kep))
# Prevalence Odds Ratio
POR_kep <- (a_kep * d_kep) / (b_kep * c_kep)
print(paste("Prevalence Ratio (PR) Kepadatan:", round(PR_kep, 3)))## [1] "Prevalence Ratio (PR) Kepadatan: 1.484"
## [1] "Prevalence Odds Ratio (POR) Kepadatan: 2.292"
Berdasarkan hasil analisis risiko, data menunjukkan pola hubungan yang sejalan di mana kepadatan penduduk menjadi faktor pendorong kenaikan kasus. Wilayah dengan status kepadatan tinggi tercatat memiliki risiko hampir 1,5 kali lebih besar untuk mengalami kejadian kasus tinggi dibandingkan wilayah yang lebih lengang. Secara statistik, angka ini mengonfirmasi bahwa semakin padat populasi di suatu area, semakin tinggi pula probabilitas data kasusnya untuk melonjak.
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.
Penelitian ini menerapkan desain studi Cross-Sectional dengan pendekatan ekologi (Ecological Study), di mana pengukuran variabel paparan dan outcome dilakukan secara serentak pada unit analisis wilayah (Kabupaten/Kota) di Provinsi Jawa Barat pada tahun 2024.
Berdasarkan data yang digunakan, variabel diklasifikasikan sebagai berikut:
Mengingat desain studi ini bersifat observasional potong lintang pada level agregat, terdapat beberapa potensi bias yang perlu diperhatikan dalam interpretasi hasil:
Berdasarkan hasil analisis secara keseluruhan, penelitian ini menyimpulkan bahwa sebaran penyakit campak di Jawa Barat tahun 2024 menunjukkan pola ketimpangan data yang unik namun tidak memiliki ketergantungan antar-wilayah yang kuat. Meskipun secara visual terlihat adanya penumpukan kasus di kawasan urban utara, pengujian statistik membuktikan bahwa pola tersebut bersifat acak (random), sehingga model regresi standar (OLS) justru terbukti lebih valid dan efisien untuk menjelaskan fenomena ini dibandingkan model spasial yang rumit. Variabel kepadatan penduduk dan sanitasi terkonfirmasi sebagai faktor penentu utama yang sejalan dengan data kasus, sedangkan anomali pada data imunisasi mengisyaratkan bahwa risiko penularan di kota padat sangat tinggi terlepas dari status cakupan vaksinnya.
Berdasarkan temuan bahwa model spasial ternyata tidak terbukti signifikan dan model regresi standar hanya mampu menjelaskan sekitar 41% pola data, peneliti selanjutnya disarankan untuk tidak lagi memaksakan analisis berbasis wilayah makro, melainkan beralih mengeksplorasi data yang lebih detail di tingkat individu atau perilaku masyarakat. Rendahnya akurasi model saat ini mengindikasikan adanya variabel tersembunyi (lurking variable) di luar faktor lingkungan fisik seperti pola interaksi sosial atau mobilitas harian yang belum tertangkap, sehingga penambahan variabel baru yang lebih spesifik sangat diperlukan untuk mendapatkan gambaran statistik yang lebih utuh.
Berdasarkan data yang mengonfirmasi bahwa buruknya sanitasi dan tingginya kepadatan penduduk berbanding lurus dengan lonjakan kasus, pemerintah disarankan untuk tidak hanya terpaku pada target angka vaksinasi semata, tetapi mulai memprioritaskan intervensi perbaikan kualitas lingkungan di wilayah padat penduduk (urban) seperti Cirebon dan Bodebek. Data membuktikan bahwa wilayah dengan cakupan imunisasi tinggi pun bisa tetap mengalami ledakan kasus (“kebobolan”) jika kondisi lingkungannya mendukung penularan, sehingga masyarakat juga perlu sadar bahwa menjaga kebersihan lingkungan hunian adalah benteng pertahanan yang sama pentingnya dengan imunisasi untuk memutus rantai penularan yang sifatnya acak ini.
[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] Wassertheil-Smoller, S., & Smoller, J. (2015). Biostatistics and Epidemiology: A Primer for Health and Biomedical Professionals (4th ed.). New York, NY: Springer.
[9] Gordis, L. (2014). Epidemiology (5th ed.). Philadelphia, PA: Elsevier Saunders.
[10] Centers for Disease Control and Prevention. (2012). Principles of Epidemiology in Public Health Practice: An Introduction to Applied Epidemiology and Biostatistics (3rd ed.). Atlanta, GA: U.S. Department of Health and Human Services.
[11] Rothman, K. J., Greenland, S., & Lash, T. L. (2008). Modern Epidemiology (3rd ed.). Philadelphia, PA: Lippincott Williams & Wilkins.
[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.