#Menyiapkan data dengan input data di excel atau juga bisa langsung dari R
library(readr) #Membaca data
library(dplyr) #Data processing
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(DT) #Menampilkan tabel agar mudah dilihat di browser
## Warning: package 'DT' was built under R version 4.3.3
#import data excel ke R
library(readxl)
## Warning: package 'readxl' was built under R version 4.3.3
dataset <- read_excel("D:/STIS/Tingkat 3/APG/Pert11/praktikum11.xlsx")
View(dataset)
#Standarisasi variabel
datatable(dataset, caption = "Variabel")
data_standardized <- round(scale(dataset[,2:6]),4) #Hanya memilih kolom/variabel yang berisikan indikator yang akan digunakan
datatable(data_standardized, caption = "Data Hasil Standardisasi")
data_standardized
## Kriminalitas JumlahRumahSakit KepadatanPenduduk IPM UMK
## [1,] -0.3831 0.2195 -0.4905 -0.3726 -0.0509
## [2,] 0.2998 1.3299 -0.2828 -0.0135 -0.5360
## [3,] -0.6572 -0.5737 -0.3166 -0.6100 -0.4087
## [4,] -0.6708 -0.7323 -0.4662 -0.9959 -0.7263
## [5,] -0.5713 0.3781 -0.4328 -0.5295 -0.5917
## [6,] -0.7035 0.0608 -0.5410 0.1041 -0.5667
## [7,] -0.7430 -0.7323 -0.4923 -0.7338 -0.5437
## [8,] -0.3872 -0.5737 -0.3215 -0.4655 -0.2417
## [9,] -0.5222 0.3781 -0.4180 0.3827 -0.4155
## [10,] -0.4895 -0.0978 -0.0476 0.7067 -0.3963
## [11,] -0.6026 -0.0978 0.0020 0.9709 -0.4225
## [12,] -0.6871 0.2195 -0.6162 -0.4119 -0.6263
## [13,] -0.6217 -0.0978 -0.3400 0.8615 -0.3302
## [14,] -0.4513 0.3781 -0.4301 0.3291 -0.6177
## [15,] -0.6572 -0.0978 -0.5401 -0.4222 -0.5917
## [16,] -0.7471 -0.2564 -0.6365 -0.7049 -0.5840
## [17,] -0.7417 -0.7323 -0.5712 -0.3933 -0.6398
## [18,] -0.4540 0.2195 -0.4743 -0.1353 -0.5437
## [19,] -0.5713 -0.0978 0.0601 0.6634 0.0477
## [20,] -0.5767 -0.4150 -0.2963 0.0030 -0.2468
## [21,] -0.7512 -0.7323 -0.2747 -0.0218 0.3804
## [22,] -0.5413 -0.4150 -0.3576 0.4632 0.0621
## [23,] -0.7226 -0.5737 -0.4563 -0.5233 -0.5975
## [24,] -0.7294 -0.5737 -0.4193 -0.0177 0.1188
## [25,] -0.6626 -0.7323 -0.4175 -0.7235 -0.2265
## [26,] -0.6340 -0.7323 -0.3720 -0.4944 -0.2809
## [27,] -0.6258 -0.0978 -0.2742 -1.1755 -0.5379
## [28,] -0.6353 -0.2564 -0.1165 -0.8329 -0.4821
## [29,] -0.7499 0.3781 -0.3625 -1.1734 -0.6263
## [30,] -0.7240 -0.4150 2.1780 1.4332 -0.5533
## [31,] 0.3257 0.6954 4.4472 2.0833 -0.3827
## [32,] -0.5849 -0.5737 0.7770 2.2794 -0.2534
## [33,] 0.4798 1.9644 1.3011 2.3434 0.8507
## [34,] -0.6244 -0.2564 2.1987 0.5932 -0.1972
## [35,] -0.6844 -0.7323 -0.5284 0.6345 -0.4562
## [36,] -0.7062 -0.7323 -0.6730 -0.8329 -0.6882
## [37,] 0.1090 -0.4150 -0.5522 -0.3004 -0.6882
## [38,] 0.0476 -1.0496 -0.5797 -0.5481 -0.6882
## [39,] 0.9924 0.6954 -0.4112 0.1289 -0.3782
## [40,] -0.1964 -0.0978 -0.4626 -0.2963 -0.4121
## [41,] 0.4593 0.6954 -0.3432 -0.0610 -0.2967
## [42,] 2.4265 1.9644 -0.5221 -0.4057 1.3598
## [43,] 0.0013 -0.5737 -0.5910 -1.3488 -0.3397
## [44,] 1.8349 0.2195 -0.4973 -1.1156 0.0948
## [45,] 0.5684 1.1713 -0.7275 -0.2695 0.0269
## [46,] -0.5358 -0.5737 -0.6248 -1.2580 -0.3850
## [47,] 0.2480 -0.4150 -0.6694 -1.0207 -0.4823
## [48,] 1.3059 -0.4150 -0.5441 -1.3447 0.3369
## [49,] -0.0778 0.0608 -0.3585 -0.8164 3.2823
## [50,] 3.5171 3.0748 0.7221 1.6788 3.2879
## [51,] -0.3218 0.3781 -0.1566 0.2630 3.2653
## [52,] 1.0810 0.6954 -0.3441 0.1020 0.7624
## [53,] 0.7129 -0.5737 -0.4657 -0.0280 -0.3986
## [54,] 0.4689 -0.5737 -0.5572 -0.0734 -0.5592
## [55,] 0.1635 -0.8909 -0.4414 0.3187 -0.6882
## [56,] 0.7633 -0.7323 -0.5644 -0.3004 -0.5728
## [57,] -0.3368 0.3781 -0.5973 -0.7256 -0.2832
## [58,] 0.2439 -0.5737 -0.5658 -0.8122 0.3844
## [59,] 0.0013 0.5367 -0.5522 0.1247 -0.0320
## [60,] 0.3830 2.1230 -0.3616 0.8079 3.2936
## [61,] -0.2087 -0.7323 -0.4121 -1.7534 -0.3918
## [62,] -0.4418 -0.8909 -0.4986 -2.1393 -0.4529
## [63,] -0.3368 -0.2564 -0.3576 -1.2291 -0.5366
## [64,] -0.3545 -0.8909 -0.6081 -1.2622 -0.4280
## [65,] 0.2549 0.0608 1.1799 1.2825 -0.2107
## [66,] 0.1840 -0.5737 1.0979 1.2825 -0.4370
## [67,] 2.4129 1.1713 1.8333 1.9657 1.1584
## [68,] -0.0410 -1.0496 1.0159 0.2403 0.0359
## [69,] -0.2482 -0.8909 1.6882 0.7047 0.3844
## [70,] -0.3709 -0.2564 2.6493 1.1917 0.0359
## [71,] 0.4430 -0.4150 1.4985 1.8501 -0.4370
## [72,] 4.8122 5.1370 2.8570 2.1411 3.2993
## [73,] -0.4554 -0.4150 -0.1737 0.7583 0.9932
## attr(,"scaled:center")
## Kriminalitas JumlahRumahSakit KepadatanPenduduk IPM
## 6.750548e+02 7.616438e+00 1.892562e+03 7.136562e+01
## UMK
## 1.867701e+06
## attr(,"scaled:scale")
## Kriminalitas JumlahRumahSakit KepadatanPenduduk IPM
## 7.335450e+02 6.303945e+00 2.219230e+03 4.845347e+00
## UMK
## 5.199989e+05
Standarisasi data dilakukan untuk menyamakan semua satuan pengukuran variabel, karena data yang digunakan memiliki satuan dan rentang yang berbeda sehingga perlu dinormalisasi sebelum masuk ke analisis klaster
#Menentukan Jumlah Klaster
jumlah_klaster <- c(1:9) #Vektor yang berisikan jumlah klaster yang ingin dilihat nilai dari total within-cluster sum of squares
within_ss <- c() #Vektor kosong yang akan diisi nilai total within-cluster sum of squares
for (i in jumlah_klaster) {
within_ss <- c(within_ss, kmeans(x = data_standardized, centers = i, nstart =
25)$tot.withinss)
}
plot(x = jumlah_klaster, y = within_ss, type = "b", xlab = "Number of Cluster",
ylab = "Total Within Sum of Squares", main = "Elbow Plot")
abline(v = 7, col = 'red')
Dari Elbow Plot di atas, dapat dilihat bahwa pada titik ke tujuh nilai
total WSS mulai menunjukkan penurunan yang kurang berarti, sehingga
berdasarkan plot tersebut akan ditentukan jumlah klaster yang akan
dibentuk adalah tujuh klaster.
#Analisis Cluster
set.seed(123)
kmeans_clustering <- kmeans(x = data_standardized, centers = 7, nstart = 25) #parameter nstart digunakan untuk memberitahu fungsi berapa kali inisiasi centroid awal (secara acak) yang akan dibentuk.
kmeans_clustering
## K-means clustering with 7 clusters of sizes 9, 3, 20, 3, 8, 2, 28
##
## Cluster means:
## Kriminalitas JumlahRumahSakit KepadatanPenduduk IPM UMK
## 1 -0.190166667 -0.4855444 1.5870444 1.20640000 -0.1813778
## 2 -0.005533333 0.8539667 -0.2922333 0.08483333 3.2804000
## 3 -0.369370000 -0.2008950 -0.3604250 0.26878500 -0.2267200
## 4 1.072800000 1.2770333 2.5272000 2.13080000 0.5421333
## 5 1.121025000 0.7945375 -0.4590375 -0.37238750 0.1712375
## 6 4.164650000 4.1059000 1.7895500 1.90995000 3.2936000
## 7 -0.407153571 -0.4490357 -0.4888000 -0.84718214 -0.4734857
##
## Clustering vector:
## [1] 3 5 7 7 7 3 7 7 3 3 3 7 3 3 7 7 7 3 3 3 3 3 7 3 7 7 7 7 7 1 4 1 4 1 3 7 7 7
## [39] 5 3 5 5 7 5 5 7 7 5 2 6 2 5 3 3 3 7 7 7 3 2 7 7 7 7 1 1 4 1 1 1 1 6 3
##
## Within cluster sum of squares by cluster:
## [1] 9.475125 4.117009 13.178720 10.603871 12.497746 5.350801 15.614834
## (between_SS / total_SS = 80.3 %)
##
## Available components:
##
## [1] "cluster" "centers" "totss" "withinss" "tot.withinss"
## [6] "betweenss" "size" "iter" "ifault"
Pengelompokan objek ke dalam 7 klaster berdasarkan nilai centroid dari masing-masing variabel. Objek objek dengan nilai centroid yang hampir sama akan dikelompokkan dalam satu klaster sehingga didapat pembagian klasternya sebagai berikut:
K-means clustering with 7 clusters of sizes 9, 3, 20, 3, 8, 2, 28
Dari output diatas dapat di ketahui bahwa klaster pertama beranggotakan 9 observasi, klaster kedua 3 observasi, klaster ketiga 20 observasi, klaster ke empat 3 observasi, klaster kelima 8 observasi, klaster keenam 2 observasi, dan terakhir klaster ketujuh 28 observasi.
Selanjutnya output diatas menunjukkan nomor klaster untuk setiap observasi. Dari output di atas dapat dilihat bahwa mayoritas kabupaten/kota baik di Jawa Tengah maupun Jawa Timur di kelompokkan dalam klaster 7 dan 3, sedangkan klaster yang paling sedikit pengelompokannya adalah klaster 2, 4 dan 6.
Clustering vector: Observasi pertama ([1]) termasuk ke dalam klaster 3. Observasi kedua ([2]) termasuk ke dalam klaster 5. Observasi ketiga ([3]) termasuk ke dalam klaster 7, dan seterusnya.
Within cluster sum of squares by cluster memberikan ukuran seberapa “kompak”(observasi lebih dekat ke centroidnya) observasi dalam klaster.
Nilai between_SS / total_SS = 80.3% menunjukkan proporsi variasi total data yang dijelaskan oleh pengelompokan klaster.
#Untuk mendapatkan nilai centroid sesuai data aslinya, maka kita bisa melakukan langkah berikut: Setelah cluster terbentuk, selanjutnya mengembalikan nilai centroid ke satuan pengukuran awal masing masing variabel untuk melihat rata-rata asli dari variabel tersebut.
dataset %>%
mutate(Klaster = kmeans_clustering$cluster) %>%
group_by(Klaster) %>%
summarise(
Mean_kriminalitas = mean(Kriminalitas),
Mean_jumlahRS = mean(JumlahRumahSakit),
Mean_kepadatanpnddk = mean(KepadatanPenduduk),
Mean_IPM = mean(IPM),
Mean_UMK = mean(UMK)
)
## # A tibble: 7 × 6
## Klaster Mean_kriminalitas Mean_jumlahRS Mean_kepadatanpnddk Mean_IPM Mean_UMK
## <int> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1 536. 4.56 5415. 77.2 1773388.
## 2 2 671 13 1244 71.8 3573506.
## 3 3 404. 6.35 1093. 72.7 1749804.
## 4 4 1462 15.7 7501 81.7 2149620.
## 5 5 1497. 12.6 874. 69.6 1956743.
## 6 6 3730 33.5 5864 80.6 3580371.
## 7 7 376. 4.79 808. 67.3 1621483.
#Pengelompokan objek ke dalam cluster
dataset %>%
mutate(Klaster = kmeans_clustering$cluster) %>%
select(`Kabupaten/Kota`, Klaster) %>%
arrange(Klaster)
## # A tibble: 73 × 2
## `Kabupaten/Kota` Klaster
## <chr> <int>
## 1 KotaMagelang 1
## 2 KotaSalatiga 1
## 3 KotaPekalongan 1
## 4 KotaKediri 1
## 5 KotaBlitar 1
## 6 KotaProbolinggo 1
## 7 KotaPasuruan 1
## 8 KotaMojokerto 1
## 9 KotaMadiun 1
## 10 Pasuruan 2
## # ℹ 63 more rows
View(dataset %>%
mutate (Klaster = kmeans_clustering$cluster) %>%
select(`Kabupaten/Kota`, Klaster) %>%
arrange(Klaster))