library(tidyverse)
## Warning: package 'ggplot2' was built under R version 4.3.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.3 ✔ readr 2.1.4
## ✔ forcats 1.0.0 ✔ stringr 1.5.0
## ✔ ggplot2 3.5.2 ✔ tibble 3.2.1
## ✔ lubridate 1.9.3 ✔ tidyr 1.3.0
## ✔ purrr 1.0.2
## ── 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(cluster)
## Warning: package 'cluster' was built under R version 4.3.3
library(factoextra)
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
getwd()
## [1] "/Users/nadhifanurf/Documents"
setwd("/Users/nadhifanurf/Documents")
soci_economic_indonesia <- read.csv("2021socio_economic_indonesia.csv", sep = ";")
data <- soci_economic_indonesia[, c(2:6)]
rownames(data) <- soci_economic_indonesia$Row.Labels
data
## Average.of.poorpeople_percentage Average.of.reg_gdp
## Aceh 15.693913 7.241043
## Bali 4.915556 25.056778
## Banten 6.643750 78.916125
## Bengkulu 14.929000 7.338900
## DI Yogyakarta 13.288000 27.678600
## DKI Jakarta 6.565000 465.185667
## Gorontalo 15.738333 6.981667
## Jambi 7.977273 18.886182
## Jawa Barat 8.969630 78.591111
## Jawa Tengah 11.392571 38.493371
## Jawa Timur 11.321842 60.618605
## Kalimantan Barat 7.467857 15.321000
## Kalimantan Selatan 5.036923 13.895462
## Kalimantan Tengah 5.071429 10.855214
## Kalimantan Timur 7.566000 60.943900
## Kalimantan Utara 7.196000 20.015600
## Kepulauan Bangka Belitung 5.070000 10.805429
## Kepulauan Riau 7.694286 36.033714
## Lampung 12.147333 23.978533
## Maluku 21.444545 4.260091
## Maluku Utara 8.029000 4.256400
## Nusa Tenggara Barat 14.279000 13.432500
## Nusa Tenggara Timur 21.748182 4.905318
## Papua 28.379310 6.902552
## Papua Barat 25.330000 160.716923
## Riau 8.342500 61.057083
## Sulawesi Barat 10.525000 7.678667
## Sulawesi Selatan 9.468333 21.090958
## Sulawesi Tengah 13.514615 15.202538
## Sulawesi Tenggara 13.065882 7.675235
## Sulawesi Utara 8.279333 8.854067
## Sumatera Barat 6.562632 12.730474
## Sumatera Selatan 13.214118 27.210353
## Sumatera Utara 11.085455 24.910121
## Average.of.life_exp Average.of.avg_schooltime
## Aceh 68.25674 9.503478
## Bali 72.67333 8.642222
## Banten 68.15563 8.907500
## Bengkulu 67.60450 8.612000
## DI Yogyakarta 74.56600 9.706000
## DKI Jakarta 73.13000 10.850000
## Gorontalo 67.98917 7.900000
## Jambi 69.97091 8.501818
## Jawa Barat 72.44852 8.657778
## Jawa Tengah 75.03057 7.979429
## Jawa Timur 71.66539 8.060789
## Kalimantan Barat 71.61393 7.303571
## Kalimantan Selatan 68.58462 8.280000
## Kalimantan Tengah 69.48714 8.641429
## Kalimantan Timur 73.19900 9.442000
## Kalimantan Utara 72.14700 9.108000
## Kepulauan Bangka Belitung 71.05429 8.095714
## Kepulauan Riau 68.83143 8.771429
## Lampung 69.25033 8.183333
## Maluku 64.59045 9.400000
## Maluku Utara 66.81350 8.820000
## Nusa Tenggara Barat 67.87400 7.915000
## Nusa Tenggara Timur 66.22773 7.627273
## Papua 65.21759 6.249310
## Papua Barat 65.55423 7.716923
## Riau 70.20083 9.050833
## Sulawesi Barat 66.27000 7.965000
## Sulawesi Selatan 69.52417 8.272083
## Sulawesi Tengah 68.19692 8.896923
## Sulawesi Tenggara 70.19471 8.715882
## Sulawesi Utara 69.89633 9.326667
## Sumatera Barat 70.28447 9.244211
## Sumatera Selatan 67.99824 8.221176
## Sumatera Utara 69.10212 9.180909
## Average.of.exp_percap
## Aceh 9642.783
## Bali 13704.667
## Banten 12124.125
## Bengkulu 10222.100
## DI Yogyakarta 13996.000
## DKI Jakarta 18522.667
## Gorontalo 10068.833
## Jambi 10453.182
## Jawa Barat 10762.963
## Jawa Tengah 11139.200
## Jawa Timur 11568.526
## Kalimantan Barat 9030.500
## Kalimantan Selatan 11942.462
## Kalimantan Tengah 11021.500
## Kalimantan Timur 12074.800
## Kalimantan Utara 9070.400
## Kepulauan Bangka Belitung 12920.714
## Kepulauan Riau 14049.143
## Lampung 9762.000
## Maluku 8763.545
## Maluku Utara 7955.800
## Nusa Tenggara Barat 10404.600
## Nusa Tenggara Timur 7455.227
## Papua 6819.793
## Papua Barat 7780.154
## Riau 10753.917
## Sulawesi Barat 9214.333
## Sulawesi Selatan 11016.042
## Sulawesi Tengah 9062.692
## Sulawesi Tenggara 9009.588
## Sulawesi Utara 10706.667
## Sumatera Barat 10712.316
## Sumatera Selatan 10512.353
## Sumatera Utara 10401.152
sum(is.na(data))
## [1] 0
Berdasarkan output di atas diperoleh informasi bahwa tidak ada missing value pada data sehingga proses selanjutnya dapat dilakukan.
str(data)
## 'data.frame': 34 obs. of 5 variables:
## $ Average.of.poorpeople_percentage: num 15.69 4.92 6.64 14.93 13.29 ...
## $ Average.of.reg_gdp : num 7.24 25.06 78.92 7.34 27.68 ...
## $ Average.of.life_exp : num 68.3 72.7 68.2 67.6 74.6 ...
## $ Average.of.avg_schooltime : num 9.5 8.64 8.91 8.61 9.71 ...
## $ Average.of.exp_percap : num 9643 13705 12124 10222 13996 ...
Berdasarkan output di atas diperoleh informasi bahwa seluruh data bertipe numerik sehingga proses selanjutnya dapat dilakukan.
datastandarisasi <- scale(data)
summary(datastandarisasi)
## Average.of.poorpeople_percentage Average.of.reg_gdp Average.of.life_exp
## Min. :-1.1202 Min. :-0.44968 Min. :-1.88236
## 1st Qu.:-0.6758 1st Qu.:-0.40397 1st Qu.:-0.58310
## Median :-0.2438 Median :-0.29166 Median :-0.05693
## Mean : 0.0000 Mean : 0.00000 Mean : 0.00000
## 3rd Qu.: 0.3532 3rd Qu.:-0.08451 3rd Qu.: 0.74734
## Max. : 2.9268 Max. : 5.21985 Max. : 2.10604
## Average.of.avg_schooltime Average.of.exp_percap
## Min. :-2.84117 Min. :-1.71857
## 1st Qu.:-0.62309 1st Qu.:-0.69688
## Median : 0.07431 Median :-0.08188
## Mean : 0.00000 Mean : 0.00000
## 3rd Qu.: 0.62497 3rd Qu.: 0.35530
## Max. : 2.76516 Max. : 3.51051
var(datastandarisasi)
## Average.of.poorpeople_percentage
## Average.of.poorpeople_percentage 1.00000000
## Average.of.reg_gdp -0.09030845
## Average.of.life_exp -0.59917595
## Average.of.avg_schooltime -0.43450234
## Average.of.exp_percap -0.58949283
## Average.of.reg_gdp Average.of.life_exp
## Average.of.poorpeople_percentage -0.09030845 -0.5991759
## Average.of.reg_gdp 1.00000000 0.2629138
## Average.of.life_exp 0.26291384 1.0000000
## Average.of.avg_schooltime 0.44401584 0.3762103
## Average.of.exp_percap 0.59961919 0.6215811
## Average.of.avg_schooltime
## Average.of.poorpeople_percentage -0.4345023
## Average.of.reg_gdp 0.4440158
## Average.of.life_exp 0.3762103
## Average.of.avg_schooltime 1.0000000
## Average.of.exp_percap 0.5858951
## Average.of.exp_percap
## Average.of.poorpeople_percentage -0.5894928
## Average.of.reg_gdp 0.5996192
## Average.of.life_exp 0.6215811
## Average.of.avg_schooltime 0.5858951
## Average.of.exp_percap 1.0000000
Standarisasi dilakukan karena terdapat perbedaan satuan variabel seperti variabel rata-rata lama sekolah memiliki satuan puluhan (00), sedangkan variabel pengeluaran perkapita memiliki satuan puluhan ribu (00.000), sehingga perbedaan tersebut akan membuat perhitungan jarak antar objek menjadi tidak valid. Berdasarkan output di atas telah diperoleh mean 0 dan standar deviasi 1.
distance <- get_dist(datastandarisasi)
fviz_dist(distance, gradient = list(low = "white", mid = "red", high = "darkblue"))
Berdasarkan output di atas diperoleh bahwa provinsi yang mempunyai jarak yang jauh ditunjukkan dengan warna biru yang semakin gelap, jarak menengah ditunjukkan dengan warna putih, dan jarak yang dekat ditunjukkan dengan warna merah yang semakin terang. Misalkan Provinsi Jakarta dengan Provinsi Papua berwarna biru tua yang menunjukkan bahwa kedua provinsi memiliki jarak yang sangat jauh, kemudian Provinsi Sulawesi Tengah dengan Provinsi Aceh berwarna merah muda yang menunjukkan bahwa kedua provinsi memiliki jarak yang sangat dekat. Semakin dekat jarak antara dua provinsi semakin besar kesamaannya.
fviz_nbclust(datastandarisasi, pam, method = "wss")
Pada metode Elbow banyaknya cluster didasarkan pada garis yang mengalami patahan berbentuk seperti siku (elbow). Berdasarkan output di atas diperoleh bahwa garis mengalami patahan yang membentuk elbow atau siku pada saat \(k=3\). Oleh karena itu, dengan menggunakan metode elbow diperoleh \(k\) optimal pada saat berada di \(k=3\).
fviz_nbclust(datastandarisasi, pam, method = "silhouette")
Metode silhouette menggunakan pendekatan nilai rata-rata untuk menduga \(k\) optimal dari cluster yang terbentuk. Semakin tinggi nilai rata-rata akan semakin baik. Berdasarkan output di atas dengan menggunakan metode silhouette diperoleh jumlah cluster optimal yang akan terbentuk pada saat \(k=3\).
set.seed(1)
gap_stat <- clusGap(datastandarisasi, FUN = pam, nstart = 25,
K.max = 10, B = 50)
fviz_gap_stat(gap_stat)
Sebelum melakukan syntax clusGap(), dijalankan terlebih dahulu fungsi set.seed(1) guna menghasilkan output yang sama setiap kali syntax tersebut dijalankan. Nilai K.max = 10 adalah jumlah maksimum cluster yang perlu dipertimbangkan, sedangkan nilai B = 10 adalah jumlah banyaknya sampel. Berdasarkan output di atas dengan menggunakan metode Gap Statistik diperoleh jumlah cluster optimal adalah \(k=3\). Berdasarkan ketiga metode, akan digunakan jumlah cluster optimal \(k=3\).
pam.result <- pam(datastandarisasi, 3)
print(pam.result)
## Medoids:
## ID Average.of.poorpeople_percentage Average.of.reg_gdp
## Bengkulu 4 0.6068911 -0.4117675
## Jambi 8 -0.5921387 -0.2697332
## DKI Jakarta 6 -0.8357267 5.2198538
## Average.of.life_exp Average.of.avg_schooltime Average.of.exp_percap
## Bengkulu -0.7309149 0.03796671 -0.19835356
## Jambi 0.1731155 -0.09629906 -0.09510137
## DKI Jakarta 1.3799711 2.76515711 3.51051310
## Clustering vector:
## Aceh Bali Banten
## 1 2 2
## Bengkulu DI Yogyakarta DKI Jakarta
## 1 2 3
## Gorontalo Jambi Jawa Barat
## 1 2 2
## Jawa Tengah Jawa Timur Kalimantan Barat
## 2 2 2
## Kalimantan Selatan Kalimantan Tengah Kalimantan Timur
## 2 2 2
## Kalimantan Utara Kepulauan Bangka Belitung Kepulauan Riau
## 2 2 2
## Lampung Maluku Maluku Utara
## 2 1 1
## Nusa Tenggara Barat Nusa Tenggara Timur Papua
## 1 1 1
## Papua Barat Riau Sulawesi Barat
## 1 2 1
## Sulawesi Selatan Sulawesi Tengah Sulawesi Tenggara
## 2 1 2
## Sulawesi Utara Sumatera Barat Sumatera Selatan
## 2 2 1
## Sumatera Utara
## 2
## Objective function:
## build swap
## 1.375007 1.335187
##
## Available components:
## [1] "medoids" "id.med" "clustering" "objective" "isolation"
## [6] "clusinfo" "silinfo" "diss" "call" "data"
fviz_cluster(pam.result, data = datastandarisasi)
Terbentuk 3 cluster, yaitu cluster 1 sebanyak 12 provinsi, cluster 2 sebanyak 21 provinsi, dan cluster 3 sebanyak 1 provinsi.
data%>%
mutate(Cluster = pam.result$cluster) %>%
group_by(Cluster)%>%
summarise_all("mean")
## # A tibble: 3 × 6
## Cluster Average.of.poorpeople_percent…¹ Average.of.reg_gdp Average.of.life_exp
## <int> <dbl> <dbl> <dbl>
## 1 1 16.9 22.2 66.9
## 2 2 8.50 31.3 70.9
## 3 3 6.56 465. 73.1
## # ℹ abbreviated name: ¹Average.of.poorpeople_percentage
## # ℹ 2 more variables: Average.of.avg_schooltime <dbl>,
## # Average.of.exp_percap <dbl>
Cluster 1 merupakan provinsi yang memiliki persentase penduduk miskin tertinggi dari cluster lain.
Cluster 2 merupakan provinsi yang memiliki persentase penduduk miskin tertinggi kedua setelah cluster 1 dan PDRB, angka harapan hidup, rata-rata lama sekolah, dan pengeluaran perkapita tertinggi kedua setelah cluster 3
Cluster 3 merupakan provinsi yang memiliki PDRB, angka harapan hidup, rata-rata lama sekolah, dan pengeluaran perkapita tertinggi dari cluster lain.
pam.result$cluster[pam.result$cluster==1]
## Aceh Bengkulu Gorontalo Maluku
## 1 1 1 1
## Maluku Utara Nusa Tenggara Barat Nusa Tenggara Timur Papua
## 1 1 1 1
## Papua Barat Sulawesi Barat Sulawesi Tengah Sumatera Selatan
## 1 1 1 1
Provinsi dengan tingkat sosial-ekonomi Indonesia pada tahun 2021 terendah adalah Aceh, Bengkulu, Gorontalo, Maluku, Maluku Utara, Nusa Tenggara Barat, Nusa Tenggara Timur, Papua, Papua Barat, Sulawesi Barat, Sulawesi Tengah, dan Sumatera Selatan.
pam.result$cluster[pam.result$cluster==2]
## Bali Banten DI Yogyakarta
## 2 2 2
## Jambi Jawa Barat Jawa Tengah
## 2 2 2
## Jawa Timur Kalimantan Barat Kalimantan Selatan
## 2 2 2
## Kalimantan Tengah Kalimantan Timur Kalimantan Utara
## 2 2 2
## Kepulauan Bangka Belitung Kepulauan Riau Lampung
## 2 2 2
## Riau Sulawesi Selatan Sulawesi Tenggara
## 2 2 2
## Sulawesi Utara Sumatera Barat Sumatera Utara
## 2 2 2
Provinsi dengan tingkat sosial-ekonomi Indonesia pada tahun 2021 tertinggi kedua adalah Bali, Banten, DI Yogyakarta, Jambi, Jawa Barat, Jawa Tengah, Jawa Timur, Kalimantan Barat, Kalimantan Selatan, Kalimantan Tengah, Kalimantan Timur, Kalimantan Utara, Kepulauan Bangka Belitung, Kepulauan Riau, Lampung, Riau, Sulawesi Selatan, Sulawesi Tenggara, Sulawesi Utara, Sumatera Barat, dan Sumatera Utara.
pam.result$cluster[pam.result$cluster==3]
## DKI Jakarta
## 3
Provinsi dengan tingkat sosial-ekonomi Indonesia pada tahun 2021 paling tinggi adalah Jakarta