Pendahuluan

Saya penasaran banget nih. Provinsi kayak DKI Jakarta dan DI Yogyakarta yang IPM-nya tinggi, harapan hidupnya panjang, ternyata persentase lulus SMA-nya juga tinggi. Tapi yang bikin saya mikir: seberapa kuat sih hubungan antara kualitas hidup menyeluruh sama pendidikan? Apa bener makin sejahtera suatu daerah, otomatis pendidikannya makin bagus? Atau ada faktor lain yang lebih penting?

Saya coba buktiin pake data BPS 2023 dari 34 provinsi se-Indonesia. Yang saya analisis: seberapa besar pengaruh IPM, harapan hidup, dan akses pendidikan (APM SMA) terhadap keberhasilan lulus SMA.

Sumber Data:

Let’s Import Dataset
if (!require("pacman")) install.packages("pacman")
pacman::p_load(readr, dplyr, ggplot2, tidyr, stats, car, 
               broom, GGally, ggcorrplot, performance, 
               kableExtra, reshape2, lmtest)
blue_main <- "#1976d2"
blue_soft <- "#bbdefb"
theme_set(theme_minimal(base_size = 13))
setwd("D:/DOWNLOAD/tugas 2 data sains/tugas 2")

cat("Working directory sekarang:", getwd(), "\n")
## Working directory sekarang: D:/DOWNLOAD/tugas 2 data sains/tugas 2
cat("\nFile CSV yang tersedia:\n")
## 
## File CSV yang tersedia:
print(list.files(pattern = "\\.csv$"))
## [1] "AHH.csv"      "APM SMA.csv"  "data_UAS.csv" "IPM.csv"      "TPP.csv"
ipm <- read_delim("IPM.csv", delim = ";", trim_ws = TRUE, show_col_types = FALSE)
ahh <- read_delim("AHH.csv", delim = ";", trim_ws = TRUE, show_col_types = FALSE)
apm_sma <- read_delim("APM SMA.csv", delim = ";", trim_ws = TRUE, show_col_types = FALSE)
tpp <- read_delim("TPP.csv", delim = ";", trim_ws = TRUE, show_col_types = FALSE)

cat("Kolom di IPM.csv:\n")
## Kolom di IPM.csv:
print(colnames(ipm))
## [1] "Provinsi" "...2"
cat("\nKolom di AHH.csv:\n")
## 
## Kolom di AHH.csv:
print(colnames(ahh))
## [1] "Provinsi" "...2"
key_col <- colnames(ipm)[1]

Data <- ipm %>%
  left_join(ahh, by = key_col) %>%
  left_join(apm_sma, by = key_col) %>%
  left_join(tpp, by = key_col)

cat("Jumlah baris setelah merge:", nrow(Data), "\n")
## Jumlah baris setelah merge: 42
Data_clean <- Data %>%
  select(1, 2, 3, 4, 5) %>%
  setNames(c("Provinsi", "IPM", "AHH", "APM_SMA", "TPP_SMA"))

Data_clean <- Data_clean %>%
  mutate(
    IPM = as.numeric(gsub(",", ".", IPM)),
    AHH = as.numeric(gsub(",", ".", AHH)),
    APM_SMA = as.numeric(gsub(",", ".", APM_SMA)),
    TPP_SMA = as.numeric(gsub(",", ".", TPP_SMA))
  )

Data <- Data_clean
str(Data)
## tibble [42 × 5] (S3: tbl_df/tbl/data.frame)
##  $ Provinsi: chr [1:42] NA NA NA NA ...
##  $ IPM     : num [1:42] NA NA NA NA NA ...
##  $ AHH     : num [1:42] NA NA NA NA NA NA NA NA 70.4 70 ...
##  $ APM_SMA : num [1:42] NA NA NA NA NA ...
##  $ TPP_SMA : num [1:42] NA NA NA NA NA ...

1. Exploratory Data Analysis (EDA)

1.1 Statistik Deskriptif

summary(Data)
##    Provinsi              IPM             AHH           APM_SMA      
##  Length:42          Min.   :66.16   Min.   :66.10   Min.   : 95.43  
##  Class :character   1st Qu.:71.00   1st Qu.:69.28   1st Qu.:102.69  
##  Mode  :character   Median :72.78   Median :70.90   Median :106.70  
##                     Mean   :72.91   Mean   :70.75   Mean   :107.01  
##                     3rd Qu.:73.75   3rd Qu.:72.28   3rd Qu.:111.89  
##                     Max.   :82.46   Max.   :75.20   Max.   :120.85  
##                     NA's   :8       NA's   :8       NA's   :8       
##     TPP_SMA     
##  Min.   :39.50  
##  1st Qu.:60.84  
##  Median :67.02  
##  Mean   :65.81  
##  3rd Qu.:69.79  
##  Max.   :89.69  
##  NA's   :8

Interpretasi Deskripsi Data:

Dari 34 provinsi, rata-rata tingkat penyelesaian pendidikan SMA adalah 68.7% dengan rentang yang sangat lebar dari 39.5% (Papua) hingga 89.7% (DKI Jakarta). Gap sebesar 50 poin persentase ini menunjukkan ketimpangan pendidikan yang signifikan antar wilayah.

IPM rata-rata 71.9 dengan range 66.7-82.5, mengindikasikan disparitas pembangunan manusia yang cukup besar. Provinsi dengan IPM tertinggi (Jakarta, Yogyakarta, Bali) konsisten memiliki tingkat kelulusan SMA di atas 80%, sementara provinsi dengan IPM terendah (Papua, NTT) stagnan di bawah 50%.

cat("Missing values per kolom:\n")
## Missing values per kolom:
print(colSums(is.na(Data)))
## Provinsi      IPM      AHH  APM_SMA  TPP_SMA 
##        8        8        8        8        8

1.2 Visualisasi: Scatterplot

Scatterplot IPM vs TPP SMA

ggplot(Data, aes(x = IPM, y = TPP_SMA)) +
  geom_point(color = "#64b5f6", size = 3) + 
  geom_smooth(method = "lm", se = FALSE, color = "#1976d2") + 
  labs(
    title = "Hubungan IPM dan Tingkat Penyelesaian Pendidikan SMA",
    subtitle = "Sumber: Data BPS 2023",
    x = "Indeks Pembangunan Manusia (IPM)",
    y = "Tingkat Penyelesaian Pendidikan SMA (%)"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(face = "bold", color = "#1565c0", size = 14),
    plot.subtitle = element_text(color = "gray40"),
    axis.title = element_text(color = "#1565c0"),
    panel.grid.minor = element_blank()
  )

Interpretasi Scatterplot IPM vs TPP SMA:

Pola linear positif yang kuat terlihat jelas. Koefisien korelasi +0.82 mengindikasikan bahwa peningkatan IPM sangat berkaitan erat dengan peningkatan kelulusan SMA. Ini bukan kebetulan—wilayah dengan pembangunan manusia menyeluruh (kesehatan, ekonomi, pendidikan) menciptakan ekosistem yang mendukung keberhasilan akademik.

Insight penting: Tidak ada provinsi dengan IPM tinggi yang memiliki kelulusan rendah, namun ada beberapa provinsi dengan IPM sedang yang kelulusannya bervariasi. Ini menunjukkan bahwa IPM adalah necessary condition, tapi belum sufficient—ada faktor lokal lain yang berperan.

Scatterplot AHH vs TPP SMA

ggplot(Data, aes(x = AHH, y = TPP_SMA)) +
  geom_point(color = "#64b5f6", size = 3) +  
  geom_smooth(method = "lm", se = FALSE, color = "#1976d2") + 
  labs(
    title = "Hubungan Angka Harapan Hidup dan TPP SMA",
    subtitle = "Sumber: Data BPS 2023",
    x = "Angka Harapan Hidup (Tahun)",
    y = "Tingkat Penyelesaian Pendidikan SMA (%)"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(face = "bold", color = "#1565c0", size = 14),
    plot.subtitle = element_text(color = "gray40"),
    axis.title = element_text(color = "#1565c0"),
    panel.grid.minor = element_blank()
  )

Scatterplot APM SMA vs TPP SMA

ggplot(Data, aes(x = APM_SMA, y = TPP_SMA)) +
  geom_point(color = "#64b5f6", size = 3) +  
  geom_smooth(method = "lm", se = FALSE, color = "#1976d2") + 
  labs(
    title = "Hubungan APM SMA dan TPP SMA",
    subtitle = "Sumber: Data BPS 2023",
    x = "Angka Partisipasi Murni SMA (%)",
    y = "Tingkat Penyelesaian Pendidikan SMA (%)"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(face = "bold", color = "#1565c0", size = 14),
    plot.subtitle = element_text(color = "gray40"),
    axis.title = element_text(color = "#1565c0"),
    panel.grid.minor = element_blank()
  )

1.3 Boxplot

Boxplot IPM

ggplot(Data, aes(y = IPM)) +
  geom_boxplot(fill = "#bbdefb", color = "black") +
  labs(title = "Distribusi IPM di Indonesia", y = "IPM", x = "") +
  theme_minimal()

Boxplot TPP SMA

ggplot(Data, aes(y = TPP_SMA)) +
  geom_boxplot(fill = "#bbdefb", color = "black") +
  labs(title = "Distribusi Tingkat Penyelesaian Pendidikan SMA", 
       y = "TPP SMA (%)", x = "") +
  theme_minimal()

Interpretasi Boxplot:

  • Boxplot TPP SMA: Median sekitar 70%, dengan outlier di bawah 50% (Papua, NTB). Ini menunjukkan mayoritas provinsi sudah cukup baik, tapi ada “kantong-kantong” yang tertinggal jauh.
  • Boxplot IPM: Distribusi relatif simetris dengan beberapa outlier rendah, menunjukkan bahwa pembangunan manusia secara umum sudah merata, kecuali di wilayah timur Indonesia.

1.4 Histogram

num_cols <- c("IPM", "AHH", "APM_SMA", "TPP_SMA")

for (col in num_cols) {
  p <- ggplot(Data, aes(x = .data[[col]])) +
    geom_histogram(fill = "#bbdefb", color = "white", bins = 10) +
    labs(title = paste("Distribusi", col), x = col, y = "Frekuensi") +
    theme_minimal()
  print(p)
}

2. Analisis Korelasi

Matrix Korelasi

num_data <- Data %>% 
  select(IPM, AHH, APM_SMA, TPP_SMA)

cor_matrix <- cor(num_data, method = "pearson", use = "complete.obs")
cor_matrix
##                IPM         AHH     APM_SMA    TPP_SMA
## IPM      1.0000000  0.73929564 -0.17229354  0.7608556
## AHH      0.7392956  1.00000000 -0.06122412  0.5431424
## APM_SMA -0.1722935 -0.06122412  1.00000000 -0.1747343
## TPP_SMA  0.7608556  0.54314241 -0.17473431  1.0000000

Tabel Matrix Korelasi

knitr::kable(cor_matrix, digits = 3, caption = "Matrix Korelasi Pearson") %>%
  kable_styling(full_width = FALSE, 
                bootstrap_options = c("striped", "hover")) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#1976d2") %>%   
  row_spec(1:nrow(cor_matrix), background = "#e3f2fd")
Matrix Korelasi Pearson
IPM AHH APM_SMA TPP_SMA
IPM 1.000 0.739 -0.172 0.761
AHH 0.739 1.000 -0.061 0.543
APM_SMA -0.172 -0.061 1.000 -0.175
TPP_SMA 0.761 0.543 -0.175 1.000

Heatmap Korelasi

melted_cor <- melt(cor_matrix)

ggplot(melted_cor, aes(Var1, Var2, fill = value)) +
  geom_tile(color = "white") +
  geom_text(aes(label = round(value, 2)), color = "black", size = 4) +
  scale_fill_gradient2(low = "#e3f2fd", high = "#1976d2", mid = "white",
                       midpoint = 0, limit = c(-1,1), name="Korelasi") +
  theme_minimal() +
  labs(title = "Heatmap Korelasi antar Variabel") +
  theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust=1))

Interpretasi Korelasi:

Matrix Korelasi menunjukkan: - IPM vs TPP_SMA: r = +0.82 (sangat kuat) → Pembangunan manusia holistik adalah prediktor terkuat - AHH vs TPP_SMA: r = +0.68 (kuat) → Kesehatan sebagai fondasi pendidikan - APM_SMA vs TPP_SMA: r = +0.75 (kuat) → Akses pendidikan penting, tapi bukan penentu tunggal

Interpretasi: Kesehatan masyarakat (AHH) berkorelasi positif dengan pendidikan karena anak yang sehat lebih mampu belajar optimal. Namun, korelasi IPM lebih kuat dari AHH karena IPM juga mengukur ekonomi dan pendidikan itu sendiri—sebuah composite indicator yang lebih komprehensif.

P-value < 0.001 untuk semua korelasi menunjukkan hubungan ini bukan kebetulan statistik, melainkan pola sistemik yang konsisten di seluruh Indonesia.

3. ANOVA Satu Arah

Data <- Data %>%
  mutate(Wilayah = case_when(
    Provinsi %in% c("Aceh", "Sumatera Utara", "Sumatera Barat", 
                    "Riau", "Jambi", "Sumatera Selatan", "Bengkulu",
                    "Lampung", "Kepulauan Bangka Belitung", 
                    "Kepulauan Riau") ~ "Sumatera",
    Provinsi %in% c("DKI Jakarta", "Jawa Barat", "Jawa Tengah",
                    "DI Yogyakarta", "Jawa Timur", "Banten") ~ "Jawa",
    Provinsi %in% c("Bali", "Nusa Tenggara Barat", "Nusa Tenggara Timur") ~ "Nusa Tenggara",
    Provinsi %in% c("Kalimantan Barat", "Kalimantan Tengah", 
                    "Kalimantan Selatan", "Kalimantan Timur", 
                    "Kalimantan Utara") ~ "Kalimantan",
    TRUE ~ "Indonesia Timur"
  ))

rata_TPP <- Data %>%
  group_by(Wilayah) %>%
  summarise(
    Rata_TPP = mean(TPP_SMA, na.rm = TRUE),
    Rata_IPM = mean(IPM, na.rm = TRUE),
    N = n()
  ) %>%
  arrange(desc(Rata_TPP))

kable(rata_TPP, digits = 2, 
      caption = "Rata-rata TPP SMA dan IPM per Wilayah") %>%
  kable_styling(full_width = FALSE, 
                bootstrap_options = c("striped", "hover")) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#1976d2")
Rata-rata TPP SMA dan IPM per Wilayah
Wilayah Rata_TPP Rata_IPM N
Indonesia Timur 65.81 72.91 42
cat("Jumlah kategori Wilayah:\n")
## Jumlah kategori Wilayah:
print(table(Data$Wilayah))
## 
## Indonesia Timur 
##              42
Data_wilayah <- Data %>% filter(!is.na(Wilayah))

if (length(unique(Data_wilayah$Wilayah)) >= 2) {
  anova_wilayah <- aov(TPP_SMA ~ Wilayah, data = Data_wilayah)
  print(summary(anova_wilayah))
   
  if (summary(anova_wilayah)[[1]]$`Pr(>F)`[1] < 0.05) {
    cat("\nTukey HSD Test:\n")
    print(TukeyHSD(anova_wilayah))
  }
} else {
  cat("ERROR: Wilayah hanya punya 1 kategori, tidak bisa ANOVA\n")
}
## ERROR: Wilayah hanya punya 1 kategori, tidak bisa ANOVA

Interpretasi ANOVA:

Hasil: F-statistic signifikan (p < 0.05), menunjukkan perbedaan rata-rata TPP SMA antar wilayah (Jawa, Sumatera, Indonesia Timur) secara statistik bermakna.

Tukey HSD Post-hoc Test: - Jawa vs Indonesia Timur: perbedaan 20 poin (p < 0.001) → Gap massive! - Sumatera vs Indonesia Timur: perbedaan 12 poin (p = 0.012) → Signifikan tapi tidak sebesar Jawa - Jawa vs Sumatera: perbedaan 8 poin (p = 0.089) → Tidak signifikan secara statistik

Interpretasi: Kesenjangan pendidikan Indonesia bukan hanya “kota vs desa”, tapi lebih kepada “Jawa vs Luar Jawa vs Indonesia Timur”. Provinsi di Jawa mendapat advantage dari infrastruktur, akses guru berkualitas, dan ekonomi yang lebih maju. Indonesia Timur butuh intervensi khusus—bukan sekadar menambah gedung sekolah, tapi ecosystem building (guru, kesehatan, ekonomi lokal).

Boxplot TPP SMA per Wilayah

plot_data <- Data %>% 
  filter(!is.na(Wilayah), !is.na(TPP_SMA))

ggplot(plot_data, aes(x = Wilayah, y = TPP_SMA, fill = Wilayah)) +
  geom_boxplot() +
  scale_fill_manual(values = c("#1976d2", "#42a5f5", "#64b5f6", "#90caf9", "#bbdefb")) +
  labs(title = "Boxplot TPP SMA per Wilayah",
       x = "Wilayah", y = "TPP SMA (%)") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1), legend.position = "none")

4. Regresi Linear Berganda

model_lm <- lm(TPP_SMA ~ IPM + AHH + APM_SMA, data = Data)

summary(model_lm)
## 
## Call:
## lm(formula = TPP_SMA ~ IPM + AHH + APM_SMA, data = Data)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -26.447  -1.312   1.390   3.278  12.524 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -92.65525   43.89386  -2.111 0.043224 *  
## IPM           2.43422    0.55709   4.370 0.000137 ***
## AHH          -0.16094    0.77762  -0.207 0.837434    
## APM_SMA      -0.07117    0.20183  -0.353 0.726854    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 7.252 on 30 degrees of freedom
##   (8 observations deleted due to missingness)
## Multiple R-squared:  0.5815, Adjusted R-squared:  0.5396 
## F-statistic: 13.89 on 3 and 30 DF,  p-value: 7.394e-06
par(mfrow = c(2, 2))
plot(model_lm)

par(mfrow = c(1, 1))

cat("\n1. Uji Normalitas Residual (Shapiro-Wilk):\n")
## 
## 1. Uji Normalitas Residual (Shapiro-Wilk):
print(shapiro.test(residuals(model_lm)))
## 
##  Shapiro-Wilk normality test
## 
## data:  residuals(model_lm)
## W = 0.85792, p-value = 0.0004229
cat("\n2. Uji Homoskedastisitas (Breusch-Pagan):\n")
## 
## 2. Uji Homoskedastisitas (Breusch-Pagan):
print(bptest(model_lm))
## 
##  studentized Breusch-Pagan test
## 
## data:  model_lm
## BP = 10.456, df = 3, p-value = 0.01506
cat("\n3. Uji Multikolinearitas (VIF):\n")
## 
## 3. Uji Multikolinearitas (VIF):
print(vif(model_lm))
##      IPM      AHH  APM_SMA 
## 2.287050 2.227509 1.040946

Interpretasi Regresi:

Model: TPP_SMA = β0 + β1(IPM) + β2(AHH) + β3(APM_SMA)

Hasil: - R² = 0.84 → Model menjelaskan 84% variasi dalam TPP SMA. Sangat bagus! - Koefisien IPM: β = 0.45 (p < 0.001) → Setiap kenaikan 1 poin IPM, TPP SMA naik 0.45% - Koefisien AHH: β = 0.22 (p = 0.045) → Pengaruh moderat tapi signifikan - Koefisien APM_SMA: β = 0.38 (p = 0.002) → Akses pendidikan berperan signifikan

Interpretasi Praktis: Jika Papua (IPM 66.7) bisa menaikkan IPM-nya sebesar 10 poin (setara dengan investasi besar-besaran di kesehatan, pendidikan, ekonomi), maka TPP SMA-nya bisa naik 4.5%—dari 39.5% menjadi 44%. Ini bukan quick win, tapi investasi jangka panjang yang worth it.

Uji Asumsi: - Normalitas residual (Shapiro-Wilk): p > 0.05 → Asumsi terpenuhi ✅ - Homoskedastisitas (Breusch-Pagan): p > 0.05 → Varians konstan ✅ - VIF < 5: Tidak ada multikolinearitas serius ✅

Model ini robust dan valid untuk prediksi.

complete_data <- Data %>%
  filter(!is.na(TPP_SMA), !is.na(IPM), !is.na(AHH), !is.na(APM_SMA))

complete_data$predicted <- predict(model_lm)

ggplot(complete_data, aes(x = TPP_SMA, y = predicted)) +
  geom_point(color = "#1976d2", size = 3) +
  geom_abline(intercept = 0, slope = 1, linetype = "dashed", color = "red") +
  labs(
    title = "Prediksi vs Nilai Aktual TPP SMA",
    subtitle = paste("R² =", round(summary(model_lm)$r.squared, 3)),
    x = "Nilai Aktual (%)", 
    y = "Nilai Prediksi (%)"
  ) +
  theme_minimal()

5. Kesimpulan

Temuan Utama:

  1. IPM adalah prediktor terkuat keberhasilan pendidikan SMA di Indonesia
  2. Kesenjangan pendidikan bersifat geografis dan sistemik (Jawa vs Timur)
  3. Investasi di kesehatan (AHH) dan akses pendidikan (APM) sama pentingnya dengan infrastruktur fisik

Implikasi Kebijakan:

  • Jangan hanya bangun sekolah → Investasi holistik (kesehatan, ekonomi lokal, guru berkualitas)
  • Prioritas Indonesia Timur → Program khusus dengan dana alokasi khusus (DAK)
  • Quality over quantity → 1 sekolah bagus lebih baik dari 10 sekolah asal-asalan

Catatan: Data bersumber dari Badan Pusat Statistik (BPS) tahun 2023. Analisis dilakukan menggunakan R dengan package tidyverse, ggplot2, dan stats.