Dataset yang digunakan berisi informasi pendidikan tingkat SMA per provinsi di Indonesia, termasuk: - Jumlah Guru SMA Negeri + Swasta (JGS) - Jumlah Murid SMA Negeri + Swasta (JMS) - Rasio Guru-Murid (RGMPS) - Tingkat Penyelesaian Pendidikan SMA (TPPS)
Tujuan analisis ini adalah memahami faktor-faktor yang memengaruhi TPPS setiap provinsi.
library(readxl)
library(corrplot)
## corrplot 0.95 loaded
library(car)
## Loading required package: carData
library(broom)
library(pROC)
## Warning: package 'pROC' was built under R version 4.5.2
## Type 'citation("pROC")' for a citation.
##
## Attaching package: 'pROC'
## The following objects are masked from 'package:stats':
##
## cov, smooth, var
library(caret)
## Warning: package 'caret' was built under R version 4.5.2
## Loading required package: ggplot2
## Loading required package: lattice
library(dplyr)
##
## Attaching package: 'dplyr'
## The following object is masked from 'package:car':
##
## recode
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(lmtest)
## Warning: package 'lmtest' was built under R version 4.5.2
## Loading required package: zoo
## Warning: package 'zoo' was built under R version 4.5.2
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
library(moments)
## Warning: package 'moments' was built under R version 4.5.2
library(readxl)
library(reshape2)
library(ggplot2)
Copy_of_ANALISIS_PENGANTAR_DATA_SAINS_Tugas_2_1_ <- read_excel("Copy of ANALISIS_PENGANTAR_DATA_SAINS_-_Tugas_2(1).xlsx")
View(Copy_of_ANALISIS_PENGANTAR_DATA_SAINS_Tugas_2_1_)
APDS <- Copy_of_ANALISIS_PENGANTAR_DATA_SAINS_Tugas_2_1_
summary(APDS)
## Provinsi JGS(S+N) JMS(N+S) RGMPS
## Length:38 Min. : 840 Min. : 12884 Min. : 9.793
## Class :character 1st Qu.: 2794 1st Qu.: 36154 1st Qu.:12.809
## Mode :character Median : 5768 Median : 80648 Median :14.065
## Mean : 9346 Mean :139748 Mean :14.105
## 3rd Qu.:12290 3rd Qu.:172687 3rd Qu.:15.468
## Max. :43256 Max. :823771 Max. :19.044
## TPPS Variabel Biner
## Min. : 0.00 Min. :0.0
## 1st Qu.:56.35 1st Qu.:0.0
## Median :65.64 Median :0.5
## Mean :58.88 Mean :0.5
## 3rd Qu.:68.88 3rd Qu.:1.0
## Max. :89.69 Max. :1.0
Bagian ini bertujuan melihat distribusi setiap variabel menggunakan histogram, serta melihat hubungan awal antara jumlah murid dengan tingkat penyelesaian pendidikan.
JGS <- APDS$`JGS(S+N)`
JMS<- APDS$`JMS(N+S)`
RGM<-APDS$`RGMPS`
TPPS<-APDS$`TPPS`
par(mfrow = c(2, 2), mar = c(4, 4, 3, 2))
# Histogram Jumlah Guru SMA(Negeri+swasta)
hist(JGS,
main = "Histogram Jumlah Guru SMA(Negeri Swasta)",
xlab = "Jumlah Guru SMA(Negeri+swasta)",
col = "#3C3C3C", border = "#11999E")
# Histogram Jumlah Murid SMA(Negeri+Swasta)
hist(JMS,
main = "Histogram Jumlah Murid SMA (Negeri+swasta)",
xlab = "Jumlah Murid SMA(Negeri+swasta)",
col = "#3C3C3C", border = "#11999E")
# Histogram Rasio Guru dan Murid
hist(RGM,
main = "Histogram Rasio Guru dan Murid per provinsi SMA",
xlab = "Rasio Guru dan Murid",
col = "#3C3C3C", border = "#11999E")
# Histogram
hist(TPPS,
main = "Histogram Tingkat penyelesaian pendidikan SMA",
xlab = "Tingkat Penyelesaian Pendidikan",
col = "#3C3C3C", border = "#11999E")
# Scatter Plot Jumlah murid vs Tingkat Penyelesaian Pendidkan SMa
plot(JMS , TPPS ,
xlab = "Jumlah Murid SMA",
ylab = "Tingkat Penyelesaian Pendidikan SMA",
main = "Hubungan JMS dan TPPS",
col = "#11999E", pch = 16)
model_eda <- lm(TPPS ~ JMS)
abline(model_eda, col = "red", lwd = 2)
par(mfrow = c(1, 1)) # Kembalikan layout
cor_data <- APDS[c(
"JGS(S+N)",
"JMS(N+S)",
"RGMPS",
"TPPS"
)]
# Compute Pearson correlation matrix
cor_matrix <- cor(cor_data, method = "pearson")
print(cor_matrix)
## JGS(S+N) JMS(N+S) RGMPS TPPS
## JGS(S+N) 1.0000000 0.9843282 0.39791227 0.30790168
## JMS(N+S) 0.9843282 1.0000000 0.50448652 0.26972431
## RGMPS 0.3979123 0.5044865 1.00000000 0.04597128
## TPPS 0.3079017 0.2697243 0.04597128 1.00000000
library(reshape2)
library(ggplot2)
melted_cor <- melt(cor_matrix)
ggplot(melted_cor, aes(Var1, Var2, fill = value)) +
geom_tile(color = "white") +
scale_fill_gradient2(low = "#6DECB9", high = "#11999E", mid = "#F4F4F4",
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
Hasil korelasi menunjukkan bahwa:
Tidak ada korelasi ekstrem yang mengindikasikan multikolinearitas berat.
median_jms <- median (APDS$'JMS(N+S)')
median_jms
## [1] 80647.5
# Membuat variabel biner
APDS$Biner_JMS <- ifelse(APDS$`JMS(N+S)` > median_jms, 1, 0)
# Lihat hasil 6 baris pertama
head(APDS[, c("Provinsi", "JMS(N+S)", "Biner_JMS")])
## # A tibble: 6 × 3
## Provinsi `JMS(N+S)` Biner_JMS
## <chr> <dbl> <dbl>
## 1 Aceh 137657 1
## 2 Sumatera Utara 389899 1
## 3 Sumatera Barat 153535 1
## 4 Riau 172295 1
## 5 Jambi 81429 1
## 6 Sumatera Selatan 220114 1
Analisis ini bertujuan memprediksi apakah suatu provinsi memiliki jumlah murid di atas median (Biner_JMS = 1) atau di bawah median (Biner_JMS = 0).
# Model logistik biner
model_logit <- glm(Biner_JMS ~ `JGS(S+N)` + RGMPS + TPPS,
data = APDS,
family = binomial)
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
summary(model_logit)
##
## Call:
## glm(formula = Biner_JMS ~ `JGS(S+N)` + RGMPS + TPPS, family = binomial,
## data = APDS)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.102e+03 2.162e+05 -0.005 0.996
## `JGS(S+N)` 7.390e-02 1.411e+01 0.005 0.996
## RGMPS 3.590e+01 7.476e+03 0.005 0.996
## TPPS 2.856e+00 6.663e+02 0.004 0.997
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 5.2679e+01 on 37 degrees of freedom
## Residual deviance: 5.9072e-08 on 34 degrees of freedom
## AIC: 8
##
## Number of Fisher Scoring iterations: 25
# Odds Ratio
odds_ratio <- exp(coef(model_logit))
odds_ratio
## (Intercept) `JGS(S+N)` RGMPS TPPS
## 0.000000e+00 1.076695e+00 3.883409e+15 1.739791e+01
# Confidence Interval 95%
conf_int <- exp(confint(model_logit))
## Waiting for profiling to be done...
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
conf_int
## 2.5 % 97.5 %
## (Intercept) 0.000000e+00 Inf
## `JGS(S+N)` 2.564855e-01 5.202715e+03
## RGMPS 2.017958e-188 Inf
## TPPS 7.417857e-33 4.080522e+34
# Prediksi probabilitas
pred_prob <- predict(model_logit, type = "response")
# Klasifikasi: threshold 0.5
pred_class <- ifelse(pred_prob > 0.5, 1, 0)
# Confusion Matrix
table(Prediksi = pred_class, Aktual = APDS$Biner_JMS)
## Aktual
## Prediksi 0 1
## 0 19 0
## 1 0 19
library(pROC)
roc_obj <- roc(APDS$Biner_JMS, pred_prob)
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
auc_val <- auc(roc_obj)
auc_val
## Area under the curve: 1
plot(roc_obj, col = "#11999E", lwd = 3,
main = "ROC Curve – Model Logistik Biner")
#regresi linear berganda
model_final <- lm(TPPS ~ `JMS(N+S)` + RGMPS, data = APDS)
vif(model_final)
## `JMS(N+S)` RGMPS
## 1.341394 1.341394
summary(model_final)
##
## Call:
## lm(formula = TPPS ~ `JMS(N+S)` + RGMPS, data = APDS)
##
## Residuals:
## Min 1Q Median 3Q Max
## -57.880 -5.184 5.731 10.829 34.319
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 7.067e+01 2.669e+01 2.648 0.0121 *
## `JMS(N+S)` 4.517e-05 2.560e-05 1.765 0.0864 .
## RGMPS -1.283e+00 1.990e+00 -0.645 0.5232
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 22.46 on 35 degrees of freedom
## Multiple R-squared: 0.08364, Adjusted R-squared: 0.03128
## F-statistic: 1.597 on 2 and 35 DF, p-value: 0.2168
plot(model_final)
par(mfrow = c(2,2))
plot(model_final)
par(mfrow = c(1,1))
library(car)
vif(model_final)
## `JMS(N+S)` RGMPS
## 1.341394 1.341394
library(broom)
tidy(model_final)
## # A tibble: 3 × 5
## term estimate std.error statistic p.value
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 (Intercept) 70.7 26.7 2.65 0.0121
## 2 `JMS(N+S)` 0.0000452 0.0000256 1.76 0.0864
## 3 RGMPS -1.28 1.99 -0.645 0.523
vif(model_final)
## `JMS(N+S)` RGMPS
## 1.341394 1.341394
cat("=== Interpretasi Regresi Linear Berganda ===\n")
## === Interpretasi Regresi Linear Berganda ===
cat("\nModel ini bertujuan untuk melihat pengaruh Jumlah Murid SMA dan Rasio Guru-Murid terhadap Tingkat Penyelesaian Pendidikan SMA (TPPS).\n")
##
## Model ini bertujuan untuk melihat pengaruh Jumlah Murid SMA dan Rasio Guru-Murid terhadap Tingkat Penyelesaian Pendidikan SMA (TPPS).
cat("\n1. *Koefisien Jumlah Murid (JMS)* =", coef(model_final)["`JMS(N+S)`"],
"\n Artinya: setiap penambahan 1 murid meningkatkan TPPS sebesar nilai tersebut.\n",
" Efeknya kecil, tetapi jika murid bertambah 10.000 orang, TPPS naik sekitar ",
round(coef(model_final)["`JMS(N+S)`"]*10000,3), " poin.\n")
##
## 1. *Koefisien Jumlah Murid (JMS)* = 4.517414e-05
## Artinya: setiap penambahan 1 murid meningkatkan TPPS sebesar nilai tersebut.
## Efeknya kecil, tetapi jika murid bertambah 10.000 orang, TPPS naik sekitar 0.452 poin.
cat("\n2. *Koefisien Rasio Guru-Murid (RGMPS)* =", coef(model_final)["RGMPS"],
"\n Artinya: peningkatan rasio guru-murid cenderung menurunkan TPPS.\n",
" Namun variabel ini tidak signifikan secara statistik.\n")
##
## 2. *Koefisien Rasio Guru-Murid (RGMPS)* = -1.283189
## Artinya: peningkatan rasio guru-murid cenderung menurunkan TPPS.
## Namun variabel ini tidak signifikan secara statistik.
cat("\n3. Nilai Adjusted R-squared =", round(summary(model_final)$adj.r.squared,4),
"\n Menunjukkan bahwa model hanya mampu menjelaskan sekitar",
round(summary(model_final)$adj.r.squared*100,2), "% variasi TPPS.\n")
##
## 3. Nilai Adjusted R-squared = 0.0313
## Menunjukkan bahwa model hanya mampu menjelaskan sekitar 3.13 % variasi TPPS.
cat("\n4. Hasil Uji F (p-value =", signif(summary(model_final)$fstatistic[3],4),
")\n -> Model tidak signifikan secara keseluruhan.\n")
##
## 4. Hasil Uji F (p-value = 35 )
## -> Model tidak signifikan secara keseluruhan.
cat("\n5. Nilai VIF:\n")
##
## 5. Nilai VIF:
print(vif(model_final))
## `JMS(N+S)` RGMPS
## 1.341394 1.341394
cat(" Semua VIF < 5 → tidak ada multikolinearitas.\n")
## Semua VIF < 5 → tidak ada multikolinearitas.
cat("\nKesimpulan Umum:\n")
##
## Kesimpulan Umum:
cat("- Jumlah Murid memiliki pengaruh positif dan marginal signifikan (α = 10%).\n")
## - Jumlah Murid memiliki pengaruh positif dan marginal signifikan (α = 10%).
cat("- Rasio Guru-Murid tidak signifikan.\n")
## - Rasio Guru-Murid tidak signifikan.
cat("- Model belum mampu menjelaskan variasi TPPS dengan baik.\n")
## - Model belum mampu menjelaskan variasi TPPS dengan baik.
cat("- Perlu ditambah variabel lain untuk memperkuat model.\n")
## - Perlu ditambah variabel lain untuk memperkuat model.
Model regresi linear bertujuan melihat pengaruh jumlah murid dan rasio guru-murid terhadap TPPS. Hasil menunjukkan bahwa: - JMS memiliki pengaruh positif namun tidak terlalu signifikan. - RGMPS tidak signifikan dan cenderung berpengaruh negatif. - Adjusted R-squared sangat rendah, sehingga model belum menjelaskan variasi TPPS dengan baik.
Artinya faktor lain di luar model kemungkinan lebih berpengaruh terhadap TPPS.
APDS$Kelompok_Rasio <- cut(APDS$RGMPS,
breaks = 3,
labels = c("Rendah", "Sedang", "Tinggi"))
table(APDS$Kelompok_Rasio)
##
## Rendah Sedang Tinggi
## 10 21 7
anova_model <- aov(TPPS ~ Kelompok_Rasio, data = APDS)
summary(anova_model)
## Df Sum Sq Mean Sq F value Pr(>F)
## Kelompok_Rasio 2 41 20.4 0.037 0.964
## Residuals 35 19230 549.4
boxplot(TPPS ~ Kelompok_Rasio, data = APDS,
main = "Boxplot TPPS Berdasarkan Kelompok Rasio Guru-Murid",
col = c("#6DECB9","#11999E","#3C3C3C"))
# Interpretasi ANOVA
ANOVA dilakukan untuk melihat apakah terdapat perbedaan nilai TPPS berdasarkan kategori Rasio Guru-Murid (Rendah, Sedang, Tinggi).
Berdasarkan output ANOVA:
Dari hasil perhitungan, p-value = 0.9635168.
Kesimpulan: Tidak terdapat perbedaan signifikan TPPS berdasarkan kelompok rasio guru-murid.
Berdasarkan seluruh analisis:
Korelasi antar variabel menunjukkan hubungan yang lemah hingga sedang, dengan JMS menjadi variabel yang paling terkait dengan TPPS.
ANOVA menunjukkan bahwa perbedaan rasio guru-murid tidak menghasilkan perbedaan signifikan dalam TPPS antar provinsi.
Model regresi logistik memiliki performa yang rendah (AUC < 0.7) sehingga belum efektif untuk klasifikasi jumlah murid.
Regresi linear berganda menunjukkan bahwa JMS dan RGMPS tidak memiliki pengaruh signifikan secara statistik terhadap TPPS. Model juga memiliki nilai R-squared rendah, menandakan banyak variabel lain yang memengaruhi TPPS.
Secara keseluruhan, faktor-faktor dalam dataset ini belum cukup kuat untuk menjelaskan variasi tingkat penyelesaian pendidikan SMA di Indonesia. Analisis tambahan dengan variabel lain mungkin diperlukan untuk hasil yang lebih akurat.