Tanggal publikasi: 24 November 2025
Terakhir diperbarui: 25 November
2025
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
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))
Desain survei dibuat berdasarkan strata, PSU, weight, dan fpc.
Dalam proses analisis, tersedia tiga jenis weight yang dapat digunakan sesuai kebutuhan estimasi:
Weight non-kalibrasi
Bobot dasar hasil perhitungan desain sampling tanpa penyesuaian variabel
Realisasi 2024 dan Anggaran 2025 (gunakan weights =
wcov_final).
Weight kalibrasi 1
Bobot yang telah disesuaikan terhadap kontrol variabel Realisasi 2024
(gunakan weights = ~wkal1).
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)
Penggunaan group_by() menentukan level estimasi yang dihasilkan.
Untuk estimasi tingkat provinsi, gunakan group_by(kode_prov).
Untuk estimasi tingkat kabupaten/kota, gunakan group_by(kode_prov, kode_kab).
Untuk estimasi tingkat nasional, baris group_by() dihilangkan/dihapus
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
)
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
)
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
)
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
}
wb <- createWorkbook()
addWorksheet(wb, sheetName = "est1")
writeData(wb, sheet = "est1", est1)
saveWorkbook(wb, "estimasi_est1.xlsx", overwrite = TRUE)
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)
```