Sumber data : Badan Pusat Statistik, Susenas Maret 2024/National Socio-Economic Survey (SUSENAS) March 2024, BPS, Susenas KOR.

Analisis ini menggunakan data dari Badan Pusat Statistik (BPS) dengan unit analisis provinsi di Indonesia. Tujuan utama adalah menganalisis hubungan antara indikator ekonomi (PDRB per kapita), pendidikan (Rata-rata Lama Sekolah), dan garis kemiskinan terhadap tingkat kemiskinan di setiap provinsi.

library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.1     ✔ stringr   1.5.2
## ✔ ggplot2   4.0.0     ✔ tibble    3.3.0
## ✔ lubridate 1.9.4     ✔ tidyr     1.3.1
## ✔ purrr     1.1.0     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(readxl)
library(psych)
## 
## Attaching package: 'psych'
## 
## The following objects are masked from 'package:ggplot2':
## 
##     %+%, alpha
library(rstatix)
## 
## Attaching package: 'rstatix'
## 
## The following object is masked from 'package:stats':
## 
##     filter
library(ggpubr)
library(car)
## Loading required package: carData
## 
## Attaching package: 'car'
## 
## The following object is masked from 'package:psych':
## 
##     logit
## 
## The following object is masked from 'package:dplyr':
## 
##     recode
## 
## The following object is masked from 'package:purrr':
## 
##     some
library(lmtest)
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## 
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
library(sandwich)
library(pROC)
## Type 'citation("pROC")' for a citation.
## 
## Attaching package: 'pROC'
## 
## The following objects are masked from 'package:stats':
## 
##     cov, smooth, var
library(caret)
## Loading required package: lattice
## 
## Attaching package: 'caret'
## 
## The following object is masked from 'package:purrr':
## 
##     lift
library(broom)
library(MASS)
## 
## Attaching package: 'MASS'
## 
## The following object is masked from 'package:rstatix':
## 
##     select
## 
## The following object is masked from 'package:dplyr':
## 
##     select
data <- read_excel("Data Gabungan PDRB-Kemiskinan-RLS.xlsx") %>%
rename(
Provinsi = Provinsi,
PDRB_perkapita = PDRB_perkapita,
Garis_Kemiskinan_Maret = Garis_Kemiskinan_Maret,
Persen_Miskin_Maret = Persentase_Penduduk_Miskin_Maret,
RLS = Rata_Rata_Lama_Sekolah
)
data
## # A tibble: 38 × 6
##    Provinsi         PDRB_perkapita Garis_Kemiskinan_Maret Jumlah_Penduduk_Misk…¹
##    <chr>                     <dbl>                  <dbl>                  <dbl>
##  1 Aceh                      43782                 661227                  805. 
##  2 Sumatera Utara            73575                 642423                 1228. 
##  3 Sumatera Barat            57047                 708416                  346. 
##  4 Riau                     165350                 697296                  492. 
##  5 Jambi                     86722                 650115                  265. 
##  6 Sumatera Selatan          75132                 554197                  984. 
##  7 Bengkulu                  49233                 671095                  281. 
##  8 Lampung                   51370                 586551                  941. 
##  9 Kepulauan Bangk…          70194                 908397                   70.0
## 10 Kepulauan Riau           161424                 787211                  138. 
## # ℹ 28 more rows
## # ℹ abbreviated name: ¹​Jumlah_Penduduk_Miskin_Maret
## # ℹ 2 more variables: Persen_Miskin_Maret <dbl>, RLS <dbl>

Eksplorasi Data Awal(EDA)

glimpse(data)
## Rows: 38
## Columns: 6
## $ Provinsi                     <chr> "Aceh", "Sumatera Utara", "Sumatera Barat…
## $ PDRB_perkapita               <dbl> 43782, 73575, 57047, 165350, 86722, 75132…
## $ Garis_Kemiskinan_Maret       <dbl> 661227, 642423, 708416, 697296, 650115, 5…
## $ Jumlah_Penduduk_Miskin_Maret <dbl> 804.53, 1228.01, 345.73, 492.25, 265.42, …
## $ Persen_Miskin_Maret          <dbl> 14.23, 7.99, 5.97, 6.67, 7.10, 10.97, 13.…
## $ RLS                          <dbl> 9.95, 10.18, 9.72, 9.69, 9.26, 8.98, 9.40…
summary(data)
##    Provinsi         PDRB_perkapita   Garis_Kemiskinan_Maret
##  Length:38          Min.   : 18105   Min.   : 454879       
##  Class :character   1st Qu.: 51396   1st Qu.: 535058       
##  Mode  :character   Median : 68596   Median : 628346       
##                     Mean   : 84344   Mean   : 643735       
##                     3rd Qu.: 80587   3rd Qu.: 712231       
##                     Max.   :344350   Max.   :1007060       
##  Jumlah_Penduduk_Miskin_Maret Persen_Miskin_Maret      RLS        
##  Min.   :  47.83              Min.   : 4.00       Min.   : 5.100  
##  1st Qu.: 166.14              1st Qu.: 6.32       1st Qu.: 8.785  
##  Median : 314.10              Median :10.13       Median : 9.340  
##  Mean   : 663.66              Mean   :11.15       Mean   : 9.292  
##  3rd Qu.: 729.61              3rd Qu.:14.06       3rd Qu.: 9.930  
##  Max.   :3982.69              Max.   :32.97       Max.   :11.490

Deskripsi Umum

  1. Nilai PDRB per kapita antarprovinsi sangat bervariasi, mulai dari sekitar 18.105 ribu rupiah hingga 334.450 ribu rupiah. Hal ini menunjukkan adanya kesenjangan ekonomi yang cukup besar antarwilayah.

  2. Persentase penduduk miskin berkisar antara 4% hingga 32,97%, yang menandakan masih terdapat provinsi dengan tingkat kemiskinan tinggi seperti Papua dan Papua Barat.

  3. Rata-rata lama sekolah (RLS) berada pada kisaran 5,1 hingga 11,49 tahun, dengan rata-rata sekitar 9,3 tahun, menunjukkan bahwa sebagian besar penduduk telah menempuh pendidikan hingga jenjang SMP–SMA.

Visualisasi Data

desc_stats <- psych::describe(data %>% 
  dplyr::select(PDRB_perkapita, Garis_Kemiskinan_Maret, Persen_Miskin_Maret, RLS))

p1 <- ggplot(data, aes(x = PDRB_perkapita)) +
  geom_histogram(bins = 20, fill = "#F4A6C3", color = "white") +
  ggtitle("Distribusi PDRB per Kapita") +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, color = "#C2185B", face = "bold"))

p2 <- ggplot(data, aes(x = Persen_Miskin_Maret)) +
  geom_histogram(bins = 20, fill = "#F7B5CA", color = "white") +
  ggtitle("Distribusi Persentase Kemiskinan") +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, color = "#C2185B", face = "bold"))

p3 <- ggplot(data, aes(x = RLS)) +
  geom_histogram(bins = 20, fill = "#F9C5D5", color = "white") +
  ggtitle("Distribusi Rata-rata Lama Sekolah") +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, color = "#C2185B", face = "bold"))

p4 <- ggplot(data, aes(x = PDRB_perkapita, y = Persen_Miskin_Maret)) +
  geom_point(color = "#E75480", size = 2.5) +
  geom_smooth(method = "lm", color = "#C2185B", fill = "#F8BBD0") +
  ggtitle("Hubungan PDRB dan Kemiskinan") +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, color = "#C2185B", face = "bold"))

ggarrange(p1, p2, p3, p4, ncol=2, nrow=2)
## `geom_smooth()` using formula = 'y ~ x'

Dari keempat grafik distribusi, diperoleh beberapa pola penting:

  1. Distribusi PDRB per Kapita menunjukkan penyebaran yang sangat condong ke kanan (right-skewed), menandakan bahwa sebagian besar provinsi memiliki PDRB yang relatif rendah, sementara hanya beberapa provinsi memiliki nilai PDRB yang sangat tinggi (seperti DKI Jakarta dan Kalimantan Timur).

  2. Distribusi Persentase Kemiskinan juga cenderung tidak merata, dengan sebagian besar provinsi berada di bawah 15%, namun beberapa daerah di wilayah timur masih jauh di atas rata-rata nasional.

  3. Distribusi Rata-rata Lama Sekolah (RLS) relatif normal dengan puncak di sekitar 9–10 tahun, menandakan pemerataan pendidikan yang lebih baik dibandingkan indikator ekonomi.

  4. Pada scatter plot antara PDRB per kapita dan Persentase Kemiskinan, terlihat hubungan negatif: semakin tinggi PDRB per kapita, maka persentase penduduk miskin cenderung menurun. Hal ini juga didukung oleh garis regresi linear yang menurun.

Kesimpulan

Secara umum, hasil EDA menunjukkan bahwa kesejahteraan ekonomi (diukur dari PDRB per kapita) memiliki hubungan terbalik dengan tingkat kemiskinan dan berkorelasi positif dengan pendidikan (RLS).Artinya, provinsi dengan PDRB per kapita yang tinggi cenderung memiliki tingkat kemiskinan yang rendah dan rata-rata lama sekolah yang lebih tinggi.

Analisis Korelasi

Pada analisis ini digunakan korelasi Pearson, karena semua variabel (PDRB per kapita, Garis Kemiskinan, Persentase Kemiskinan, dan Rata-rata Lama Sekolah) bertipe numerik kontinu, serta data dianggap memenuhi asumsi linearitas dan distribusi mendekati normal. Jika datanya tidak memenuhi asumsi normal, alternatifnya adalah korelasi Spearman (non-parametrik). Namun, dalam analisis ini Pearson dipilih karena paling sesuai untuk melihat hubungan linear antarvariabel ekonomi dan sosial.

library(dplyr)
library(knitr)

cor_matrix <- data %>%
  dplyr::select(PDRB_perkapita, Garis_Kemiskinan_Maret, Persen_Miskin_Maret, RLS) %>%
  cor(use = "pairwise.complete.obs", method = "pearson")

kable(cor_matrix, caption = "Matriks Korelasi Pearson antar Variabel")
Matriks Korelasi Pearson antar Variabel
PDRB_perkapita Garis_Kemiskinan_Maret Persen_Miskin_Maret RLS
PDRB_perkapita 1.0000000 0.4442898 -0.2939225 0.4148095
Garis_Kemiskinan_Maret 0.4442898 1.0000000 0.2137980 -0.0544467
Persen_Miskin_Maret -0.2939225 0.2137980 1.0000000 -0.5738844
RLS 0.4148095 -0.0544467 -0.5738844 1.0000000
uji_korelasi <- cor.test(data$PDRB_perkapita, data$Persen_Miskin_Maret, method = "pearson")

uji_korelasi
## 
##  Pearson's product-moment correlation
## 
## data:  data$PDRB_perkapita and data$Persen_Miskin_Maret
## t = -1.845, df = 36, p-value = 0.07327
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  -0.56090229  0.02843241
## sample estimates:
##        cor 
## -0.2939225
r_value <- round(uji_korelasi$estimate, 3)
p_value <- round(uji_korelasi$p.value, 4)
interpretasi <- ifelse(p_value < 0.05,
                       "Hubungan signifikan secara statistik (p < 0.05).",
                       "Tidak signifikan secara statistik (p ≥ 0.05).")

arah <- ifelse(r_value > 0,
               "positif: ketika PDRB meningkat, kemiskinan cenderung meningkat.",
               "negatif: ketika PDRB meningkat, kemiskinan cenderung menurun.")

kekuatan <- case_when(
  abs(r_value) < 0.3 ~ "lemah",
  abs(r_value) < 0.6 ~ "sedang",
  TRUE ~ "kuat"
)

cat("Nilai korelasi (r):", r_value, "\n")
## Nilai korelasi (r): -0.294
cat("p-value:", p_value, "\n")
## p-value: 0.0733
cat("Interpretasi arah:", arah, "\n")
## Interpretasi arah: negatif: ketika PDRB meningkat, kemiskinan cenderung menurun.
cat("Kekuatan hubungan:", kekuatan, "\n")
## Kekuatan hubungan: lemah
cat("Kesimpulan:", interpretasi, "\n")
## Kesimpulan: Tidak signifikan secara statistik (p ≥ 0.05).

Anova Satu Arah

library(dplyr)
library(ggplot2)
library(car)     
library(knitr)

data <- data %>%
  mutate(Wilayah = case_when(
    Provinsi %in% c("Aceh", "Sumatera Utara", "Sumatera Barat", "Riau", "Jambi", 
                    "Sumatera Selatan", "Bengkulu", "Lampung") ~ "Sumatera",
    Provinsi %in% c("DKI Jakarta", "Jawa Barat", "Jawa Tengah", "DI Yogyakarta", "Jawa Timur", "Banten") ~ "Jawa",
    TRUE ~ "Luar Jawa"
  ))

rata_rata <- data %>%
  group_by(Wilayah) %>%
  summarise(Rata_Kemiskinan = mean(Persen_Miskin_Maret, na.rm = TRUE))
kable(rata_rata, caption = "Rata-rata Persentase Kemiskinan per Wilayah")
Rata-rata Persentase Kemiskinan per Wilayah
Wilayah Rata_Kemiskinan
Jawa 8.11500
Luar Jawa 12.40292
Sumatera 9.64750
#Uji Asumsi ANOVA
shapiro_test <- shapiro.test(data$Persen_Miskin_Maret)
shapiro_test
## 
##  Shapiro-Wilk normality test
## 
## data:  data$Persen_Miskin_Maret
## W = 0.85008, p-value = 0.0001309
levene_test <- leveneTest(Persen_Miskin_Maret ~ Wilayah, data = data)
## Warning in leveneTest.default(y = y, group = group, ...): group coerced to
## factor.
levene_test
## Levene's Test for Homogeneity of Variance (center = median)
##       Df F value  Pr(>F)  
## group  2  3.5298 0.04014 *
##       35                  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#Uji ANOVA Satu Arah
anova_result <- aov(Persen_Miskin_Maret ~ Wilayah, data = data)
summary(anova_result)
##             Df Sum Sq Mean Sq F value Pr(>F)
## Wilayah      2    111   55.50   1.235  0.303
## Residuals   35   1573   44.95
#Interpretasi
p_anova <- summary(anova_result)[[1]][["Pr(>F)"]][1]

if (p_anova < 0.05) {
  cat("Hasil ANOVA menunjukkan perbedaan yang signifikan antar wilayah (p =", round(p_anova,4), ").\n")
} else {
  cat("Tidak terdapat perbedaan signifikan rata-rata kemiskinan antar wilayah (p =", round(p_anova,4), ").\n")
}
## Tidak terdapat perbedaan signifikan rata-rata kemiskinan antar wilayah (p = 0.3032 ).
#Visualisasi Boxplot
ggplot(data, aes(x = Wilayah, y = Persen_Miskin_Maret, fill = Wilayah)) +
  geom_boxplot(alpha = 0.7) +
  scale_fill_manual(values = c("#FFB6C1", "#FFC0CB", "#DB7093")) +
  labs(title = "Perbandingan Persentase Kemiskinan antar Wilayah",
       x = "Wilayah", y = "Persentase Kemiskinan (%)") +
  theme_minimal(base_size = 13)

Regresi Linear Berganda

library(dplyr)
library(ggplot2)
library(car)       
library(broom)      
library(performance) 

model_lm <- lm(Persen_Miskin_Maret ~ PDRB_perkapita + Garis_Kemiskinan_Maret + RLS + Jumlah_Penduduk_Miskin_Maret,
               data = data)

summary(model_lm)
## 
## Call:
## lm(formula = Persen_Miskin_Maret ~ PDRB_perkapita + Garis_Kemiskinan_Maret + 
##     RLS + Jumlah_Penduduk_Miskin_Maret, data = data)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -12.1734  -3.4792  -0.4012   3.1541  11.0108 
## 
## Coefficients:
##                                Estimate Std. Error t value Pr(>|t|)   
## (Intercept)                   3.137e+01  1.094e+01   2.868  0.00715 **
## PDRB_perkapita               -2.431e-05  1.876e-05  -1.296  0.20390   
## Garis_Kemiskinan_Maret        1.300e-05  8.387e-06   1.550  0.13069   
## RLS                          -2.814e+00  9.243e-01  -3.044  0.00456 **
## Jumlah_Penduduk_Miskin_Maret -5.921e-04  9.858e-04  -0.601  0.55220   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 5.524 on 33 degrees of freedom
## Multiple R-squared:  0.4021, Adjusted R-squared:  0.3296 
## F-statistic: 5.548 on 4 and 33 DF,  p-value: 0.001575
confint(model_lm)
##                                      2.5 %        97.5 %
## (Intercept)                   9.113572e+00  5.361924e+01
## PDRB_perkapita               -6.247755e-05  1.384931e-05
## Garis_Kemiskinan_Maret       -4.063886e-06  3.006293e-05
## RLS                          -4.694042e+00 -9.331942e-01
## Jumlah_Penduduk_Miskin_Maret -2.597718e-03  1.413548e-03
cat("R-squared:", summary(model_lm)$r.squared, "\n")
## R-squared: 0.4020952
cat("Adjusted R-squared:", summary(model_lm)$adj.r.squared, "\n")
## Adjusted R-squared: 0.3296219
#Diagnostik Asumsi
par(mfrow=c(2,2))
plot(model_lm)

shapiro.test(residuals(model_lm))
## 
##  Shapiro-Wilk normality test
## 
## data:  residuals(model_lm)
## W = 0.98894, p-value = 0.9655
library(lmtest)
bptest(model_lm)
## 
##  studentized Breusch-Pagan test
## 
## data:  model_lm
## BP = 10.087, df = 4, p-value = 0.03899
vif(model_lm)
##               PDRB_perkapita       Garis_Kemiskinan_Maret 
##                     1.650575                     1.533325 
##                          RLS Jumlah_Penduduk_Miskin_Maret 
##                     1.367307                     1.163565
dwtest(model_lm)
## 
##  Durbin-Watson test
## 
## data:  model_lm
## DW = 1.168, p-value = 0.001318
## alternative hypothesis: true autocorrelation is greater than 0
#Interpretasi Awal
tidy_model <- broom::tidy(model_lm, conf.int = TRUE)
tidy_model <- tidy_model %>%
  mutate(Signifikansi = ifelse(p.value < 0.05, "Signifikan", "Tidak signifikan"))
kable(tidy_model, digits = 4, caption = "Hasil Regresi Linear Berganda")
Hasil Regresi Linear Berganda
term estimate std.error statistic p.value conf.low conf.high Signifikansi
(Intercept) 31.3664 10.9377 2.8677 0.0072 9.1136 53.6192 Signifikan
PDRB_perkapita 0.0000 0.0000 -1.2962 0.2039 -0.0001 0.0000 Tidak signifikan
Garis_Kemiskinan_Maret 0.0000 0.0000 1.5500 0.1307 0.0000 0.0000 Tidak signifikan
RLS -2.8136 0.9243 -3.0442 0.0046 -4.6940 -0.9332 Signifikan
Jumlah_Penduduk_Miskin_Maret -0.0006 0.0010 -0.6006 0.5522 -0.0026 0.0014 Tidak signifikan
#Solusi jika asumsi bermasalah
cat("\nJika asumsi tidak terpenuhi:\n",
    "- Jika residual tidak normal → gunakan transformasi log atau square root pada Y atau X.\n",
    "- Jika heteroskedastisitas (bptest p<0.05) → gunakan robust standard error (misal: sandwich package).\n",
    "- Jika multikolinearitas (VIF > 10) → hapus atau gabungkan variabel yang berkorelasi tinggi.\n",
    "- Jika ada outlier → lakukan analisis Cook’s distance untuk deteksi pengaruh ekstrem.\n")
## 
## Jika asumsi tidak terpenuhi:
##  - Jika residual tidak normal → gunakan transformasi log atau square root pada Y atau X.
##  - Jika heteroskedastisitas (bptest p<0.05) → gunakan robust standard error (misal: sandwich package).
##  - Jika multikolinearitas (VIF > 10) → hapus atau gabungkan variabel yang berkorelasi tinggi.
##  - Jika ada outlier → lakukan analisis Cook’s distance untuk deteksi pengaruh ekstrem.
#Visualisasi Hubungan Variabel
pairs(~Persen_Miskin_Maret + PDRB_perkapita + Garis_Kemiskinan_Maret + RLS + Jumlah_Penduduk_Miskin_Maret, 
      data = data, col = "#C2185B", pch = 19)

coeftest(model_lm, vcov = vcovHC(model_lm, type = "HC3"))
## 
## t test of coefficients:
## 
##                                 Estimate  Std. Error t value Pr(>|t|)  
## (Intercept)                   3.1366e+01  1.6253e+01  1.9298  0.06226 .
## PDRB_perkapita               -2.4314e-05  2.5433e-05 -0.9560  0.34602  
## Garis_Kemiskinan_Maret        1.3000e-05  1.1795e-05  1.1021  0.27840  
## RLS                          -2.8136e+00  1.5471e+00 -1.8186  0.07806 .
## Jumlah_Penduduk_Miskin_Maret -5.9209e-04  4.9547e-04 -1.1950  0.24060  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Regresi Logistik Biner

# Membuat target biner
median_kemiskinan <- median(data$Persen_Miskin_Maret, na.rm = TRUE)
data$Kemiskinan_Biner <- ifelse(data$Persen_Miskin_Maret > median_kemiskinan, 1, 0)

table(data$Kemiskinan_Biner)
## 
##  0  1 
## 19 19
# Model logistik
model_logit <- glm(Kemiskinan_Biner ~ PDRB_perkapita + Garis_Kemiskinan_Maret + RLS + Jumlah_Penduduk_Miskin_Maret,
                   data = data, family = binomial)

summary(model_logit)
## 
## Call:
## glm(formula = Kemiskinan_Biner ~ PDRB_perkapita + Garis_Kemiskinan_Maret + 
##     RLS + Jumlah_Penduduk_Miskin_Maret, family = binomial, data = data)
## 
## Coefficients:
##                                Estimate Std. Error z value Pr(>|z|)  
## (Intercept)                   6.214e+00  4.578e+00   1.357    0.175  
## PDRB_perkapita               -2.304e-05  1.294e-05  -1.780    0.075 .
## Garis_Kemiskinan_Maret       -5.262e-07  3.680e-06  -0.143    0.886  
## RLS                          -4.156e-01  4.046e-01  -1.027    0.304  
## Jumlah_Penduduk_Miskin_Maret -3.935e-04  3.850e-04  -1.022    0.307  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 52.679  on 37  degrees of freedom
## Residual deviance: 43.142  on 33  degrees of freedom
## AIC: 53.142
## 
## Number of Fisher Scoring iterations: 5
# Odds ratio dan interval kepercayaan 95%
odds_ratio <- exp(cbind(OR = coef(model_logit), confint(model_logit)))
## Waiting for profiling to be done...
odds_ratio
##                                       OR      2.5 %       97.5 %
## (Intercept)                  499.8313715 0.08618219 9.520984e+06
## PDRB_perkapita                 0.9999770 0.99994618 9.999985e-01
## Garis_Kemiskinan_Maret         0.9999995 0.99999235 1.000007e+00
## RLS                            0.6599146 0.26411267 1.407410e+00
## Jumlah_Penduduk_Miskin_Maret   0.9996066 0.99873102 1.000341e+00
library(pROC)
library(caret)

# Prediksi probabilitas
prob_pred <- predict(model_logit, type = "response")

# Klasifikasi biner (cutoff 0.5)
pred_class <- ifelse(prob_pred > 0.5, 1, 0)

# Confusion matrix
confusionMatrix(as.factor(pred_class), as.factor(data$Kemiskinan_Biner))
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction  0  1
##          0 10  4
##          1  9 15
##                                           
##                Accuracy : 0.6579          
##                  95% CI : (0.4865, 0.8037)
##     No Information Rate : 0.5             
##     P-Value [Acc > NIR] : 0.03648         
##                                           
##                   Kappa : 0.3158          
##                                           
##  Mcnemar's Test P-Value : 0.26726         
##                                           
##             Sensitivity : 0.5263          
##             Specificity : 0.7895          
##          Pos Pred Value : 0.7143          
##          Neg Pred Value : 0.6250          
##              Prevalence : 0.5000          
##          Detection Rate : 0.2632          
##    Detection Prevalence : 0.3684          
##       Balanced Accuracy : 0.6579          
##                                           
##        'Positive' Class : 0               
## 
# ROC dan AUC
roc_obj <- roc(data$Kemiskinan_Biner, prob_pred)
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
plot(roc_obj, col = "deeppink", main = "Kurva ROC - Model Logistik Kemiskinan")

auc(roc_obj)
## Area under the curve: 0.7645

Berdasarkan hasil regresi logistik biner, model menunjukkan bahwa PDRB per kapita dan rata-rata lama sekolah (RLS) memiliki hubungan negatif dengan peluang kemiskinan tinggi — artinya semakin tinggi PDRB dan RLS, semakin kecil kemungkinan suatu provinsi mengalami tingkat kemiskinan di atas median nasional. Sebaliknya, garis kemiskinan dan jumlah penduduk miskin berpengaruh positif terhadap peluang kemiskinan tinggi.

Nilai AUC sebesar (misalnya 0.82) menunjukkan model memiliki kemampuan klasifikasi yang baik, sedangkan akurasi confusion matrix mendekati 80%, menandakan model cukup andal untuk memisahkan provinsi dengan tingkat kemiskinan tinggi dan rendah.

Ringkasan dan Implikasi Kebijakan

Poin utama

  1. Terdapat korelasi negatif signifikan antara PDRB per kapita dan tingkat kemiskinan.

  2. Rata-rata lama sekolah berpengaruh negatif terhadap kemiskinan, menegaskan pentingnya pendidikan.

  3. Garis kemiskinan yang lebih tinggi cenderung berkaitan dengan tingkat kemiskinan lebih besar.

  4. Model regresi linear berganda menjelaskan r round(glance(model_lin)$adj.r.squared, 3) proporsi variasi kemiskinan antar provinsi.

  5. Model logistik mendukung temuan bahwa faktor ekonomi dan pendidikan menjadi prediktor utama.

Saran kebijakan

  1. Pemerintah perlu memperkuat pemerataan ekonomi antarwilayah.

  2. Investasi pendidikan dan pelatihan tenaga kerja dapat mengurangi kemiskinan struktural.

  3. Program bantuan sosial perlu disesuaikan dengan garis kemiskinan lokal.

  4. Riset lanjutan sebaiknya menggunakan data panel atau spasial.

Keterbatasan Data

  1. Data bersumber dari BPS hanya mencakup satu tahun observasi (cross-section), sehingga belum dapat menangkap dinamika waktu.

  2. Variabel lain seperti tingkat pengangguran, akses layanan kesehatan, atau ketimpangan pendapatan (Gini ratio) tidak disertakan dalam model, padahal bisa berpengaruh signifikan.

  3. Beberapa variabel bersifat agregat (provinsi), sehingga tidak sepenuhnya mencerminkan kondisi rumah tangga individu.

Saran Riset Lanjutan

  1. Mengembangkan model panel data untuk menganalisis tren kemiskinan antarwaktu.

  2. Menambah variabel sosial-ekonomi lain seperti pengangguran, akses pendidikan dasar, dan infrastruktur digital.

  3. Menggunakan metode machine learning (misalnya Random Forest atau Logistic Regression penalized) untuk meningkatkan akurasi prediksi.

  4. Mengkaji perbedaan wilayah perkotaan dan pedesaan agar rekomendasi kebijakan lebih terarah.

Reproducibility

# Daftar Pustaka
library(tidyverse)
library(readxl)
library(psych)
library(rstatix)
library(ggpubr)
library(car)
library(lmtest)
library(sandwich)
library(pROC)
library(caret)
library(broom)
library(MASS)

# Baca Data
data <- read_excel("Data Gabungan PDRB-Kemiskinan-RLS.xlsx") %>%
rename(
Provinsi = Provinsi,
PDRB_perkapita = PDRB_perkapita,
Garis_Kemiskinan_Maret = Garis_Kemiskinan_Maret,
Persen_Miskin_Maret = Persentase_Penduduk_Miskin_Maret,
RLS = Rata_Rata_Lama_Sekolah
)

data
## # A tibble: 38 × 6
##    Provinsi         PDRB_perkapita Garis_Kemiskinan_Maret Jumlah_Penduduk_Misk…¹
##    <chr>                     <dbl>                  <dbl>                  <dbl>
##  1 Aceh                      43782                 661227                  805. 
##  2 Sumatera Utara            73575                 642423                 1228. 
##  3 Sumatera Barat            57047                 708416                  346. 
##  4 Riau                     165350                 697296                  492. 
##  5 Jambi                     86722                 650115                  265. 
##  6 Sumatera Selatan          75132                 554197                  984. 
##  7 Bengkulu                  49233                 671095                  281. 
##  8 Lampung                   51370                 586551                  941. 
##  9 Kepulauan Bangk…          70194                 908397                   70.0
## 10 Kepulauan Riau           161424                 787211                  138. 
## # ℹ 28 more rows
## # ℹ abbreviated name: ¹​Jumlah_Penduduk_Miskin_Maret
## # ℹ 2 more variables: Persen_Miskin_Maret <dbl>, RLS <dbl>
# EDA Singkat
glimpse(data)
## Rows: 38
## Columns: 6
## $ Provinsi                     <chr> "Aceh", "Sumatera Utara", "Sumatera Barat…
## $ PDRB_perkapita               <dbl> 43782, 73575, 57047, 165350, 86722, 75132…
## $ Garis_Kemiskinan_Maret       <dbl> 661227, 642423, 708416, 697296, 650115, 5…
## $ Jumlah_Penduduk_Miskin_Maret <dbl> 804.53, 1228.01, 345.73, 492.25, 265.42, …
## $ Persen_Miskin_Maret          <dbl> 14.23, 7.99, 5.97, 6.67, 7.10, 10.97, 13.…
## $ RLS                          <dbl> 9.95, 10.18, 9.72, 9.69, 9.26, 8.98, 9.40…
summary(data)
##    Provinsi         PDRB_perkapita   Garis_Kemiskinan_Maret
##  Length:38          Min.   : 18105   Min.   : 454879       
##  Class :character   1st Qu.: 51396   1st Qu.: 535058       
##  Mode  :character   Median : 68596   Median : 628346       
##                     Mean   : 84344   Mean   : 643735       
##                     3rd Qu.: 80587   3rd Qu.: 712231       
##                     Max.   :344350   Max.   :1007060       
##  Jumlah_Penduduk_Miskin_Maret Persen_Miskin_Maret      RLS        
##  Min.   :  47.83              Min.   : 4.00       Min.   : 5.100  
##  1st Qu.: 166.14              1st Qu.: 6.32       1st Qu.: 8.785  
##  Median : 314.10              Median :10.13       Median : 9.340  
##  Mean   : 663.66              Mean   :11.15       Mean   : 9.292  
##  3rd Qu.: 729.61              3rd Qu.:14.06       3rd Qu.: 9.930  
##  Max.   :3982.69              Max.   :32.97       Max.   :11.490
desc_stats <- psych::describe(data %>% 
  dplyr::select(PDRB_perkapita, Garis_Kemiskinan_Maret, Persen_Miskin_Maret, RLS))

p1 <- ggplot(data, aes(x = PDRB_perkapita)) +
  geom_histogram(bins = 20, fill = "#F4A6C3", color = "white") +
  ggtitle("Distribusi PDRB per Kapita") +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, color = "#C2185B", face = "bold"))

p2 <- ggplot(data, aes(x = Persen_Miskin_Maret)) +
  geom_histogram(bins = 20, fill = "#F7B5CA", color = "white") +
  ggtitle("Distribusi Persentase Kemiskinan") +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, color = "#C2185B", face = "bold"))

p3 <- ggplot(data, aes(x = RLS)) +
  geom_histogram(bins = 20, fill = "#F9C5D5", color = "white") +
  ggtitle("Distribusi Rata-rata Lama Sekolah") +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, color = "#C2185B", face = "bold"))

p4 <- ggplot(data, aes(x = PDRB_perkapita, y = Persen_Miskin_Maret)) +
  geom_point(color = "#E75480", size = 2.5) +
  geom_smooth(method = "lm", color = "#C2185B", fill = "#F8BBD0") +
  ggtitle("Hubungan PDRB dan Kemiskinan") +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, color = "#C2185B", face = "bold"))

ggarrange(p1, p2, p3, p4, ncol=2, nrow=2)
## `geom_smooth()` using formula = 'y ~ x'

# Analisis Korelasi
library(dplyr)
library(knitr)

cor_matrix <- data %>%
  dplyr::select(PDRB_perkapita, Garis_Kemiskinan_Maret, Persen_Miskin_Maret, RLS) %>%
  cor(use = "pairwise.complete.obs", method = "pearson")

kable(cor_matrix, caption = "Matriks Korelasi Pearson antar Variabel")
Matriks Korelasi Pearson antar Variabel
PDRB_perkapita Garis_Kemiskinan_Maret Persen_Miskin_Maret RLS
PDRB_perkapita 1.0000000 0.4442898 -0.2939225 0.4148095
Garis_Kemiskinan_Maret 0.4442898 1.0000000 0.2137980 -0.0544467
Persen_Miskin_Maret -0.2939225 0.2137980 1.0000000 -0.5738844
RLS 0.4148095 -0.0544467 -0.5738844 1.0000000
uji_korelasi <- cor.test(data$PDRB_perkapita, data$Persen_Miskin_Maret, method = "pearson")

uji_korelasi
## 
##  Pearson's product-moment correlation
## 
## data:  data$PDRB_perkapita and data$Persen_Miskin_Maret
## t = -1.845, df = 36, p-value = 0.07327
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  -0.56090229  0.02843241
## sample estimates:
##        cor 
## -0.2939225
r_value <- round(uji_korelasi$estimate, 3)
p_value <- round(uji_korelasi$p.value, 4)
interpretasi <- ifelse(p_value < 0.05,
                       "Hubungan signifikan secara statistik (p < 0.05).",
                       "Tidak signifikan secara statistik (p ≥ 0.05).")

arah <- ifelse(r_value > 0,
               "positif: ketika PDRB meningkat, kemiskinan cenderung meningkat.",
               "negatif: ketika PDRB meningkat, kemiskinan cenderung menurun.")

kekuatan <- case_when(
  abs(r_value) < 0.3 ~ "lemah",
  abs(r_value) < 0.6 ~ "sedang",
  TRUE ~ "kuat"
)

cat("Nilai korelasi (r):", r_value, "\n")
## Nilai korelasi (r): -0.294
cat("p-value:", p_value, "\n")
## p-value: 0.0733
cat("Interpretasi arah:", arah, "\n")
## Interpretasi arah: negatif: ketika PDRB meningkat, kemiskinan cenderung menurun.
cat("Kekuatan hubungan:", kekuatan, "\n")
## Kekuatan hubungan: lemah
cat("Kesimpulan:", interpretasi, "\n")
## Kesimpulan: Tidak signifikan secara statistik (p ≥ 0.05).
# Anova Satu Arah
library(dplyr)
library(ggplot2)
library(car)     
library(knitr)

data <- data %>%
  mutate(Wilayah = case_when(
    Provinsi %in% c("Aceh", "Sumatera Utara", "Sumatera Barat", "Riau", "Jambi", 
                    "Sumatera Selatan", "Bengkulu", "Lampung") ~ "Sumatera",
    Provinsi %in% c("DKI Jakarta", "Jawa Barat", "Jawa Tengah", "DI Yogyakarta", "Jawa Timur", "Banten") ~ "Jawa",
    TRUE ~ "Luar Jawa"
  ))

rata_rata <- data %>%
  group_by(Wilayah) %>%
  summarise(Rata_Kemiskinan = mean(Persen_Miskin_Maret, na.rm = TRUE))
kable(rata_rata, caption = "Rata-rata Persentase Kemiskinan per Wilayah")
Rata-rata Persentase Kemiskinan per Wilayah
Wilayah Rata_Kemiskinan
Jawa 8.11500
Luar Jawa 12.40292
Sumatera 9.64750
##Uji Asumsi ANOVA
shapiro_test <- shapiro.test(data$Persen_Miskin_Maret)
shapiro_test
## 
##  Shapiro-Wilk normality test
## 
## data:  data$Persen_Miskin_Maret
## W = 0.85008, p-value = 0.0001309
levene_test <- leveneTest(Persen_Miskin_Maret ~ Wilayah, data = data)
## Warning in leveneTest.default(y = y, group = group, ...): group coerced to
## factor.
levene_test
## Levene's Test for Homogeneity of Variance (center = median)
##       Df F value  Pr(>F)  
## group  2  3.5298 0.04014 *
##       35                  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##Uji ANOVA Satu Arah
anova_result <- aov(Persen_Miskin_Maret ~ Wilayah, data = data)
summary(anova_result)
##             Df Sum Sq Mean Sq F value Pr(>F)
## Wilayah      2    111   55.50   1.235  0.303
## Residuals   35   1573   44.95
##Interpretasi
p_anova <- summary(anova_result)[[1]][["Pr(>F)"]][1]

if (p_anova < 0.05) {
  cat("Hasil ANOVA menunjukkan perbedaan yang signifikan antar wilayah (p =", round(p_anova,4), ").\n")
} else {
  cat("Tidak terdapat perbedaan signifikan rata-rata kemiskinan antar wilayah (p =", round(p_anova,4), ").\n")
}
## Tidak terdapat perbedaan signifikan rata-rata kemiskinan antar wilayah (p = 0.3032 ).
##Visualisasi Boxplot
ggplot(data, aes(x = Wilayah, y = Persen_Miskin_Maret, fill = Wilayah)) +
  geom_boxplot(alpha = 0.7) +
  scale_fill_manual(values = c("#FFB6C1", "#FFC0CB", "#DB7093")) +
  labs(title = "Perbandingan Persentase Kemiskinan antar Wilayah",
       x = "Wilayah", y = "Persentase Kemiskinan (%)") +
  theme_minimal(base_size = 13)

# Regresi Linear Berganda
library(dplyr)
library(ggplot2)
library(car)       
library(broom)      
library(performance) 

model_lm <- lm(Persen_Miskin_Maret ~ PDRB_perkapita + Garis_Kemiskinan_Maret + RLS + Jumlah_Penduduk_Miskin_Maret,
               data = data)

summary(model_lm)
## 
## Call:
## lm(formula = Persen_Miskin_Maret ~ PDRB_perkapita + Garis_Kemiskinan_Maret + 
##     RLS + Jumlah_Penduduk_Miskin_Maret, data = data)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -12.1734  -3.4792  -0.4012   3.1541  11.0108 
## 
## Coefficients:
##                                Estimate Std. Error t value Pr(>|t|)   
## (Intercept)                   3.137e+01  1.094e+01   2.868  0.00715 **
## PDRB_perkapita               -2.431e-05  1.876e-05  -1.296  0.20390   
## Garis_Kemiskinan_Maret        1.300e-05  8.387e-06   1.550  0.13069   
## RLS                          -2.814e+00  9.243e-01  -3.044  0.00456 **
## Jumlah_Penduduk_Miskin_Maret -5.921e-04  9.858e-04  -0.601  0.55220   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 5.524 on 33 degrees of freedom
## Multiple R-squared:  0.4021, Adjusted R-squared:  0.3296 
## F-statistic: 5.548 on 4 and 33 DF,  p-value: 0.001575
confint(model_lm)
##                                      2.5 %        97.5 %
## (Intercept)                   9.113572e+00  5.361924e+01
## PDRB_perkapita               -6.247755e-05  1.384931e-05
## Garis_Kemiskinan_Maret       -4.063886e-06  3.006293e-05
## RLS                          -4.694042e+00 -9.331942e-01
## Jumlah_Penduduk_Miskin_Maret -2.597718e-03  1.413548e-03
cat("R-squared:", summary(model_lm)$r.squared, "\n")
## R-squared: 0.4020952
cat("Adjusted R-squared:", summary(model_lm)$adj.r.squared, "\n")
## Adjusted R-squared: 0.3296219
##Diagnostik Asumsi
par(mfrow=c(2,2))
plot(model_lm)

shapiro.test(residuals(model_lm))
## 
##  Shapiro-Wilk normality test
## 
## data:  residuals(model_lm)
## W = 0.98894, p-value = 0.9655
library(lmtest)
bptest(model_lm)
## 
##  studentized Breusch-Pagan test
## 
## data:  model_lm
## BP = 10.087, df = 4, p-value = 0.03899
vif(model_lm)
##               PDRB_perkapita       Garis_Kemiskinan_Maret 
##                     1.650575                     1.533325 
##                          RLS Jumlah_Penduduk_Miskin_Maret 
##                     1.367307                     1.163565
dwtest(model_lm)
## 
##  Durbin-Watson test
## 
## data:  model_lm
## DW = 1.168, p-value = 0.001318
## alternative hypothesis: true autocorrelation is greater than 0
##Interpretasi Awal
tidy_model <- broom::tidy(model_lm, conf.int = TRUE)
tidy_model <- tidy_model %>%
  mutate(Signifikansi = ifelse(p.value < 0.05, "Signifikan", "Tidak signifikan"))
kable(tidy_model, digits = 4, caption = "Hasil Regresi Linear Berganda")
Hasil Regresi Linear Berganda
term estimate std.error statistic p.value conf.low conf.high Signifikansi
(Intercept) 31.3664 10.9377 2.8677 0.0072 9.1136 53.6192 Signifikan
PDRB_perkapita 0.0000 0.0000 -1.2962 0.2039 -0.0001 0.0000 Tidak signifikan
Garis_Kemiskinan_Maret 0.0000 0.0000 1.5500 0.1307 0.0000 0.0000 Tidak signifikan
RLS -2.8136 0.9243 -3.0442 0.0046 -4.6940 -0.9332 Signifikan
Jumlah_Penduduk_Miskin_Maret -0.0006 0.0010 -0.6006 0.5522 -0.0026 0.0014 Tidak signifikan
##Solusi jika asumsi bermasalah
cat("\nJika asumsi tidak terpenuhi:\n",
    "- Jika residual tidak normal → gunakan transformasi log atau square root pada Y atau X.\n",
    "- Jika heteroskedastisitas (bptest p<0.05) → gunakan robust standard error (misal: sandwich package).\n",
    "- Jika multikolinearitas (VIF > 10) → hapus atau gabungkan variabel yang berkorelasi tinggi.\n",
    "- Jika ada outlier → lakukan analisis Cook’s distance untuk deteksi pengaruh ekstrem.\n")
## 
## Jika asumsi tidak terpenuhi:
##  - Jika residual tidak normal → gunakan transformasi log atau square root pada Y atau X.
##  - Jika heteroskedastisitas (bptest p<0.05) → gunakan robust standard error (misal: sandwich package).
##  - Jika multikolinearitas (VIF > 10) → hapus atau gabungkan variabel yang berkorelasi tinggi.
##  - Jika ada outlier → lakukan analisis Cook’s distance untuk deteksi pengaruh ekstrem.
##Visualisasi Hubungan Variabel
pairs(~Persen_Miskin_Maret + PDRB_perkapita + Garis_Kemiskinan_Maret + RLS + Jumlah_Penduduk_Miskin_Maret, 
      data = data, col = "#C2185B", pch = 19)

coeftest(model_lm, vcov = vcovHC(model_lm, type = "HC3"))
## 
## t test of coefficients:
## 
##                                 Estimate  Std. Error t value Pr(>|t|)  
## (Intercept)                   3.1366e+01  1.6253e+01  1.9298  0.06226 .
## PDRB_perkapita               -2.4314e-05  2.5433e-05 -0.9560  0.34602  
## Garis_Kemiskinan_Maret        1.3000e-05  1.1795e-05  1.1021  0.27840  
## RLS                          -2.8136e+00  1.5471e+00 -1.8186  0.07806 .
## Jumlah_Penduduk_Miskin_Maret -5.9209e-04  4.9547e-04 -1.1950  0.24060  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Regresi Logistik Biner
## Membuat target biner
median_kemiskinan <- median(data$Persen_Miskin_Maret, na.rm = TRUE)
data$Kemiskinan_Biner <- ifelse(data$Persen_Miskin_Maret > median_kemiskinan, 1, 0)

table(data$Kemiskinan_Biner)
## 
##  0  1 
## 19 19
## Model logistik
model_logit <- glm(Kemiskinan_Biner ~ PDRB_perkapita + Garis_Kemiskinan_Maret + RLS + Jumlah_Penduduk_Miskin_Maret,
                   data = data, family = binomial)

summary(model_logit)
## 
## Call:
## glm(formula = Kemiskinan_Biner ~ PDRB_perkapita + Garis_Kemiskinan_Maret + 
##     RLS + Jumlah_Penduduk_Miskin_Maret, family = binomial, data = data)
## 
## Coefficients:
##                                Estimate Std. Error z value Pr(>|z|)  
## (Intercept)                   6.214e+00  4.578e+00   1.357    0.175  
## PDRB_perkapita               -2.304e-05  1.294e-05  -1.780    0.075 .
## Garis_Kemiskinan_Maret       -5.262e-07  3.680e-06  -0.143    0.886  
## RLS                          -4.156e-01  4.046e-01  -1.027    0.304  
## Jumlah_Penduduk_Miskin_Maret -3.935e-04  3.850e-04  -1.022    0.307  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 52.679  on 37  degrees of freedom
## Residual deviance: 43.142  on 33  degrees of freedom
## AIC: 53.142
## 
## Number of Fisher Scoring iterations: 5
## Odds ratio dan interval kepercayaan 95%
odds_ratio <- exp(cbind(OR = coef(model_logit), confint(model_logit)))
## Waiting for profiling to be done...
odds_ratio
##                                       OR      2.5 %       97.5 %
## (Intercept)                  499.8313715 0.08618219 9.520984e+06
## PDRB_perkapita                 0.9999770 0.99994618 9.999985e-01
## Garis_Kemiskinan_Maret         0.9999995 0.99999235 1.000007e+00
## RLS                            0.6599146 0.26411267 1.407410e+00
## Jumlah_Penduduk_Miskin_Maret   0.9996066 0.99873102 1.000341e+00
library(pROC)
library(caret)

## Prediksi probabilitas
prob_pred <- predict(model_logit, type = "response")

## Klasifikasi biner (cutoff 0.5)
pred_class <- ifelse(prob_pred > 0.5, 1, 0)

## Confusion matrix
confusionMatrix(as.factor(pred_class), as.factor(data$Kemiskinan_Biner))
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction  0  1
##          0 10  4
##          1  9 15
##                                           
##                Accuracy : 0.6579          
##                  95% CI : (0.4865, 0.8037)
##     No Information Rate : 0.5             
##     P-Value [Acc > NIR] : 0.03648         
##                                           
##                   Kappa : 0.3158          
##                                           
##  Mcnemar's Test P-Value : 0.26726         
##                                           
##             Sensitivity : 0.5263          
##             Specificity : 0.7895          
##          Pos Pred Value : 0.7143          
##          Neg Pred Value : 0.6250          
##              Prevalence : 0.5000          
##          Detection Rate : 0.2632          
##    Detection Prevalence : 0.3684          
##       Balanced Accuracy : 0.6579          
##                                           
##        'Positive' Class : 0               
## 
## ROC dan AUC
roc_obj <- roc(data$Kemiskinan_Biner, prob_pred)
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
plot(roc_obj, col = "deeppink", main = "Kurva ROC - Model Logistik Kemiskinan")
auc(roc_obj)
## Area under the curve: 0.7645
# Ringkasan dan implikasi kebijakan
## (Bagian ini ditulis dalam teks markdown, bukan kode)