8  Metode lanjutan: contoh kesehatan dan interpretasi

Bab ini memperluas analisis dasar dengan pertanyaan yang lebih dekat dengan pengambilan keputusan: bagaimana memasukkan dampak lingkungan, menilai perubahan proses pelayanan, dan memperhitungkan hubungan antarunit? Kerumitan model harus mengikuti pertanyaan dan data, bukan sebaliknya.

Seluruh data dan hasil numerik dalam bab ini sintetis. Contoh terinspirasi oleh pertanyaan dan struktur metode artikel, tetapi bukan replikasi angka empiris atau seluruh spesifikasi penulis artikel. Script lengkap berada di R/advanced_cases.R. Jalankan dari akar proyek, bukan dari folder chapters. Script menyimpan hasil serta menghentikan proses jika pemeriksaan kendala gagal. Mulai dengan Chunk B8.01; chunk berikutnya yang bergantung pada objek sebelumnya memeriksa prasyarat dan menyebutkan nomor chunk awal bila objek belum tersedia.

8.1 Rumah sakit dan emisi: memasukkan undesirable outputs

CatatanCatatan edisi daring

Bagian ini merupakan tambahan edisi daring dan tidak ada pada edisi cetak.

Rumah sakit menghasilkan pelayanan yang dibutuhkan masyarakat sekaligus dampak yang ingin dikurangi. Karena itu emisi tidak boleh dimasukkan sebagai output yang ingin diperbesar. Masoudian dan Lennerts membahas efisiensi rumah sakit dengan input tempat tidur dan listrik, output pelayanan rawat inap dan rawat jalan, serta emisi CO₂. Artikel berada dalam terbitan bertanda 2025 dan laman mencatat publikasi pada 2026.

Masalah nyata: pimpinan rumah sakit perlu meningkatkan pelayanan tanpa menganggap emisi sebagai hasil yang patut diperbanyak. Tujuan belajar: membedakan output yang diinginkan dari undesirable output dan membaca target SBM. Istilah sederhana: SBM memakai slack (kelebihan input, kekurangan layanan, atau emisi yang dapat dikurangi) alih-alih hanya satu pengurangan proporsional. Setelah kode dijalankan, pembaca memperoleh skor, target tiap variabel, dan unit pembanding. Skor rendah menunjukkan ruang perbaikan relatif terhadap sampel, bukan ukuran dampak lingkungan absolut, penilaian klinis, ataupun hubungan sebab-akibat.

Contoh kita berisi 60 rumah sakit buatan. Model slacks-based measure (SBM) nonorientasi dengan CRS menggunakan bentuk fungsi tujuan artikel:

\[ \rho=\frac{1-\frac{1}{m}\sum_i s_i^-/x_{io}} {1+\frac{1}{s}\sum_r s_r^+/y_{ro}+\frac{1}{t}\sum_k s_k^b/b_{ko}}. \]

Di sini \(x\) adalah input, \(y\) output pelayanan, \(b\) emisi, dan \(s\) pada pembilang/penyebut dengan subskrip menunjukkan slack. Huruf \(m\), \(s\), dan \(t\) tanpa subskrip masing-masing menyatakan jumlah input, output baik, dan output buruk. Model memenuhi \(X\lambda+s^-=x_o\), \(Y\lambda-s^+=y_o\), dan \(B\lambda+s^b=b_o\), dengan semua variabel optimasi tidak negatif. Rata-rata slack output baik dan buruk dihitung terpisah, sesuai spesifikasi ini. Bobot alternatif menghasilkan model lain dan harus dinyatakan.

Script mengubah masalah pecahan menjadi program linear melalui transformasi Charnes–Cooper dan menyelesaikannya dengan lpSolve. Untuk model tanpa emisi, skor juga dibandingkan dengan deaR::model_sbmeff; selisih terbesar harus di bawah \(10^{-5}\).

#| label: fig-8-1
#| fig-cap: "Perbandingan emisi CO2 awal dan target SBM pada rumah sakit sintetis."
# Chunk B8.01 — persiapan mandiri Bab VIII dan semua hasil contoh 8.1–8.5.
source("R/chunk_helpers.R")
book_begin_chapter("Bab 8", c("Benchmarking", "deaR", "lpSolve"))
source("R/advanced_cases.R")
rs <- read.csv("data/rs-hijau-sintetis.csv")
hasil <- sbm(rs[c("beds", "electricity_mwh")],
             rs[c("inpatients", "outpatients")], rs["co2_tonnes"])
green_result <- read.csv("results/advanced-green.csv")
green_result$pengurangan_emisi_ton <- green_result$co2_awal - green_result$co2_target
head(green_result[order(green_result$sbm_dengan_emisi),
                  c("id", "sbm_tanpa_emisi", "sbm_dengan_emisi",
                    "co2_awal", "co2_target", "pengurangan_emisi_ton")], 10)
plot(green_result$co2_awal, green_result$co2_target,
     xlab = "Emisi CO2 awal (ton)", ylab = "Target emisi CO2 (ton)",
     main = "SBM: emisi awal dan target per rumah sakit", pch = 19,
     col = "#2E8B57")
abline(0, 1, lty = 2, col = "grey40")

Hasil tersimpan untuk HIJAU-001 memberikan skor SBM dengan emisi 0,475, dibanding 0,762 pada model tanpa emisi. Target emisi turun dari 530,41 menjadi 206,03 ton. Skor 0,475 bukan perintah mengurangi seluruh input sebesar 52,5%: SBM merangkum slack dengan pembobotan tertentu, bukan kontraksi radial tunggal. Target setiap variabel perlu diperiksa bersama kelayakan klinis dan teknologi. Perbedaan skor dua model juga tidak dapat ditafsirkan sebagai dampak kausal emisi.

Latihan: ubah faktor emisi satu rumah sakit, jalankan kembali model, lalu periksa perubahan target dan rumah sakit pembanding. Jelaskan mengapa perubahan satu unit dapat memengaruhi unit lain.

8.2 Lean dan efisiensi proses: sebelum dan sesudah

CatatanCatatan edisi daring

Bagian ini merupakan tambahan edisi daring dan tidak ada pada edisi cetak.

Drei dan Angulo-Meza menggabungkan Lean healthcare dan DEA pada rumah sakit Brasil. Abstrak menjelaskan penggunaan SBM nonorientasi dan proyeksi perbaikan. Contoh berikut memakai gagasan evaluasi proses tersebut; variabel dan mekanisme perubahan dibuat sendiri, bukan disalin dari data artikel.

Masalah nyata: perubahan alur, jadwal, atau pengurangan waktu tunggu perlu dievaluasi tanpa mengorbankan mutu. Tujuan belajar: memakai DEA sebagai pembanding produktivitas proses sebelum dan sesudah. Istilah sederhana: frontier gabungan adalah praktik terbaik relatif dari seluruh observasi; VRS mengizinkan ukuran fasilitas berbeda. Kode menghasilkan skor tiap fasilitas-periode dan rata-rata skor per periode. Bacalah perubahan sebagai asosiasi dalam simulasi, bukan bukti kausal Lean: komposisi pasien, mutu, dan perubahan luar fasilitas dapat ikut berubah.

Dataset lean-sintetis.csv berisi 30 fasilitas sebelum dan sesudah perubahan proses. Input mencakup tenaga dan jam pelayanan; output mencakup kunjungan dan pelayanan yang diselesaikan. Dalam simulasi, output sengaja dinaikkan pada periode sesudah. Semua 60 observasi dibandingkan terhadap satu frontier VRS gabungan agar basis perbandingan sama.

#| label: fig-8-2
#| fig-cap: "Distribusi skor SBM proses sebelum dan sesudah pada simulasi Lean."
# Chunk B8.02 — memakai file hasil yang dibuat Chunk B8.01.
hasil_lean <- read.csv("results/advanced-lean.csv")
ringkasan_lean <- aggregate(cbind(score, visits, visits_target, fte, fte_target) ~ period,
                            hasil_lean, mean)
round(ringkasan_lean, 2)
boxplot(score ~ period, data = hasil_lean, ylim = c(0, 1),
        col = c("#F4A261", "#2A9D8F"),
        ylab = "Skor efisiensi SBM", xlab = "Periode",
        main = "Perubahan distribusi skor proses")

Pada periode sebelum, LEAN-01 mempunyai skor 0,631. Salah satu target mengurangi tenaga ekuivalen penuh dari 111,06 menjadi 74,71, sementara target kunjungannya tetap sekitar 2.928. Angka ini adalah proyeksi matematis dalam data buatan. Dalam praktik, pengaturan ulang jadwal dan alur pelayanan perlu ditelaah sebelum menafsirkan pengurangan input sebagai pengurangan pegawai. Fasilitas juga harus menjaga waktu tunggu, keselamatan, dan beban kerja.

Pemeriksaan script memastikan skor sesudah tidak lebih rendah daripada sebelumnya dalam skenario yang sengaja dibentuk ini. Temuan tersebut tidak membuktikan bahwa Lean selalu meningkatkan efisiensi. Data sebelum–sesudah tanpa kelompok pembanding tidak memisahkan perubahan manajemen dari tren, perubahan pasien, atau teknologi.

Latihan: buat skenario kunjungan naik tetapi pelayanan yang selesai turun. Periksa apakah kesimpulan masih sama. Jelaskan indikator mutu yang perlu ditambahkan.

8.3 Network DEA: hubungan logistik dan layanan klinis

CatatanCatatan edisi daring

Bagian ini merupakan tambahan edisi daring dan tidak ada pada edisi cetak.

Studi jaringan rumah sakit Isfahan menunjukkan pentingnya mempertimbangkan hubungan antarbagian. Contoh belajar ini memakai jaringan yang lebih kecil: satu pusat logistik dan tiga unit klinis, bukan replikasi model aditif delapan bagian artikel.

Masalah nyata: layanan antara dari logistik, laboratorium, atau farmasi menghubungkan bagian-bagian rumah sakit sehingga DEA terpisah dapat kehilangan keterkaitannya. Tujuan belajar: mengenali link sebagai keluaran satu tahap yang menjadi masukan tahap lain. Istilah sederhana: Network DEA membatasi aliran antarbagian agar konsisten, bukan sekadar menjumlahkan skor departemen. Setelah kode berjalan, pembaca melihat skor jaringan dan skor unit pembanding. Interpretasi hanya sah jika link, arah aliran, dan batas sistem telah didefinisikan benar; skor tidak mengukur mutu atau keselamatan yang tidak dimodelkan.

Setiap bagian mempunyai tenaga sebagai input. Pusat logistik menyediakan tiga jenis layanan antara (links) yang digunakan unit klinis untuk menghasilkan pelayanan akhir. Model mencari kontraksi proporsional input \(\theta\) dengan output akhir setidaknya tetap. Bobot pembanding \(\lambda\) berbeda untuk tiap bagian, jumlah bobot setiap bagian sama dengan satu (VRS), dan aliran antara yang diproyeksikan dari pusat harus sama dengan yang diterima unit klinis.

#| label: fig-8-3
#| fig-cap: "Skor Network DEA dan skor DEA unit terpisah pada rumah sakit sintetis."
# Chunk B8.03 — memakai fungsi network_fit dan file dari Chunk B8.01.
book_require("B8.03", "network_fit")
net <- read.csv("data/jaringan-sintetis.csv")
theta <- network_fit(net)
network_result <- read.csv("results/advanced-network.csv")
network_result$selisih_unit_terendah <- apply(
  network_result[c("theta_unit1", "theta_unit2", "theta_unit3")], 1, min
) - network_result$theta_network
head(network_result[order(network_result$theta_network),
                    c("id", "theta_network", "theta_unit1", "theta_unit2",
                      "theta_unit3", "selisih_unit_terendah")], 10)
matplot(seq_len(nrow(network_result)),
        network_result[c("theta_network", "theta_unit1", "theta_unit2", "theta_unit3")],
        type = "p", pch = 1:4, col = c("#264653", "#E76F51", "#2A9D8F", "#E9C46A"),
        xlab = "Rumah sakit (urutan data)", ylab = "Skor efisiensi",
        main = "Skor jaringan dibanding skor unit terpisah")
legend("bottomright", legend = c("Jaringan", "Unit 1", "Unit 2", "Unit 3"),
       pch = 1:4, col = c("#264653", "#E76F51", "#2A9D8F", "#E9C46A"), bty = "n")

Pada JEJARING-02, skor jaringan 0,777 berarti potensi kontraksi radial sekitar 22,3% pada input yang dimodelkan, dengan kendala aliran dan output tetap dipenuhi. Script memeriksa seluruh kendala setelah optimasi. Skor unit yang juga disimpan berasal dari DEA terpisah; skor tersebut bukan komponen yang dapat langsung dijumlahkan atau dirata-ratakan untuk menghasilkan skor jaringan.

Pada JEJARING-01, skor jaringan adalah 1, sementara salah satu analisis unit terpisah memberi skor di bawah 1. Hal ini dapat terjadi karena perbandingan unit yang berdiri sendiri mengabaikan pembatas aliran bersama. Tinjau proses dan definisi link sebelum membuat rekomendasi.

Latihan: jelaskan mengapa pemeriksaan laboratorium tidak boleh dihitung dua kali sebagai output akhir dan layanan antara tanpa memperjelas struktur model.

8.4 Tenaga kesehatan dan cakupan: contoh terinspirasi Niedar

CatatanCatatan edisi daring

Bagian ini merupakan tambahan edisi daring dan tidak ada pada edisi cetak.

Niedar, Hafidz, dan Hort (2022) menilai ketersediaan tenaga dan cakupan layanan primer di Indonesia menggunakan DEA berorientasi output dengan VRS. Contoh kita menggunakan 120 kabupaten buatan, tiga input kepadatan tenaga, dan empat output persentase cakupan. Kelompok wilayah pada dataset hanyalah label simulasi.

Masalah nyata: kabupaten dengan tenaga yang sama dapat mencapai cakupan layanan primer yang berbeda. Tujuan belajar: membaca DEA orientasi output sebagai potensi perluasan cakupan dengan tenaga saat ini. Istilah sederhana: faktor ekspansi \(\phi\) menunjukkan seberapa jauh semua output dapat dinaikkan secara proporsional terhadap frontier VRS. Kode menghasilkan faktor dan target cakupan per kabupaten. Faktor tersebut adalah pembandingan relatif dalam sampel; jangan memperlakukannya sebagai persentase efisiensi tanpa konvensi, target penugasan tenaga, atau bukti bahwa cakupan berarti akses bermutu dan adil.

#| label: fig-8-4
#| fig-cap: "Cakupan ANC4 awal dan target DEA orientasi output menurut wilayah simulasi."
# Chunk B8.04 — memakai file hasil yang dibuat Chunk B8.01.
d <- read.csv("data/layanan-primer-sintetis.csv")
X <- as.matrix(d[c("doctors_100k", "nurses_100k", "midwives_100k")])
Y <- as.matrix(d[c("outpatient_pct", "anc4_pct",
                   "birth_assisted_pct", "immunization_pct")])
m <- Benchmarking::dea(X, Y, RTS = "vrs", ORIENTATION = "out")
hasil_cakupan <- data.frame(
  id = d$id, region = d$region, faktor = m$eff,
  anc4_awal = d$anc4_pct, anc4_target = pmin(100, d$anc4_pct * m$eff)
)
round(aggregate(cbind(faktor, anc4_awal, anc4_target) ~ region, hasil_cakupan, mean), 2)
plot(hasil_cakupan$anc4_awal, hasil_cakupan$anc4_target, pch = 19,
     col = as.integer(factor(hasil_cakupan$region)) + 1,
     xlab = "Cakupan ANC4 awal (%)", ylab = "Target ANC4 (%)",
     main = "Target cakupan menurut DEA orientasi output")
abline(0, 1, lty = 2, col = "grey40")
legend("topleft", legend = levels(factor(hasil_cakupan$region)),
       pch = 19, col = seq_along(levels(factor(hasil_cakupan$region))) + 1, bty = "n")

Untuk KAB-S001, faktor ekspansi \(\phi\) adalah 1,02021. Target proporsional ANC4 berubah dari 61,43% menjadi 62,67%. Ini peningkatan sekitar 1,24 poin persentase, setara peningkatan relatif 2,02% terhadap angka awal. Jangan menyebut faktor 1,02021 sebagai “efisiensi 102%” tanpa menjelaskan konvensinya. Bila memakai indeks kebalikan \(1/\phi\), arah interpretasinya berubah.

Target cakupan harus masuk akal dan tidak melebihi 100%. Empat indikator cakupan mempunyai populasi sasaran berbeda; persentasenya tidak boleh dijumlahkan sebagai jumlah pasien. Analisis ini juga tidak menentukan berapa tenaga yang harus dipindahkan antardaerah. Kebutuhan akses, distribusi penduduk, mutu, dan kekosongan layanan tetap harus diperiksa.

8.5 Super-efficiency, slack, dan pembelajaran mesin

CatatanCatatan edisi daring

Bagian ini merupakan tambahan edisi daring dan tidak ada pada edisi cetak.

de Oliveira, Pereira, dan Figueira (2025) menghadapi dua masalah: DEA biasa sering menghasilkan banyak unit dengan skor frontier yang sama dan skornya hanya menggambarkan sampel yang diamati, sehingga sulit dipakai untuk prediksi. Mereka menilai rumah sakit publik Portugal (2014–2023) dengan SuperSBM-DEA, kemudian memakai sepuluh algoritme pembelajaran mesin untuk memprediksi skor yang dihasilkan DEA; XGBoost memberi prediksi terbaik. Artikel melaporkan 76,82% unit tidak efisien dan kinerja prediksi XGBoost yang tinggi, tetapi angka tersebut adalah hasil data Portugal—bukan target yang harus muncul pada contoh buku ini.

Masalah nyata: banyak unit berada pada skor 1 dan manajer ingin mengurutkannya atau memperkirakan skor pada data baru. Tujuan belajar: memahami super-efficiency untuk membedakan unit frontier, slack sebagai kelebihan/kekurangan spesifik, dan batas penggunaan model prediktif. Istilah sederhana: super-efficiency mengeluarkan unit yang sedang dinilai dari pembandingnya, sehingga skor input dapat melampaui 1; pembelajaran mesin mencari pola untuk memprediksi skor DEA, bukan membuktikan penyebab efisiensi. Setelah kode berjalan, pembaca memperoleh skor super-efficiency, skor frontier kelompok dan bersama, serta rasio kesenjangan teknologi. Peringkat di atas 1 peka terhadap pencilan; rasio metafrontier tidak membuktikan bahwa kelompok atau manajernya lebih baik tanpa dasar substantif bagi pengelompokan.

Script menghitung Benchmarking::sdea dengan CRS. Unit yang dinilai dikeluarkan dari himpunan pembanding sehingga skor dapat melebihi 1 dalam konvensi input. Contoh ini belum memasang model pembelajaran mesin karena paket, pembagian latih-uji, dan penanganan panel perlu divalidasi tersendiri. Bila dikembangkan, bagi data berdasarkan rumah sakit sebelum rekayasa fitur atau penyetelan model agar data tahun rumah sakit yang sama tidak bocor ke data uji. Prediksi skor DEA tidak dapat ditafsirkan sebagai pengaruh kausal suatu input terhadap efisiensi.

Contoh metafrontier membagi fasilitas sintetis menurut kapasitas tempat tidur. Pembagian ini hanya untuk menunjukkan perhitungan, bukan bukti adanya teknologi berbeda. Skor terhadap frontier gabungan memenuhi \(\theta_M\leq\theta_G\) terhadap frontier kelompok. Rasio kesenjangan teknologi didefinisikan sebagai \(TGR=\theta_M/\theta_G\). Rasio ini bergantung pada validitas kelompok dan asumsi teknologi; jangan menafsirkannya otomatis sebagai kualitas manajemen.

#| label: fig-8-5
#| fig-cap: "Perbandingan skor Super DEA aktual dan prediksi pohon keputusan pada data uji."
# Chunk B8.05 — memakai file hasil yang dibuat Chunk B8.01.
hasil <- read.csv("results/advanced-meta-super.csv")
head(hasil)
stopifnot(all(hasil$theta_meta <= hasil$theta_group + 1e-6))

# Contoh pembelajaran mesin: prediksi skor Super DEA, bukan efek kausal.
if (!requireNamespace("rpart", quietly = TRUE)) {
  stop("Paket rpart belum tersedia. Jalankan install.packages('rpart'), lalu ulangi Chunk B8.05.",
       call. = FALSE)
}
fitur <- read.csv("data/fasilitas-sintetis.csv")
ml_data <- merge(fitur, hasil[c("id", "super_crs")], by = "id")
set.seed(805)
uji <- sample(seq_len(nrow(ml_data)), size = round(0.25 * nrow(ml_data)))
model_tree <- rpart::rpart(super_crs ~ staff_fte + beds + case_mix + remote,
                           data = ml_data[-uji, ])
prediksi <- predict(model_tree, newdata = ml_data[uji, ])
data.frame(id = ml_data$id[uji], skor_super_dea = ml_data$super_crs[uji],
           prediksi_pohon = round(prediksi, 3))
plot(ml_data$super_crs[uji], prediksi, pch = 19, col = "#457B9D",
     xlab = "Skor Super DEA aktual", ylab = "Prediksi pohon",
     main = "Pemeriksaan prediksi skor Super DEA")
abline(0, 1, lty = 2, col = "grey40")

Hasil yang diharapkan: tabel pertama menampilkan super_crs, theta_group, theta_meta, dan TGR. super_crs dapat lebih dari 1 hanya karena unit frontier dikeluarkan dari kelompok pembanding. theta_meta tidak melebihi theta_group; TGR yang mendekati 1 berarti frontier kelompok dekat dengan frontier gabungan dalam data contoh. Tabel kedua membandingkan skor Super DEA aktual pada data uji dengan prediksi pohon keputusan. Interpretasi: model pohon adalah analogi kecil dari tahap prediksi pada de Oliveira dkk. (2025), bukan replikasi sepuluh algoritme atau hasil XGBoost mereka. Gunakan hasil untuk memeriksa pencilan dan ketidakpastian prediksi, bukan sebagai bukti bahwa tenaga, tempat tidur, atau case-mix menyebabkan perubahan efisiensi.

8.6 Dekomposisi Produktivitas Färe-Primont: Pendekatan O’Donnell (2018)

CatatanCatatan edisi daring

Bagian ini merupakan tambahan edisi daring dan tidak ada pada edisi cetak.

Evaluasi kinerja fasilitas kesehatan antarperiode sering kali memerlukan pengukuran perubahan produktivitas total (Total Factor Productivity, TFP). Pendekatan tradisional umumnya memakai indeks Malmquist. Namun, Christopher J. O’Donnell (2018) dalam Productivity and Efficiency Analysis: An Economic Approach to Measuring and Explaining Managerial Performance menunjukkan bahwa indeks Malmquist standar tidak memenuhi sifat transitivitas (circularity/transitivity failure). Konsekuensinya, perbandingan produktivitas lintas fasilitas dan lintas tahun menjadi tidak konsisten karena hasilnya bergantung pada unit atau periode dasar yang dipilih.

Masalah nyata: manajer ingin membedakan perubahan produktivitas antarwaktu dari perubahan efisiensi, skala, bauran, dan teknologi. Tujuan belajar: memahami alasan memakai indeks Färe-Primont yang transitif untuk perbandingan panel. Istilah sederhana: produktivitas adalah rasio agregat output terhadap input; dekomposisi memisahkan sumber perubahan menurut asumsi teknologi yang dipilih. Kode berikut menghasilkan panel kecil yang mempunyai satu baris per fasilitas-tahun dan indeks produktivitas deskriptif terhadap tahun dasar. Hasil tetap peka terhadap pilihan orientasi, returns to scale, agregasi, serta kualitas data; komponen bukan klaim kausal tentang kebijakan tertentu. Guna mengatasi keterbatasan ini, O’Donnell (2018, Bab 2–4 & Bab 8) merekomendasikan indeks Färe-Primont atau indeks Lowe, yaitu indeks yang memenuhi uji transitivitas secara penuh (proper productivity indexes). Indeks Färe-Primont mengukur perubahan TFP sebagai rasio agregat output terhadap agregat input menggunakan teknologi referensi bersama. Lebih lanjut, O’Donnell (2018) mendekomposisi perubahan TFP ke dalam komponen-komponen manajerial yang terperinci:

\[ \text{TFP} = \text{TFPE} \times \text{TFP}^* = \text{OTE} \times \text{OSE} \times \text{OME} \times \text{ROSE} \times \text{TFP}^* \]

Keterangan komponen: 1. OTE (Output-oriented Technical Efficiency): efisiensi teknis orientasi output pada skala dan bauran saat ini (mengukur jarak ke batas kemungkinan produksi). 2. OSE (Output-oriented Scale Efficiency): efisiensi skala orientasi output (mengukur jarak ke produktivitas optimal skala). 3. OME (Output-oriented Mix Efficiency): efisiensi bauran output (mengukur potensi peningkatan jika proporsi jenis layanan disesuaikan). 4. ROSE (Residual Output-oriented Scale-Mix Efficiency): interaksi sisa antara perubahan skala dan perubahan komposisi bauran. 5. **Perubahan Teknologi (Technical Change, (^*))**: pergeseran batas kemungkinan produksi maksimum antarperiode.

Di ekosistem R, metodologi O’Donnell (2018) dapat diestimasi menggunakan paket productivity (melalui fungsi fareprim()), paket deaR, maupun pemodelan linear terprogram berbasis lpSolve. Paket productivity belum divalidasi pada lingkungan buku ini; karena itu contoh berikut hanya menyediakan struktur panel yang dapat dijalankan, bukan pemanggilan fungsi yang belum diuji.

#| label: fig-8-6
#| fig-cap: "Tren rasio produktivitas deskriptif per fasilitas pada panel sintetis."
# Chunk B8.06 — panel data mandiri untuk memahami struktur Färe-Primont.
set.seed(806)
panel_rs <- expand.grid(id = paste0("FP-", 1:6), tahun = 2022:2024)
panel_rs$staff_fte <- round(runif(nrow(panel_rs), 45, 100), 1)
panel_rs$beds <- round(runif(nrow(panel_rs), 60, 180))
panel_rs$outpatients <- round((panel_rs$staff_fte * 180 + panel_rs$beds * 35) *
                              runif(nrow(panel_rs), 0.75, 1.10))
panel_rs$admissions <- round((panel_rs$staff_fte * 18 + panel_rs$beds * 12) *
                             runif(nrow(panel_rs), 0.75, 1.10))
panel_rs$tfp_deskriptif <- with(panel_rs,
  (outpatients + 8 * admissions) / (staff_fte + 0.4 * beds))
aggregate(tfp_deskriptif ~ tahun, panel_rs, mean)
matplot(2022:2024,
        sapply(split(panel_rs$tfp_deskriptif, panel_rs$id), identity),
        type = "b", lty = 1, pch = 19, xlab = "Tahun",
        ylab = "TFP deskriptif", main = "Tren produktivitas ilustratif per fasilitas")
legend("topleft", legend = unique(panel_rs$id), col = seq_len(length(unique(panel_rs$id))),
       lty = 1, pch = 19, bty = "n", cex = 0.7)

Hasil yang diharapkan: tabel berisi 18 baris (6 fasilitas × 3 tahun), dengan input, output, dan tfp_deskriptif. Nilai tersebut hanya rasio ilustratif untuk memperlihatkan struktur panel, bukan indeks Färe-Primont. Interpretasi: untuk estimasi Färe-Primont yang valid, pakai paket dan API yang telah diverifikasi dengan data panel, spesifikasi teknologi, serta aturan agregasi yang terdokumentasi. Buku tidak lagi menyajikan fareprim() yang belum diuji sebagai kode siap pakai. ## Dynamic DEA: panel layanan kesehatan dan carry-over

CatatanCatatan edisi daring

Bagian ini merupakan tambahan edisi daring dan tidak ada pada edisi cetak.

Gavurová, Kočišová, dan Sopko (2021) menilai efisiensi sistem kesehatan 36 negara OECD pada 2000, 2008, dan 2016. Masalahnya, DEA satu-periode yang berbentuk black box tidak menangkap hubungan layanan kesehatan masyarakat dan perawatan medis, serta dampak yang terbawa antarwaktu. Tujuan studi adalah membandingkan efisiensi keseluruhan, divisi, dan periode dengan input-oriented Dynamic Network DEA. Model memiliki divisi kesehatan masyarakat dan perawatan medis; imunisasi serta skrining menjadi link antardivisi, sedangkan kematian bayi dan insidensi kanker menjadi carry-over buruk. Studi memakai data OECD serta HALE dari WHO dan melaporkan efisiensi per divisi/periode dan indeks Malmquist.

Tujuan belajar: membangun panel sintetis yang menyatakan hubungan periode sebelum memilih model dinamis formal. Istilah sederhana: carry-over adalah stok atau akibat yang berpindah dari periode (t) ke (t+1); link adalah keluaran satu divisi yang menjadi masukan divisi lain. Contoh berikut dapat dijalankan mandiri dengan Benchmarking. Ia menyiapkan carry-over dan menghitung DEA pooled yang memperlakukan kapasitas akhir sebagai output stok yang diinginkan bersama layanan. Dengan demikian pembaca memperoleh tabel skor, kapasitas awal/akhir, dan target output untuk setiap kabupaten-tahun. Ini adalah alur belajar yang sadar carry-over, bukan implementasi penuh Dynamic Network DEA artikel tersebut: Benchmarking::dea() tidak menegakkan kesamaan stok lintas-periode, link antardivisi, atau dekomposisi periode dengan kendala eksplisit.

#| label: fig-8-7
#| fig-cap: "Kapasitas awal dan kapasitas akhir sebagai carry-over pada panel sintetis."
# Chunk B8.07 — contoh mandiri Dynamic DEA sederhana.
source("R/chunk_helpers.R")
book_begin_chapter("Bab 8", "Benchmarking")
library(Benchmarking)

set.seed(802)
districts <- paste0("DYN-", sprintf("%02d", 1:12))
years <- 2022:2024
panel <- expand.grid(id = districts, year = years, KEEP.OUT.ATTRS = FALSE)
panel <- panel[order(panel$id, panel$year), ]
panel$staff_fte <- round(runif(nrow(panel), 35, 100), 1)
panel$training_budget <- round(runif(nrow(panel), 20, 70), 1)
panel$capacity_start <- NA_real_
panel$capacity_next <- NA_real_
panel$visits <- NA_real_

for (id in districts) {
  rows <- which(panel$id == id)
  capacity <- runif(1, 45, 100)
  for (r in rows) {
    panel$capacity_start[r] <- capacity
    panel$visits[r] <- round(18 * panel$staff_fte[r] +
                              7 * capacity + rnorm(1, 0, 90))
    # Carry-over yang diinginkan: kapasitas tersisa setelah depresiasi
    # dan ditambah kapasitas yang dibentuk oleh anggaran pelatihan.
    capacity <- max(5, 0.88 * capacity + 0.22 * panel$training_budget[r] +
                    rnorm(1, 0, 3))
    panel$capacity_next[r] <- round(capacity, 1)
  }
}

# DEA pooled: dua input tahun berjalan, layanan dan stok akhir sebagai output.
X <- as.matrix(panel[c("staff_fte", "training_budget")])
Y <- as.matrix(panel[c("visits", "capacity_next")])
fit_dynamic_workflow <- dea(X, Y, RTS = "vrs", ORIENTATION = "out")
panel$expansion_factor <- fit_dynamic_workflow$eff
panel$target_visits <- panel$visits * panel$expansion_factor
panel$target_capacity_next <- panel$capacity_next * panel$expansion_factor
ringkasan_dinamis <- aggregate(
  cbind(capacity_start, capacity_next, expansion_factor, visits, target_visits) ~ year,
  panel, mean
)
round(ringkasan_dinamis, 2)
plot(panel$capacity_start, panel$capacity_next, pch = 19,
     col = factor(panel$year), xlab = "Kapasitas awal",
     ylab = "Kapasitas akhir (carry-over)",
     main = "Carry-over kapasitas pada panel sintetis")
legend("topleft", legend = years, col = seq_along(years), pch = 19, bty = "n")

Hasil yang diharapkan: tabel berisi 36 baris (12 kabupaten × 3 tahun) dengan capacity_start, capacity_next, expansion_factor, dan target. Periksa bahwa capacity_next suatu baris menjadi capacity_start pada tahun berikutnya untuk kabupaten yang sama. Faktor lebih besar dari 1 menunjukkan kemungkinan perluasan relatif atas kedua output dalam spesifikasi ini, bukan rekomendasi untuk menaikkan kapasitas tanpa biaya atau tanpa memperhatikan kebutuhan. Interpretasi: contoh menunjukkan mengapa periode tidak boleh diperlakukan sepenuhnya terpisah, tetapi tidak menghasilkan skor Dynamic Network DEA formal. Untuk model formal yang relevan dengan kesehatan, gunakan struktur divisi, link, carry-over baik/buruk, dan kendala antartahun dari Gavurová, Kočišová, dan Sopko (2021); pilih jenis carry-over, diskonto, dan aturan disposabilitas berdasarkan proses operasional serta lakukan analisis sensitivitas. :::

8.7 Efisiensi dan pemerataan: cakupan layanan primer antarkabupaten

CatatanCatatan edisi daring

Bagian ini merupakan tambahan edisi daring dan tidak ada pada edisi cetak.

Shrime, Mukhopadhyay, dan Alkire (2018) mengadaptasi DEA untuk memilih kebijakan, bukan menilai rumah sakit atau negara. Masalahnya, keputusan cakupan kesehatan semesta dapat sekaligus menyangkut biaya, kematian yang dicegah, perlindungan dari pengeluaran memiskinkan, dan pemerataan—tanpa bobot sosial tunggal yang disepakati. Tujuannya adalah memberi peringkat kebijakan dengan VRS super-efficiency DEA; dampak buruk dimasukkan sebagai input dan dampak baik sebagai output. Sementara itu, Bousmah dkk. (2025) menguji hubungan efisiensi–equity pada 36 negara OECD (2004–2021) secara berbeda: SFA untuk efisiensi, ketimpangan kesehatan terkait pendapatan untuk equity, lalu panel Granger. Kedua artikel tidak boleh disebut sebagai DEA rumah sakit dengan output equity.

Masalah nyata: kabupaten dapat tampak efisien karena menghasilkan banyak kunjungan, tetapi tetap meninggalkan desa terpencil atau kelompok miskin. Tujuan belajar: memodelkan capaian akses secara eksplisit dan membandingkan kompromi efisiensi–pemerataan. Istilah sederhana: DEA tetap mengukur kinerja relatif; equity_access_pct adalah output akses yang diinginkan—persentase penduduk rentan yang dapat menjangkau layanan primer—bukan sekadar catatan konteks.

#| label: fig-8-8
#| fig-cap: "Perbandingan faktor ekspansi dengan dan tanpa indikator akses pemerataan."
# Chunk B8.08
source("R/chunk_helpers.R")
book_begin_chapter("Bab 8", "Benchmarking")
library(Benchmarking)

set.seed(808)
n <- 40
district <- data.frame(
  id = paste0("EQ-", sprintf("%02d", 1:n)),
  clinicians_fte = round(runif(n, 25, 110), 1),
  operating_budget = round(runif(n, 45, 180), 1),
  remoteness = runif(n, 0, 1)
)
# Kunjungan dan akses dibuat berbeda agar kompromi dapat terlihat.
district$completed_visits <- round(28 * district$clinicians_fte +
                                   5 * district$operating_budget -
                                   400 * district$remoteness + rnorm(n, 0, 180))
district$equity_access_pct <- pmin(100, pmax(15,
  48 + 0.18 * district$operating_budget - 25 * district$remoteness +
  rnorm(n, 0, 7)))

X <- as.matrix(district[c("clinicians_fte", "operating_budget")])
Y <- as.matrix(district[c("completed_visits", "equity_access_pct")])
fit_equity <- dea(X, Y, RTS = "vrs", ORIENTATION = "out")
district$expansion_factor <- fit_equity$eff
district$target_access_pct <- pmin(100,
  district$equity_access_pct * district$expansion_factor)

# Bandingkan peringkat jika pembuat kebijakan mengabaikan akses pemerataan.
fit_visits_only <- dea(X, as.matrix(district["completed_visits"]),
                       RTS = "vrs", ORIENTATION = "out")
district$factor_visits_only <- fit_visits_only$eff
head(district[order(-district$expansion_factor),
              c("id", "remoteness", "equity_access_pct", "expansion_factor",
                "factor_visits_only", "target_access_pct")], 10)
plot(district$factor_visits_only, district$expansion_factor, pch = 19,
     col = "#6A4C93", xlab = "Faktor ekspansi: hanya kunjungan",
     ylab = "Faktor ekspansi: kunjungan dan akses",
     main = "Dampak memasukkan akses pemerataan")
abline(0, 1, lty = 2, col = "grey40")

Hasil yang diharapkan adalah faktor ekspansi dan target akses untuk tiap kabupaten, serta perbedaan dengan model yang hanya menghitung kunjungan. Perbedaan itu menunjukkan bahwa frontier dan peringkat dapat berubah ketika akses kelompok rentan dihargai sebagai hasil. Namun skor tinggi tidak otomatis adil: DEA dapat masih membandingkan kabupaten terpencil dengan kondisi yang tidak sebanding, dan satu persentase akses dapat menutupi kesenjangan menurut desa, pendapatan, gender, disabilitas, atau mutu layanan. Jangan memakai target_access_pct di atas 100 sebagai target literal—contoh membatasinya pada 100 dan kebijakan nyata memerlukan data populasi sasaran, kebutuhan, mutu, serta bobot atau pembatas pemerataan yang dibahas bersama pemangku kepentingan. Rujukan pengembangan kerangka kesehatan tersedia pada WHO (2018), Health-system-adapted DEA. :::