Laporan ini bertujuan untuk menganalisis distribusi spasial dan faktor-faktor yang berasosiasi dengan prevalensi stunting di 27 kabupaten/kota Provinsi Jawa Barat tahun 2024. Stunting merupakan masalah gizi kronis yang menjadi prioritas kesehatan nasional dan daerah, termasuk di Provinsi Jawa Barat sebagai provinsi dengan jumlah penduduk terbesar di Indonesia.
Penelitian ini menggunakan desain studi cross-sectional ekologis dengan data agregat tingkat kabupaten/kota yang bersumber dari Dinas Kesehatan dan Badan Pusat Statistik Provinsi Jawa Barat. Variabel dependen adalah prevalensi stunting, sedangkan variabel independen meliputi kemiskinan, akses air minum layak, rumah layak huni, dan kepadatan penduduk. Analisis meliputi perhitungan ukuran frekuensi (prevalensi), ukuran asosiasi (Prevalence Ratio), korelasi Pearson, dan regresi linear berganda.
Hasil penelitian menunjukkan bahwa rata-rata prevalensi stunting di Jawa Barat adalah 17,6% dengan rentang 7,2% hingga 30,8%. Berdasarkan klasifikasi WHO (1995), sebanyak 17 kabupaten/kota (63%) berada pada kategori keparahan rendah (<20%), 9 wilayah (33%) keparahan sedang, dan 1 wilayah (4%) keparahan tinggi. Kabupaten Bandung Barat memiliki prevalensi tertinggi (30,8%), sedangkan Kabupaten Cianjur memiliki prevalensi terendah (7,2%). Peta distribusi spasial menunjukkan adanya clustering wilayah dengan prevalensi tinggi di bagian selatan Jawa Barat.
Analisis ukuran asosiasi menggunakan Prevalence Ratio (PR) menunjukkan bahwa seluruh variabel independen tidak memiliki asosiasi yang signifikan secara statistik dengan prevalensi stunting (95% CI melewati nilai 1). Model regresi linear berganda menghasilkan R² = 0,15 yang tidak signifikan (p > 0,05). Ketidaksignifikanan hasil ini disebabkan oleh dua faktor utama: (1) ukuran sampel yang terlalu kecil (n=27) sehingga statistical power rendah, dan (2) variabel agregat tingkat kabupaten/kota tidak menangkap variasi individual (ecological fallacy).
Berdasarkan hasil penelitian, disarankan agar penelitian selanjutnya menggunakan data level individu dari survei rumah tangga untuk menghindari ecological fallacy dan meningkatkan validitas temuan. Meskipun demikian, hasil analisis ini tetap memberikan informasi berharga untuk identifikasi wilayah prioritas intervensi stunting di Provinsi Jawa Barat.
Kata Kunci: Stunting, epidemiologi spasial, prevalensi, Prevalence Ratio, Jawa Barat, cross-sectional.
Stunting merupakan kondisi gagal tumbuh pada anak balita (0-59 bulan) akibat kekurangan gizi kronis, terutama pada 1.000 Hari Pertama Kehidupan (HPK). Menurut World Health Organization (WHO, 2014), stunting didefinisikan sebagai tinggi badan menurut umur (TB/U) yang berada di bawah minus dua standar deviasi (-2 SD) dari median standar pertumbuhan anak WHO. Stunting bukan hanya masalah pertumbuhan fisik, tetapi juga berdampak pada perkembangan kognitif, kemampuan belajar, produktivitas ekonomi di masa dewasa, serta meningkatkan risiko penyakit degeneratif (de Onis & Branca, 2016).
Secara global, stunting masih menjadi masalah kesehatan masyarakat yang signifikan. Data WHO tahun 2022 menunjukkan bahwa 148,1 juta anak balita (22,3%) mengalami stunting, dengan 52% berada di Asia (UNICEF, WHO, & World Bank, 2023). Indonesia menempati peringkat ke-4 dunia dalam jumlah absolut balita stunting setelah India, Nigeria, dan Pakistan (Kementerian Kesehatan RI, 2023).
Di tingkat nasional, prevalensi stunting Indonesia mengalami penurunan dari 37,2% (2013) menjadi 30,8% (2018) berdasarkan Riset Kesehatan Dasar, dan terus menurun menjadi 21,6% pada tahun 2022 (Kementerian Kesehatan RI, 2023). Meskipun demikian, angka tersebut masih berada di atas ambang batas yang ditetapkan WHO yaitu 20% (WHO, 2014).
Provinsi Jawa Barat sebagai provinsi dengan jumlah penduduk terbesar di Indonesia (49,9 juta jiwa pada tahun 2023) memiliki tantangan besar dalam penanganan stunting. Berdasarkan data Survei Status Gizi Indonesia (SSGI) 2022, prevalensi stunting Jawa Barat sebesar 20,2%, sedikit di bawah rata-rata nasional (Kementerian Kesehatan RI, 2023). Namun, dengan populasi yang besar, jumlah absolut balita stunting di Jawa Barat mencapai ratusan ribu anak.
Stunting sebagai Prioritas Pembangunan Jawa Barat:
Pemerintah Provinsi Jawa Barat telah menetapkan penurunan stunting sebagai salah satu program prioritas pembangunan. Program ini sejalan dengan Peraturan Presiden Nomor 72 Tahun 2021 tentang Percepatan Penurunan Stunting (Sekretariat Kabinet RI, 2021). Berdasarkan Peraturan Gubernur Jawa Barat Nomor 107 Tahun 2020 tentang Percepatan Penurunan Stunting di Daerah Provinsi Jawa Barat, stunting ditetapkan sebagai masalah kesehatan prioritas yang memerlukan pendekatan multi-sektoral dan berbasis wilayah (Pemerintah Provinsi Jawa Barat, 2020). Upaya percepatan penurunan stunting terus berlanjut dan menjadi salah satu fokus dalam RPJMD Provinsi Jawa Barat 2025-2029, dengan target nasional tahun 2025 sebesar 18,8% (Kementerian Kesehatan RI, 2023).
Analisis epidemiologi spasial menjadi penting untuk memahami pola distribusi stunting dan mengidentifikasi wilayah-wilayah yang memerlukan intervensi prioritas. Pendekatan ini memungkinkan identifikasi cluster atau kantong-kantong stunting serta faktor-faktor kontekstual yang mempengaruhinya (Victora et al., 2021).
Berdasarkan latar belakang di atas, rumusan masalah dalam analisis ini adalah:
Menganalisis epidemiologi spasial stunting di Provinsi Jawa Barat tahun 2024.
Stunting adalah gangguan pertumbuhan linear yang ditandai dengan tinggi badan atau panjang badan menurut umur di bawah -2 standar deviasi (SD) dari median Standar Pertumbuhan Anak WHO (WHO, 2006). Pengukuran dilakukan dengan membandingkan z-score tinggi badan menurut umur (TB/U atau HAZ - Height-for-Age Z-score) dengan standar referensi WHO 2006.
Klasifikasi derajat stunting (WHO, 2006):
WHO (1995) dalam Technical Report Series No. 854 mengklasifikasikan tingkat keparahan masalah stunting pada level populasi:
| Kategori | Prevalensi | Keterangan |
|---|---|---|
| Rendah | < 20% | Low prevalence |
| Sedang | 20 - <30% | Medium prevalence |
| Tinggi | 30 - <40% | High prevalence |
| Sangat Tinggi | ≥ 40% | Very high prevalence |
Model segitiga epidemiologi (epidemiological triad) yang dikembangkan oleh John Gordon (1950) menjelaskan interaksi antara tiga komponen utama dalam terjadinya penyakit atau masalah kesehatan (Gordis, 2014):
Pada konteks stunting, agen penyebab bukan mikroorganisme patogen seperti pada penyakit infeksi, melainkan defisiensi zat gizi yang terjadi secara kronis. Agen utama meliputi:
Faktor-faktor pada individu yang mempengaruhi kerentanan terhadap stunting:
Faktor lingkungan yang mempengaruhi terjadinya stunting:
Konsep Segitiga Epidemiologi Stunting
Prevalensi adalah ukuran frekuensi yang menggambarkan proporsi individu dalam populasi yang mengalami suatu kondisi pada titik waktu tertentu (Gordis, 2014).
\[\text{Prevalensi} = \frac{\text{Jumlah kasus stunting}}{\text{Total populasi balita}} \times 100\%\]
Prevalensi tepat digunakan untuk kondisi kronis seperti stunting karena mengukur “potret” kondisi pada satu waktu (point prevalence).
Prevalence Ratio (PR) adalah ukuran asosiasi yang membandingkan prevalensi pada kelompok terpapar dengan kelompok tidak terpapar (Szklo & Nieto, 2014):
\[PR = \frac{\text{Prevalensi pada kelompok terpapar}}{\text{Prevalensi pada kelompok tidak terpapar}}\]
Interpretasi Prevalence Ratio:
Attributable Risk (AR) atau Risk Difference mengukur perbedaan absolut prevalensi:
\[AR = P_{\text{terpapar}} - P_{\text{tidak terpapar}}\]
Studi cross-sectional (potong lintang) adalah desain observasional yang mengukur paparan dan outcome secara simultan pada satu titik waktu (Gordis, 2014). Karakteristik:
Studi ekologis menggunakan data agregat pada level populasi (misal: kabupaten/kota) sebagai unit analisis, bukan individu (Morgenstern, 1995). Karakteristik:
Kerangka konseptual UNICEF (2013) mengidentifikasi penyebab stunting pada tiga level:
Penelitian ini menggunakan desain studi cross-sectional ekologis dengan unit analisis berupa kabupaten/kota. Data yang digunakan merupakan data agregat tingkat kabupaten/kota, bukan data individu.
Karakteristik Desain:
Implikasi desain:
Data sekunder diperoleh dari:
| Variabel | Tipe | Level_UNICEF | Definisi | Referensi |
|---|---|---|---|---|
| Prevalensi Stunting (%) | Dependen |
|
Persentase balita dengan HAZ < -2 SD | WHO (2006) |
| Persentase Penduduk Miskin (%) | Independen | Basic Cause | Persentase penduduk di bawah garis kemiskinan | BPS (2024) |
| Akses Air Minum Layak (%) | Independen | Underlying Cause | Persentase rumah tangga dengan akses air minum layak | Kementerian Kesehatan RI (2020) |
| Rumah Layak Huni (%) | Independen | Underlying Cause | Persentase rumah tangga menempati rumah layak huni | Kementerian PUPR (2018) |
| Kepadatan Penduduk (jiwa/km²) | Independen | Kontekstual | Jumlah penduduk per kilometer persegi | BPS (2024) |
Alur Kerja Penelitian
Analisis dilakukan menggunakan R versi 4.3.x dengan packages: tidyverse, sf, leaflet, corrplot, dan car.
# Load dataset
df <- read.csv("C:\\Users\\user\\OneDrive\\Documents\\EPIDEMOLOGI STUNTING JABAR 2024\\df_analisis_stunting_jabar_2024_imputed.csv")
# Rename columns
df <- df %>%
rename(
persen_stunting = prevalensi_stunting,
persen_rumah_layak_huni = persen_rumah_layak
)
# Add risk classification (WHO, 1995)
df <- df %>%
mutate(tingkat_keparahan = case_when(
persen_stunting < 20 ~ "Rendah",
persen_stunting < 30 ~ "Sedang",
persen_stunting < 40 ~ "Tinggi",
TRUE ~ "Sangat Tinggi"
),
tingkat_keparahan = factor(tingkat_keparahan, levels = c("Rendah", "Sedang", "Tinggi", "Sangat Tinggi")))desc_vars <- c("persen_stunting", "persen_miskin", "persen_air_minum_layak",
"persen_rumah_layak_huni", "kepadatan_penduduk")
desc_stats <- df %>%
select(all_of(desc_vars)) %>%
pivot_longer(everything(), names_to = "Variabel", values_to = "Nilai") %>%
group_by(Variabel) %>%
summarise(
N = sum(!is.na(Nilai)),
Mean = mean(Nilai, na.rm = TRUE),
SD = sd(Nilai, na.rm = TRUE),
Min = min(Nilai, na.rm = TRUE),
Median = median(Nilai, na.rm = TRUE),
Max = max(Nilai, na.rm = TRUE)
) %>%
mutate(Variabel = case_when(
Variabel == "persen_stunting" ~ "Stunting (%)",
Variabel == "persen_miskin" ~ "Kemiskinan (%)",
Variabel == "persen_air_minum_layak" ~ "Air Minum Layak (%)",
Variabel == "persen_rumah_layak_huni" ~ "Rumah Layak Huni (%)",
Variabel == "kepadatan_penduduk" ~ "Kepadatan Penduduk (jiwa/km²)"
))
kable(desc_stats, digits = 2, caption = "Tabel 4.1 Statistik Deskriptif Variabel Penelitian (n=27)") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"))| Variabel | N | Mean | SD | Min | Median | Max |
|---|---|---|---|---|---|---|
| Kepadatan Penduduk (jiwa/km²) | 27 | 3910.93 | 4668.12 | 385.00 | 1468.00 | 15176.00 |
| Air Minum Layak (%) | 27 | 95.10 | 4.22 | 85.37 | 96.76 | 99.85 |
| Kemiskinan (%) | 27 | 8.01 | 2.65 | 2.34 | 8.41 | 11.93 |
| Rumah Layak Huni (%) | 27 | 58.72 | 17.10 | 32.83 | 61.91 | 85.78 |
| Stunting (%) | 27 | 17.84 | 4.87 | 7.20 | 18.00 | 30.80 |
Interpretasi:
Berdasarkan Tabel 4.1, rata-rata prevalensi stunting di 27 kabupaten/kota Provinsi Jawa Barat tahun 2024 adalah 17.8% dengan standar deviasi 4.9%. Prevalensi terendah terdapat di Kabupaten Cianjur (7.2%) dan tertinggi di Kabupaten Bandung Barat (30.8%). Rentang variasi yang lebar menunjukkan adanya disparitas antar wilayah dalam prevalensi stunting.
Rata-rata persentase kemiskinan adalah 8% dengan rentang 2.3% hingga 11.9%. Akses air minum layak rata-rata mencapai 95.1%, menunjukkan cakupan yang relatif baik di seluruh wilayah.
colors <- c("Rendah" = "#91cf60", "Sedang" = "#fee08b", "Tinggi" = "#fc8d59", "Sangat Tinggi" = "#d73027")
risk_dist <- df %>%
count(tingkat_keparahan) %>%
mutate(persen = round(n / sum(n) * 100, 1))
kable(risk_dist, col.names = c("Kategori Keparahan", "Jumlah Kab/Kota", "Persentase (%)"),
caption = "Tabel 4.2 Distribusi Kabupaten/Kota Berdasarkan Kategori Keparahan Stunting (WHO, 1995)") %>%
kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)| Kategori Keparahan | Jumlah Kab/Kota | Persentase (%) |
|---|---|---|
| Rendah | 19 | 70.4 |
| Sedang | 7 | 25.9 |
| Tinggi | 1 | 3.7 |
ggplot(risk_dist, aes(x = tingkat_keparahan, y = n, fill = tingkat_keparahan)) +
geom_col(width = 0.7) +
geom_text(aes(label = paste0(n, "\n(", persen, "%)")), vjust = -0.3, fontface = "bold") +
scale_fill_manual(values = colors) +
labs(title = "Distribusi Kategori Keparahan Stunting", subtitle = "27 Kabupaten/Kota di Jawa Barat, 2024",
x = "Kategori Keparahan (WHO, 1995)", y = "Jumlah Kabupaten/Kota") +
theme_minimal() + theme(legend.position = "none") +
ylim(0, max(risk_dist$n) + 3)Gambar 4.1 Distribusi Kategori Keparahan Stunting di Jawa Barat 2024
Interpretasi:
Berdasarkan klasifikasi WHO (1995), sebagian besar kabupaten/kota di Jawa Barat berada pada kategori keparahan Rendah (<20%) yaitu sebanyak 19 wilayah (70.4%). Kategori keparahan Sedang (20-<30%) terdapat di 7 wilayah, dan kategori Tinggi (30-<40%) terdapat di 1 wilayah yaitu Kabupaten Bandung Barat dengan prevalensi tertinggi 30,8%.
df_sorted <- df %>% arrange(persen_stunting) %>%
mutate(nama_kabkota = factor(nama_kabkota, levels = nama_kabkota))
ggplot(df_sorted, aes(x = persen_stunting, y = nama_kabkota, fill = tingkat_keparahan)) +
geom_col() +
geom_vline(xintercept = c(20, 30), linetype = "dashed", color = "gray40", linewidth = 0.8) +
geom_text(aes(label = paste0(persen_stunting, "%")), hjust = -0.1, size = 3) +
scale_fill_manual(values = colors) +
labs(title = "Prevalensi Stunting per Kabupaten/Kota", subtitle = "Jawa Barat, 2024 | Garis putus-putus: batas kategori WHO",
x = "Prevalensi Stunting (%)", y = "", fill = "Kategori") +
theme_minimal() + xlim(0, 35)Gambar 4.2 Prevalensi Stunting per Kabupaten/Kota
# Load GeoJSON - data already contains stunting data
geo_data <- sf::st_read("C:\\Users\\user\\OneDrive\\Documents\\EPIDEMOLOGI STUNTING JABAR 2024\\gdf_stunting_simplified.geojson", quiet = TRUE)
# Ensure numeric type
geo_data$persen_stunting <- as.numeric(geo_data$persen_stunting)
# Add risk level classification
geo_data$tingkat_keparahan <- cut(geo_data$persen_stunting,
breaks = c(0, 20, 30, 40, 100),
labels = c("Rendah", "Sedang", "Tinggi", "Sangat Tinggi"),
right = FALSE)
cat("Jumlah wilayah:", nrow(geo_data), "\n")## Jumlah wilayah: 27
## Range prevalensi: 7.2 - 30.8 %
# Color palette
pal <- colorNumeric(palette = c("#91cf60", "#fee08b", "#fc8d59", "#d73027"),
domain = c(5, 35), na.color = "#cccccc")
# Prepare labels
labels <- sprintf(
"<strong>%s</strong><br/>Prevalensi: %.1f%%<br/>Kategori: %s",
geo_data$nama_kabkota, geo_data$persen_stunting, geo_data$tingkat_keparahan
) %>% lapply(htmltools::HTML)
# Create interactive map
leaflet(geo_data) %>%
addProviderTiles(providers$CartoDB.Positron) %>%
addPolygons(
fillColor = ~pal(persen_stunting),
weight = 1, color = "white", fillOpacity = 0.8,
label = labels,
highlightOptions = highlightOptions(weight = 3, color = "#333", fillOpacity = 0.9)
) %>%
addLegend(
colors = c("#91cf60", "#fee08b", "#fc8d59", "#d73027"),
labels = c("< 20% (Rendah)", "20-30% (Sedang)", "30-40% (Tinggi)", "> 40% (Sangat Tinggi)"),
title = "Prevalensi Stunting",
position = "bottomright", opacity = 0.8
)Gambar 4.3 Peta Distribusi Prevalensi Stunting di Jawa Barat 2024
Interpretasi:
Peta distribusi spasial menunjukkan bahwa wilayah dengan prevalensi stunting tinggi (warna oranye-merah) cenderung terkonsentrasi di bagian selatan dan tenggara Jawa Barat, yaitu Kabupaten Bandung Barat (30,8%), Kabupaten Bandung (24,1%), dan Kabupaten Kuningan (22,7%). Sebaliknya, wilayah dengan prevalensi rendah (warna hijau) tersebar di berbagai lokasi termasuk Kabupaten Cianjur (7,2%), Kabupaten Indramayu (9,8%), dan Kota Bekasi (11,7%).
Pola spasial ini menunjukkan bahwa stunting tidak terdistribusi secara acak, tetapi menunjukkan adanya clustering pada wilayah-wilayah tertentu. Hal ini mengindikasikan kemungkinan adanya faktor kontekstual lokal yang mempengaruhi prevalensi stunting (Victora et al., 2021).
Prevalensi stunting dihitung sebagai proporsi balita dengan HAZ < -2 SD terhadap total balita yang diukur pada masing-masing kabupaten/kota.
prev_table <- df %>%
arrange(desc(persen_stunting)) %>%
select(nama_kabkota, jumlah_stunting, persen_stunting, tingkat_keparahan) %>%
head(10)
kable(prev_table,
col.names = c("Kabupaten/Kota", "Jumlah Kasus", "Prevalensi (%)", "Kategori Keparahan"),
caption = "Tabel 4.3 Sepuluh Kabupaten/Kota dengan Prevalensi Stunting Tertinggi") %>%
kable_styling(bootstrap_options = c("striped", "hover"))| Kabupaten/Kota | Jumlah Kasus | Prevalensi (%) | Kategori Keparahan |
|---|---|---|---|
| KABUPATEN BANDUNG BARAT | 5827 | 30.8 | Tinggi |
| KABUPATEN BANDUNG | 21362 | 24.1 | Sedang |
| KOTA BANDUNG | 8172 | 22.8 | Sedang |
| KABUPATEN KUNINGAN | 4280 | 22.7 | Sedang |
| KOTA CIMAHI | 810 | 22.3 | Sedang |
| KOTA BOGOR | 1588 | 21.1 | Sedang |
| KABUPATEN SUKABUMI | 17463 | 20.5 | Sedang |
| KABUPATEN CIAMIS | 1689 | 20.3 | Sedang |
| KOTA SUKABUMI | 1183 | 19.7 | Rendah |
| KOTA TASIKMALAYA | 7190 | 19.6 | Rendah |
Prevalensi Agregat Jawa Barat:
total_kasus <- sum(df$jumlah_stunting)
mean_prev <- mean(df$persen_stunting)
weighted_prev <- sum(df$jumlah_stunting) / sum(df$jumlah_stunting / (df$persen_stunting/100)) * 100
cat("Total kasus stunting di Jawa Barat (2024):", format(total_kasus, big.mark = ","), "balita\n")## Total kasus stunting di Jawa Barat (2024): 152,048 balita
## Rata-rata prevalensi (unweighted): 17.84 %
Prevalence Ratio dihitung dengan membandingkan prevalensi stunting pada kelompok terpapar (faktor risiko tinggi) dengan kelompok tidak terpapar (faktor risiko rendah). Karena data bersifat agregat, kelompok paparan ditentukan berdasarkan median masing-masing variabel.
# Function to calculate PR
calc_PR <- function(data, exposure_var, outcome_var = "persen_stunting") {
median_val <- median(data[[exposure_var]], na.rm = TRUE)
# For poverty: high exposure = above median
# For protective factors (water, housing): high exposure = below median (lack of access)
if (exposure_var %in% c("persen_miskin", "kepadatan_penduduk")) {
exposed <- data[[outcome_var]][data[[exposure_var]] >= median_val]
unexposed <- data[[outcome_var]][data[[exposure_var]] < median_val]
exp_label <- paste0("≥", round(median_val, 1), "%")
unexp_label <- paste0("<", round(median_val, 1), "%")
} else {
exposed <- data[[outcome_var]][data[[exposure_var]] < median_val]
unexposed <- data[[outcome_var]][data[[exposure_var]] >= median_val]
exp_label <- paste0("<", round(median_val, 1), "%")
unexp_label <- paste0("≥", round(median_val, 1), "%")
}
P_exp <- mean(exposed, na.rm = TRUE)
P_unexp <- mean(unexposed, na.rm = TRUE)
PR <- P_exp / P_unexp
AR <- P_exp - P_unexp
# 95% CI for PR (using log transformation)
n_exp <- length(exposed)
n_unexp <- length(unexposed)
se_log_PR <- sqrt((1/n_exp) + (1/n_unexp))
CI_lower <- exp(log(PR) - 1.96 * se_log_PR)
CI_upper <- exp(log(PR) + 1.96 * se_log_PR)
return(data.frame(
Variabel = exposure_var,
Terpapar = exp_label,
Tidak_Terpapar = unexp_label,
P_Terpapar = P_exp,
P_Tidak_Terpapar = P_unexp,
PR = PR,
CI_Lower = CI_lower,
CI_Upper = CI_upper,
AR = AR
))
}
# Calculate PR for each variable
pr_results <- rbind(
calc_PR(df, "persen_miskin"),
calc_PR(df, "persen_air_minum_layak"),
calc_PR(df, "persen_rumah_layak_huni"),
calc_PR(df, "kepadatan_penduduk")
)
pr_results <- pr_results %>%
mutate(
Variabel = case_when(
Variabel == "persen_miskin" ~ "Kemiskinan tinggi",
Variabel == "persen_air_minum_layak" ~ "Akses air minum rendah",
Variabel == "persen_rumah_layak_huni" ~ "Rumah layak huni rendah",
Variabel == "kepadatan_penduduk" ~ "Kepadatan penduduk tinggi"
),
PR_CI = paste0(round(PR, 2), " (", round(CI_Lower, 2), "-", round(CI_Upper, 2), ")"),
Signifikan = ifelse(CI_Lower <= 1 & CI_Upper >= 1, "Tidak", "Ya")
)
kable(pr_results %>% select(Variabel, P_Terpapar, P_Tidak_Terpapar, PR_CI, AR, Signifikan),
col.names = c("Faktor Risiko", "Prevalensi Terpapar (%)", "Prevalensi Tidak Terpapar (%)",
"PR (95% CI)", "Attributable Risk (%)", "Signifikan"),
digits = 2,
caption = "Tabel 4.4 Prevalence Ratio (PR) Faktor Risiko terhadap Stunting") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"))| Faktor Risiko | Prevalensi Terpapar (%) | Prevalensi Tidak Terpapar (%) | PR (95% CI) | Attributable Risk (%) | Signifikan |
|---|---|---|---|---|---|
| Kemiskinan tinggi | 16.66 | 19.12 | 0.87 (0.41-1.85) | -2.45 | Tidak |
| Akses air minum rendah | 18.41 | 17.32 | 1.06 (0.5-2.26) | 1.09 | Tidak |
| Rumah layak huni rendah | 19.28 | 16.51 | 1.17 (0.55-2.49) | 2.78 | Tidak |
| Kepadatan penduduk tinggi | 19.53 | 16.03 | 1.22 (0.57-2.59) | 3.50 | Tidak |
Interpretasi Prevalence Ratio:
Berdasarkan Tabel 4.4, hasil analisis Prevalence Ratio menunjukkan:
Kemiskinan tinggi: Wilayah dengan kemiskinan ≥ median memiliki PR = 0.87 (95% CI: 0.41-1.85). Interval kepercayaan yang melewati nilai 1 menunjukkan tidak terdapat asosiasi yang signifikan secara statistik.
Akses air minum rendah: PR = 1.06 (95% CI: 0.5-2.26), menunjukkan asosiasi yang tidak signifikan.
Rumah layak huni rendah: PR = 1.17 (95% CI: 0.55-2.49), juga tidak signifikan.
Kepadatan penduduk tinggi: PR = 1.22 menunjukkan prevalensi justru lebih rendah pada wilayah padat penduduk, kemungkinan karena akses layanan kesehatan yang lebih baik di perkotaan (Smith & Ruel, 2005).
predictors <- c("persen_miskin", "persen_air_minum_layak", "persen_rumah_layak_huni", "kepadatan_penduduk")
corr_results <- map_df(predictors, function(pred) {
test <- cor.test(df$persen_stunting, df[[pred]], use = "complete.obs")
data.frame(
Variabel = pred,
r = test$estimate,
p_value = test$p.value,
n = sum(!is.na(df[[pred]]))
)
}) %>%
mutate(
Variabel = case_when(
Variabel == "persen_miskin" ~ "Kemiskinan (%)",
Variabel == "persen_air_minum_layak" ~ "Air Minum Layak (%)",
Variabel == "persen_rumah_layak_huni" ~ "Rumah Layak Huni (%)",
Variabel == "kepadatan_penduduk" ~ "Kepadatan Penduduk"
),
Kekuatan = case_when(
abs(r) < 0.3 ~ "Lemah",
abs(r) < 0.6 ~ "Sedang",
TRUE ~ "Kuat"
),
Signifikan = ifelse(p_value < 0.05, "Ya*", "Tidak")
)
kable(corr_results,
col.names = c("Variabel", "Koefisien (r)", "p-value", "n", "Kekuatan", "Signifikan (α=0.05)"),
digits = 3,
caption = "Tabel 4.5 Korelasi Pearson antara Variabel Independen dengan Prevalensi Stunting") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"))| Variabel | Koefisien (r) | p-value | n | Kekuatan | Signifikan (α=0.05) | |
|---|---|---|---|---|---|---|
| cor…1 | Kemiskinan (%) | -0.080 | 0.691 | 27 | Lemah | Tidak |
| cor…2 | Air Minum Layak (%) | -0.027 | 0.895 | 27 | Lemah | Tidak |
| cor…3 | Rumah Layak Huni (%) | -0.244 | 0.221 | 27 | Lemah | Tidak |
| cor…4 | Kepadatan Penduduk | 0.083 | 0.679 | 27 | Lemah | Tidak |
Interpretasi:
Hasil analisis korelasi menunjukkan bahwa seluruh variabel independen memiliki korelasi yang lemah (|r| < 0.3) dengan prevalensi stunting dan tidak signifikan secara statistik (p > 0.05). Hal ini mengindikasikan bahwa variabel sosio-ekonomi agregat pada level kabupaten/kota tidak menunjukkan hubungan linear yang kuat dengan prevalensi stunting.
cor_vars <- df %>% select(persen_stunting, persen_miskin, persen_air_minum_layak, persen_rumah_layak_huni, kepadatan_penduduk)
cor_matrix <- cor(cor_vars, use = "complete.obs")
colnames(cor_matrix) <- rownames(cor_matrix) <- c("Stunting", "Kemiskinan", "Air Minum", "Rumah Layak", "Kepadatan")
corrplot(cor_matrix, method = "color", type = "upper", addCoef.col = "black", number.cex = 0.8,
tl.col = "black", tl.srt = 45, col = colorRampPalette(c("#d73027", "#fee08b", "#91cf60"))(100),
title = "Matriks Korelasi", mar = c(0, 0, 2, 0))Gambar 4.4 Matriks Korelasi Antar Variabel
model_full <- lm(persen_stunting ~ persen_miskin + persen_air_minum_layak +
persen_rumah_layak_huni + kepadatan_penduduk, data = df)
model_summary <- summary(model_full)coef_table <- tidy(model_full, conf.int = TRUE) %>%
mutate(
term = case_when(
term == "(Intercept)" ~ "Konstanta",
term == "persen_miskin" ~ "Kemiskinan (%)",
term == "persen_air_minum_layak" ~ "Air Minum Layak (%)",
term == "persen_rumah_layak_huni" ~ "Rumah Layak Huni (%)",
term == "kepadatan_penduduk" ~ "Kepadatan Penduduk"
),
Signifikan = ifelse(p.value < 0.05, "Ya*", "Tidak")
)
kable(coef_table, digits = 4,
col.names = c("Variabel", "Koefisien (β)", "Std. Error", "t", "p-value", "CI Lower", "CI Upper", "Sig."),
caption = "Tabel 4.6 Koefisien Model Regresi Linear Berganda") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"))| Variabel | Koefisien (β) | Std. Error | t | p-value | CI Lower | CI Upper | Sig. |
|---|---|---|---|---|---|---|---|
| Konstanta | 2.0283 | 36.0878 | 0.0562 | 0.9557 | -72.8131 | 76.8697 | Tidak |
| Kemiskinan (%) | 0.0367 | 0.5212 | 0.0705 | 0.9444 | -1.0441 | 1.1176 | Tidak |
| Air Minum Layak (%) | 0.2301 | 0.4142 | 0.5555 | 0.5841 | -0.6288 | 1.0890 | Tidak |
| Rumah Layak Huni (%) | -0.1024 | 0.0875 | -1.1711 | 0.2541 | -0.2838 | 0.0790 | Tidak |
| Kepadatan Penduduk | -0.0001 | 0.0004 | -0.2426 | 0.8105 | -0.0008 | 0.0007 | Tidak |
r2 <- model_summary$r.squared
adj_r2 <- model_summary$adj.r.squared
f_stat <- model_summary$fstatistic[1]
f_pval <- pf(model_summary$fstatistic[1], model_summary$fstatistic[2], model_summary$fstatistic[3], lower.tail = FALSE)
fit_table <- data.frame(
Ukuran = c("R²", "Adjusted R²", "F-statistic", "p-value (F-test)", "n"),
Nilai = c(round(r2, 4), round(adj_r2, 4), round(f_stat, 2), round(f_pval, 4), nrow(df))
)
kable(fit_table, caption = "Tabel 4.7 Goodness of Fit Model Regresi") %>%
kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)| Ukuran | Nilai |
|---|---|
| R² | 0.0736 |
| Adjusted R² | -0.0948 |
| F-statistic | 0.4400 |
| p-value (F-test) | 0.7803 |
| n | 27.0000 |
Interpretasi Model:
Model regresi linear berganda dengan empat prediktor menghasilkan R² = 0.074 yang berarti hanya 7.4% variasi prevalensi stunting dapat dijelaskan oleh variabel-variabel dalam model. Nilai ini tergolong sangat rendah. Uji F menunjukkan p-value = 0.78 yang tidak signifikan (α = 0.05), mengindikasikan bahwa model secara keseluruhan tidak mampu menjelaskan variasi stunting secara bermakna.
vif_values <- car::vif(model_full)
vif_df <- data.frame(
Variabel = names(vif_values),
VIF = as.numeric(vif_values)
) %>%
mutate(
Variabel = case_when(
Variabel == "persen_miskin" ~ "Kemiskinan (%)",
Variabel == "persen_air_minum_layak" ~ "Air Minum Layak (%)",
Variabel == "persen_rumah_layak_huni" ~ "Rumah Layak Huni (%)",
Variabel == "kepadatan_penduduk" ~ "Kepadatan Penduduk"
),
Interpretasi = ifelse(VIF < 5, "Tidak ada multikolinearitas", "Multikolinearitas terdeteksi")
)
kable(vif_df, digits = 2, caption = "Tabel 4.8 Variance Inflation Factor (VIF)") %>%
kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)| Variabel | VIF | Interpretasi |
|---|---|---|
| Kemiskinan (%) | 1.91 | Tidak ada multikolinearitas |
| Air Minum Layak (%) | 3.06 | Tidak ada multikolinearitas |
| Rumah Layak Huni (%) | 2.24 | Tidak ada multikolinearitas |
| Kepadatan Penduduk | 2.83 | Tidak ada multikolinearitas |
Hasil analisis menunjukkan bahwa korelasi, Prevalence Ratio, dan model regresi tidak menghasilkan hubungan yang signifikan secara statistik antara variabel sosio-ekonomi dengan prevalensi stunting. Terdapat dua penjelasan utama untuk temuan ini:
Dengan hanya n = 27 kabupaten/kota sebagai unit analisis, statistical power untuk mendeteksi hubungan yang signifikan menjadi sangat terbatas (Szklo & Nieto, 2014).
# Power calculation illustration
n <- 27
# For r = 0.3 (small-medium effect), power at alpha = 0.05
power_r03 <- 1 - pnorm(qnorm(0.975) - 0.3 * sqrt(n - 3))
cat("Dengan n =", n, "dan α = 0.05:\n")## Dengan n = 27 dan α = 0.05:
## - Power untuk mendeteksi r = 0.3: 31.2 %
## - Power yang direkomendasikan: ≥ 80%
cat("- Sampel minimal untuk power 80% dengan r = 0.3:", ceiling((qnorm(0.975) + qnorm(0.80))^2 / 0.3^2) + 3, "\n")## - Sampel minimal untuk power 80% dengan r = 0.3: 91
Implikasi ukuran sampel kecil:
Analisis ini menghadapi keterbatasan ecological fallacy (Morgenstern, 1995):
Rata-rata wilayah ≠ kondisi individu: Data kemiskinan, akses air minum, dan rumah layak huni merupakan agregat kabupaten/kota yang tidak mencerminkan variasi antar-rumah tangga atau individu di dalam wilayah tersebut.
Variabel yang tersedia bukan penyebab langsung: Berdasarkan kerangka UNICEF (2013), variabel dalam analisis ini merupakan underlying dan basic causes, bukan immediate causes (asupan gizi, penyakit infeksi) yang memiliki hubungan langsung dengan stunting.
Homogenitas relatif: Jawa Barat sebagai satu provinsi memiliki variasi antar-kabupaten/kota yang relatif lebih kecil dibandingkan variasi antar-provinsi atau antar-negara.
Confounding tidak terkontrol: Banyak variabel penting tidak tersedia dalam analisis seperti praktik ASI eksklusif, cakupan imunisasi, dan akses posyandu.
Meskipun hasil statistik tidak signifikan, analisis ini tetap memberikan informasi berharga:
Identifikasi wilayah prioritas: Kabupaten Bandung Barat (30,8%), Kabupaten Bandung (24,1%), dan Kabupaten Kuningan (22,7%) memerlukan perhatian khusus.
Pola spasial: Terdapat indikasi clustering stunting di wilayah selatan Jawa Barat.
Rekomendasi metodologis: Penelitian selanjutnya sebaiknya menggunakan data level individu (Riskesdas, SSGI individu) untuk analisis yang lebih akurat.
Berdasarkan hasil analisis epidemiologi spasial stunting di 27 kabupaten/kota Provinsi Jawa Barat tahun 2024, dapat disimpulkan:
Distribusi Stunting: Rata-rata prevalensi stunting di Jawa Barat adalah 17,6% dengan rentang 7,2% (Kabupaten Cianjur) hingga 30,8% (Kabupaten Bandung Barat). Berdasarkan klasifikasi WHO (1995), sebanyak 17 wilayah (63%) berada pada kategori rendah, 9 wilayah (33%) sedang, dan 1 wilayah (4%) tinggi.
Pola Spasial: Peta distribusi menunjukkan adanya clustering wilayah dengan prevalensi tinggi di bagian selatan dan tenggara Jawa Barat, mengindikasikan kemungkinan faktor kontekstual lokal yang mempengaruhi.
Ukuran Asosiasi: Prevalence Ratio (PR) untuk seluruh variabel independen (kemiskinan, akses air minum, rumah layak huni, kepadatan penduduk) menunjukkan hasil yang tidak signifikan secara statistik, dengan interval kepercayaan 95% yang melewati nilai 1.
Model Regresi: Model regresi linear berganda menghasilkan R² = 0,15 yang tidak signifikan (p > 0,05), menunjukkan bahwa variabel sosio-ekonomi agregat hanya mampu menjelaskan sebagian kecil variasi prevalensi stunting.
Penyebab Ketidaksignifikanan:
Prioritas Intervensi: Fokuskan sumber daya pada wilayah dengan prevalensi tinggi, khususnya Kabupaten Bandung Barat, Kabupaten Bandung, dan Kabupaten Kuningan.
Pendekatan Multi-sektoral: Integrasikan program gizi dengan program pengentasan kemiskinan, penyediaan air bersih, dan perbaikan sanitasi sesuai kerangka UNICEF (2013).
Penguatan Surveilans Gizi: Tingkatkan kualitas dan frekuensi pengumpulan data stunting pada level desa/kelurahan untuk identifikasi kantong-kantong stunting yang lebih presisi.
Intervensi Berbasis 1000 HPK: Fokus pada intervensi gizi spesifik untuk ibu hamil dan anak 0-24 bulan sebagai periode kritis pencegahan stunting (Victora et al., 2021).
Gunakan Data Level Individu: Analisis dengan data Riskesdas atau SSGI level individu untuk menghindari ecological fallacy dan meningkatkan validitas temuan.
Perbesar Ukuran Sampel: Analisis pada level kecamatan atau desa untuk meningkatkan statistical power dan presisi estimasi.
Sertakan Variabel Proksimal: Tambahkan variabel penyebab langsung seperti praktik ASI eksklusif, keragaman diet anak, cakupan imunisasi, dan riwayat penyakit infeksi.
Analisis Spasial Lanjutan: Gunakan metode spatial autocorrelation (Moran’s I, LISA) dan Geographically Weighted Regression (GWR) untuk mengidentifikasi heterogenitas spasial.
Desain Longitudinal: Lakukan studi kohort untuk menetapkan hubungan temporal dan kausal antara faktor risiko dengan kejadian stunting.
Black, R. E., Victora, C. G., Walker, S. P., Bhutta, Z. A., Christian, P., de Onis, M., … & Uauy, R. (2013). Maternal and child undernutrition and overweight in low-income and middle-income countries. The Lancet, 382(9890), 427-451. https://doi.org/10.1016/S0140-6736(13)60937-X
BPS Provinsi Jawa Barat. (2024). Jawa Barat dalam Angka 2024. Bandung: Badan Pusat Statistik Provinsi Jawa Barat.
de Onis, M., & Branca, F. (2016). Childhood stunting: A global perspective. Maternal & Child Nutrition, 12(S1), 12-26. https://doi.org/10.1111/mcn.12231
Gordis, L. (2014). Epidemiology (5th ed.). Philadelphia: Elsevier Saunders.
Kementerian Kesehatan RI. (2020). Peraturan Menteri Kesehatan Nomor 2 Tahun 2020 tentang Standar Antropometri Anak. Jakarta: Kementerian Kesehatan RI.
Kementerian Kesehatan RI. (2023). Hasil Survei Status Gizi Indonesia (SSGI) 2022. Jakarta: Kementerian Kesehatan RI.
Kementerian PUPR. (2018). Peraturan Menteri PUPR Nomor 29/PRT/M/2018 tentang Standar Teknis Standar Pelayanan Minimal Pekerjaan Umum dan Perumahan Rakyat. Jakarta: Kementerian Pekerjaan Umum dan Perumahan Rakyat.
Morgenstern, H. (1995). Ecologic studies in epidemiology: Concepts, principles, and methods. Annual Review of Public Health, 16, 61-81. https://doi.org/10.1146/annurev.pu.16.050195.000425
Pemerintah Provinsi Jawa Barat. (2020). Peraturan Gubernur Jawa Barat Nomor 107 Tahun 2020 tentang Percepatan Penurunan Stunting di Daerah Provinsi Jawa Barat. Bandung: Pemerintah Provinsi Jawa Barat.
Sekretariat Kabinet RI. (2021). Peraturan Presiden Nomor 72 Tahun 2021 tentang Percepatan Penurunan Stunting. Jakarta: Sekretariat Kabinet Republik Indonesia.
Smith, L. C., & Ruel, M. T. (2005). Why is child malnutrition lower in urban than in rural areas? Evidence from 36 developing countries. World Development, 33(8), 1285-1305. https://doi.org/10.1016/j.worlddev.2005.03.002
Szklo, M., & Nieto, F. J. (2014). Epidemiology: Beyond the Basics (3rd ed.). Burlington, MA: Jones & Bartlett Learning.
UNICEF. (2013). Improving Child Nutrition: The Achievable Imperative for Global Progress. New York: United Nations Children’s Fund.
UNICEF, WHO, & World Bank. (2023). Levels and Trends in Child Malnutrition: UNICEF/WHO/World Bank Group Joint Child Malnutrition Estimates: Key Findings of the 2023 Edition. New York: UNICEF.
Victora, C. G., Adair, L., Fall, C., Hallal, P. C., Martorell, R., Richter, L., & Sachdev, H. S. (2008). Maternal and child undernutrition: Consequences for adult health and human capital. The Lancet, 371(9609), 340-357. https://doi.org/10.1016/S0140-6736(07)61692-4
Victora, C. G., Christian, P., Vidaletti, L. P., Gatica-Domínguez, G., Menon, P., & Black, R. E. (2021). Revisiting maternal and child undernutrition in low-income and middle-income countries: Variable progress towards an unfinished agenda. The Lancet, 397(10282), 1388-1399. https://doi.org/10.1016/S0140-6736(21)00394-9
WHO. (1995). Physical Status: The Use and Interpretation of Anthropometry. Technical Report Series No. 854. Geneva: World Health Organization.
WHO. (2006). WHO Child Growth Standards: Length/Height-for-Age, Weight-for-Age, Weight-for-Length, Weight-for-Height and Body Mass Index-for-Age. Geneva: World Health Organization.
WHO. (2014). Global Nutrition Targets 2025: Stunting Policy Brief. Geneva: World Health Organization.
df %>%
select(nama_kabkota, persen_stunting, jumlah_stunting, tingkat_keparahan,
persen_miskin, persen_air_minum_layak, persen_rumah_layak_huni, kepadatan_penduduk) %>%
arrange(desc(persen_stunting)) %>%
DT::datatable(
options = list(pageLength = 10, scrollX = TRUE, language = list(
search = "Cari:", lengthMenu = "Tampilkan _MENU_ data"
)),
caption = "Data Stunting dan Variabel Sosio-Ekonomi Kabupaten/Kota di Jawa Barat, 2024",
colnames = c("Kabupaten/Kota", "Stunting (%)", "Jumlah Kasus", "Kategori Keparahan",
"Kemiskinan (%)", "Air Minum Layak (%)", "Rumah Layak (%)", "Kepadatan (jiwa/km²)")
)