Pre-processng (preparasi data)

Library

library(readxl)
library(factoextra)

Define data

x <- "https://raw.githubusercontent.com/lihardodicky/dickygirsang/main/DATA%20PSD%20UAS.csv"
data <- read.csv(url(x))
colnames(data)[1] = "Kabupaten/kota" 
data_bersih = data[,-1]

colnames(data_bersih)[1] = "PendudukMiskin" 
colnames(data_bersih)[2] = "IndeksPengeluaran"
colnames(data_bersih)[3] = "IPM" 
colnames(data_bersih)[4] = "SanitasiLayak" 
colnames(data_bersih)[5] = "IndeksPendidikan" 

data_bersih$PendudukMiskin <- as.numeric(as.character(data_bersih$PendudukMiskin)) 
data_bersih$IndeksPengeluaran <- as.numeric(as.character(data_bersih$IndeksPengeluaran))
data_bersih$IPM <- as.numeric(as.character(data_bersih$IPM))
data_bersih$SanitasiLayak <- as.numeric(as.character(data_bersih$SanitasiLayak))
data_bersih$IndeksPendidikan <- as.numeric(as.character(data_bersih$IndeksPendidikan))

head(data_bersih)
##   PendudukMiskin IndeksPengeluaran   IPM SanitasiLayak IndeksPendidikan
## 1           8.13             71.36 70.60         63.91            62.39
## 2           7.70             66.40 67.07         64.35            57.67
## 3          11.18             63.52 65.56         58.52            57.30
## 4           7.15             71.06 72.73         64.51            65.51
## 5          10.65             63.17 66.45         43.73            58.52
## 6          11.15             62.66 65.90         49.35            59.77
#new
data_bersih2 = data
colnames(data_bersih2)[2] = "PendudukMiskin" 
colnames(data_bersih2)[3] = "IndeksPengeluaran"
colnames(data_bersih2)[4] = "IPM" 
colnames(data_bersih2)[5] = "SanitasiLayak" 
colnames(data_bersih2)[6] = "IndeksPendidikan" 

data_bersih2$PendudukMiskin <- as.numeric(as.character(data_bersih2$PendudukMiskin)) 
data_bersih2$IndeksPengeluaran <- as.numeric(as.character(data_bersih2$IndeksPengeluaran))
data_bersih2$IPM <- as.numeric(as.character(data_bersih2$IPM))
data_bersih2$SanitasiLayak <- as.numeric(as.character(data_bersih2$SanitasiLayak))
data_bersih2$IndeksPendidikan <- as.numeric(as.character(data_bersih2$IndeksPendidikan))

Standarisasi dengan z-score

Setelah itu, dilakukan standarisasi dengan menggunakan z-score standarization

data_std <- scale(data_bersih) 
head(data_std)
##      PendudukMiskin IndeksPengeluaran        IPM SanitasiLayak IndeksPendidikan
## [1,]     -0.2901787        -0.0725762 -0.2804275    -0.5357278       -0.3033690
## [2,]     -0.4387880        -0.9032946 -1.0187576    -0.5085653       -0.9949851
## [3,]      0.7639110        -1.3856472 -1.3345872    -0.8684684       -1.0492008
## [4,]     -0.6288698        -0.1228213  0.1650804    -0.4986880        0.1538010
## [5,]      0.5807413        -1.4442665 -1.1484360    -1.7814988       -0.8704356
## [6,]      0.7535429        -1.5296831 -1.2634732    -1.4345596       -0.6872745

Penggerombolan Non-Hirarki

Penentuan k dengan within sum square

par(mfrow=c(1,2))
fviz_nbclust(data_std, FUNcluster = kmeans, method = "wss")

fviz_nbclust(data_std, kmeans, method = "silhouette")

Berdasarkan output di atas, metode Elbow dengan nilai K yang turun secara drastis dan membentuk siku, yaitu terdapat pada K=2. Dengan metode silhoutte diperoleh nilai K=3. Disimpulkan bahwa nilai K yang optimal adalah 3, dengan asumsi jika K=2 masih cenderung kecil.

#Ditetapkan k=3
clustering = kmeans(data_std,centers=3)
clustering
## K-means clustering with 3 clusters of sizes 11, 6, 10
## 
## Cluster means:
##   PendudukMiskin IndeksPengeluaran        IPM SanitasiLayak IndeksPendidikan
## 1      0.5471236       -0.07607813 -0.3568655     0.6502746       -0.5378151
## 2     -1.4012928        1.33931011  1.4897519     0.4425339        1.4205429
## 3      0.2389398       -0.71990012 -0.5012991    -0.9808224       -0.2607291
## 
## Clustering vector:
##  [1] 3 3 3 3 3 3 3 1 1 1 1 1 1 1 1 2 3 1 2 3 2 1 2 2 2 3 1
## 
## Within cluster sum of squares by cluster:
## [1] 14.24036 15.30180 20.15790
##  (between_SS / total_SS =  61.8 %)
## 
## Available components:
## 
## [1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
## [6] "betweenss"    "size"         "iter"         "ifault"
fviz_cluster(clustering, data = data_std)+ggtitle("Visualisasi dengan K=3")

Lalu, setiap nilai means/centroid yang masih ada di dalam nilai yang terstandarisasi, nilainya perlu dikembalikan ke nilai awal guna diketahui karakteristik sebenarnya dari tiap klaster.

data_akhir <- cbind(data_bersih2, cluster = clustering$cluster)
data_akhir
##      Kabupaten/kota PendudukMiskin IndeksPengeluaran   IPM SanitasiLayak
## 1             Bogor           8.13             71.36 70.60         63.91
## 2          Sukabumi           7.70             66.40 67.07         64.35
## 3           Cianjur          11.18             63.52 65.56         58.52
## 4           Bandung           7.15             71.06 72.73         64.51
## 5             Garut          10.65             63.17 66.45         43.73
## 6       Tasikmalaya          11.15             62.66 65.90         49.35
## 7            Ciamis           7.97             67.78 70.93         66.59
## 8          Kuningan          13.10             68.27 69.71         80.98
## 9           Cirebon          12.30             71.24 69.12         83.41
## 10       Majalengka          12.33             68.86 67.81         80.59
## 11         Sumedang          10.71             70.93 71.80         87.87
## 12        Indramayu          13.04             69.55 67.64         89.75
## 13           Subang          10.03             72.64 69.13         85.82
## 14       Purwakarta           8.83             74.85 70.98         72.61
## 15         Karawang           8.95             74.47 70.94         77.19
## 16           Bekasi           5.21             73.98 74.45         81.02
## 17    Bandung Barat          11.30             65.33 68.29         63.78
## 18      Pangandaran           9.65             67.14 68.28         81.49
## 19       Kota Bogor           7.24             74.98 76.59         75.35
## 20    Kota Sukabumi           8.25             72.89 74.60         39.64
## 21     Kota Bandung           4.37             86.34 81.96         48.90
## 22     Kota Cirebon          10.03             75.22 75.25         92.71
## 23      Kota Bekasi           4.74             84.31 81.95         97.54
## 24       Kota Depok           2.58             83.37 81.37         97.06
## 25      Kota Cimahi           5.35             75.76 78.06         78.67
## 26 Kota Tasikmalaya          13.13             70.78 73.31         52.62
## 27      Kota Banjar           7.11             71.56 71.92         81.92
##    IndeksPendidikan cluster
## 1             62.39       3
## 2             57.67       3
## 3             57.30       3
## 4             65.51       3
## 5             58.52       3
## 6             59.77       3
## 7             65.78       3
## 8             59.97       1
## 9             57.75       1
## 10            58.34       1
## 11            64.46       1
## 12            55.79       1
## 13            56.23       1
## 14            60.67       1
## 15            59.54       1
## 16            67.39       2
## 17            60.33       3
## 18            59.72       1
## 19            72.38       2
## 20            70.42       3
## 21            76.11       2
## 22            70.21       1
## 23            76.87       2
## 24            76.89       2
## 25            75.29       2
## 26            69.12       3
## 27            66.01       1
data_kab <- data.frame("kab/kota"= data_akhir$'Kabupaten/kota',"klaster"= data_akhir$cluster)
data_kab
##            kab.kota klaster
## 1             Bogor       3
## 2          Sukabumi       3
## 3           Cianjur       3
## 4           Bandung       3
## 5             Garut       3
## 6       Tasikmalaya       3
## 7            Ciamis       3
## 8          Kuningan       1
## 9           Cirebon       1
## 10       Majalengka       1
## 11         Sumedang       1
## 12        Indramayu       1
## 13           Subang       1
## 14       Purwakarta       1
## 15         Karawang       1
## 16           Bekasi       2
## 17    Bandung Barat       3
## 18      Pangandaran       1
## 19       Kota Bogor       2
## 20    Kota Sukabumi       3
## 21     Kota Bandung       2
## 22     Kota Cirebon       1
## 23      Kota Bekasi       2
## 24       Kota Depok       2
## 25      Kota Cimahi       2
## 26 Kota Tasikmalaya       3
## 27      Kota Banjar       1