Tanggal publikasi: 24 November 2025
Terakhir diperbarui: 25 November 2025

Pendahuluan

Dokumen ini menjelaskan tata cara melakukan penghitungan estimasi survei menggunakan paket survey dan srvyr di R.

  • Estimasi yang dihitung meliputi: Estimasi total, Estimasi mean, Standard error (SE), Coefficient of variation.

  • Estimasi dapat dilakukan pada level: Nasional, Provinsi,Kabupaten/kota

1. Persiapan Data

Pastikan variabel target bertipe numerik.

Catatan:

vars dapat disesuaikan dengan daftar variabel yang ingin diestimasi

pacman::p_load("rio", "tidyverse",  "survey", "srvyr", "purrr", "openxlsx", "DT", "htmltools")

raw_k3_weighted = import("raw_k3_wraking.xlsx")

vars = c("b2r421k3", "b2r421k2","b2r4k2", "b2r4k3", "b2r5k2", "b2r5k3", "b2r6k2", "b2r6k3")

raw_k3_weighted = raw_k3_weighted %>% mutate(across(all_of(vars), as.numeric))

2. Membuat Desain Survei

Desain survei dibuat berdasarkan strata, PSU, weight, dan fpc.

Dalam proses analisis, tersedia tiga jenis weight yang dapat digunakan sesuai kebutuhan estimasi:

  1. Weight non-kalibrasi
    Bobot dasar hasil perhitungan desain sampling tanpa penyesuaian variabel Realisasi 2024 dan Anggaran 2025 (gunakan weights = wcov_final).

  2. Weight kalibrasi 1
    Bobot yang telah disesuaikan terhadap kontrol variabel Realisasi 2024 (gunakan weights = ~wkal1).

  3. Weight kalibrasi 2
    Bobot yang telah disesuaikan terhadap kontrol variabel Anggaran 2025 (gunakan weights = ~wkal2).

    Pemilihan weight menentukan kualitas dan stabilitas estimasi yang dihasilkan.

options(survey.lonely.psu = "adjust")

desain_svy <- svydesign(
ids = ~id_k3,
strata = ~strata,
weights = ~wcov_final,
data = raw_k3_weighted,
fpc = ~fpc,
nest = TRUE
)

desain_svy_srvyr =  as_survey(desain_svy)

3. Menghitung Estimasi per Variabel

Penggunaan group_by() menentukan level estimasi yang dihasilkan.

  1. Untuk estimasi tingkat provinsi, gunakan group_by(kode_prov).

  2. Untuk estimasi tingkat kabupaten/kota, gunakan group_by(kode_prov, kode_kab).

  3. Untuk estimasi tingkat nasional, baris group_by() dihilangkan/dihapus

Estimasi Kabupaten/Kota — 1 Variabel

est1 <- desain_svy_srvyr %>%
  group_by(kode_prov, kode_kab) %>%
  summarise(
    sum_weight = survey_total(1,vartype = NULL, na.rm = TRUE),
    n = unweighted(n()),
    total = survey_total(b2r421k3, vartype = c("se", "cv"), na.rm = TRUE, warn = FALSE),
    mean = survey_mean(b2r421k3, vartype = c("se", "cv"), na.rm = TRUE)
  ) %>%
  mutate(
    total_cv = total_cv * 100,
    mean_cv = mean_cv * 100
   )

Estimasi Provinsi — 1 Variabel

est2 <- desain_svy_srvyr %>%
  group_by(kode_prov) %>%
  summarise(
    sum_weight = survey_total(1,vartype = NULL, na.rm = TRUE),
    n = unweighted(n()),
    total = survey_total(b2r421k3, vartype = c("se", "cv"), na.rm = TRUE, warn = FALSE),
    mean = survey_mean(b2r421k3, vartype = c("se", "cv"), na.rm = TRUE)
  ) %>%
  mutate(
    total_cv = total_cv * 100,
    mean_cv = mean_cv * 100
   )

Estimasi Nasional — 1 Variabel

est3 <- desain_svy_srvyr %>%
  summarise(
    sum_weight = survey_total(1,vartype = NULL, na.rm = TRUE),
    n = unweighted(n()),
    total = survey_total(b2r421k3, vartype = c("se", "cv"), na.rm = TRUE, warn = FALSE),
    mean = survey_mean(b2r421k3, vartype = c("se", "cv"), na.rm = TRUE)
  ) %>%
  mutate(
    total_cv = total_cv * 100,
    mean_cv = mean_cv * 100
   )

Estimasi Kabupaten/Kota — >1 Variabel

results_list_nonkal <- list()


for (var in vars) {
est <- desain_svy_srvyr %>%
  group_by(kode_prov, kode_kab) %>%
  summarise(
    sum_weight = survey_total(1,vartype = NULL, na.rm = TRUE),
    n = unweighted(n()),
    total = survey_total(.data[[var]], vartype = c("se", "cv"), na.rm = TRUE, warn = FALSE),
    mean = survey_mean(.data[[var]], vartype = c("se", "cv"), na.rm = TRUE)
  ) %>%
  mutate(
    idkab38 = paste0(kode_prov, kode_kab),
    total_cv = total_cv * 100,
    mean_cv = mean_cv * 100
  ) %>%
  rename_with(~ gsub("total", paste0("total_", var), .x), starts_with("total")) %>%
  rename_with(~ gsub("mean", paste0("mean_", var), .x), starts_with("mean"))

results_list_nonkal[[var]] = est
}



4. Export Hasil

Export Hasil — 1 Variabel

wb <- createWorkbook()
addWorksheet(wb, sheetName = "est1")
writeData(wb, sheet = "est1", est1)
saveWorkbook(wb, "estimasi_est1.xlsx", overwrite = TRUE)

Export Hasil — >1 Variabel

wb <- createWorkbook()

for (var in vars) {
  addWorksheet(wb, sheetName = var)
  writeData(wb, sheet = var, results_list_nonkal[[var]])
}

saveWorkbook(wb, "estimasi_survey.xlsx", overwrite = TRUE)

```