ANALISIS KLUSTERISASI DATA KEMISKINAN KOTA/KABUPATEN DI INDONESIA MENGGUNAKAN ALGORITMA K-MEANS PADA TAHUN 2019 - 2022
Library dan Import Data
Introduction
Dalam penelitian studi kasus ini algoritma K-Means digunakan untuk klusterisasi kota-kota/kabupaten-kabupaten di Indonesia berdasarkan variabel-variabel yang secara langsung maupun tidak langsung berhubungan dengan kemiskinan. Tujuan dari klusterisasi ini adalah untuk melihat perbandingan klusterisasi kemiskinan di kota-kota dan kabupaten-kabupaten Indonesia sebelum wabah COVID-19, awal wabah, saat wabah, dan masa akhir wabah COVID-19. Klusterisasi ini membantu dalam menentukan kota-kota/kabupaten-kabupaten yang masih termasuk ke kluster miskin dari sebelum COVID-19 sampai selesai, menentukan kota-kota/kabupaten-kabupaten yang masuk ke dalam kategori miskin karena COVID-19, dan kota-kota/kabupaten-kabupaten yang keluar dari kluster termiskin.
Tahapan Penelitian (Flowchart)
Tahapan Penelitian
Data Set
Data yang digunakan berasal dari data publikasi Badan Pusat Statistik (BPS) di tahun 2019 – 2022 yang memiliki 11 variabel yang berkaitan dengan kemiskinan.
# import data
data2019 <- read.csv2("https://raw.githubusercontent.com/juliansalomo/dataset/main/DATA2019.csv")
head(data2019)## KOTKAB AHH GK HLS IPM P0 P1 P2 PPK RLS UHH
## 1 Simeulue 63.24 404739 13.51 65.70 18.99 3.05 0.71 7210 9.08 65.22
## 2 Aceh Singkil 65.34 450217 14.30 68.91 20.78 3.83 0.98 8715 8.52 67.36
## 3 Aceh Selatan 62.31 369107 14.41 66.90 13.09 1.58 0.31 8187 8.59 64.27
## 4 Aceh Tenggara 66.00 357015 13.99 69.36 13.43 2.37 0.66 8067 9.65 68.04
## 5 Aceh Timur 66.63 417715 13.02 67.39 14.47 1.89 0.40 8600 7.86 68.67
## 6 Aceh Tengah 66.79 468577 14.26 73.14 15.50 2.08 0.46 10782 9.69 68.82
## PDRB
## 1 2211886
## 2 2395412
## 3 5479426
## 4 4906917
## 5 10280800
## 6 7472446
data2020 <- read.csv2("https://raw.githubusercontent.com/juliansalomo/dataset/main/DATA2020.csv")
head(data2020)## KOTKAB AHH GK HLS IPM P0 P1 P2 PPK RLS UHH
## 1 Simeulue 63.30 444754 13.76 66.03 18.49 2.21 0.47 7085 9.34 65.26
## 2 Aceh Singkil 65.39 473983 14.31 68.94 20.20 3.55 1.03 8707 8.53 67.39
## 3 Aceh Selatan 62.40 405786 14.42 67.12 12.87 2.13 0.46 8089 8.87 64.35
## 4 Aceh Tenggara 66.11 392493 14.00 69.37 13.21 1.62 0.36 8020 9.66 68.14
## 5 Aceh Timur 66.72 440455 13.03 67.63 14.08 2.29 0.61 8489 8.15 68.72
## 6 Aceh Tengah 66.80 492227 14.27 73.24 15.08 2.89 0.95 10673 9.85 68.85
## PDRB
## 1 2274362
## 2 2422611
## 3 5530755
## 4 5058529
## 5 10605785
## 6 7387370
data2021 <- read.csv2("https://raw.githubusercontent.com/juliansalomo/dataset/main/DATA2021.csv")
head(data2021)## KOTKAB AHH GK HLS IPM P0 P1 P2 PPK RLS UHH
## 1 Simeulue 63.33 458896 13.90 66.41 18.98 2.37 0.50 7148 9.48 65.28
## 2 Aceh Singkil 65.40 487249 14.32 69.22 20.36 3.67 0.91 8776 8.68 67.43
## 3 Aceh Selatan 62.46 418689 14.60 67.44 13.18 1.69 0.40 8180 8.88 64.40
## 4 Aceh Tenggara 66.17 404725 14.01 69.44 13.41 2.51 0.71 8030 9.67 68.22
## 5 Aceh Timur 66.76 460422 13.04 67.83 14.45 2.31 0.54 8577 8.21 68.74
## 6 Aceh Tengah 66.80 505933 14.28 73.37 15.26 2.88 0.80 10780 9.86 68.86
## PDRB
## 1 2440961
## 2 2702914
## 3 5960868
## 4 5401589
## 5 11654830
## 6 7999948
data2022 <- read.csv2("https://raw.githubusercontent.com/juliansalomo/dataset/main/DATA2022.csv")
head(data2022)## KOTKAB AHH GK HLS IPM P0 P1 P2 PPK RLS UHH
## 1 Simeulue 63.52 493303 14.08 67.27 18.37 2.73 0.65 7371 9.73 65.48
## 2 Aceh Singkil 65.56 518951 14.34 69.62 19.18 3.18 0.74 8994 8.69 67.65
## 3 Aceh Selatan 62.68 446224 14.69 67.87 12.43 1.31 0.23 8353 8.89 64.64
## 4 Aceh Tenggara 66.39 430825 14.26 70.32 12.83 1.92 0.44 8222 9.92 68.48
## 5 Aceh Timur 66.92 491550 13.06 68.72 13.91 2.78 0.67 9127 8.32 68.94
## 6 Aceh Tengah 66.95 533810 14.61 73.95 14.50 2.41 0.59 10957 9.87 69.05
## PDRB
## 1 2650278
## 2 2984475
## 3 6426568
## 4 5813672
## 5 13008658
## 6 8827207
Data Cleaning & Preparation
Pembersihan dan persiapan data adalah langkah penting dalam setiap
proyek analisis data. Bagian ini akan memastikan bahwa dataset dari 2019
hingga 2022 bebas dari nilai yang hilang missing values dan
terstruktur dengan baik, sehingga memungkinkan analisis yang akurat dan
dapat diandalkan.
#check NA
any(is.na(data2019))## [1] FALSE
any(is.na(data2020))## [1] FALSE
any(is.na(data2021))## [1] FALSE
any(is.na(data2022))## [1] FALSE
#check structure
str(data2019)## 'data.frame': 514 obs. of 12 variables:
## $ KOTKAB: chr "Simeulue" "Aceh Singkil" "Aceh Selatan" "Aceh Tenggara" ...
## $ AHH : num 63.2 65.3 62.3 66 66.6 ...
## $ GK : int 404739 450217 369107 357015 417715 468577 471058 447563 462059 393198 ...
## $ HLS : num 13.5 14.3 14.4 14 13 ...
## $ IPM : num 65.7 68.9 66.9 69.4 67.4 ...
## $ P0 : num 19 20.8 13.1 13.4 14.5 ...
## $ P1 : num 3.05 3.83 1.58 2.37 1.89 2.08 3.53 2.56 2.99 1.77 ...
## $ P2 : num 0.71 0.98 0.31 0.66 0.4 0.46 0.97 0.69 0.71 0.4 ...
## $ PPK : int 7210 8715 8187 8067 8600 10782 9692 9661 9824 8889 ...
## $ RLS : num 9.08 8.52 8.59 9.65 7.86 ...
## $ UHH : num 65.2 67.4 64.3 68 68.7 ...
## $ PDRB : num 2211886 2395412 5479426 4906917 10280800 ...
str(data2020)## 'data.frame': 514 obs. of 12 variables:
## $ KOTKAB: chr "Simeulue" "Aceh Singkil" "Aceh Selatan" "Aceh Tenggara" ...
## $ AHH : num 63.3 65.4 62.4 66.1 66.7 ...
## $ GK : int 444754 473983 405786 392493 440455 492227 517264 477938 493145 410203 ...
## $ HLS : num 13.8 14.3 14.4 14 13 ...
## $ IPM : num 66 68.9 67.1 69.4 67.6 ...
## $ P0 : num 18.5 20.2 12.9 13.2 14.1 ...
## $ P1 : num 2.21 3.55 2.13 1.62 2.29 2.89 2.74 2.4 2.2 1.95 ...
## $ P2 : num 0.47 1.03 0.46 0.36 0.61 0.95 0.68 0.61 0.45 0.45 ...
## $ PPK : int 7085 8707 8089 8020 8489 10673 9516 9641 9816 8857 ...
## $ RLS : num 9.34 8.53 8.87 9.66 8.15 ...
## $ UHH : num 65.3 67.4 64.3 68.1 68.7 ...
## $ PDRB : num 2274362 2422611 5530755 5058529 10605785 ...
str(data2021)## 'data.frame': 514 obs. of 12 variables:
## $ KOTKAB: chr "Simeulue" "Aceh Singkil" "Aceh Selatan" "Aceh Tenggara" ...
## $ AHH : num 63.3 65.4 62.5 66.2 66.8 ...
## $ GK : int 458896 487249 418689 404725 460422 505933 533712 489498 504452 422685 ...
## $ HLS : num 13.9 14.3 14.6 14 13 ...
## $ IPM : num 66.4 69.2 67.4 69.4 67.8 ...
## $ P0 : num 19 20.4 13.2 13.4 14.4 ...
## $ P1 : num 2.37 3.67 1.69 2.51 2.31 2.88 3.82 2.32 3.04 2.07 ...
## $ P2 : num 0.5 0.91 0.4 0.71 0.54 0.8 1.09 0.58 0.84 0.4 ...
## $ PPK : int 7148 8776 8180 8030 8577 10780 9593 9644 9860 8867 ...
## $ RLS : num 9.48 8.68 8.88 9.67 8.21 ...
## $ UHH : num 65.3 67.4 64.4 68.2 68.7 ...
## $ PDRB : num 2440961 2702914 5960868 5401589 11654830 ...
str(data2022)## 'data.frame': 514 obs. of 12 variables:
## $ KOTKAB: chr "Simeulue" "Aceh Singkil" "Aceh Selatan" "Aceh Tenggara" ...
## $ AHH : num 63.5 65.6 62.7 66.4 66.9 ...
## $ GK : int 493303 518951 446224 430825 491550 533810 558638 519320 535713 451163 ...
## $ HLS : num 14.1 14.3 14.7 14.3 13.1 ...
## $ IPM : num 67.3 69.6 67.9 70.3 68.7 ...
## $ P0 : num 18.4 19.2 12.4 12.8 13.9 ...
## $ P1 : num 2.73 3.18 1.31 1.92 2.78 2.41 2.22 2.09 3.1 2.08 ...
## $ P2 : num 0.65 0.74 0.23 0.44 0.67 0.59 0.45 0.58 0.75 0.53 ...
## $ PPK : int 7371 8994 8353 8222 9127 10957 9775 9894 10211 9438 ...
## $ RLS : num 9.73 8.69 8.89 9.92 8.32 ...
## $ UHH : num 65.5 67.7 64.6 68.5 68.9 ...
## $ PDRB : num 2650278 2984475 6426568 5813672 13008658 ...
Multicollinearity Test
Multikolinearitas antara variabel prediktor dapat mengganggu hasil analisis regresi. Bagian ini melakukan uji Variance Inflation Factor (VIF) pada setiap dataset untuk mengidentifikasi dan mengatasi multikolinearitas, memastikan model stabil dan dapat diinterpretasikan.
#VIF Score Test
#2019
datavif2019 <- data2019[,-1]
datavif2019$y <- c(1:nrow(data2019))
model2019<-lm(y ~., data = datavif2019)
v1<-data.frame(vif(model2019))
#2020
datavif2020<-data2020[,-1]
datavif2020$y <- c(1:nrow(data2020))
model2020<-lm(y ~., data = datavif2020)
v2<-data.frame(vif(model2020))
#2021
datavif2021<-data2021[,-1]
datavif2021$y <- c(1:nrow(data2021))
model2021<-lm(y ~., data = datavif2021)
v3<-data.frame(vif(model2021))
#2022
datavif2022<-data2022[,-1]
datavif2022$y <- c(1:nrow(data2022))
model2022<-lm(y ~., data = datavif2022)
v4<-data.frame(vif(model2022))
data.frame(cbind(v1,v2,v3,v4)) ## vif.model2019. vif.model2020. vif.model2021. vif.model2022.
## AHH 609.160911 520.429083 472.70125 392.404949
## GK 1.609971 1.596692 1.55620 1.596193
## HLS 10.949908 10.189694 10.37441 10.657364
## IPM 130.600741 125.534431 135.43524 139.041474
## P0 30.238212 30.854435 22.77435 22.860614
## P1 133.148055 142.316915 97.46023 96.164777
## P2 54.973707 58.934084 44.83959 41.478741
## PPK 20.815776 21.445255 23.07187 23.131093
## RLS 15.984060 15.391304 16.07463 16.565673
## UHH 636.277900 547.304545 498.18085 415.828081
## PDRB 1.527960 1.533444 1.55801 1.553498
Dari tabel di atas, dapat dilihat variabel dengan nilai VIF tertinggi adalah Umur Harapan Hidup (UHH), sehingga variabel UHH dikeluarkan dari data.
#VIF Score Test
#2019
datavif2019<-datavif2019[,-10]
model2019<-lm(y ~., data = datavif2019)
v1<-data.frame(vif(model2019))
#2020
datavif2020<-datavif2020[,-10]
model2020<-lm(y ~., data = datavif2020)
v2<-data.frame(vif(model2020))
#2021
datavif2021<-datavif2021[,-10]
model2021<-lm(y ~., data = datavif2021)
v3<-data.frame(vif(model2021))
#2022
datavif2022<-datavif2022[,-10]
model2022<-lm(y ~., data = datavif2022)
v4<-data.frame(vif(model2022))
data.frame(cbind(v1,v2,v3,v4))## vif.model2019. vif.model2020. vif.model2021. vif.model2022.
## AHH 9.360513 9.063219 9.670079 9.971142
## GK 1.589146 1.567652 1.539841 1.581228
## HLS 10.665400 9.819720 10.042534 10.261236
## IPM 124.082402 118.438167 127.994462 130.990815
## P0 30.202091 30.722643 22.526128 22.701326
## P1 133.141738 142.116571 96.758533 95.814069
## P2 54.969879 58.841351 44.507554 41.300527
## PPK 20.317255 20.895480 22.420043 22.434112
## RLS 15.264170 14.702220 15.326874 15.767558
## PDRB 1.526607 1.533368 1.557952 1.553469
Dari Tabel di atas, dapat dilihat variabel dengan nilai VIF tertinggi adalah Indeks Kedalaman Kemiskinan (P1) untuk tahun 2019 dan 2020, dan Indeks Pembangunan Manusia (IPM) untuk tahun 2021 dan 2022, sehingga variabel P1 dikeluarkan dari data 2019 dan 2020, dan IPM akan dikeluarkan dari data 2021 dan 2022. Hasil pengujian ulang nilai VIF setelah mengeluarkan variabel P1 dan IPM terdapat pada Tabel berikut.
#VIF Score Test
#2019
datavif2019<-datavif2019[,-6]
model2019<-lm(y ~., data = datavif2019)
v1<-rownames_to_column(data.frame(vif(model2019)),"var")
#2020
datavif2020<-datavif2020[,-6]
model2020<-lm(y ~., data = datavif2020)
v2<-rownames_to_column(data.frame(vif(model2020)),"var")
#2021
datavif2021<-datavif2021[,-4]
model2021<-lm(y ~., data = datavif2021)
v3<-rownames_to_column(data.frame(vif(model2021)),"var")
#2022
datavif2022<-datavif2022[,-4]
model2022<-lm(y ~., data = datavif2022)
v4<-rownames_to_column(data.frame(vif(model2022)),"var")
v1 %>% full_join(v2, by = 'var')%>% full_join(v3, by = 'var')%>% full_join(v4, by = 'var')## var vif.model2019. vif.model2020. vif.model2021. vif.model2022.
## 1 AHH 9.357730 8.963242 1.614360 1.653961
## 2 GK 1.572245 1.567039 1.495076 1.533782
## 3 HLS 10.611554 9.754322 2.894266 2.853404
## 4 IPM 123.903135 117.231890 NA NA
## 5 P0 4.419885 4.592080 20.683614 21.706475
## 6 P2 2.734130 3.043412 42.171131 40.642987
## 7 PPK 20.314715 20.472106 3.458844 3.493466
## 8 RLS 15.261215 14.589985 3.887971 3.907663
## 9 PDRB 1.526217 1.533208 1.445400 1.450150
## 10 P1 NA NA 92.953319 94.891084
Dari Tabel di atas, dapat dilihat variabel dengan nilai VIF tertinggi adalah Indeks Pembangunan Manusia (IPM) untuk tahun 2019 dan 2020, dan Indeks Kedalaman Kemiskinan (P1) untuk tahun 2021 dan 2022, sehingga variabel IPM dikeluarkan dari data 2019 dan 2020, dan P1 dikeluarkan dari data 2021 dan 2022. Hasil pengujian ulang nilai VIF setelah mengeluarkan variabel P1 dan IPM terdapat pada Tabel di bawah.
#VIF Score Test
#2019
datavif2019<-datavif2019[,-4]
model2019<-lm(y ~., data = datavif2019)
v1<-rownames_to_column(data.frame(vif(model2019)),"var")
#2020
datavif2020<-datavif2020[,-4]
model2020<-lm(y ~., data = datavif2020)
v2<-rownames_to_column(data.frame(vif(model2020)),"var")
#2021
datavif2021<-datavif2021[,-5]
model2021<-lm(y ~., data = datavif2021)
v3<-rownames_to_column(data.frame(vif(model2021)),"var")
#2022
datavif2022<-datavif2022[,-5]
model2022<-lm(y ~., data = datavif2022)
v4<-rownames_to_column(data.frame(vif(model2022)),"var")
v1 %>% full_join(v2, by = 'var')%>% full_join(v3, by = 'var')%>% full_join(v4, by = 'var')## var vif.model2019. vif.model2020. vif.model2021. vif.model2022.
## 1 AHH 1.646312 1.611087 1.614227 1.652693
## 2 GK 1.542270 1.522620 1.480975 1.532910
## 3 HLS 2.898568 2.867352 2.894253 2.847064
## 4 P0 4.053101 4.277329 3.635735 3.968297
## 5 P2 2.713438 3.025343 2.299201 2.687676
## 6 PPK 3.529611 3.338804 3.441101 3.475850
## 7 RLS 3.837108 3.777963 3.836208 3.871524
## 8 PDRB 1.431771 1.432858 1.444330 1.450074
Dari Tabel di atas, semua VIF untuk tiap tahun sudah di bawah 10, sehingga gejala multikolinieritas untuk data penelitian telah diatasi, dan sudah tidak ada gejala multikolinieritas lagi.
Data Normalization
Sebelum melanjutkan proses klusterisasi, peneliti melakukan transformasi data menggunakan PCA untuk mengekstrak komponen-komponen penting atau principal component untuk mengurangi variabel yang tidak perlu.
Sebelum menerapkan PCA, peneliti perlu melakukan normalisasi data terlebih dahulu.
# Data after Removing Variables Detected with Multicollinearity
datascaled2019 <- datavif2019[,-9] %>% mutate_at(c(1:ncol(datavif2019[,-9])), list(~c(scale(.))))
datascaled2020 <- datavif2020[,-9] %>% mutate_at(c(1:ncol(datavif2020[,-9])), list(~c(scale(.))))
datascaled2021 <- datavif2021[,-9] %>% mutate_at(c(1:ncol(datavif2021[,-9])), list(~c(scale(.))))
datascaled2022 <- datavif2022[,-9] %>% mutate_at(c(1:ncol(datavif2022[,-9])), list(~c(scale(.))))Selain data tanpa gejala multikolinieritas, peneliti juga menggunakan data yang masih memiliki gejala multikolinieritas untuk membandingkan hasil klusterisasi yang lebih baik.
# Data with Multicollinearity Symptoms
datascaled2019X <- data2019[,-1] %>% mutate_at(c(1:ncol(data2019[,-1])), list(~c(scale(.))))
datascaled2020X <- data2020[,-1] %>% mutate_at(c(1:ncol(data2020[,-1])), list(~c(scale(.))))
datascaled2021X <- data2021[,-1] %>% mutate_at(c(1:ncol(data2021[,-1])), list(~c(scale(.))))
datascaled2022X <- data2022[,-1] %>% mutate_at(c(1:ncol(data2022[,-1])), list(~c(scale(.))))PCA Principal Component Analysis
Setelah dinormalisasi peneliti melanjutkan pemilihan jumlah komponen yang akan diambil atau diekstrak berdasarkan Tabel di bawah
# Data without Multicollinearity Symptoms
datapca2019 <- prcomp(datascaled2019)
datapca2020 <- prcomp(datascaled2020)
datapca2021 <- prcomp(datascaled2021)
datapca2022 <- prcomp(datascaled2022)
# Data with Multicollinearity Symptoms
datapca2019X <- prcomp(datascaled2019X)
datapca2020X <- prcomp(datascaled2020X)
datapca2021X <- prcomp(datascaled2021X)
datapca2022X <- prcomp(datascaled2022X)a <- cbind(Tahun=2019,summary(datapca2019)$importance%>%data.frame())
b <- cbind(Tahun=2020,summary(datapca2020)$importance%>%data.frame())
c <- cbind(Tahun=2021,summary(datapca2021)$importance%>%data.frame())
d <- cbind(Tahun=2022,summary(datapca2022)$importance%>%data.frame())
rbind(a,b,c,d)## Tahun PC1 PC2 PC3 PC4 PC5
## Standard deviation 2019 1.976898 1.179840 0.9783243 0.7763630 0.7314797
## Proportion of Variance 2019 0.488520 0.174000 0.1196400 0.0753400 0.0668800
## Cumulative Proportion 2019 0.488520 0.662520 0.7821600 0.8575000 0.9243800
## Standard deviation1 2020 1.967209 1.185989 0.9859026 0.7738675 0.7485962
## Proportion of Variance1 2020 0.483740 0.175820 0.1215000 0.0748600 0.0700500
## Cumulative Proportion1 2020 0.483740 0.659560 0.7810600 0.8559200 0.9259700
## Standard deviation2 2021 1.958563 1.160546 0.9869264 0.7932754 0.7518250
## Proportion of Variance2 2021 0.479500 0.168360 0.1217500 0.0786600 0.0706600
## Cumulative Proportion2 2021 0.479500 0.647850 0.7696100 0.8482700 0.9189200
## Standard deviation3 2022 1.965557 1.186083 0.9912827 0.7738107 0.7458124
## Proportion of Variance3 2022 0.482930 0.175850 0.1228300 0.0748500 0.0695300
## Cumulative Proportion3 2022 0.482930 0.658780 0.7816100 0.8564500 0.9259800
## PC6 PC7 PC8
## Standard deviation 0.5323218 0.4213806 0.3794789
## Proportion of Variance 0.0354200 0.0222000 0.0180000
## Cumulative Proportion 0.9598000 0.9820000 1.0000000
## Standard deviation1 0.5176301 0.4341814 0.3685019
## Proportion of Variance1 0.0334900 0.0235600 0.0169700
## Cumulative Proportion1 0.9594600 0.9830300 1.0000000
## Standard deviation2 0.5545195 0.4433964 0.3801603
## Proportion of Variance2 0.0384400 0.0245800 0.0180700
## Cumulative Proportion2 0.9573600 0.9819300 1.0000000
## Standard deviation3 0.5068357 0.4353078 0.3817790
## Proportion of Variance3 0.0321100 0.0236900 0.0182200
## Cumulative Proportion3 0.9580900 0.9817800 1.0000000
Melihat dari proportion of variance pada Tabel diatas, Principal Component Analysis, peneliti memilih 2 komponen pertama, yaitu PC1 dan PC2, karena peneliti melihat bahwa 2 komponen tersebut merupakan komponen paling penting dengan proportion of variance terbesar.
Selain itu peneliti juga melihat dari eigenvalue untuk menentukan jumlah komponen yang akan dipilih mengikuti Kaiser’s rule. Adapun eigenvalue untuk data PCA di atas terdapat pada Tabel berikut.
data.frame(ev2019 = get_eigenvalue(datapca2019)$eigenvalue,
ev2020 = get_eigenvalue(datapca2020)$eigenvalue,
ev2021 = get_eigenvalue(datapca2021)$eigenvalue,
ev2022 = get_eigenvalue(datapca2022)$eigenvalue) %>% t() %>% data.frame() %>% round(2)## X1 X2 X3 X4 X5 X6 X7 X8
## ev2019 3.91 1.39 0.96 0.60 0.54 0.28 0.18 0.14
## ev2020 3.87 1.41 0.97 0.60 0.56 0.27 0.19 0.14
## ev2021 3.84 1.35 0.97 0.63 0.57 0.31 0.20 0.14
## ev2022 3.86 1.41 0.98 0.60 0.56 0.26 0.19 0.15
Dari Tabel di atas, eigenvalue yang lebih besar dari 1 untuk setiap tahunnya adalah komponen pertama (PC1) dan komponen kedua (PC2), sehingga peneliti memilih 2 komponen pertama.
Selain data tanpa gejala multikolinieritas, peneliti juga menggunakan data yang masih memiliki gejala multikolinieritas untuk membandingkan hasil klusterisasi yang lebih baik. Adapun eigenvalue untuk data PCA dari data yang masih ada gejala multikolinieritas terdapat pada Tabel berikut.
a <- cbind(Tahun=2019,summary(datapca2019X)$importance%>%data.frame())
b <- cbind(Tahun=2020,summary(datapca2020X)$importance%>%data.frame())
c <- cbind(Tahun=2021,summary(datapca2021X)$importance%>%data.frame())
d <- cbind(Tahun=2022,summary(datapca2022X)$importance%>%data.frame())
rbind(a,b,c,d)## Tahun PC1 PC2 PC3 PC4 PC5
## Standard deviation 2019 2.451161 1.298372 1.077297 0.9398396 0.7897986
## Proportion of Variance 2019 0.546200 0.153250 0.105510 0.0803000 0.0567100
## Cumulative Proportion 2019 0.546200 0.699450 0.804960 0.8852600 0.9419600
## Standard deviation1 2020 2.439933 1.307624 1.080959 0.9540030 0.7945264
## Proportion of Variance1 2020 0.541210 0.155440 0.106220 0.0827400 0.0573900
## Cumulative Proportion1 2020 0.541210 0.696650 0.802880 0.8856100 0.9430000
## Standard deviation2 2021 2.430418 1.278533 1.083126 0.9668936 0.8150851
## Proportion of Variance2 2021 0.536990 0.148600 0.106650 0.0849900 0.0604000
## Cumulative Proportion2 2021 0.536990 0.685600 0.792250 0.8772400 0.9376400
## Standard deviation3 2022 2.441285 1.303753 1.081919 0.9526824 0.7957976
## Proportion of Variance3 2022 0.541810 0.154520 0.106410 0.0825100 0.0575700
## Cumulative Proportion3 2022 0.541810 0.696330 0.802740 0.8852500 0.9428300
## PC6 PC7 PC8 PC9 PC10
## Standard deviation 0.5497785 0.4218793 0.3829174 0.07773412 0.06839940
## Proportion of Variance 0.0274800 0.0161800 0.0133300 0.00055000 0.00043000
## Cumulative Proportion 0.9694400 0.9856200 0.9989500 0.99950000 0.99993000
## Standard deviation1 0.5374245 0.4346648 0.3708697 0.07981078 0.06612419
## Proportion of Variance1 0.0262600 0.0171800 0.0125000 0.00058000 0.00040000
## Cumulative Proportion1 0.9692600 0.9864300 0.9989400 0.99952000 0.99991000
## Standard deviation2 0.5709770 0.4456901 0.3842727 0.08784789 0.07032233
## Proportion of Variance2 0.0296400 0.0180600 0.0134200 0.00070000 0.00045000
## Cumulative Proportion2 0.9672700 0.9853300 0.9987600 0.99946000 0.99991000
## Standard deviation3 0.5262161 0.4361773 0.3849776 0.08370828 0.07283565
## Proportion of Variance3 0.0251700 0.0173000 0.0134700 0.00064000 0.00048000
## Cumulative Proportion3 0.9680000 0.9853000 0.9987700 0.99941000 0.99989000
## PC11
## Standard deviation 0.02833024
## Proportion of Variance 0.00007000
## Cumulative Proportion 1.00000000
## Standard deviation1 0.03057783
## Proportion of Variance1 0.00009000
## Cumulative Proportion1 1.00000000
## Standard deviation2 0.03205606
## Proportion of Variance2 0.00009000
## Cumulative Proportion2 1.00000000
## Standard deviation3 0.03513288
## Proportion of Variance3 0.00011000
## Cumulative Proportion3 1.00000000
data.frame(ev2019 = get_eigenvalue(datapca2019X)$eigenvalue,
ev2020 = get_eigenvalue(datapca2020X)$eigenvalue,
ev2021 = get_eigenvalue(datapca2021X)$eigenvalue,
ev2022 = get_eigenvalue(datapca2022X)$eigenvalue) %>% t() %>% data.frame() %>% round(2)## X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11
## ev2019 6.01 1.69 1.16 0.88 0.62 0.30 0.18 0.15 0.01 0.00 0
## ev2020 5.95 1.71 1.17 0.91 0.63 0.29 0.19 0.14 0.01 0.00 0
## ev2021 5.91 1.63 1.17 0.93 0.66 0.33 0.20 0.15 0.01 0.00 0
## ev2022 5.96 1.70 1.17 0.91 0.63 0.28 0.19 0.15 0.01 0.01 0
Dari Tabel di atas, eigenvalue yang lebih besar dari 1 untuk setiap tahunnya adalah komponen pertama (PC1) sampai komponen ketiga (PC3), sehingga peneliti memilih 3 komponen pertama.
#Optimizing PCA Selection and Data Finalization for Data without Multicollinearity Symptoms
datafinal2019 <- data.frame(datapca2019$x[,1:2])
datafinal2020 <- data.frame(datapca2020$x[,1:2])
datafinal2021 <- data.frame(datapca2021$x[,1:2])
datafinal2022 <- data.frame(datapca2022$x[,1:2])
rownames(datafinal2019) <- data2019$KOTKAB
rownames(datafinal2020) <- data2020$KOTKAB
rownames(datafinal2021) <- data2021$KOTKAB
rownames(datafinal2022) <- data2022$KOTKAB
#Optimizing PCA Selection and Data Finalization for Data with Multicollinearity Symptoms
datafinal2019X <- data.frame(datapca2019X$x[,1:3])
datafinal2020X <- data.frame(datapca2020X$x[,1:3])
datafinal2021X <- data.frame(datapca2021X$x[,1:3])
datafinal2022X <- data.frame(datapca2022X$x[,1:3])
rownames(datafinal2019X) <- data2019$KOTKAB
rownames(datafinal2020X) <- data2020$KOTKAB
rownames(datafinal2021X) <- data2021$KOTKAB
rownames(datafinal2022X) <- data2022$KOTKABData Clustering
Data Optimum Cluster Selection
Untuk penentuan jumlah kluster peneliti menggunakan bantuan 3 metode yang dapat membantu penentuan jumlah kluster, yaitu Metode Elbow, Metode Silhouette, dan Metode Gap Statistic
Elbow Method
Hasil jumlah kluster optimal data tanpa gejala multikolinieritas, berdasarkan 8 variabel menggunakan metode elbow dapat dilihat pada Gambar berikut
#Elbow Method for Cluster Number Selection in Data without Multicollinearity Symptoms
e1 <- fviz_nbclust(datafinal2019, kmeans, method = "wss") +
labs(subtitle = "Elbow Method 2019")
e2 <- fviz_nbclust(datafinal2020, kmeans, method = "wss") +
labs(subtitle = "Elbow Method 2020")
e3 <- fviz_nbclust(datafinal2021, kmeans, method = "wss") +
labs(subtitle = "Elbow Method 2021")
e4 <- fviz_nbclust(datafinal2022, kmeans, method = "wss") +
labs(subtitle = "Elbow Method 2022")
grid.arrange(e1, e2, e3, e4, nrow = 2)Elbow Method for Cluster Number Selection in Data without Multicollinearity Symptoms
Dari Gambar di atas, terlihat adanya lekukan tepat setelah kluster 3 yang membentuk bentuk elbow atau siku, sehingga berdasarkan metode elbow jumlah kluster optimal untuk data tanpa gejala multikolinieritas adalah 3 kluster.
Selanjutnya untuk data dengan gejala multikolinieritas, berdasarkan 11 variabel yang ada, hasil jumlah kluster optimal menggunakan metode elbow dapat dilihat pada Gambar berikut.
#Elbow Method for Cluster Number Selection in Data with Multicollinearity Symptoms
e1x <- fviz_nbclust(datafinal2019X, kmeans, method = "wss") +
labs(subtitle = "Elbow Method 2019")
e2x <- fviz_nbclust(datafinal2020X, kmeans, method = "wss") +
labs(subtitle = "Elbow Method 2020")
e3x <- fviz_nbclust(datafinal2021X, kmeans, method = "wss") +
labs(subtitle = "Elbow Method 2021")
e4x <- fviz_nbclust(datafinal2022X, kmeans, method = "wss") +
labs(subtitle = "Elbow Method 2022")
grid.arrange(e1x, e2x, e3x, e4x, nrow = 2)Elbow Method for Cluster Number Selection in Data with Multicollinearity Symptoms
Dari Gambar di atas, terlihat adanya lekukan tepat setelah kluster 3 yang membentuk bentuk elbow atau siku, sehingga berdasarkan metode elbow jumlah kluster optimal untuk data dengan gejala multikolinieritas adalah 3 kluster.
Silhouette Method
Hasil jumlah kluster optimal untuk data tanpa gejala multikolinieritas menggunakan metode Silhouette dapat dilihat pada Gambar berikut.
#Silhouette Method for Cluster Number Selection in Data without Multicollinearity Symptoms
s1<- fviz_nbclust(datafinal2019, kmeans, method = "silhouette") +
labs(subtitle = "Silhouette Method 2019")
s2<-fviz_nbclust(datafinal2020, kmeans, method = "silhouette") +
labs(subtitle = "Silhouette Method 2020")
s3<-fviz_nbclust(datafinal2021, kmeans, method = "silhouette") +
labs(subtitle = "Silhouette Method 2021")
s4 <- fviz_nbclust(datafinal2022, kmeans, method = "silhouette") +
labs(subtitle = "Silhouette Method 2022")
grid.arrange(s1, s2, s3, s4, nrow = 2)Silhouette Method for Cluster Number Selection in Data without Multicollinearity Symptoms
Dari Gambar di atas, terlihat bahwa jumlah kluster optimal untuk tahun 2019 sampai 2021 adalah 3 kluster, sedangkan untuk tahun 2022 adalah 2 kluster. Tapi karena di sini peneliti ingin membandingkan hasil kluster dari keempat tahun, maka peneliti memilih jumlah kluster yang sama. Dan berdasarkan Gambar di atas, jumlah kluster 2 dan 3 di tahun 2022 memiliki nilai indeks silhouette yang tidak berbeda jauh, sehingga berdasarkan metode silhouette jumlah kluster optimal untuk data tanpa gejala multikolinieritas adalah 3 kluster.
Selanjutnya untuk data dengan gejala multikolinieritas, berdasarkan 11 variabel yang ada, hasil jumlah kluster optimal menggunakan metode silhouette dapat dilihat pada Gambar berikut.
#Silhouette Method for Cluster Number Selection in Data with Multicollinearity Symptoms
s1X<- fviz_nbclust(datafinal2019X, kmeans, method = "silhouette") +
labs(subtitle = "Silhouette Method 2019")
s2X<-fviz_nbclust(datafinal2020X, kmeans, method = "silhouette") +
labs(subtitle = "Silhouette Method 2020")
s3X<-fviz_nbclust(datafinal2021X, kmeans, method = "silhouette") +
labs(subtitle = "Silhouette Method 2021")
s4X <- fviz_nbclust(datafinal2022X, kmeans, method = "silhouette") +
labs(subtitle = "Silhouette Method 2022")
grid.arrange(s1X, s2X, s3X, s4X, nrow = 2)Silhouette Method for Cluster Number Selection in Data with Multicollinearity Symptoms
Dari Gambar di atas, terlihat bahwa jumlah kluster optimal untuk tahun 2019 sampai 2021 adalah 3 kluster, sedangkan untuk tahun 2022 adalah 2 kluster. Tapi karena di sini peneliti ingin membandingkan hasil kluster dari keempat tahun, maka peneliti memilih jumlah kluster yang sama. Dan berdasarkan Gambar di atas jumlah kluster 2 dan 3 di tahun 2022 memiliki nilai indeks silhouette yang tidak berbeda jauh, sehingga berdasarkan metode silhouette jumlah kluster optimal untuk data dengan gejala multikolinieritas adalah 3 kluster.
Gap Statistic Method
Hasil jumlah kluster optimal untuk data tanpa gejala multikolinieritas menggunakan metode Gap Statistic dapat dilihat pada Gambar berikut.
#Gap Statistic Method for Cluster Number Selection in Data without Multicollinearity Symptoms
gs1 <- fviz_nbclust(datafinal2019, kmeans, method = "gap_stat")+
labs(subtitle = "Gap Statistic Method 2019")
gs2 <- fviz_nbclust(datafinal2020, kmeans, method = "gap_stat")+
labs(subtitle = "Gap Statistic Method 2020")
gs3 <- fviz_nbclust(datafinal2021, kmeans, method = "gap_stat")+
labs(subtitle = "Gap Statistic Method 2021")
gs4 <- fviz_nbclust(datafinal2022, kmeans, method = "gap_stat")+
labs(subtitle = "Gap Statistic Method 2022")
grid.arrange(gs1, gs2, gs3, gs4, nrow = 2)Gap Statistic Method for Cluster Number Selection in Data without Multicollinearity Symptoms
Dari Gambar di atas, terlihat bahwa jumlah kluster optimal untuk tahun 2019 sampai tahun 2022 adalah 1 kluster, sehingga berdasarkan metode gap statistic jumlah kluster optimal untuk data tanpa gejala multikolinieritas adalah 1 kluster.
Selanjutnya untuk data dengan gejala multikolinieritas, berdasarkan 11 variabel yang ada, hasil jumlah kluster optimal menggunakan metode gap statistic dapat dilihat pada Gambar berikut.
#Gap Statistic Method for Cluster Number Selection in Data with Multicollinearity Symptoms
gs1X <- fviz_nbclust(datafinal2019X, kmeans, method = "gap_stat")+
labs(subtitle = "Gap Statistic Method 2019")
gs2X <- fviz_nbclust(datafinal2020X, kmeans, method = "gap_stat")+
labs(subtitle = "Gap Statistic Method 2020")
gs3X <- fviz_nbclust(datafinal2021X, kmeans, method = "gap_stat")+
labs(subtitle = "Gap Statistic Method 2021")
gs4X <- fviz_nbclust(datafinal2022X, kmeans, method = "gap_stat")+
labs(subtitle = "Gap Statistic Method 2022")## Warning: did not converge in 10 iterations
grid.arrange(gs1X, gs2X, gs3X, gs4X, nrow = 2)Gap Statistic Method for Cluster Number Selection in Data with Multicollinearity Symptoms
Dari Gambar di atas, terlihat bahwa jumlah kluster optimal untuk tahun 2019 sampai tahun 2022 adalah 1 kluster, sehingga berdasarkan metode gap statistic jumlah kluster optimal untuk data dengan gejala multikolinieritas adalah 1 kluster.
Karena Elbow dan Silhoutte menunjukkan jumlah kluster optimum adalah 3, dan hanya Gap Statistic yang memiliki hasil berbeda, Maka kita memutuskan jumlah kluster optimum adalah 3
K-Means Clustering
Untuk mengetahui seberapa baik hasil klusterisasi k-means terhadap data yang digunakan, maka perlu memeriksa plot silhouette dari hasil klusterisasi. Gambar berikut adalah plot silhouette untuk data tanpa gejala multikolinieritas.
# K-Means Clustering in data without Multicollinearity Symptoms
km2019 <- eclust(datafinal2019, k=3, FUNcluster="kmeans", hc_metric="euclidean", graph=F)
km2020 <- eclust(datafinal2020, k=3, FUNcluster="kmeans", hc_metric="euclidean", graph=F)
km2021 <- eclust(datafinal2021, k=3, FUNcluster="kmeans", hc_metric="euclidean", graph=F)
km2022 <- eclust(datafinal2022, k=3, FUNcluster="kmeans", hc_metric="euclidean", graph=F)
km2019$cluster <- c("1"="2", "2" = "3", "3" = "1")[as.factor(km2019$cluster)]%>%as.integer()
km2020$cluster <- c("1"="2", "2" = "3", "3" = "1")[as.factor(km2020$cluster)]%>%as.integer()
km2021$cluster <- c("1"="2", "2" = "3", "3" = "1")[as.factor(km2021$cluster)]%>%as.integer()
km2022$cluster <- c("1"="2", "2" = "3", "3" = "1")[as.factor(km2022$cluster)]%>%as.integer()
grid.arrange(fviz_silhouette(km2019, print.summary = F)+ labs(subtitle = "2019: 3 Clusters without Multicollinearity Symptoms"),
fviz_silhouette(km2020, print.summary = F)+ labs(subtitle = "2020: 3 Clusters without Multicollinearity Symptoms"),
fviz_silhouette(km2021, print.summary = F)+ labs(subtitle = "2021: 3 Clusters without Multicollinearity Symptoms"),
fviz_silhouette(km2022, print.summary = F)+ labs(subtitle = "2022: 3 Clusters without Multicollinearity Symptoms"),nrow = 2)K-Means Clustering in data without Multicollinearity Symptoms
Dari Gambar di atas, dapat dilihat kluster di tahun 2019 sampai 2022 memiliki nilai di atas nilai rata-rata, lalu hanya ada sedikit dari hasil kluster yang memiliki nilai negatif. Selain itu nilai rata-rata dari setiap tahun berada di atas 0,5, yang mana jika dibulatkan lebih mendekati nilai 1 dibanding 0, sehingga dapat dikatakan data terbagi dengan baik.
Selanjutnya Gambar berikut adalah plot silhouette untuk data dengan gejala multikolinieritas.
# K-Means Clustering in data with Multicollinearity Symptoms
km2019X <- eclust(datafinal2019X, k=3, FUNcluster="kmeans", hc_metric="euclidean", graph=F)
km2020X <- eclust(datafinal2020X, k=3, FUNcluster="kmeans", hc_metric="euclidean", graph=F)
km2021X <- eclust(datafinal2021X, k=3, FUNcluster="kmeans", hc_metric="euclidean", graph=F)
km2022X <- eclust(datafinal2022X, k=3, FUNcluster="kmeans", hc_metric="euclidean", graph=F)
km2019X$cluster <- c("1"="2", "2" = "3", "3" = "1")[as.factor(km2019X$cluster)]%>%as.integer()
km2020X$cluster <- c("1"="2", "2" = "3", "3" = "1")[as.factor(km2020X$cluster)]%>%as.integer()
km2021X$cluster <- c("1"="2", "2" = "3", "3" = "1")[as.factor(km2021X$cluster)]%>%as.integer()
km2022X$cluster <- c("1"="2", "2" = "3", "3" = "1")[as.factor(km2022X$cluster)]%>%as.integer()
grid.arrange(fviz_silhouette(km2019X, print.summary = F)+ labs(subtitle = "2019: 3 Clusters with Multicollinearity Symptoms"),
fviz_silhouette(km2020X, print.summary = F)+ labs(subtitle = "2020: 3 Clusters with Multicollinearity Symptoms"),
fviz_silhouette(km2021X, print.summary = F)+ labs(subtitle = "2021: 3 Clusters with Multicollinearity Symptoms"),
fviz_silhouette(km2022X, print.summary = F)+ labs(subtitle = "2022: 3 Clusters with Multicollinearity Symptoms"),nrow = 2)K-Means Clustering in data with Multicollinearity Symptoms
Dari Gambar di atas, dapat dilihat kluster di tahun 2019 sampai 2022 memiliki nilai di atas nilai rata-rata, lalu hanya ada sedikit dari hasil kluster yang memiliki nilai negatif. Namun nilai rata-rata dari setiap tahun berada di bawah 0,5, yang mana jika dibulatkan lebih mendekati nilai 0 dibanding 1, sehingga dapat dikatakan data terbagi kurang baik.
Menggunakan algoritma K-Means dengan jumlah kluster 3, Gambar berikut adalah plot hasil kluster dari data tanpa gejala multikolinieritas.
# Cluster Plot in data with Multicollinearity Symptoms
clusterkm2019 <- fviz_cluster(km2019, data = datafinal2019, labelsize = 0) +
labs(subtitle = "K-Means With PCA & K-Value = 3 in 2019")
clusterkm2020 <- fviz_cluster(km2020, data = datafinal2020, labelsize = 0) +
labs(subtitle = "K-Means With PCA & K-Value = 3 in 2020")
clusterkm2021 <- fviz_cluster(km2021, data = datafinal2021, labelsize = 0) +
labs(subtitle = "K-Means With PCA & K-Value = 3 in 2021")
clusterkm2022 <- fviz_cluster(km2022, data = datafinal2022, labelsize = 0) +
labs(subtitle = "K-Means With PCA & K-Value = 3 in 2022")
plot<-grid.arrange(clusterkm2019, clusterkm2020, clusterkm2021, clusterkm2022, nrow=2)Cluster Plot in data without Multicollinearity Symptoms
Dari plot kluster di Gambar di atas, dapat dilihat bahwa tiap kluster terbagi dengan jelas. Selanjutnya plot hasil kluster untuk data dengan gejala multikolinieritas dapat dilihat pada Gambar berikut.
# Cluster Plot in data with Multicollinearity Symptoms
clusterkm2019 <- fviz_cluster(km2019X, data = datafinal2019, labelsize = 0) +
labs(subtitle = "K-Means With PCA & K-Value = 3 in 2019")
clusterkm2020 <- fviz_cluster(km2020X, data = datafinal2020, labelsize = 0) +
labs(subtitle = "K-Means With PCA & K-Value = 3 in 2020")
clusterkm2021 <- fviz_cluster(km2021X, data = datafinal2021, labelsize = 0) +
labs(subtitle = "K-Means With PCA & K-Value = 3 in 2021")
clusterkm2022 <- fviz_cluster(km2022X, data = datafinal2022, labelsize = 0) +
labs(subtitle = "K-Means With PCA & K-Value = 3 in 2022")
grid.arrange(clusterkm2019, clusterkm2020, clusterkm2021, clusterkm2022, nrow=2)Cluster Plot in data with Multicollinearity Symptoms
Dari plot kluster di Gambar 4.10, dapat dilihat bahwa tiap kluster terbagi dengan buruk. Di tahun 2019 dan 2021 hasil kluster ketiga kluster saling bertumpukan, di tahun 2020 dan 2022 ada irisan antara kluster 1 dengan 2 dan 2 dengan 2. Maka dengan ini data dengan gejala multikolinieritas tidak akan dianalisis lebih lanjut, dan penelitian akan fokus dengan data tanpa gejala multikolinieritas.
Data Profile
Tabel berikut adalah ringkasan data hasil klusterisasi.
#Assign into new object
dataprofile2019 <- data2019
dataprofile2020 <- data2020
dataprofile2021 <- data2021
dataprofile2022 <- data2022
#Assign cluster result into the new object
dataprofile2019$cluster <- km2019$cluster
dataprofile2020$cluster <- km2020$cluster
dataprofile2021$cluster <- km2021$cluster
dataprofile2022$cluster <- km2022$cluster
#Print cluster summary
rbind(data.frame(Tahun=2019,dataprofile2019[,-1] %>%
group_by(cluster) %>%
summarise_all(mean)),
data.frame(Tahun=2020,dataprofile2020[,-1] %>%
group_by(cluster) %>%
summarise_all(mean)),
data.frame(Tahun=2021,dataprofile2021[,-1] %>%
group_by(cluster) %>%
summarise_all(mean)),
data.frame(Tahun=2022,dataprofile2022[,-1] %>%
group_by(cluster) %>%
summarise_all(mean))) %>% round(2)## Tahun cluster AHH GK HLS IPM P0 P1 P2 PPK RLS
## 1 2019 1 70.57 512287.9 14.06 77.70 6.55 0.98 0.24 13871.60 10.20
## 2 2019 2 66.95 376294.9 12.75 68.30 11.63 1.78 0.43 9769.85 7.86
## 3 2019 3 62.21 475376.5 10.55 56.03 32.55 8.19 2.98 6413.33 5.59
## 4 2020 1 70.83 550931.2 14.20 78.13 6.43 0.96 0.24 13820.97 10.40
## 5 2020 2 67.18 405488.0 12.83 68.58 11.65 1.77 0.42 9665.83 8.03
## 6 2020 3 62.35 507387.5 10.57 55.62 31.99 7.89 2.77 6078.18 5.63
## 7 2021 1 70.99 577015.6 14.29 78.60 6.80 1.00 0.25 13975.57 10.57
## 8 2021 2 67.38 423560.3 12.90 69.00 11.69 1.83 0.45 9790.05 8.12
## 9 2021 3 62.51 512906.7 10.97 56.98 31.34 6.99 2.41 6216.25 6.06
## 10 2022 1 71.14 610589.2 14.31 79.06 6.43 0.99 0.25 14296.97 10.65
## 11 2022 2 67.58 449343.0 12.97 69.61 11.08 1.71 0.42 10085.78 8.22
## 12 2022 3 62.88 553122.9 11.07 57.86 30.69 6.91 2.35 6427.27 6.22
## UHH PDRB
## 1 72.51 82901971
## 2 68.94 17972485
## 3 64.15 4127070
## 4 72.73 86586677
## 5 69.16 18122001
## 6 64.26 3450694
## 7 72.88 92567657
## 8 69.36 20432609
## 9 64.42 3695297
## 10 73.07 101592981
## 11 69.60 23112767
## 12 64.86 3978529
Dari Tabel di atas, dapat dilihat bahwa kluster pertama merupakan kluster dengan tingkat kemiskinan terendah karena memiliki nilai tertinggi dalam pendapatan domestik regional bruto, pendapatan per kapita, indeks pembangunan manusia, garis kemiskinan, angka harapan hidup, umur harapan hidup, harapan lama sekolah dan rata-rata lama sekolah dan memiliki nilai terendah dalam persentase penduduk miskin, kedalaman kemiskinan dan keparahan kemiskinan.
Sebaliknya, kluster ketiga merupakan kluster dengan tingkat kemiskinan tertinggi karena memiliki nilai kebalikan dari kluster pertama, sehingga kluster kedua merupakan kluster dengan tingkat kemiskinan sedang.
Untuk ringkasan jumlah kota/kabupaten tiap kluster pada tahun 2019 sampai 2022 terdapat pada Tabel berikut.
c2019 <- dataprofile2019 %>% count(cluster, name = 'c2019')
c2020 <- dataprofile2020 %>% count(cluster, name = 'c2020')
c2021 <- dataprofile2021 %>% count(cluster, name = 'c2021')
c2022 <- dataprofile2022 %>% count(cluster, name = 'c2022')
df<-c2019 %>% full_join(c2020, by = 'cluster') %>% full_join(c2021, by = 'cluster') %>% full_join(c2022, by = 'cluster')
df%>%
pivot_longer(cols=c(-cluster),names_to="Year")%>%
pivot_wider(names_from=c(cluster))## # A tibble: 4 × 4
## Year `1` `2` `3`
## <chr> <int> <int> <int>
## 1 c2019 114 364 36
## 2 c2020 103 377 34
## 3 c2021 100 374 40
## 4 c2022 103 371 40
Dari Tabel 4.17, dapat dilihat bahwa dari tahun 2019 ke tahun 2020 adanya penurunan kota/kabupaten di kluster 1 dan kluster 3, sebaliknya ada penambahan di kluster 2 yang menandakan adanya kota/kabupaten yang mengalami perkembangan dan ada yang mengalami penurunan. Selanjutnya dari tahun 2020 ke tahun 2021, terjadi penurunan jumlah kota/kabupaten di kluster 1 dan 2, dan ada penambahan jumlah kluster di kluster 3 yang menandakan dari tahun 2020 ke 2021 diduga beberapa kota/kabupaten terkena dampak dari wabah COVID-19 yang menyebabkan mereka mengelami penurunan dan berpindah kluster dari kluster 1 ke kluster 2, dari kluster 2 ke kluster 3. Dan yang terakhir dari tahun 2021 ke tahun 2022, terjadi penambahan di kluster 1 dan pengurangan di kluster 2 yang menandakan adanya kota/kabupaten yang mengalami perkembangan. Jika dilihat dari awal periode ke akhir periode, maka dapat dilihat bahwa ada kota/kabupaten yang mengalami penurunan, karena kluster 1, kluster dengan tingkat kemiskinan terendah yang awalnya berisi 114 kota/kabupaten, menurun menjadi 103 kota/kabupaten. Sebaliknya kluster 2 dan 3 mengalami kenaikan dari 364 dan 36 kota/kabupaten menjadi 371 dan 40 kota/kabupaten.
Selanjutnya peneliti meneliti kota/kabupaten yang mengalami penurunan dan yang mengalami perkembangan di masa COVID-19. Adapun kota/kabupaten yang mengalami penurunan di akhir masa COVID-19 (2022) berdasarkan masa sebelum COVID-19 (2019) terdapat pada Tabel berikut.
cluster_2019_to_2022 <- data.frame(KOTKAB = data2019$KOTKAB,
c2019 = dataprofile2019$cluster,
c2020 = dataprofile2020$cluster,
c2021 = dataprofile2021$cluster,
c2022 = dataprofile2022$cluster)
#Mengalami penurunan di akhir masa CoVid-19 berdasarkan masa sebelum CoVid-19
cluster_2019_to_2022%>% filter(c2019<c2022) %>% arrange(c2022)## KOTKAB c2019 c2020 c2021 c2022
## 1 Kampar 1 2 2 2
## 2 Kota Lubuklinggau 1 2 2 2
## 3 Bangka 1 1 2 2
## 4 Kep. Seribu 1 2 2 2
## 5 Bogor 1 1 2 2
## 6 Kota Cirebon 1 2 2 2
## 7 Klaten 1 2 2 2
## 8 Karanganyar 1 2 2 2
## 9 Kota Pekalongan 1 2 2 2
## 10 Kota Probolinggo 1 2 2 2
## 11 Jayapura 1 2 2 2
## 12 Sumba Barat 2 2 3 3
## 13 Lembata 2 2 3 3
## 14 Rote Ndao 2 2 3 3
## 15 Manggarai Timur 2 2 3 3
## 16 Maluku Tenggara Barat 2 3 3 3
Dari Tabel di atas, dapat dilihat ada 16 kota/kabupaten yang mengalami penurunan di akhir masa COVID-19 berdasarkan masa sebelum COVID-19. 11 kota/kabupaten mengalami penurunan dari kluster kemiskinan terendah menjadi kluster dengan tingkat kemiskinan sedang, sedangkan 5 kota/kabupaten mengalami penurunan dari kluster kemiskinan tingkat sedang menjadi kluster dengan tingkat kemiskinan tertinggi.
Selanjutnya, kota/kabupaten yang mengalami perkembangan di akhir masa COVID-19 (2022) berdasarkan masa sebelum COVID-19 (2019) terdapat pada Tabel berikut.
#Mengalami perkembangan di akhir masa CoVid-19 berdasarkan masa sebelum CoVid-19
cluster_2019_to_2022%>% filter(c2019>c2022) %>% arrange(c2022)## KOTKAB c2019 c2020 c2021 c2022
## 1 Kepulauan Meranti 3 2 2 2
Dari Tabel di atas dapat dilihat bahwa hanya ada 1 kabupaten, yaitu Kabupaten Kepulauan Meranti yang mengalami perkembangan di tahun 2020 dari kluster dengan tingkat kemiskinan tertinggi menjadi kluster dengan tingkat kemiskinan sedang dan tidak pernah mengalami penurunan maupun perkembangan lagi setelah itu.
Selanjutnya, kota/kabupaten yang dari sebelum masa COVID-19 sampai masa akhir COVID-19 selalu di kluster dengan tingkat kemiskinan tertinggi terdapat pada Tabel berikut.
# Selalu di golongan termiskin
cluster_2019_to_2022%>% filter(c2022==3&c2019==3&c2020==3&c2021==3)## KOTKAB c2019 c2020 c2021 c2022
## 1 Lombok Utara 3 3 3 3
## 2 Sumba Timur 3 3 3 3
## 3 Timor Tengah Selatan 3 3 3 3
## 4 Sumba Tengah 3 3 3 3
## 5 Sabu Raijua 3 3 3 3
## 6 Maluku Barat Daya 3 3 3 3
## 7 Teluk Wondama 3 3 3 3
## 8 Teluk Bintuni 3 3 3 3
## 9 Tambrauw 3 3 3 3
## 10 Maybrat 3 3 3 3
## 11 Manokwari Selatan 3 3 3 3
## 12 Pegunungan Arfak 3 3 3 3
## 13 Jayawijaya 3 3 3 3
## 14 Nabire 3 3 3 3
## 15 Paniai 3 3 3 3
## 16 Puncak Jaya 3 3 3 3
## 17 Mappi 3 3 3 3
## 18 Asmat 3 3 3 3
## 19 Yahukimo 3 3 3 3
## 20 Pegunungan Bintang 3 3 3 3
## 21 Tolikara 3 3 3 3
## 22 Waropen 3 3 3 3
## 23 Supiori 3 3 3 3
## 24 Mamberamo Raya 3 3 3 3
## 25 Nduga 3 3 3 3
## 26 Lanny Jaya 3 3 3 3
## 27 Mamberamo Tengah 3 3 3 3
## 28 Yalimo 3 3 3 3
## 29 Puncak 3 3 3 3
## 30 Dogiyai 3 3 3 3
## 31 Intan Jaya 3 3 3 3
## 32 Deiyai 3 3 3 3
Berdasarkan Tabel di atas, ada 32 kota/kabupaten yang selalu berada di kluster dengan tingkat kemiskinan tertinggi. Berdasarkan fakta bahwa 32 kota/kabupaten ini selalu berada di kluster dengan tingkat kemiskinan tertinggi, maka 32 kota/kabupaten ini merupakan kota/kabupaten yang membutuhkan perhatian lebih dari pemerintah.
Data Mapping
Adapun pemetaan untuk kota/kabupaten yang selalu berada di kluster dengan tingkat kemiskinan tertinggi dapat dilihat pada Gambar berikut.
shp <- st_read("/vsicurl/https://raw.githubusercontent.com/juliansalomo/dataset/main/BATAS%20KABUPATEN%20KOTA%20DESEMBER%202019%20DUKCAPIL/BATAS%20KABUPATEN%20KOTA%20DESEMBER%202019%20DUKCAPIL.shp")## Reading layer `BATAS%20KABUPATEN%20KOTA%20DESEMBER%202019%20DUKCAPIL' from data source `/vsicurl/https://raw.githubusercontent.com/juliansalomo/dataset/main/BATAS%20KABUPATEN%20KOTA%20DESEMBER%202019%20DUKCAPIL/BATAS%20KABUPATEN%20KOTA%20DESEMBER%202019%20DUKCAPIL.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 515 features and 1 field
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: 95.00971 ymin: -11.00762 xmax: 141.0194 ymax: 6.07694
## Geodetic CRS: WGS 84
DICT <- read.csv2("https://raw.githubusercontent.com/juliansalomo/dataset/main/dict.csv")
shp$id <- (0:514)%>%as.numeric() %>% as.character()
shpnew <- shp %>% filter(id!=0)
shpnew$KOTKAB <- with(DICT, KOTKAB[match(shpnew$id, id)])#Mapping the Persistence of Highest Poverty Clusters in Cities/Districts from 2019 to 2022
filt1 <- cluster_2019_to_2022 %>% filter(c2019*c2020*c2021*c2022==3^4)
KLASTER3 <- inner_join(shpnew, dataprofile2019[,c(1,13)],by = "KOTKAB")%>% filter(KOTKAB %in% filt1$KOTKAB)
# Load your sf dataset
sf_data <- KLASTER3
# Plot the map by cluster
map <- ggplot() +
geom_sf(data = shpnew, fill = "#487a47", color = NA) +
geom_sf(data = sf_data, aes(fill = as.factor(cluster)), color = NA) +
scale_fill_manual(values = "#ed0302",name = "Cluster") +
labs(title = "Mapping the Persistence of Highest Poverty Clusters in Cities/Districts from 2019 to 2022") +
theme_minimal()
# Show the map
mapMapping the Persistence of Highest Poverty Clusters in Cities/Districts from 2019 to 2022
Dari Gambar di atas bisa dikatakan mayoritas kota/kabupaten dengan tingkat kemiskinan tertinggi paling banyak berada di Pulau Papua, dan sisanya tersebar di pulau lain.
Selanjutnya kota/kabupaten yang masuk ke kluster dengan tingkat kemiskinan tertinggi pada akhir periode karena efek COVID-19 adalah sebagai berikut
# Mapping Clusters of Cities/Districts Classified as Poorest after COVID-19
filt2 <- cluster_2019_to_2022 %>% filter(c2019!=3 & c2022==3)
filt2## KOTKAB c2019 c2020 c2021 c2022
## 1 Sumba Barat 2 2 3 3
## 2 Lembata 2 2 3 3
## 3 Rote Ndao 2 2 3 3
## 4 Manggarai Timur 2 2 3 3
## 5 Maluku Tenggara Barat 2 3 3 3
KLASTER3 <- inner_join(shpnew, dataprofile2022[,c(1,13)],by = "KOTKAB")%>% filter(KOTKAB %in% filt2$KOTKAB)
# Load your sf dataset
sf_data <- KLASTER3
# Plot the map by cluster
map <- ggplot() +
geom_sf(data = shpnew, fill = "#487a47", color = NA) +
geom_sf(data = sf_data, aes(fill = as.factor(cluster)), color = NA) +
scale_fill_manual(values = "#ed0302",name = "Cluster") +
labs(title = "Mapping Clusters of Cities/Districts Classified as Poorest after COVID-19") +
theme_minimal()
# Show the map
mapMapping Clusters of Cities/Districts Classified as Poorest after COVID-19
Selanjutnya pemetaan kota/kabupaten yang mengalami peningkatan tingkat kemiskinan sesudah COVID-19 dapat dilihat pada Gambar berikut.
# Mapping Clusters of Cities/Districts with Increasing Poverty Rates from 2019 to 2022
filt0 <- cluster_2019_to_2022%>% filter(c2019<c2022)
KLASTER3 <- inner_join(shpnew, dataprofile2022[,c(1,13)],by = "KOTKAB")%>% filter(KOTKAB %in% filt0$KOTKAB)
# Load your sf dataset
sf_data <- KLASTER3
# Plot the map by cluster
map <- ggplot() +
geom_sf(data = shpnew, fill = "#487a47", color = NA) +
geom_sf(data = sf_data, aes(fill = as.factor(cluster)), color = NA) +
scale_fill_manual(values = c("#95cb05","#ed0302"),name = "Cluster") +
labs(title = "Mapping Clusters of Cities/Districts with Increasing Poverty Rates from 2019 to 2022") +
theme_minimal()
# Show the map
mapMapping Clusters of Cities/Districts with Increasing Poverty Rates from 2019 to 2022
Selanjutnya kota/kabupaten yang masuk ke kluster dengan tingkat kemiskinan tertinggi di tahun 2019 terdapat pada Tabel berikut, dan pemetaannya dapat dilihat pada Gambar setelahnya.
#Mapping Clusters with the Highest Poverty Rates in 2019
filt3 <- dataprofile2019[,c(1,13)] %>% filter(cluster == 3)
filt3## KOTKAB cluster
## 1 Kepulauan Meranti 3
## 2 Lombok Utara 3
## 3 Sumba Timur 3
## 4 Timor Tengah Selatan 3
## 5 Sumba Tengah 3
## 6 Sabu Raijua 3
## 7 Maluku Barat Daya 3
## 8 Teluk Wondama 3
## 9 Teluk Bintuni 3
## 10 Sorong 3
## 11 Tambrauw 3
## 12 Maybrat 3
## 13 Manokwari Selatan 3
## 14 Pegunungan Arfak 3
## 15 Jayawijaya 3
## 16 Nabire 3
## 17 Kepulauan Yapen 3
## 18 Paniai 3
## 19 Puncak Jaya 3
## 20 Boven Digoel 3
## 21 Mappi 3
## 22 Asmat 3
## 23 Yahukimo 3
## 24 Pegunungan Bintang 3
## 25 Tolikara 3
## 26 Waropen 3
## 27 Supiori 3
## 28 Mamberamo Raya 3
## 29 Nduga 3
## 30 Lanny Jaya 3
## 31 Mamberamo Tengah 3
## 32 Yalimo 3
## 33 Puncak 3
## 34 Dogiyai 3
## 35 Intan Jaya 3
## 36 Deiyai 3
idn_cluster2019_3 <- inner_join(shpnew, filt3,by = "KOTKAB")
# Load your sf dataset
sf_data <- idn_cluster2019_3
# Plot the map by cluster
map <- ggplot() +
geom_sf(data = shpnew, fill = "#487a47", color = NA) +
geom_sf(data = sf_data, aes(fill = as.factor(cluster)), color = NA) +
scale_fill_manual(values = "#ed0302",name = "Cluster") +
labs(title = "Mapping Clusters with the Highest Poverty Rates in 2019") +
theme_minimal()
# Show the map
mapMapping Clusters with the Highest Poverty Rates in 2019
Selanjutnya kota/kabupaten yang masuk ke kluster dengan tingkat kemiskinan tertinggi di tahun 2020 terdapat pada Tabel berikut, dan pemetaannya dapat dilihat pada Gambar setelahnya.
#Mapping Clusters with the Highest Poverty Rates in 2020
filt4 <- dataprofile2020[,c(1,13)] %>% filter(cluster == 3)
filt4## KOTKAB cluster
## 1 Lombok Utara 3
## 2 Sumba Timur 3
## 3 Timor Tengah Selatan 3
## 4 Sumba Tengah 3
## 5 Sabu Raijua 3
## 6 Maluku Tenggara Barat 3
## 7 Maluku Barat Daya 3
## 8 Teluk Wondama 3
## 9 Teluk Bintuni 3
## 10 Tambrauw 3
## 11 Maybrat 3
## 12 Manokwari Selatan 3
## 13 Pegunungan Arfak 3
## 14 Jayawijaya 3
## 15 Nabire 3
## 16 Kepulauan Yapen 3
## 17 Paniai 3
## 18 Puncak Jaya 3
## 19 Mappi 3
## 20 Asmat 3
## 21 Yahukimo 3
## 22 Pegunungan Bintang 3
## 23 Tolikara 3
## 24 Waropen 3
## 25 Supiori 3
## 26 Mamberamo Raya 3
## 27 Nduga 3
## 28 Lanny Jaya 3
## 29 Mamberamo Tengah 3
## 30 Yalimo 3
## 31 Puncak 3
## 32 Dogiyai 3
## 33 Intan Jaya 3
## 34 Deiyai 3
idn_cluster2020_3 <- inner_join(shpnew, filt4,by = "KOTKAB")
# Load your sf dataset
sf_data <- idn_cluster2020_3
# Plot the map by cluster
map <- ggplot() +
geom_sf(data = shpnew, fill = "#487a47", color = NA) +
geom_sf(data = sf_data, aes(fill = as.factor(cluster)), color = NA) +
scale_fill_manual(values = "#ed0302",name = "Cluster") +
labs(title = "Mapping Clusters with the Highest Poverty Rates in 2020") +
theme_minimal()
# Show the map
mapMapping Clusters with the Highest Poverty Rates in 2020
Selanjutnya kota/kabupaten yang masuk ke kluster dengan tingkat kemiskinan tertinggi di tahun 2021 terdapat pada Tabel berikut, dan pemetaannya dapat dilihat pada Gambar setelahnya.
#Mapping Clusters with the Highest Poverty Rates in 2021
filt5 <- dataprofile2021[,c(1,13)] %>% filter(cluster == 3)
filt5## KOTKAB cluster
## 1 Lombok Utara 3
## 2 Sumba Barat 3
## 3 Sumba Timur 3
## 4 Timor Tengah Selatan 3
## 5 Lembata 3
## 6 Rote Ndao 3
## 7 Sumba Tengah 3
## 8 Manggarai Timur 3
## 9 Sabu Raijua 3
## 10 Maluku Tenggara Barat 3
## 11 Kepulauan Aru 3
## 12 Maluku Barat Daya 3
## 13 Teluk Wondama 3
## 14 Teluk Bintuni 3
## 15 Sorong 3
## 16 Tambrauw 3
## 17 Maybrat 3
## 18 Manokwari Selatan 3
## 19 Pegunungan Arfak 3
## 20 Jayawijaya 3
## 21 Nabire 3
## 22 Paniai 3
## 23 Puncak Jaya 3
## 24 Boven Digoel 3
## 25 Mappi 3
## 26 Asmat 3
## 27 Yahukimo 3
## 28 Pegunungan Bintang 3
## 29 Tolikara 3
## 30 Waropen 3
## 31 Supiori 3
## 32 Mamberamo Raya 3
## 33 Nduga 3
## 34 Lanny Jaya 3
## 35 Mamberamo Tengah 3
## 36 Yalimo 3
## 37 Puncak 3
## 38 Dogiyai 3
## 39 Intan Jaya 3
## 40 Deiyai 3
idn_cluster2021_3 <- inner_join(shpnew, filt5,by = "KOTKAB")
# Load your sf dataset
sf_data <- idn_cluster2021_3
# Plot the map by cluster
map <- ggplot() +
geom_sf(data = shpnew, fill = "#487a47", color = NA) +
geom_sf(data = sf_data, aes(fill = as.factor(cluster)), color = NA) +
scale_fill_manual(values = "#ed0302",name = "Cluster") +
labs(title = "Mapping Clusters with the Highest Poverty Rates in 2021") +
theme_minimal()
# Show the map
mapMapping Clusters with the Highest Poverty Rates in 2021
Selanjutnya kota/kabupaten yang masuk ke kluster dengan tingkat kemiskinan tertinggi di tahun 2022 terdapat pada Tabel berikut, dan pemetaannya dapat dilihat pada Gambar setelahnya.
#Mapping Clusters with the Highest Poverty Rates in 2022
filt6 <- dataprofile2022[,c(1,13)] %>% filter(cluster == 3)
filt6## KOTKAB cluster
## 1 Lombok Utara 3
## 2 Sumba Barat 3
## 3 Sumba Timur 3
## 4 Timor Tengah Selatan 3
## 5 Lembata 3
## 6 Rote Ndao 3
## 7 Sumba Tengah 3
## 8 Manggarai Timur 3
## 9 Sabu Raijua 3
## 10 Maluku Tenggara Barat 3
## 11 Maluku Barat Daya 3
## 12 Teluk Wondama 3
## 13 Teluk Bintuni 3
## 14 Sorong 3
## 15 Tambrauw 3
## 16 Maybrat 3
## 17 Manokwari Selatan 3
## 18 Pegunungan Arfak 3
## 19 Jayawijaya 3
## 20 Nabire 3
## 21 Kepulauan Yapen 3
## 22 Paniai 3
## 23 Puncak Jaya 3
## 24 Boven Digoel 3
## 25 Mappi 3
## 26 Asmat 3
## 27 Yahukimo 3
## 28 Pegunungan Bintang 3
## 29 Tolikara 3
## 30 Waropen 3
## 31 Supiori 3
## 32 Mamberamo Raya 3
## 33 Nduga 3
## 34 Lanny Jaya 3
## 35 Mamberamo Tengah 3
## 36 Yalimo 3
## 37 Puncak 3
## 38 Dogiyai 3
## 39 Intan Jaya 3
## 40 Deiyai 3
idn_cluster2022_3 <- inner_join(shpnew, filt6,by = "KOTKAB")
# Load your sf dataset
sf_data <- idn_cluster2022_3
# Plot the map by cluster
map <- ggplot() +
geom_sf(data = shpnew, fill = "#487a47", color = NA) +
geom_sf(data = sf_data, aes(fill = as.factor(cluster)), color = NA) +
scale_fill_manual(values = "#ed0302",name = "Cluster") +
labs(title = "Mapping Clusters with the Highest Poverty Rates in 2022") +
theme_minimal()
# Show the map
mapMapping Clusters with the Highest Poverty Rates in 2022
Adapun pemetaan untuk hasil kluster kota/kabupaten dari tahun 2019 sampai 2022 dapat dilihat pada gambar-gambar berikut
# Mapping poverty clustering in 2019
idn_cluster2019 <- inner_join(shpnew, dataprofile2019,by = "KOTKAB")
# Load your sf dataset
sf_data <- idn_cluster2019
# Plot the map by cluster
map <- ggplot() +
geom_sf(data = sf_data, aes(fill = as.factor(cluster)), color = NA) +
scale_fill_manual(values = c("#05b67f","#95cb05","#ed0302"),name = "Cluster") +
labs(title = "Mapping poverty clustering in 2019") +
theme_minimal()
# Show the map
map# Mapping poverty clustering in 2020
idn_cluster2020 <- inner_join(shpnew, dataprofile2020,by = "KOTKAB")
# Load your sf dataset
sf_data <- idn_cluster2020
# Plot the map by cluster
map <- ggplot() +
geom_sf(data = sf_data, aes(fill = as.factor(cluster)), color = NA) +
scale_fill_manual(values = c("#05b67f","#95cb05","#ed0302"),name = "Cluster") +
labs(title = "Mapping poverty clustering in 2020") +
theme_minimal()
# Show the map
map# Mapping poverty clustering in 2021
idn_cluster2021 <- inner_join(shpnew, dataprofile2021,by = "KOTKAB")
# Load your sf dataset
sf_data <- idn_cluster2021
# Plot the map by cluster
map <- ggplot() +
geom_sf(data = sf_data, aes(fill = as.factor(cluster)), color = NA) +
scale_fill_manual(values = c("#05b67f","#95cb05","#ed0302"),name = "Cluster") +
labs(title = "Mapping poverty clustering in 2021") +
theme_minimal()
# Show the map
map# Mapping poverty clustering in 2022
idn_cluster2022 <- inner_join(shpnew, dataprofile2022,by = "KOTKAB")
# Load your sf dataset
sf_data <- idn_cluster2022
# Plot the map by cluster
map <- ggplot() +
geom_sf(data = sf_data, aes(fill = as.factor(cluster)), color = NA) +
scale_fill_manual(values = c("#05b67f","#95cb05","#ed0302"),name = "Cluster") +
labs(title = "Mapping poverty clustering in 2022") +
theme_minimal()
# Show the map
map