Studi kasus: Balita Sakit (SUSENAS) & Posyandu (PODES) — data sintetis 119 kab/kota Jawa
2026-07-08
Data sintetis — bukan data asli BPS
Seluruh data yang digunakan dalam materi ini adalah data sintetis (dibangkitkan komputer) yang dibuat khusus untuk keperluan pelatihan. Struktur file, nama variabel, dan alur pengolahan meniru SUSENAS KOR Maret 2023 dan PODES 2021, tetapi seluruh angka, indikator, dan hasil regresi TIDAK menggambarkan kondisi riil kabupaten/kota mana pun.
Jangan mengutip angka dari materi ini sebagai data resmi. Untuk data sesungguhnya, gunakan data mikro resmi dari BPS (silahkan ajukan melalui silastik.bps.go.id).
data MENTAH (mikro) per VARIABEL level KABUPATEN
──────────────────── ──► ───────────────── ──► ─────────────────────
SUSENAS: individu balita_sakit % balita sakit (FWT)
PODES : desa posyandu per desa jumlah posyandu
│
▼
basis data regresi (119 baris)
Data yang dipakai di sini sintetis (untuk latihan) — struktur meniru SUSENAS KOR 2023 & PODES 2021, tetapi angkanya bukan data resmi BPS.
haven → read_dta(), write_dta(), labelled()dplyr → filter(), mutate(), group_by(), summarise()| URUT | R101 | R102 | R401 | R407 | R1102 | FWT |
|---|---|---|---|---|---|---|
| 31010001 | 31 | 01 | 1 | 30 | 3 | 98.38 |
| 31010001 | 31 | 01 | 2 | 29 | 2 | 98.38 |
| 31010001 | 31 | 01 | 3 | 0 | 3 | 98.38 |
| 31010001 | 31 | 01 | 4 | 11 | 1 | 98.38 |
| 31010002 | 31 | 01 | 1 | 29 | 4 | 85.80 |
| 31010002 | 31 | 01 | 2 | 23 | 2 | 85.80 |
R407 = umur, R1102 = keluhan kesehatan, FWT = bobot individu| URUT | R101 | R102 | kode_kab | kode_ind |
|---|---|---|---|---|
| 31010001 | 31 | 01 | 3101 | 310100011 |
| 31010001 | 31 | 01 | 3101 | 310100012 |
| 31010001 | 31 | 01 | 3101 | 310100013 |
| 31010001 | 31 | 01 | 3101 | 310100014 |
R101 (provinsi) dan R102 (kab/kota) digabung → kode BPS 4 digit.
File per-variabel siap → tahap konstruksi selesai.
| kode_kab | n_balita | pct_balita_sakit |
|---|---|---|
| 3101 | 34 | 20.218433 |
| 3171 | 40 | 8.874837 |
| 3172 | 45 | 10.748338 |
| 3173 | 54 | 14.347336 |
| 3174 | 28 | 20.517733 |
Kunci: rata-rata tertimbang FWT, bukan rata-rata biasa — supaya hasil mewakili populasi, bukan sekadar sampel.
| kode_kab | tanpa_bobot | dengan_bobot |
|---|---|---|
| 3101 | 20.58824 | 20.218433 |
| 3171 | 10.00000 | 8.874837 |
| 3172 | 11.11111 | 10.748338 |
| 3173 | 18.51852 | 14.347336 |
| 3174 | 25.00000 | 20.517733 |
Selisihnya nyata — desain sampling SUSENAS tidak self-weighting.
[1] 3051 18
| R101 | R102 | R103 | R104 | R705A |
|---|---|---|---|---|
| 31 | 01 | 001 | 001 | 2 |
| 31 | 01 | 001 | 002 | 5 |
| 31 | 01 | 001 | 003 | 3 |
| 31 | 01 | 001 | 004 | 3 |
| 31 | 01 | 001 | 005 | 1 |
| 31 | 01 | 001 | 006 | 6 |
R705A = jumlah posyandu di desa| kode_kab | n_desa | jumlah_posyandu |
|---|---|---|
| 3101 | 25 | 76 |
| 3171 | 33 | 110 |
| 3172 | 26 | 112 |
| 3173 | 30 | 118 |
| 3174 | 15 | 57 |
PODES = sensus desa → cukup sum(), tanpa bobot.
ref <- read_dta("Data_Sintetis_DTA/ref_kabupaten_jawa.dta")
kab_posyandu <- kab_posyandu %>%
left_join(ref %>% select(kode_kab, nama_kab, populasi), by = "kode_kab") %>%
mutate(posyandu_per_100k = jumlah_posyandu / as.numeric(populasi) * 1e5)
kab_posyandu %>% select(kode_kab, nama_kab, jumlah_posyandu,
posyandu_per_100k) %>% head(5)| kode_kab | nama_kab | jumlah_posyandu | posyandu_per_100k |
|---|---|---|---|
| 3101 | Kepulauan Seribu | 76 | 2.364424 |
| 3171 | Jakarta Selatan | 110 | 9.173164 |
| 3172 | Jakarta Timur | 112 | 11.364397 |
| 3173 | Jakarta Pusat | 118 | 5.479991 |
| 3174 | Jakarta Barat | 57 | 4.107276 |
[1] 119
| kode_kab | nama_kab | pct_balita_sakit | jumlah_posyandu | posyandu_per_100k |
|---|---|---|---|---|
| 3101 | Kepulauan Seribu | 20.218433 | 76 | 2.364424 |
| 3171 | Jakarta Selatan | 8.874837 | 110 | 9.173164 |
| 3172 | Jakarta Timur | 10.748338 | 112 | 11.364397 |
| 3173 | Jakarta Pusat | 14.347336 | 118 | 5.479991 |
| 3174 | Jakarta Barat | 20.517733 | 57 | 4.107276 |
119 baris = 119 kabupaten/kota se-Jawa → siap untuk lm().
Peserta diasumsikan sudah mengkonstruksi variabel lain (skrip 03–09) dan menggabungkannya (skrip 10):
[1] 119 16
[1] "kode_kab" "nama_kab" "provinsi"
[4] "tipe" "populasi" "pct_balita_sakit"
[7] "pct_imunisasi" "pct_keluarga_merokok" "pct_ortu_merokok"
[10] "mean_pendidikan_ibu" "mean_pengeluaran_susu" "jumlah_posyandu"
[13] "posyandu_per_100k" "total_faskes" "faskes_per_100k"
[16] "kota"
Model yang disarankan (determinan kesehatan balita):
\[\text{pct\_balita\_sakit} = \beta_0 + \beta_1\,\text{imunisasi} + \beta_2\,\text{merokok} + \beta_3\,\text{pendidikan ibu} + \beta_4\,\text{faskes} + \beta_5\,\text{kota} + \varepsilon\]
Ekspektasi tanda: imunisasi (−), merokok (+), pendidikan ibu (−), faskes (−)
pct_balita_sakit pct_imunisasi pct_keluarga_merokok
pct_balita_sakit 1.00 -0.45 0.24
pct_imunisasi -0.45 1.00 -0.15
pct_keluarga_merokok 0.24 -0.15 1.00
mean_pendidikan_ibu -0.52 0.61 -0.16
faskes_per_100k -0.24 0.39 -0.14
mean_pendidikan_ibu faskes_per_100k
pct_balita_sakit -0.52 -0.24
pct_imunisasi 0.61 0.39
pct_keluarga_merokok -0.16 -0.14
mean_pendidikan_ibu 1.00 0.23
faskes_per_100k 0.23 1.00
Baca: semua korelasi outcome-prediktor searah dugaan (imunisasi −0,45; pendidikan ibu −0,52; merokok +0,24). Antar prediktor: imunisasi × pendidikan ibu = 0,61 → waspada multikolinearitas, cek VIF nanti.
Baris pertama = outcome vs prediktor; sisanya = korelasi antar prediktor.
Estimate Std. Error t value Pr(>|t|)
(Intercept) 47.3755871 3.8752433 12.225190 1.200916e-22
pct_imunisasi -0.3737602 0.0678228 -5.510833 2.157166e-07
Baca: +1 poin cakupan imunisasi ↔︎ −0,37 poin % balita sakit (p < 0,001); imunisasi sendirian menjelaskan ±21% variasi antar kabupaten.
Call:
lm(formula = pct_balita_sakit ~ pct_imunisasi + pct_keluarga_merokok +
mean_pendidikan_ibu + faskes_per_100k + kota, data = data_jawa)
Residuals:
Min 1Q Median 3Q Max
-22.1456 -4.8483 -0.3046 4.8743 25.5115
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 44.34234 6.73183 6.587 1.48e-09 ***
pct_imunisasi -0.16284 0.08533 -1.908 0.058882 .
pct_keluarga_merokok 0.16626 0.08666 1.918 0.057576 .
mean_pendidikan_ibu -6.43909 1.81798 -3.542 0.000578 ***
faskes_per_100k -0.03965 0.08229 -0.482 0.630839
kota -2.04015 1.67600 -1.217 0.226036
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 7.895 on 113 degrees of freedom
Multiple R-squared: 0.3325, Adjusted R-squared: 0.303
F-statistic: 11.26 on 5 and 113 DF, p-value: 8.012e-09
Baca: prediktor terkuat = pendidikan ibu (−6,4 poin per jenjang, p < 0,001); imunisasi & merokok di ambang signifikansi (p ≈ 0,06); faskes & kota tidak signifikan. R² = 0,33.
Koefisien pct_imunisasi |
Nilai |
|---|---|
| Model 1 (sederhana) | -0.374 |
| Model 2 (berganda) | -0.163 |
Baca: tidak ada pola di residual, Q-Q mengikuti diagonal, tidak ada observasi berpengaruh ekstrem → asumsi OLS terpenuhi secara visual.
pct_imunisasi pct_keluarga_merokok mean_pendidikan_ibu
1.818361 1.046816 1.651193
faskes_per_100k kota
1.263748 1.094486
Baca: semua VIF < 2 (tertinggi ±1,8) — jauh dari ambang masalah (> 10). Korelasi imunisasi × pendidikan ibu 0,61 belum mengganggu.
studentized Breusch-Pagan test
data: ols2
BP = 7.2642, df = 5, p-value = 0.2017
Baca: p = 0,20 > 0,05 → residual homoskedastis; standard error OLS biasa sah dipakai. (Bila signifikan → robust SE: sandwich::vcovHC.)
| Tahap | SUSENAS (survei) | PODES (sensus desa) |
|---|---|---|
| Unit mentah | individu/ruta | desa |
| Kode wilayah | paste0(R101, R102) |
paste0(R101, R102) |
| Konstruksi | filter + recode | pilih kolom faskes |
| Agregasi | weighted.mean(x, FWT) |
sum(x) |
| Hasil | % / rata-rata per kab | jumlah / rasio per kab |
| Analisis | OLS: eksplorasi → model → diagnostik |
Script_R/ (00–11); step-by-step = skrip 11pct_imunisasi; coba log(mean_pengeluaran_susu) sebagai prediktorcar)survey)lmtest)Materi ini menggunakan data sintetis untuk pelatihan — bukan data resmi BPS dan tidak menggambarkan kondisi riil wilayah mana pun.