Data yang digunakan merupakan data IPM antarprovinsi di Indonesia yang berisi angka harapan hidup (AHH), rata-rata lama sekolah (RLS), dan harapan lama sekolah (HLS) pada tahun 2024 di Indonesia berdasarkan tiap provinsi.
Analisis dilakukan menggunakan metode K-Means untuk mengelompokkan provinsi-provinsi di Indonesia berdasarkan karakteristik IPM mereka. Dengan menerapkan clustering menggunakan metode K-Means sangat relevan untuk mengelompokkan provinsi berdasarkan kemiripan nilai ketiga indikator tersebut. Dengan pendekatan ini, pola pembangunan manusia antar wilayah dapat diidentifikasi secara lebih jelas, sehingga kebijakan pembangunan dapat difokuskan untuk mengurangi kesenjangan antarprovinsi dan meningkatkan kualitas hidup masyarakat secara merata.
Memuat packages yang dibutuhkan
library(car)
library(dplyr)
library(ggplot2)
library(factoextra)
library(reshape2)
library(RColorBrewer)
library(readxl)
library(tinytex)
Import dataset ke dalam Rstudio
#Import data IPM 2024
data <- read_excel("C:/Users/binta/Downloads/IPM 2024.xlsx")
data
## # A tibble: 39 × 5
## Provinsi RLS AHH HLS Pengeluaran
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 ACEH 9.95 70.5 14.4 10811
## 2 SUMATERA UTARA 10.2 70.3 13.5 11460
## 3 SUMATERA BARAT 9.72 70.4 14.3 11718
## 4 RIAU 9.69 72.6 13.4 11857
## 5 JAMBI 9.26 72.1 13.1 11621
## 6 SUMATERA SELATAN 8.98 71.0 12.6 12015
## 7 BENGKULU 9.4 70.2 13.8 11733
## 8 LAMPUNG 8.8 71.6 12.8 11258
## 9 KEP. BANGKA BELITUNG 8.78 71.5 12.5 13667
## 10 KEP. RIAU 10.6 71.3 13.3 15573
## # ℹ 29 more rows
Summary adalah untuk memberikan statistik deskriptif dasar dari suatu data atau objek statistik. Dalam Analisis kali ini, summary digunakan untuk mengetahui mean, median, modus, min., 1st quartile, 3rd quartile, dan max.
summary(data)
## Provinsi RLS AHH HLS
## Length:39 Min. : 5.100 Min. :64.75 Min. : 9.63
## Class :character 1st Qu.: 8.790 1st Qu.:68.96 1st Qu.:12.87
## Mode :character Median : 9.280 Median :70.97 Median :13.23
## Mean : 9.291 Mean :70.62 Mean :13.21
## 3rd Qu.: 9.910 3rd Qu.:72.33 3rd Qu.:13.71
## Max. :11.490 Max. :75.53 Max. :15.70
## Pengeluaran
## Min. : 5707
## 1st Qu.:10264
## Median :11621
## Mean :11611
## 3rd Qu.:12322
## Max. :19953
VIF digunakan untuk mendeteksi multikolinearitas antar variabel independen dalam model regresi linear, yang didalam model regresi tersebut akan mencari tahu pengaruh AHH dan HLS terhadap RLS.
model1 <- lm(RLS ~ AHH + HLS, data = data)
vif_values <- vif(model1)
# Ubah ke data frame
vif_df <- as.data.frame(vif_values)
vif_df$Variable <- rownames(vif_df)
# Rename kolom agar sesuai
colnames(vif_df) <- c("VIF", "Variable")
# Buat heatmap
ggplot(vif_df, aes(x = Variable, y = 1, fill = VIF)) +
geom_tile(color = "white") +
geom_text(aes(label = round(VIF, 2)), size = 6) +
scale_fill_gradient(low = "#E0F7FA", high = "#006064") +
theme_minimal() +
theme(
axis.title = element_blank(),
axis.text.y = element_blank(),
axis.ticks = element_blank()
) +
labs(title = "VIF Heatmap", fill = "VIF")
Standarisasi perlu dilakukan dikarenakan metode K-Means menggunakan jarak Euclidean untuk melihat kesamaan data. Berikut adalah hasil standarisasi dari data.
data_num <- data %>%
select(RLS, AHH, HLS)
data_scaled <- scale(data_num)
data_scaled
## RLS AHH HLS
## [1,] 0.581697283 -0.05099330 1.1707033611
## [2,] 0.784567604 -0.10965259 0.2779880021
## [3,] 0.378826963 -0.09073024 1.0814318252
## [4,] 0.352365617 0.73806865 0.2085545853
## [5,] -0.026913677 0.55641410 -0.0691790819
## [6,] -0.273886240 0.13444572 -0.5651320592
## [7,] 0.096572605 -0.16641963 0.5358835502
## [8,] -0.432654317 0.35205273 -0.4262652255
## [9,] -0.450295214 0.34637603 -0.7139179523
## [10,] 1.199128692 0.25176428 0.0597686921
## [11,] 1.940046383 1.34736829 0.2978261212
## [12,] -0.044554574 1.43441110 -0.4064271065
## [13,] -0.723729124 1.69553952 -0.3469127492
## [14,] 0.828669847 1.85827172 2.4701001614
## [15,] -0.529679253 0.67184043 0.2184736448
## [16,] 0.228879335 0.16850594 -0.1088553201
## [17,] 0.511133694 1.02947283 0.4069357762
## [18,] -0.697267778 -1.07469239 0.7640219198
## [19,] -0.714908675 -0.97818841 0.0200924539
## [20,] -0.891317649 0.37097508 -0.5254558210
## [21,] -0.106297715 -0.05477777 -0.4361842851
## [22,] -0.238604446 -0.34996642 -0.3369936896
## [23,] 0.819849398 1.67850940 0.8136172175
## [24,] 0.255340682 0.81565028 0.0002543349
## [25,] 0.643440424 0.80429687 -0.2378030942
## [26,] -0.009272779 -0.43700923 0.1292021089
## [27,] -0.062195472 0.32556144 0.3375023594
## [28,] 0.396467861 0.38989743 0.4962073121
## [29,] -0.573781496 -0.56000450 -0.0394219033
## [30,] -0.644345086 -1.62722499 -0.3171555706
## [31,] 1.013899270 -1.36798880 0.8731315748
## [32,] 0.361186066 -0.49188404 0.5358835502
## [33,] 0.511133694 -1.33203634 -0.0394219033
## [34,] 1.049181064 -1.04820110 0.6648313243
## [35,] 1.243230936 -0.69813764 0.5061263716
## [36,] -0.265065792 -1.56856570 -0.5353748805
## [37,] -2.752432325 -1.36609657 -3.5507689820
## [38,] -3.696220336 -2.21949451 -3.2135209575
## [39,] -0.062195472 0.62264232 0.0002543349
## attr(,"scaled:center")
## RLS AHH HLS
## 9.290513 70.619744 13.209744
## attr(,"scaled:scale")
## RLS AHH HLS
## 1.133729 2.642378 1.008160
Setelah dilakukan standarisasiy dilakukan pengecekan statistika deskriptif untuk memvalidasi data yang ada dengan mean mendekati 0 dan variansi mendekati 1.
summary(data_scaled)
## RLS AHH HLS
## Min. :-3.696220 Min. :-2.2195 Min. :-3.55077
## 1st Qu.:-0.441475 1st Qu.:-0.6291 1st Qu.:-0.34195
## Median :-0.009273 Median : 0.1344 Median : 0.02009
## Mean : 0.000000 Mean : 0.0000 Mean : 0.00000
## 3rd Qu.: 0.546415 3rd Qu.: 0.6472 3rd Qu.: 0.50117
## Max. : 1.940046 Max. : 1.8583 Max. : 2.47010
Interpretasi
fviz_nbclust(data_scaled, kmeans, method = "wss") +
labs(title = "Elbow Method") +
theme_minimal()
Interpretasi
fviz_nbclust(data_scaled, kmeans, method = "silhouette") +
labs(title = "Silhouette Method") +
theme_minimal()
Interpretasi
# Misalnya jumlah klaster optimal adalah 3
set.seed(123) # agar hasil bisa direproduksi
kmeans_result <- kmeans(data_scaled, centers = 2, nstart = 25)
data$cluster <- as.factor(kmeans_result$cluster)
fviz_cluster(kmeans_result, data = data_scaled,
geom = "point", ellipse.type = "convex",
palette = "jco", ggtheme = theme_minimal())
data %>%
group_by(cluster) %>%
summarise(across(c(RLS, AHH, HLS), mean, .names = "mean_{.col}"))
## # A tibble: 2 × 4
## cluster mean_RLS mean_AHH mean_HLS
## <fct> <dbl> <dbl> <dbl>
## 1 1 9.49 70.9 13.4
## 2 2 5.64 65.9 9.8
Interpretasi
data$cluster <- as.factor(kmeans_result$cluster)
data %>% select(Provinsi,RLS, AHH, HLS, cluster)
## # A tibble: 39 × 5
## Provinsi RLS AHH HLS cluster
## <chr> <dbl> <dbl> <dbl> <fct>
## 1 ACEH 9.95 70.5 14.4 1
## 2 SUMATERA UTARA 10.2 70.3 13.5 1
## 3 SUMATERA BARAT 9.72 70.4 14.3 1
## 4 RIAU 9.69 72.6 13.4 1
## 5 JAMBI 9.26 72.1 13.1 1
## 6 SUMATERA SELATAN 8.98 71.0 12.6 1
## 7 BENGKULU 9.4 70.2 13.8 1
## 8 LAMPUNG 8.8 71.6 12.8 1
## 9 KEP. BANGKA BELITUNG 8.78 71.5 12.5 1
## 10 KEP. RIAU 10.6 71.3 13.3 1
## # ℹ 29 more rows
Interpretasi
data %>%
count(cluster, name = "jumlah_provinsi")
## # A tibble: 2 × 2
## cluster jumlah_provinsi
## <fct> <int>
## 1 1 37
## 2 2 2