Analisis plausibilitas adalah proses untuk memeriksa apakah data dari dua sumber masuk akal, konsisten, dan tidak saling bertentangan ketika dibandingkan. Analisis plausibilitas umumnya mencakup tiga dimensi utama untuk menilai apakah dua sumber data dapat dianggap selaras dan masuk akal ketika dibandingkan.
Konsistensi Konseptual (Definitional Consistency)
Konsistensi Statistik (Statistical Consistency)
Konsistensi Empiris (Empirical Plausibility)
pacman::p_load(readxl, psych, dplyr, e1071, haven, tidyr, survey, janitor, magrittr, car, ggplot2)
Besaran statistik yang digunakan:
Kullback–Leibler Divergence (KL Divergence) adalah ukuran ketidaksamaan (dissimilarity) antara dua distribusi probabilitas. Secara intuitif, KL Divergence memberi tahu “berapa banyak informasi yang hilang” ketika suatu distribusi Q digunakan untuk mendekati distribusi sebenarnya P (Cover & Thomas, 2006). 1.
Konsep ini pertama kali diperkenalkan oleh Kullback dan Leibler (1951) dalam artikel klasik On Information and Sufficiency, yang mendefinisikan ukuran “informasi relasional” antar dua distribusi. Mereka menunjukkan bahwa KL Divergence dapat digunakan untuk mengukur seberapa baik suatu model statistik merepresentasikan kenyataan (Kullback & Leibler, 1951).
KL Divergence didefinisikan sebagai:
\[ D_{\mathrm{KL}}(P \parallel Q) = \sum_x P(x) \log \frac{P(x)}{Q(x)} \]
Untuk distribusi kontinu:
\[ D_{\mathrm{KL}}(P \parallel Q) = \int p(x) \log \frac{p(x)}{q(x)} \, dx \]
Nilainya selalu bernilai non-negatif, yaitu: \[ D_{\mathrm{KL}}(P \parallel Q) \ge 0 \]
dan sama dengan nol hanya ketika kedua distribusi identik, yaitu ketika:
\[ P = Q \]
Interpretasi:
- KL mengukur jarak informasi antara distribusi \(p\) dan \(q\)
- Semakin besar KL, semakin besar perbedaan probabilitas antar
kategori
- KL tidak simetris: \[
KL(p||q) \neq KL(q||p)
\] sehingga arah perbandingan penting.
KL Divergence berguna untuk pemeriksaan kualitas data, karena:
Mendeteksi ketidaksesuaian pola kategori. Misalnya, jika suatu kategori sering muncul di data1 tetapi jarang pada data2.
Lebih informatif daripada sekadar perbedaan proporsi. Karena KL mempertimbangkan skala rasio antara dua probabilitas.
Digunakan luas pada machine learning dan statistik informasi. Terpercaya untuk perbandingan distribusi.
Menangkap anomali kategori kecil. KL memperbesar dampak perbedaan pada kategori yang jarang tetapi signifikan.
KL Divergence sering dianggap sebagai dasar informasi untuk model comparison (Burnham & Anderson, 2002) karena mengukur “loss of information”.
Jensen–Shannon Divergence (JS Divergence) merupakan ukuran kemiripan antara dua distribusi probabilitas yang dibangun sebagai bentuk simetris dan terbatasi dari Kullback–Leibler Divergence. Ukuran ini diperkenalkan oleh Lin (1991) sebagai cara yang lebih stabil secara matematis untuk membandingkan dua distribusi probabilitas, khususnya ketika beberapa nilai kemungkinan bernilai nol.
Dalam literatur teori informasi, JS Divergence sangat dihargai karena sifatnya yang terdefinisi dengan baik, simetris, dan berdomain terbatas (bounded), berbeda dengan KL Divergence yang dapat bernilai tak hingga (Cover & Thomas, 2006).
JS Divergence adalah kombinasi dari KL Divergence terhadap distribusi rata-rata \[ M = \frac{1}{2}(P + Q) \]
Didefinisikan sebagai:
\[ D_{\mathrm{JS}}(P \parallel Q) = \frac{1}{2} D_{\mathrm{KL}}(P \parallel M) + \frac{1}{2} D_{\mathrm{KL}}(Q \parallel M) \]
Jika \(P\) dan \(Q\) adalah distribusi diskrit, maka:
\[ D_{\mathrm{JS}}(P \parallel Q) = \frac{1}{2} \sum_x P(x) \log \frac{P(x)}{M(x)} + \frac{1}{2} \sum_x Q(x) \log \frac{Q(x)}{M(x)} \]
JS Divergence memiliki akar kuadrat bernama Jensen–Shannon Distance, yaitu:
\[ \sqrt{D_{\mathrm{JS}}(P \parallel Q)} \]
yang merupakan sebuah metrik sejati (memenuhi triangle inequality).
Digit Preference adalah kecenderungan untuk memilih digit tertentu (misalnya 0 atau 5) pada akhir suatu nilai numerik terutama pada variabel yang seharusnya dicatat secara presisi, seperti usia, pendapatan, ukuran bangunan, atau berat badan.
Fenomena ini menjadi indikator penting dalam pemeriksaan kualitas data, karena pola digit yang tidak alami sering menunjukkan:
Digit preference mengindikasikan bahwa data tidak mengikuti distribusi digit yang natural atau sesuai ketidakteraturan alami (randomness) dalam proses pengukuran.
Rasio Simpangan Baku adalah ukuran yang digunakan untuk menilai konsistensi sebaran (dispersion) antara dua sumber data yang mengukur fenomena yang sama. Ukuran ini sangat berguna dalam analisis plausibilitas atau pemeriksaan kualitas data, terutama ketika ingin memastikan apakah variasi dalam data administratif konsisten dengan variasi dalam data survei atau sumber lain.
SD Ratio didefinisikan sebagai:
\[ \text{SD Ratio} = \frac{\text{SD}(A)}{\text{SD}(B)} \]
di mana:
Nilai SD Ratio memberikan informasi tentang kemiripan pola penyebaran antara dua sumber data:
Dalam konteks pemeriksaan kualitas data, perbandingan simpangan baku antara dua sumber menjadi indikator penting untuk mendeteksi inkonsistensi struktural atau potensi perbedaan metode pengukuran. Literatur statistik menyebutkan bahwa analisis rasio simpangan baku dapat digunakan untuk mengevaluasi kesetaraan varians antar kelompok atau sumber data (Rosner, 2016; Kutner et al., 2005).
Skewness adalah ukuran statistik yang menggambarkan tingkat kemencengan (asymmetry) distribusi data terhadap distribusi normal. Dua sumber data yang mengukur fenomena yang sama diharapkan memiliki bentuk distribusi yang serupa. Salah satu cara menilai keserupaan bentuk distribusi antar dua sumber adalah melalui Selisih Skewness (skew_diff).
Selisih skewness antara dua sumber data A dan B didefinisikan sebagai:
\[ \text{skew_diff} = \text{Skewness}(A) - \text{Skewness}(B) \]
Perbedaan nilai skewness menunjukkan perbedaan pola pelaporan responden, bias sistematis, atau transformasi data tertentu. Literatur statistik klasik menekankan pentingnya skewness sebagai indikator bentuk distribusi dan diagnostik untuk ketidaknormalan (Joanes & Gill, 1998; Bulmer, 1979). 2.
Kurtosis adalah ukuran statistik yang menggambarkan seberapa runcing suatu distribusi dibandingkan distribusi normal. Distribusi normal memiliki kurtosis sebesar 3 untuk definisi klasik (Bulmer, 1979).
Kurtosis dihitung dengan rumus:
\[ \text{Kurtosis} = \frac{\frac{1}{n} \sum_{i=1}^{n} (x_i - \bar{x})^4} {\left( \frac{1}{n} \sum_{i=1}^{n} (x_i - \bar{x})^2 \right)^{2}} \]
Untuk dua sumber data A dan B, selisih kurtosis didefinisikan sebagai:
\[ \text{kurt_diff} = \left| \text{Kurtosis}(A) - \text{Kurtosis}(B) \right| \]
Dalam analisis kualitas data dari dua sumber berbeda, selisih kurtosis digunakan untuk memeriksa apakah bentuk distribusi dan keberadaan nilai ekstrem konsisten. Jika dua sumber data mengukur fenomena yang sama, maka pola penyebaran dan ekstremitas datanya umumnya tidak berbeda jauh.
Index of Dispersion (ID) adalah ukuran statistik yang digunakan untuk menilai tingkat keragaman relatif suatu distribusi, khususnya ketika data dicatat dalam bentuk hitungan (counts) atau bilangan bulat. Secara umum, ID didefinisikan sebagai rasio antara varians dan mean:
\[ \text{ID} = \frac{\text{Var}(X)}{\text{Mean}(X)} \]
Dalam statistik klasik, ukuran ini sering digunakan dalam konteks distribusi Poisson, dimana:
Menurut Cox & Lewis (1966), ID merupakan alat penting untuk memeriksa apakah data hitungan menunjukkan variabilitas yang konsisten dengan teori Poisson atau mengalami penyimpangan struktur penyebaran.
Untuk dua sumber data A dan B, perbedaan ID dihitung sebagai:
\[ \text{ID_diff} = \left| \text{ID}(A) - \text{ID}(B) \right| \]
Indikator ini digunakan dalam pemeriksaan kualitas data untuk mendeteksi konsistensi struktur variabilitas antar dua sumber. Jika kedua data mengukur fenomena yang sama, nilai ID-nya seharusnya tidak jauh berbeda.
Literatur analisis data hitungan menekankan bahwa ID adalah indikator yang kuat untuk mendeteksi ketidakstabilan variabilitas (Cameron & Trivedi, 2013).
Missing value merupakan komponen penting dalam pemeriksaan kualitas data karena ketidakhadiran informasi dalam dataset dapat mengakibatkan: bias estimasi, berkurangnya kekuatan statistik, penyimpangan distribusi variabel, dan hasil analisis yang tidak dapat diandalkan.
Dalam dua sumber data yang membahas fenomena yang sama, tingkat missing value yang sangat berbeda dapat menjadi indikasi masalah kualitas data, perbedaan mekanisme input, atau perbedaan cakupan responden (Little & Rubin, 2019).
Untuk dua sumber data A dan B, indikator missing_diff dihitung sebagai:
\[ \text{missing_diff} = \text{Missing Rate}(B) - \text{Missing Rate}(A) \]
Indikator ini dapat bernilai positif atau negatif, tergantung sumber mana yang memiliki missing lebih tinggi.
Menurut Tukey (1977), outlier harus dipandang sebagai “observasi yang mencurigakan” yang memerlukan pemeriksaan lebih lanjut, terutama saat menggabungkan dua sumber data berbeda.
Metode yang digunakan adalah Interquartile Range (IQR). Metode IQR merupakan teknik paling umum untuk mendeteksi outlier secara statistik. Langkahnya adalah:
\[ \text{IQR} = Q_3 - Q_1 \]
\[ \text{Lower Bound} = Q_1 - 1.5 \times \text{IQR} \]
\[ \text{Upper Bound} = Q_3 + 1.5 \times \text{IQR} \]
IQR dipilih karena tidak sensitif terhadap nilai ekstrem, sehingga stabil untuk memeriksa kualitas data (Leys et al., 2013).
Untuk dua sumber data A dan B, jumlah outlier dihitung berdasarkan batas IQR dari sumber A (untuk konsistensi perbandingan). Perbedaannya didefinisikan sebagai:
\[ \text{outlier_diff} = \left| \text{Outlier}(B) - \text{Outlier}(A) \right| \]
Uji Chi-square merupakan metode statistik yang digunakan untuk menguji apakah terdapat hubungan yang signifikan antara dua variabel kategorik. Uji ini membandingkan frekuensi hasil pengamatan dengan frekuensi yang diharapkan, dengan asumsi bahwa tidak ada hubungan di antara kedua variabel tersebut (hipotesis nol).
Secara matematis, statistik uji Chi-square dirumuskan sebagai:
\[ \chi^2 = \sum \frac{(O_i - E_i)^2}{E_i} \]
di mana:
\(O_i\) adalah observed frequency (frekuensi aktual),
\(E_i\) adalah expected frequency (frekuensi harapan berdasarkan asumsi independensi).
Uji ini umum digunakan dalam analisis kualitas data untuk mendeteksi ketidaksesuaian pola distribusi antara dua sumber data (misalnya data survei vs. data hasil cleaning). Jika nilai Chi-square besar dan p-value kecil, maka terdapat indikasi bahwa distribusi kategori pada dua dataset berbeda secara signifikan.
Dalam konteks data quality assessment, perbedaan ini dapat menunjukkan adanya inkonsistensi pencatatan, perubahan struktur kategori, kesalahan input data, atau bias dalam proses survei (Agresti, 2018).
Entropi merupakan ukuran ketidakpastian atau keragaman distribusi suatu variabel. Dalam konteks data kategorik, entropi mengukur seberapa merata kategori-kategori terdistribusi dalam suatu dataset. Konsep ini berasal dari teori informasi Shannon (1948).
Secara matematis, entropi untuk variabel kategorik dengan probabilitas kategori \((p_1, p_2, ..., p_k)\) didefinisikan sebagai:
\[ H = -\sum_{i=1}^k p_i \log(p_i) \]
Nilai entropi tinggi menunjukkan distribusi kategori lebih merata (lebih acak), sementara nilai entropi rendah menunjukkan dominasi kategori tertentu.
Dalam pengukuran kualitas data, entropy_diff digunakan untuk menilai seberapa jauh distribusi kategori pada data hasil pengolahan (misalnya data cleaning atau hasil imputasi) berbeda dibandingkan dengan data mentah atau data referensi.
\[ \text{entropy_diff} = H_{\text{clean}} - H_{\text{raw}} \]
Nilai positif: data hasil pengolahan lebih beragam dibanding data awal.
Nilai negatif: keragaman menurun, berpotensi hilangnya informasi atau perubahan kategori.
Nilai mendekati nol: distribusi kategori relatif konsisten.
Penggunaan entropi sebagai indikator data quality umum dalam literatur data mining, information theory, dan analisis distribusi kategorik (Shannon, 1948; Cover & Thomas, 2006).
Tahapan penghitungan skor dilakukan sebagai berikut:
a) Penghitungan skor per variabel
Untuk variabel kategorikal, skor dihitung dari KL divergence, JS divergence, dan chi-square p-value.
Untuk variabel numerik, skor dihitung dari beberapa metrik seperti digit preference, rasio standar deviasi, perbedaan skewness, kurtosis, index of dispersion, missing value, dan outlier.
Skor gabungan digunakan untuk menilai besar kecilnya ketidakkonsistenan antara dua sumber. Semakin besar skor, semakin besar potensi masalah kualitas data.
KL_div <- function(p, q) sum(ifelse(p == 0, 0, p * log(p / q)))
JS_div <- function(p, q){
m <- (p + q) / 2
0.5 * sum(ifelse(p==0,0,p * log(p/m))) +
0.5 * sum(ifelse(q==0,0,q * log(q/m)))
}
make_digit <- function(x){
digits <- x %% 10
table(factor(digits, levels = 0:9))
}
ID_fun <- function(x) var(x, na.rm=TRUE) / mean(x, na.rm=TRUE)
get_outlier_cutoff <- function(x){
Q1 <- quantile(x, 0.25, na.rm=TRUE)
Q3 <- quantile(x, 0.75, na.rm=TRUE)
IQR <- Q3 - Q1
list(
low = Q1 - 1.5 * IQR,
high = Q3 + 1.5 * IQR
)
}
check_var_quality <- function(varname){
x <- data1[[varname]]
y <- data2[[varname]]
# ---------------------------
# CASE 1: categorical
# ---------------------------
if(is.character(x) | is.factor(x)){
tab_x <- table(x)
tab_y <- table(y)
all_cat <- union(names(tab_x), names(tab_y))
p <- tab_x[all_cat]; p[is.na(p)] <- 0
q <- tab_y[all_cat]; q[is.na(q)] <- 0
p <- p / sum(p)
q <- q / sum(q)
chisq_p <- suppressWarnings(chisq.test(rbind(p, q))$p.value)
KL <- KL_div(p, q)
JS <- JS_div(p, q)
entropy_diff <- -sum(q*log(q)) - (-sum(p*log(p)))
total_score <- KL*10 + JS*10 + (1 - chisq_p)*10
return(data.frame(
variabel = varname,
tipe = "categorical",
chi_square_p = chisq_p,
KL = KL,
JS = JS,
entropy_diff = entropy_diff,
digit_pref = NA,
sd_ratio = NA,
skew_diff = NA,
kurt_diff = NA,
ID_diff = NA,
missing_diff = NA,
outlier_diff = NA,
skor = total_score
))
}
# ---------------------------
# CASE 2: numeric
# ---------------------------
if(is.numeric(x)){
miss_x <- mean(is.na(x))
miss_y <- mean(is.na(y))
digit_diff <- ifelse(
mean(!is.na(x) & x > 10) > 0.5,
sum(abs(make_digit(x)/sum(!is.na(x)) - make_digit(y)/sum(!is.na(y)))),
NA
)
sd_ratio <- sd(y, na.rm=TRUE) / sd(x, na.rm=TRUE)
skew_diff <- abs(skewness(y, na.rm=TRUE) - skewness(x, na.rm=TRUE))
kurt_diff <- abs(kurtosis(y, na.rm=TRUE) - kurtosis(x, na.rm=TRUE))
ID_diff <- ifelse(all(round(x)==x & round(y)==y),
abs(ID_fun(x) - ID_fun(y)), NA)
cut <- get_outlier_cutoff(x)
out_x <- sum(x < cut$low | x > cut$high, na.rm=TRUE)
out_y <- sum(y < cut$low | y > cut$high, na.rm=TRUE)
outlier_diff <- abs(out_y - out_x)
total_score <-
(ifelse(is.na(digit_diff), 0, digit_diff * 20)) +
abs(sd_ratio - 1) * 10 +
skew_diff * 5 +
kurt_diff * 2 +
(ifelse(is.na(ID_diff), 0, ID_diff * 5)) +
(miss_y - miss_x) * 20 +
outlier_diff
return(data.frame(
variabel = varname,
tipe = "numeric",
chi_square_p = NA,
KL = NA,
JS = NA,
entropy_diff = NA,
digit_pref = digit_diff,
sd_ratio = sd_ratio,
skew_diff = skew_diff,
kurt_diff = kurt_diff,
ID_diff = ID_diff,
missing_diff = miss_y - miss_x,
outlier_diff = outlier_diff,
skor = total_score
))
}
}
b) Normalisasi Skor
Dalam proses penghitungan skor kualitas untuk setiap variabel, metode yang digunakan adalah equal weighting. Pendekatan ini berarti bahwa semua indikator kualitas data dianggap memiliki tingkat kepentingan yang setara dalam membentuk nilai akhir.
Semua metrik dinormalisasi ke rentang \([0,1]\) untuk perbandingan setara:
\[ x_{\text{norm}} = \frac{x - \min(x)}{\max(x) - \min(x)} \]
missing_diff dan outlier_diff diubah
menjadi boolean (0 atau 1):\[ missing_{\text{norm}} = \begin{cases} 1 & \text{jika } missing\_diff > 0 \\ 0 & \text{lainnya} \end{cases}, \quad outlier_{\text{norm}} = \begin{cases} 1 & \text{jika } outlier\_diff > 0 \\ 0 & \text{lainnya} \end{cases} \]
c) Skor Variabel Ternormalisasi
Skor variabel setelah normalisasi:
\[ var\_score_i = \frac{1}{k} \sum_{j=1}^{k} x_{ij}^{\text{norm}} \]
mean(..., na.rm=TRUE) digunakan jika ada nilai NASkor variabel dihitung sebagai rata-rata dari semua metrik ternormalisasi untuk variabel tersebut. Nilai ini merepresentasikan kualitas variabel secara keseluruhan.
hasil <- do.call(rbind, lapply(common_vars, check_var_quality))
quality_vars <- c("KL", "JS", "digit_pref", "sd_ratio",
"skew_diff", "kurt_diff", "missing_diff",
"outlier_diff", "entropy_diff")
normalize <- function(x){
if(all(is.na(x))) return(rep(NA, length(x)))
(x - min(x, na.rm=TRUE)) / (max(x, na.rm=TRUE) - min(x, na.rm=TRUE))
}
df_norm <- hasil
# Normalisasi metrik
for(v in quality_vars){
df_norm[[v]] <- normalize(df_norm[[v]])
}
# missing & outlier → boolean
df_norm$missing_diff <- ifelse(hasil$missing_diff > 0, 1, 0)
df_norm$outlier_diff <- ifelse(hasil$outlier_diff > 0, 1, 0)
# Skor per variabel
df_norm$var_score <- apply(df_norm[quality_vars], 1, function(x){
mean(x, na.rm = TRUE)
})
d) Hitung Global Quality Score (GQS)
GQS adalah rata-rata skor kualitas dari seluruh variabel yang dibandingkan antara dua sumber data. Nilai berada pada rentang 0 – 1, di mana:
0 = kualitas sangat baik (konsisten)
1 = kualitas buruk (inkonsisten)
Semakin kecil nilai GQS, semakin baik kualitasnya.
GQS adalah rata-rata semua var_score di seluruh
variabel:
\[ GQS = \frac{1}{n} \sum_{i=1}^{n} var\_score_i \]
\(n\) = jumlah variabel yang diperiksa
GQS memberikan angka tunggal yang menilai kualitas dataset secara global.
GQS <- mean(df_norm$var_score, na.rm = TRUE)
get_global_category <- function(x){
if(x <= 0.20) "Excellent"
else if(x <= 0.35) "Good"
else if(x <= 0.55) "Acceptable"
else "Problematic"
}
GLOBAL_RATING <- get_global_category(GQS)
e) Kategori Kualitas
Berdasarkan GQS, dataset dikategorikan menjadi:
Excellent jika GQS ≤ 0.20
Good jika 0.20 < GQS ≤ 0.35
Acceptable jika 0.35 < GQS ≤ 0.55
Problematic jika GQS > 0.55
Kategori kualitas berdasarkan GQS:
\[ GLOBAL\_RATING = \begin{cases} \text{Excellent} & 0 \le GQS \le 0.20 \\ \text{Good} & 0.20 < GQS \le 0.35 \\ \text{Acceptable} & 0.35 < GQS \le 0.55 \\ \text{Problematic} & GQS > 0.55 \end{cases} \]
Output
GQS
## [1] 0.4322722
GLOBAL_RATING
## [1] "Acceptable"
Dari output di atas, tampak hasilnya adalah 0.432 dan dikategorikan sebagai Acceptable.
library(ggplot2)
library(reshape2)
library(fmsb)
library(tidyr)
metrics <- df_norm %>%
select(all_of(quality_vars))
metric_summary <- metrics %>%
summarise(across(everything(), ~mean(.x, na.rm=TRUE))) %>%
pivot_longer(cols = everything(), names_to = "metric", values_to = "value")
ggplot(metric_summary, aes(x = reorder(metric, value), y = value)) +
geom_col(fill = "steelblue") +
coord_flip() +
labs(
title = "Rata-rata Normalisasi Setiap Ukuran Kualitas Data",
x = "Ukuran Kualitas",
y = "Nilai Normalisasi"
) +
theme_minimal(base_size = 12)
Grafik menunjukkan besarnya penyimpangan (difference) antara kedua sumber data untuk setiap ukuran kualitas. Semua nilai telah dinormalisasi ke skala 0–1.
Semakin tinggi nilainya, semakin besar perbedaan antara dua set data sehingga disimpulkan kualitas lebih buruk. Dan sebaliknya.
Secara rinci dapat dijelaskan (mulai dari kondisi yang paling buruk) sebagai berikut:
Terjadi perbedaan jumlah outlier antara dua dataset.
Tingginya nilai JS berarti Distribusi datanya cukup berbeda.
Adanya digit preference dalam satu dataset tetapi tidak pada dataset lain.
Selisih kurtosis cukup besar → bentuk ekor distribusi beda.
Adanya perbedaan kemiringan distribusi (skewness).
Entropi berbeda, maka tingkat keragaman nilai berbeda. Salah satu dataset lebih “konstan” atau lebih “bervariasi”.
Variabilitas antar dataset berbeda, tapi tidak ekstrem. Salah satu dataset mungkin lebih “menyebar” dibanding yang lain.
Visualisasi
# Membuat rating per variabel (local rating)
get_local_rating <- function(x){
if(x <= 0.20) "Excellent"
else if(x <= 0.35) "Good"
else if(x <= 0.55) "Acceptable"
else "Problematic"
}
hasil$rating <- sapply(df_norm$var_score, get_local_rating)
hasil$variabel
## [1] "Nama KK" "NIK"
## [3] "Nomor KK" "Jenis Kelamin"
## [5] "Umur" "Alamat KK"
## [7] "Provinsi" "Kabupaten/Kota"
## [9] "Kecamatan" "Desa/Kelurahan"
## [11] "Jenis Lantai Terluas" "Luas Lantai"
## [13] "Jenis Dinding Terluas" "Jenis Atap Terluas"
## [15] "Sumber Air Utama" "Latitude"
## [17] "Longitude" "Penghasilan per Bulan"
## [19] "Nilai UMP/UMK" "Pernah Dapat BSPS"
## [21] "Lama Menghuni Rumah" "Jumlah Penghuni"
## [23] "Luas Rumah" "Memiliki Aset Rumah Lain"
#Seleksi beberapa variabel saja
selected_vars <- hasil$variabel[11:24]
drop_idx <- c(16, 17, 19, 20)
selected_vars <- hasil$variabel[setdiff(11:24, drop_idx)]
hasil_selected <- hasil[hasil$variabel %in% selected_vars, ]
library(dplyr)
rating_order <- c("Excellent", "Good", "Acceptable", "Problematic")
df_heat2 <- hasil_selected %>%
mutate(rating = factor(rating, levels = rating_order)) %>%
arrange(rating)
df_heat2$variabel <- factor(df_heat2$variabel, levels = df_heat2$variabel)
ggplot(df_heat2, aes(x = "Rating", y = variabel, fill = rating)) +
geom_tile(color = "white", linewidth = 0.6) +
scale_fill_manual(values = c(
"Excellent" = "#2ecc71",
"Good" = "#3498db",
"Acceptable" = "#f1c40f",
"Problematic" = "#e74c3c"
)) +
labs(
title = "Ordered Heatmap of Variable Ratings",
x = "",
y = ""
) +
theme_minimal(base_size = 13) +
theme(
axis.text.x = element_blank(),
axis.ticks.x = element_blank(),
panel.grid = element_blank()
)
Grafik menunjukkan penilaian kualitas (quality score) untuk sejumlah variabel:
Variabel Luas Rumah dan Luas Lantai diberi label Problematic (merah),
Variabel Jenis Lantai Terluas diberi label Acceptable (kuning),
Variabel Jumlah Penghuni dan Sumber Air Utama diberi label Good (biru),
Variabel sisanya (Memiliki Aset Rumah Lain, Lama Menghuni Rumah, Penghasilan per Bulan, Jenis Atap Terluas, Jenis Dinding Terluas) dinilai Excellent (hijau).
Dengan demikian, sebagian besar variabel memiliki kualitas data yang sangat baik. Untuk variabel luas rumah dan luas lantai perlu mendapatkan perhatian serius misalnya pengecekan definisi, metode pengukuran atau pembersihan data.
gauge_df <- data.frame(
label = c("Excellent","Good","Acceptable","Problematic"),
xmin = c(0, 0.20, 0.35, 0.55),
xmax = c(0.20, 0.35, 0.55, 1),
color = c("#f1c40f","#2ecc71","#3498db","#e74c3d")
)
ggplot() +
geom_segment(data = gauge_df,
aes(x = xmin, xend = xmax,
y = 0.5, yend = 0.5,
color = label),
linewidth = 15, lineend = "round") +
geom_segment(aes(x = GQS, xend = GQS,
y = 0.25, yend = 0.75),
linewidth = 1.5, color = "darkblue") +
annotate("text",
x = GQS, y = 0.90,
label = paste0("Nilai = ", round(GQS, 3)),
size = 5, fontface = "bold") +
annotate("text",
x = GQS, y = 1.05,
label = paste0("Rating: ", GLOBAL_RATING),
size = 5, fontface = "bold") +
annotate("text",
x = (gauge_df$xmin + gauge_df$xmax)/2,
y = 0.10,
label = gauge_df$label,
size = 5, fontface = "plain") +
scale_color_manual(values = gauge_df$color) +
theme_void() +
theme(
legend.position = "none",
plot.title = element_text(size = 18, face = "bold", hjust = 0.4),
plot.title.position = "panel",
plot.margin = margin(t = 20, r = 40, b = 20, l = 40)
)
[1] Agresti, A. (2018). Statistical methods for the social sciences (5th ed.). Pearson.
[2] Bulmer, M. G. (1979). Principles of Statistics. Dover Publications.
[3] Burnham, K. P., & Anderson, D. R. (2002). Model selection and multimodel inference. Springer.
[4] Cameron, A. C., & Trivedi, P. K. (2013). Regression Analysis of Count Data (2nd ed.). Cambridge University Press.
[5] Cover, T. M., & Thomas, J. A. (2006). Elements of information theory (2nd ed.). Wiley.
[6] Cox, D. R., & Lewis, P. A. W. (1966). The Statistical Analysis of Series of Events. Methuen.
[7] Endres, D. M., & Schindelin, J. E. (2003). A new metric for probability distributions. IEEE Transactions on Information Theory, 49(7), 1858–1860.
[8] Joanes, D. N., & Gill, C. A. (1998). Comparing measures of sample skewness and kurtosis. Journal of the Royal Statistical Society: Series D (The Statistician), 47(1), 183–189.
[9] Kullback, S., & Leibler, R. A. (1951). On information and sufficiency. The Annals of Mathematical Statistics, 22(1), 79–86.
[10] Kutner, M. H., Nachtsheim, C. J., Neter, J., & Li, W. (2005). Applied Linear Statistical Models (5th ed.). McGraw-Hill.
[11] Leys, C., Ley, C., Klein, O., Bernard, P., & Licata, L. (2013). Detecting outliers: Do not use standard deviation around the mean, use absolute deviation around the median. Journal of Experimental Social Psychology, 49(4), 764–766.
[12] Lin, J. (1991). Divergence measures based on the Shannon entropy. IEEE Transactions on Information Theory, 37(1), 145–151.
[13] Little, R. J. A., & Rubin, D. B. (2019). Statistical Analysis with Missing Data (3rd ed.). Wiley.
[14] Rosner, B. (2016). Fundamentals of Biostatistics (8th ed.). Cengage Learning.
[15] Shannon, C. E. (1948). A mathematical theory of communication. Bell System Technical Journal, 27(3), 379–423.
Direktorat Statistik Kesejahteraan Rakyat, BPS, saptahas@bps.go.id
KL Divergence tidak mengukur kesamaan absolut, tetapi mengukur berapa banyak informasi yang hilang ketika \(q\) digunakan untuk mendekati distribusi \(p\)↩︎
Dalam pemeriksaan kualitas data dari dua sumber yang berbeda, selisih skewness menjadi indikator untuk memeriksa kesesuaian struktur distribusi. Jika dua sumber data memiliki mean dan simpangan baku yang mirip tetapi memiliki skewness yang berbeda jauh, kemungkinan terdapat perbedaan pola pelaporan atau bias pencatatan↩︎