Dataset yang digunakan bersumber dari:
Pusat Informasi Kriminal Nasional (Pusiknas) Polri. (2022). Data Kasus Pembunuhan di Indonesia Tahun 2022. Jakarta: Polri.
Data mencakup motif pembunuhan yang diklasifikasikan dalam 6 kategori utama dari 13 kategori resmi Pusiknas, berdasarkan wilayah hukum 19 Polda di seluruh Indonesia sepanjang tahun 2022 dengan total nasional 854 kasus.
total_kasus <- 854
motif_label <- c(
"Sengaja", "Dendam", "Salah Paham",
"Masalah Sosial", "Ekonomi", "Motif Lainnya"
)
wilayah_label <- c(
"Jawa", "Sumatera", "Sulawesi",
"Kalimantan", "Nusa Tenggara", "Papua"
)
motif_persen <- c(36.34, 23.34, 12.22, 7.70, 5.17, 15.23)
polda_total <- 683
wilayah_kasus_raw <- c(226, 258, 66, 50, 53, 30)
wilayah_persen <- round(wilayah_kasus_raw / polda_total * 100, 2)
motif_kasus <- round(motif_persen / 100 * total_kasus)
wilayah_kasus <- wilayah_kasus_raw
df_motif <- data.frame(
Motif = factor(motif_label, levels = motif_label[order(-motif_persen)]),
Kasus = motif_kasus,
Persen = motif_persen,
stringsAsFactors = FALSE
)
df_wilayah <- data.frame(
Wilayah = factor(wilayah_label, levels = wilayah_label[order(-wilayah_kasus)]),
Kasus = wilayah_kasus,
Persen = wilayah_persen,
stringsAsFactors = FALSE
)
cat("=== Data Motif Pembunuhan (2022) ===\n")## === Data Motif Pembunuhan (2022) ===
## Motif Kasus Persen
## 1 Sengaja 310 36.34
## 2 Dendam 199 23.34
## 6 Motif Lainnya 130 15.23
## 3 Salah Paham 104 12.22
## 4 Masalah Sosial 66 7.70
## 5 Ekonomi 44 5.17
##
## === Data Kasus per Wilayah (2022) ===
## Wilayah Kasus Persen
## 2 Sumatera 258 37.77
## 1 Jawa 226 33.09
## 3 Sulawesi 66 9.66
## 5 Nusa Tenggara 53 7.76
## 4 Kalimantan 50 7.32
## 6 Papua 30 4.39
| No | Jenis | Variabel | Isi / Kategori |
|---|---|---|---|
| 1 | Kategorik | Wilayah |
Jawa, Sumatera, Sulawesi, Kalimantan, Nusa Tenggara, Papua |
| 2 | Kategorik | Motif |
Sengaja, Dendam, Salah Paham, Masalah Sosial, Ekonomi, Lainnya |
| 3 | Numerik | Kasus |
Jumlah kasus pembunuhan (satuan: kasus) |
| 4 | Numerik | Persen |
Persentase kasus dari total nasional (satuan: %) |
x <- df_motif$Kasus
modus_x <- as.numeric(names(sort(table(x), decreasing = TRUE)[1]))
cat("=============================================================\n")## =============================================================
## Statistik Deskriptif: Jumlah Kasus per Motif (n=6)
## Sumber: Pusiknas Polri, 2022 | Total Nasional = 854
## =============================================================
## Mean (Rata-rata) : 142.17 kasus
## Median : 117.00 kasus
## Modus : 44 kasus
## Q1 (Kuartil 1) : 75.50 kasus
## Q3 (Kuartil 3) : 181.75 kasus
## Range : 266 kasus
## Varians : 9688.17
## Standar Deviasi : 98.43
## Minimum : 44 kasus --> Ekonomi
## Maksimum : 310 kasus --> Sengaja
## =============================================================
p <- df_motif$Persen
modus_p <- as.numeric(names(sort(table(p), decreasing = TRUE)[1]))
cat("=============================================================\n")## =============================================================
## Statistik Deskriptif: Persentase per Motif (n=6)
## Sumber: Pusiknas Polri, 2022
## =============================================================
## Mean (Rata-rata) : 16.67%
## Median : 13.73%
## Modus : 5.17%
## Q1 (Kuartil 1) : 8.83%
## Q3 (Kuartil 3) : 21.31%
## Range : 31.17%
## Varians : 133.20
## Standar Deviasi : 11.54
## Minimum : 5.17% --> Ekonomi
## Maksimum : 36.34% --> Sengaja
## =============================================================
w <- df_wilayah$Kasus
modus_w <- as.numeric(names(sort(table(w), decreasing = TRUE)[1]))
cat("=============================================================\n")## =============================================================
## Statistik Deskriptif: Jumlah Kasus per Wilayah (n=6)
## Sumber: Pusiknas Polri, 2022 | Total 19 Polda = 683
## =============================================================
## Mean (Rata-rata) : 113.83 kasus
## Median : 59.50 kasus
## Modus : 30 kasus
## Q1 (Kuartil 1) : 50.75 kasus
## Q3 (Kuartil 3) : 186.00 kasus
## Range : 228 kasus
## Varians : 10091.37
## Standar Deviasi : 100.46
cat(sprintf(" Minimum : %.0f kasus --> %s\n",
min(w), as.character(df_wilayah$Wilayah[which.min(w)])))## Minimum : 30 kasus --> Papua
cat(sprintf(" Maksimum : %.0f kasus --> %s\n",
max(w), as.character(df_wilayah$Wilayah[which.max(w)])))## Maksimum : 258 kasus --> Sumatera
## =============================================================
q <- df_wilayah$Persen
modus_q <- as.numeric(names(sort(table(q), decreasing = TRUE)[1]))
cat("=============================================================\n")## =============================================================
## Statistik Deskriptif: Persentase per Wilayah (n=6)
## Sumber: Pusiknas Polri, 2022
## =============================================================
## Mean (Rata-rata) : 16.67%
## Median : 8.71%
## Modus : 4.39%
## Q1 (Kuartil 1) : 7.43%
## Q3 (Kuartil 3) : 27.23%
## Range : 33.38%
## Varians : 216.32
## Standar Deviasi : 14.71
## Minimum : 4.39% --> Papua
## Maksimum : 37.77% --> Sumatera
## =============================================================
tbl_w <- setNames(df_wilayah$Kasus, as.character(df_wilayah$Wilayah))
pct_w <- round(100 * tbl_w / sum(tbl_w), 1)
lbl_w <- paste0(names(tbl_w), "\n", tbl_w, " kasus\n(", pct_w, "%)")
warna1 <- c("#C62828","#1565C0","#2E7D32","#E65100","#6A1B9A","#00695C")
pie(tbl_w,
labels = lbl_w,
col = warna1,
border = "white",
main = "Pie Chart: Distribusi Kasus Pembunuhan per Wilayah (2022)\nSumber: Pusiknas Polri",
cex = 0.85)Interpretasi Deskriptif: Wilayah Sumatera mencatat kasus terbanyak dengan 258 kasus (37.8%), diikuti Jawa dengan 226 kasus (33.1%). Kedua wilayah ini menyumbang lebih dari 70% total kasus yang ditangani 19 Polda. Wilayah Papua mencatat kasus paling sedikit (30 kasus / 4.4%).
Interpretasi Inferensial: Dominasi Sumatera dan Jawa kemungkinan berkaitan dengan kepadatan penduduk dan kompleksitas sosial-ekonomi yang tinggi. Uji Chi-Square dapat digunakan untuk menguji apakah distribusi kasus antar wilayah berbeda secara signifikan dari distribusi yang proporsional terhadap jumlah penduduk.
df_m_sorted <- df_motif[order(-df_motif$Kasus), ]
warna2 <- c("#C62828","#E65100","#F57F17","#1565C0","#2E7D32","#78909C")
bp <- barplot(df_m_sorted$Kasus,
names.arg = as.character(df_m_sorted$Motif),
col = warna2,
border = "white",
main = "Bar Chart: Jumlah Kasus Pembunuhan per Motif (2022)\nSumber: Pusiknas Polri",
ylab = "Jumlah Kasus (Estimasi)",
xlab = "Motif Pembunuhan",
ylim = c(0, max(df_m_sorted$Kasus) + 40),
las = 1,
cex.names = 0.9)
text(x = bp,
y = df_m_sorted$Kasus + 8,
labels = paste0(df_m_sorted$Kasus, "\n(", df_m_sorted$Persen, "%)"),
cex = 0.85,
font = 2)Interpretasi Deskriptif: Motif Sengaja merupakan yang paling banyak dengan estimasi 310 kasus (36.34%), hampir 1,5 kali lipat motif kedua yaitu Dendam (199 kasus / 23.34%). Motif Ekonomi paling jarang (44 kasus / 5.17%). Ini menunjukkan pembunuhan di Indonesia lebih banyak didorong oleh faktor emosional/psikologis dibanding faktor material.
Interpretasi Inferensial: Distribusi motif yang sangat tidak merata dapat diuji dengan Chi-Square Goodness-of-Fit untuk mengkonfirmasi apakah perbedaan frekuensi antar motif signifikan secara statistik, yang berdampak pada prioritas program pencegahan kejahatan.
hist(df_motif$Kasus,
breaks = 6,
col = "#1565C0",
border = "white",
main = "Histogram: Distribusi Jumlah Kasus per Motif Pembunuhan (2022)\nSumber: Pusiknas Polri",
xlab = "Jumlah Kasus (Estimasi)",
ylab = "Frekuensi (Jumlah Motif)",
las = 1)
abline(v = mean(df_motif$Kasus), col = "red", lwd = 2, lty = 2)
abline(v = median(df_motif$Kasus), col = "orange", lwd = 2, lty = 3)
legend("topright",
legend = c(paste("Mean =", round(mean(df_motif$Kasus), 1), "kasus"),
paste("Median =", round(median(df_motif$Kasus), 1), "kasus")),
col = c("red", "orange"),
lty = c(2, 3),
lwd = 2,
bty = "n")Interpretasi Deskriptif: Distribusi jumlah kasus per motif bersifat right-skewed (miring kanan). Sebagian besar motif memiliki kasus < 130, sementara motif “Sengaja” (~310 kasus) menjadi pencilan ekstrem yang menarik distribusi ke kanan. Mean (142.3 kasus) jauh lebih besar dari Median (96.5 kasus), mengkonfirmasi kemiringan yang kuat akibat dominasi satu motif.
Interpretasi Inferensial: Distribusi yang sangat
tidak normal ini menunjukkan bahwa analisis parametrik biasa tidak
cocok. Metode non-parametrik atau transformasi logaritmik
(log(Kasus)) diperlukan sebelum melakukan uji perbandingan
antar kelompok motif.
d <- density(df_motif$Persen, bw = "nrd0")
plot(d,
main = "Density Plot: Distribusi Persentase Kasus per Motif (2022)\nSumber: Pusiknas Polri",
xlab = "Persentase Kasus (%)",
ylab = "Kepadatan (Density)",
col = "#B71C1C",
lwd = 2.5,
las = 1)
polygon(d, col = rgb(0.72, 0.11, 0.11, 0.2), border = NA)
abline(v = mean(df_motif$Persen), col = "darkblue", lwd = 2, lty = 2)
abline(v = median(df_motif$Persen), col = "darkgreen", lwd = 2, lty = 3)
legend("topright",
legend = c(paste("Mean =", round(mean(df_motif$Persen), 2), "%"),
paste("Median =", round(median(df_motif$Persen), 2), "%")),
col = c("darkblue", "darkgreen"),
lty = c(2, 3),
lwd = 2,
bty = "n")Interpretasi Deskriptif: Kurva density persentase motif menunjukkan pola right-skewed dengan puncak di rentang 5–16%. Ekor panjang ke kanan mencerminkan dominasi ekstrem motif “Sengaja” (36.34%). Mean (16.67%) jauh di atas Median (13.73%), menandakan distribusi yang sangat tidak simetris.
Interpretasi Inferensial: Koefisien variasi yang tinggi (>69%) menunjukkan ketimpangan besar antar motif. Uji Shapiro-Wilk pada persentase mengkonfirmasi apakah distribusi ini normal atau tidak, sebagai penentu metode statistik yang tepat untuk analisis lanjutan.
# Klasifikasi wilayah Barat vs Timur
df_wilayah$Zona <- factor(
ifelse(as.character(df_wilayah$Wilayah) %in% c("Jawa", "Sumatera", "Kalimantan"),
"Indonesia Barat", "Indonesia Timur"),
levels = c("Indonesia Barat", "Indonesia Timur")
)
boxplot(Kasus ~ Zona,
data = df_wilayah,
col = c("#1565C0", "#C62828"),
border = "grey30",
main = "Boxplot: Kasus Pembunuhan — Wilayah Barat vs Timur (2022)\nSumber: Pusiknas Polri",
xlab = "Zona Wilayah",
ylab = "Jumlah Kasus",
las = 1)
stripchart(Kasus ~ Zona,
data = df_wilayah,
method = "jitter",
add = TRUE,
pch = 16,
col = rgb(0, 0, 0, 0.6),
vertical = TRUE,
jitter = 0.08,
cex = 1.4)
# Hitung mean per zona secara eksplisit
idx_barat <- as.character(df_wilayah$Zona) == "Indonesia Barat"
idx_timur <- as.character(df_wilayah$Zona) == "Indonesia Timur"
mean_barat <- mean(df_wilayah$Kasus[idx_barat])
mean_timur <- mean(df_wilayah$Kasus[idx_timur])
points(c(1, 2), c(mean_barat, mean_timur), pch = 18, col = "gold", cex = 2.5)
legend("topright",
legend = c(
paste("Mean Barat =", round(mean_barat)),
paste("Mean Timur =", round(mean_timur)),
"Nilai Mean"
),
col = c("#1565C0", "#C62828", "gold"),
pch = c(15, 15, 18),
pt.cex = c(1.5, 1.5, 2),
bty = "n")Interpretasi Deskriptif: Wilayah Indonesia Barat (Jawa, Sumatera, Kalimantan) memiliki rata-rata kasus yang jauh lebih tinggi dibanding Indonesia Timur (Sulawesi, Nusa Tenggara, Papua). Variasi dalam kelompok Barat juga lebih besar, mencerminkan ketimpangan antar wilayah dalam satu zona.
Interpretasi Inferensial: Perbedaan ekstrem antara zona Barat dan Timur perlu dikonfirmasi dengan Uji Mann-Whitney (karena n kecil dan distribusi tidak normal). Jika signifikan, temuan ini mendukung perlunya kebijakan pengamanan yang berbeda antara wilayah barat dan timur Indonesia.
## === Uji Normalitas Shapiro-Wilk ===
sw1 <- shapiro.test(df_motif$Kasus)
cat(sprintf("Kasus per Motif : W = %.4f | p = %.4f | %s\n",
sw1$statistic, sw1$p.value,
ifelse(sw1$p.value > 0.05, "NORMAL", "TIDAK NORMAL")))## Kasus per Motif : W = 0.9161 | p = 0.4778 | NORMAL
sw2 <- shapiro.test(df_motif$Persen)
cat(sprintf("Persen per Motif : W = %.4f | p = %.4f | %s\n",
sw2$statistic, sw2$p.value,
ifelse(sw2$p.value > 0.05, "NORMAL", "TIDAK NORMAL")))## Persen per Motif : W = 0.9159 | p = 0.4762 | NORMAL
sw3 <- shapiro.test(df_wilayah$Kasus)
cat(sprintf("Kasus per Wilayah : W = %.4f | p = %.4f | %s\n",
sw3$statistic, sw3$p.value,
ifelse(sw3$p.value > 0.05, "NORMAL", "TIDAK NORMAL")))## Kasus per Wilayah : W = 0.7703 | p = 0.0313 | TIDAK NORMAL
sw4 <- shapiro.test(df_wilayah$Persen)
cat(sprintf("Persen per Wilayah : W = %.4f | p = %.4f | %s\n",
sw4$statistic, sw4$p.value,
ifelse(sw4$p.value > 0.05, "NORMAL", "TIDAK NORMAL")))## Persen per Wilayah : W = 0.7703 | p = 0.0312 | TIDAK NORMAL
H0: Kasus pembunuhan terdistribusi merata di semua
motif
H1: Ada motif yang jumlah kasusnya berbeda secara
signifikan
##
## Chi-squared test for given probabilities
##
## data: df_motif$Kasus
## X-squared = 340.73, df = 5, p-value < 2.2e-16
cat(sprintf("\nKesimpulan: p-value = %.6f %s 0.05\n-> %s\n",
chi_motif$p.value,
ifelse(chi_motif$p.value < 0.05, "<", ">="),
ifelse(chi_motif$p.value < 0.05,
"TOLAK H0: Distribusi kasus antar motif TIDAK merata (ada motif yang dominan)",
"GAGAL TOLAK H0: Distribusi merata")))##
## Kesimpulan: p-value = 0.000000 < 0.05
## -> TOLAK H0: Distribusi kasus antar motif TIDAK merata (ada motif yang dominan)
Interpretasi: Jika p-value < 0.05, distribusi kasus antar motif secara statistik tidak merata — motif “Sengaja” dan “Dendam” mendominasi secara signifikan. Ini mendukung kebijakan pencegahan berbasis pengendalian emosi dan resolusi konflik interpersonal.
H0: Kasus pembunuhan terdistribusi merata di semua
wilayah
H1: Ada wilayah yang jumlah kasusnya berbeda secara
signifikan
##
## Chi-squared test for given probabilities
##
## data: df_wilayah$Kasus
## X-squared = 443.25, df = 5, p-value < 2.2e-16
cat(sprintf("\nKesimpulan: p-value = %.6f %s 0.05\n-> %s\n",
chi_wil$p.value,
ifelse(chi_wil$p.value < 0.05, "<", ">="),
ifelse(chi_wil$p.value < 0.05,
"TOLAK H0: Distribusi kasus antar wilayah TIDAK merata",
"GAGAL TOLAK H0: Distribusi merata")))##
## Kesimpulan: p-value = 0.000000 < 0.05
## -> TOLAK H0: Distribusi kasus antar wilayah TIDAK merata
Interpretasi: Jika p-value < 0.05, konsentrasi kasus di Sumatera dan Jawa terbukti signifikan secara statistik. Ini menunjukkan perlunya penguatan kapasitas Polda di wilayah-wilayah dengan beban kasus tertinggi.
H0: Tidak ada perbedaan distribusi kasus antara
wilayah Barat dan Timur
H1: Ada perbedaan distribusi kasus antara wilayah Barat
dan Timur
##
## Wilcoxon rank sum test with continuity correction
##
## data: Kasus by Zona
## W = 7, p-value = 0.3827
## alternative hypothesis: true location shift is not equal to 0
cat(sprintf("\nRata-rata Kasus Indonesia Barat : %.1f kasus\n",
mean(df_wilayah$Kasus[as.character(df_wilayah$Zona) == "Indonesia Barat"])))##
## Rata-rata Kasus Indonesia Barat : 178.0 kasus
cat(sprintf("Rata-rata Kasus Indonesia Timur : %.1f kasus\n",
mean(df_wilayah$Kasus[as.character(df_wilayah$Zona) == "Indonesia Timur"])))## Rata-rata Kasus Indonesia Timur : 49.7 kasus
cat(sprintf("\nKesimpulan: p-value = %.4f %s 0.05 -> %s H0\n",
wt$p.value,
ifelse(wt$p.value < 0.05, "<", ">="),
ifelse(wt$p.value < 0.05, "TOLAK", "GAGAL TOLAK")))##
## Kesimpulan: p-value = 0.3827 >= 0.05 -> GAGAL TOLAK H0
Interpretasi: Uji Mann-Whitney digunakan karena data berskala kecil (n=3 per kelompok) dan tidak berdistribusi normal. Hasilnya menentukan apakah perbedaan jumlah kasus antara wilayah Barat dan Timur signifikan secara statistik, sebagai dasar rekomendasi alokasi sumber daya kepolisian.
cor_hasil <- cor.test(df_motif$Kasus, df_motif$Persen,
method = "spearman", exact = FALSE)
print(cor_hasil)##
## Spearman's rank correlation rho
##
## data: df_motif$Kasus and df_motif$Persen
## S = 0, p-value < 2.2e-16
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho
## 1
##
## Nilai Korelasi Spearman (rho) : 1.0000
## p-value : 0.0000
cat(sprintf("Interpretasi : %s\n",
ifelse(abs(cor_hasil$estimate) > 0.8, "Korelasi SANGAT KUAT",
ifelse(abs(cor_hasil$estimate) > 0.6, "Korelasi KUAT", "Korelasi SEDANG"))))## Interpretasi : Korelasi SANGAT KUAT
Interpretasi: Korelasi Spearman digunakan karena
data tidak normal. Nilai korelasi antara Kasus dan
Persen yang mendekati 1 menunjukkan bahwa kedua variabel
numerik ini konsisten — motif dengan kasus banyak juga memiliki
persentase tinggi. Ini mengkonfirmasi validitas data.
Variabel Kategorik:
Variabel Numerik:
Grafik: Lima grafik (Pie Chart, Bar Chart, Histogram, Density Plot, Boxplot) menyajikan distribusi variabel kategorik dan numerik secara komprehensif.
Inferensial: