Memuat
Memuat
Propensity Score Matching untuk Informatika dan Sistem Informasi
0 kali dilihat
Analisis ini bertujuan mengestimasi efek pengguna LMS aktif terhadap nilai akhir lewat pencocokan skor kecenderungan dengan IPK semester lalu sebagai pembaur, didemonstrasikan pada data sintetis. Propensity Score Matching (PSM) memasangkan peserta program dengan bukan peserta yang memiliki peluang ikut serupa berdasarkan kovariat, lalu membandingkan outcome keduanya untuk mengestimasi efek program pada peserta (ATT). Cocok untuk skripsi, tesis, atau disertasi evaluasi dampak dengan data observasional ketika keikutsertaan tidak acak.

Analisis ini bertujuan mengestimasi efek pengguna LMS aktif terhadap nilai akhir lewat pencocokan skor kecenderungan dengan IPK semester lalu sebagai pembaur, didemonstrasikan pada data sintetis.
| Peran | Variabel | Satuan |
|---|---|---|
| Utama | Nilai akhir | score |
| Pendukung 1 | Pengguna LMS aktif | 0/1 |
| Pendukung 2 | IPK semester lalu | index |
Setelah 90 peserta dipasangkan dengan kontrol yang serupa, Pengguna LMS aktif menaikkan Nilai akhir sebesar 5.818 (IK 95% 3.957 sampai 7.678; p < 0.001), berbeda dari selisih naif 14.093 yang masih tercampur pembaur. Keseimbangan kovariat tercapai: |SMD| maksimum turun dari 0.756 menjadi 0.032.
Dihitung dari data sintetis sebagai ilustrasi, bukan dari penelitian nyata.
Propensity Score Matching (PSM) memasangkan peserta program dengan bukan peserta yang memiliki peluang ikut serupa berdasarkan kovariat, lalu membandingkan outcome keduanya untuk mengestimasi efek program pada peserta (ATT). Cocok untuk skripsi, tesis, atau disertasi evaluasi dampak dengan data observasional ketika keikutsertaan tidak acak.
Tunjukkan dulu bahwa keseimbangan tercapai (|SMD| setelah matching di bawah 0,1) dan berapa peserta yang berhasil dipasangkan. Setelah itu laporkan ATT beserta interval kepercayaan dan nilai p, lalu bandingkan dengan selisih naif untuk menunjukkan besarnya bias seleksi.
Skrip awal singkat dengan nama variabel proyek ini. Versi yang diserahkan disesuaikan dengan data Anda dan diberi komentar lengkap.
# Contoh kode R: Propensity Score Matching
suppressPackageStartupMessages({
library(ggplot2)
library(patchwork)
library(MatchIt)
library(sandwich)
library(lmtest)
})
set.seed(42)
# ---- Gaya grafik ----
pal <- c("#1f6feb", "#e8590c", "#2f9e44", "#ae3ec9", "#f59f00")
warna <- list(bg = "#f4f6fa", panel = "#ffffff", teks = "#1f2933", redup = "#5f6b78", grid = "#e3e8ee", bar = "#1d3557")
tata <- 1
theme_set(theme_minimal(base_size = 11) + theme(legend.position = "bottom"))
# ---- Data sintetis: partisipasi program tidak acak (bergantung kovariat) ----
n <- max(300, 200)
d <- data.frame(previous_gpa = round(rnorm(n, 30, 6), 3),
skor_awal = round(rnorm(n, 50, 10), 1), # kovariat: skor kondisi awal
wilayah_kota = rbinom(n, 1, 0.45)) # kovariat: 1 = perkotaan
z2 <- as.numeric(scale(d$previous_gpa))
zs <- as.numeric(scale(d$skor_awal))
# seleksi: peluang ikut program bergantung kovariat
lp <- -0.6 + runif(1, 0.5, 0.9) * z2 + runif(1, 0.3, 0.6) * zs + runif(1, 0.3, 0.8) * d$wilayah_kota
d$active_lms_user <- rbinom(n, 1, plogis(lp))
att <- runif(1, 0.25, 0.6) * sample(c(-1, 1), 1, prob = c(0.3, 0.7)) # efek program (satuan SD)
d$final_grade <- round(100 + 15 * (runif(1, 0.4, 0.7) * z2 + runif(1, 0.3, 0.6) * zs + 0.25 * d$wilayah_kota +
att * d$active_lms_user + rnorm(n, 0, 0.6)), 3)
d <- d[, c("final_grade", "active_lms_user", "previous_gpa", "skor_awal", "wilayah_kota")]
write.csv(d, "data_contoh.csv", row.names = FALSE)
# ---- Analisis: Propensity Score Matching (nearest neighbour 1:1, logit, caliper 0.1 SD) ----
naif <- t.test(final_grade ~ active_lms_user, data = d) # beda rata-rata tanpa penyesuaian
beda_naif <- unname(diff(naif$estimate)) # perlakuan - kontrol
ci_naif <- -rev(naif$conf.int)
m <- matchit(active_lms_user ~ previous_gpa + skor_awal + wilayah_kota, data = d, method = "nearest",
distance = "glm", link = "logit", caliper = 0.1, replace = FALSE,
exact = ~wilayah_kota) # wilayah dipasangkan persis
print(m)
sm <- summary(m, standardize = TRUE)
print(sm)
md <- match.data(m)
# ATT: regresi pada data hasil matching (bobot matching) + galat baku robust klaster per pasangan
fit_att <- lm(final_grade ~ active_lms_user + previous_gpa + skor_awal + wilayah_kota, data = md, weights = weights)
ct <- lmtest::coeftest(fit_att, vcov = sandwich::vcovCL(fit_att, cluster = ~subclass))
print(ct)
att_hat <- ct["active_lms_user", 1]; se_att <- ct["active_lms_user", 2]; p_att <- ct["active_lms_user", 4]
ci_att <- att_hat + c(-1, 1) * 1.96 * se_att
smd_sebelum <- sm$sum.all[, "Std. Mean Diff."]
smd_sesudah <- sm$sum.matched[, "Std. Mean Diff."]
n_pasang <- sum(md$active_lms_user == 1)
cat("Treated matched:", n_pasang, "dari", sum(d$active_lms_user == 1), "\n")
# ---- Grafik ----
# 1) love plot: |SMD| sebelum vs sesudah matching
lab_kov <- c("Propensity score", "previous_gpa", "Baseline score", "Urban area")
dl <- data.frame(kov = factor(rep(lab_kov, 2), levels = rev(lab_kov)),
smd = abs(c(smd_sebelum, smd_sesudah)),
tahap = factor(rep(c("Before", "After"), each = length(lab_kov)), levels = c("Before", "After")))
p1 <- ggplot(dl, aes(smd, kov, colour = tahap)) +
geom_vline(xintercept = 0.1, linetype = "dashed", colour = warna$redup) +
geom_line(aes(group = kov), colour = warna$redup, linewidth = 0.5) +
geom_point(size = 3) +
scale_colour_manual(values = c(Before = pal[2], After = pal[1]), name = NULL) +
labs(title = "Covariate balance (love plot)", x = "Absolute standardized mean difference", y = NULL)
# 2) distribusi propensity score sebelum dan sesudah matching
d$ps <- m$distance
dps <- rbind(data.frame(ps = d$ps, kel = d$active_lms_user, tahap = "Before"),
data.frame(ps = md$distance, kel = md$active_lms_user, tahap = "After"))
dps$tahap <- factor(dps$tahap, levels = c("Before", "After"))
dps$kel <- factor(ifelse(dps$kel == 1, "Treated", "Control"), levels = c("Treated", "Control"))
p2 <- ggplot(dps, aes(ps, fill = kel, colour = kel)) +
geom_density(alpha = 0.3, linewidth = 0.7) +
facet_wrap(~tahap, ncol = 2) +
scale_fill_manual(values = c(Treated = pal[1], Control = pal[3]), name = NULL) +
scale_colour_manual(values = c(Treated = pal[1], Control = pal[3]), name = NULL) +
labs(title = "Propensity score overlap", x = "Propensity score", y = "Density")
# 3) estimasi efek: naif vs ATT hasil matching
de <- data.frame(est = factor(c("Naive difference", "Matched ATT"), levels = c("Matched ATT", "Naive difference")),
b = c(beda_naif, att_hat), lo = c(ci_naif[1], ci_att[1]), hi = c(ci_naif[2], ci_att[2]))
de$teks <- sprintf("%.2f", de$b)
p3 <- ggplot(de, aes(b, est, colour = est)) +
geom_vline(xintercept = 0, linetype = "dashed", colour = warna$redup) +
geom_errorbarh(aes(xmin = lo, xmax = hi), height = 0.15, linewidth = 1) +
geom_point(size = 3.4) +
geom_text(aes(label = teks), vjust = -1.2, size = 3.2, colour = warna$teks) +
scale_colour_manual(values = c("Naive difference" = pal[2], "Matched ATT" = pal[1]), guide = "none") +
scale_y_discrete(expand = expansion(add = 0.7)) +
labs(title = "Effect on final_grade (95% CI)", x = "Difference in final_grade", y = NULL)
p_hasil <- if (tata == 1) (p1 | p3) / p2 else p1 | (p2 / p3)
print(p_hasil)
Berkas proyek aslinya tersedia. Bukan sekadar gambar di atas: Anda mendapat proyek R yang siap dijalankan. Berkas bisa diunduh setelah pembayaran, dan kami kirim lewat WhatsApp atau email.
ZIP: analisis.R + data_contoh.csv + BACA-DULU.txt
Pilih seberapa banyak bantuan yang Anda perlukan. Setiap paket yang lebih tinggi sudah mencakup semua item paket di bawahnya. Harga belum termasuk PPN 11%.
Paket 1
Rp 400.000
belum termasuk PPN 11%
Waktu pengerjaan: 5 hari kerja
Output: Berkas R + gambar hasil
Yang Anda terima
Paket 2 · paling dipilih
Rp 1.050.000
belum termasuk PPN 11%
Waktu pengerjaan: 9 hari kerja
Output: Kode + analisis + bahan interpretasi
Termasuk semua item Paket 1, ditambah
Paket 3
Rp 2.350.000
belum termasuk PPN 11%
Waktu pengerjaan: 14-17 hari kerja
Output: Kode + analisis + pendampingan hingga siap dipresentasikan
Termasuk semua item Paket 1 & 2, ditambah
Ya. Berkas proyek aslinya berupa ZIP berisi skrip analisis.R lengkap, data_contoh.csv, dan petunjuk BACA-DULU.txt. Berkas bisa diunduh setelah pembayaran, dan kami kirim lewat WhatsApp atau email. Untuk data Anda sendiri (Paket 2 dan 3), skrip disesuaikan dengan dataset Anda.
Cocok. Propensity Score Matching lazim dipakai pada jenjang ini di bidang Informatika dan Sistem Informasi. Analisis kami sesuaikan dengan pertanyaan penelitian, data Anda sendiri, dan ketentuan dosen pembimbing.
Bukan. Lembar hasil dihitung dari data sintetis sebagai ilustrasi jenis keluaran R Studio. Untuk pesanan Anda, metode yang sama dijalankan pada data penelitian Anda sendiri.
Itu tujuan paketnya. Setiap skrip diberi komentar, dan Paket 3 mencakup dua sesi pendampingan serta latihan tanya jawab supaya Anda bisa menjelaskan metode dan hasilnya saat seminar dan sidang.
Tiap proyek punya tiga paket: Paket 1 (kode dan penjelasan) Rp 400.000, Paket 2 (analisis data Anda dan interpretasi) Rp 1.050.000, dan Paket 3 (pendampingan lengkap) Rp 2.350.000, belum termasuk PPN 11%. Data yang besar, metode tambahan, atau tenggat ketat menyesuaikan penawaran setelah konsultasi singkat.
Lembar hasil memakai data sintetis sebagai ilustrasi. R adalah bahasa pemrograman proyek R Foundation; RStudio dan Posit adalah merek dagang Posit PBC.
Kembali ke portofolio R Studio