Di era globalisasi saat ini, ilmu pengetahuan dan teknologi berkembang dengan begitu pesat. Salah satu akibat dari berkembangnya teknologi yang semakin canggih adalah meluasnya penggunaan internet. Namun masih ada kesenjangan digital yang kuat antara anak dan remaja yang tinggal di wilayah perkotaan (lebih sejahtera) di Indonesia, dengan mereka yang tinggal di wilayah pedesaan (dan kurang sejahtera). Panji (dalam Amalia & Sumargo, 2019: 1) menjelaskan bahwa, di daerah perkotaan, hanya 13 persen dari anak dan remaja yang tidak menggunakan internet, sementara di daerah pedesaan ada 87 persen anak dan remaja yang tidak memakai internet.
Oleh karena itu, perlu mengelompokkan provinsi berdasarkan persentase siswa umur 5-24 tahun yang mengakses internet selama 3 bulan terakhir menurut jenjang pendidikan. Pengelompokan dilakukan untuk mengetahui provinsi-provinsi mana yang memiliki infrastruktur baik untuk mendukung penggunaan internet dan provinsi-provinsi mana yang perlu dilakukan perbaikan infrastruktur untuk mendukung penggunaan internet pada masyarakat, maka akan dilakukan pengelompokan provinsi berdasarkan Persentase Pengguna Internet menurut Jenjang Pendidikan dengan Metode K-Means Clustering.
Untuk memenuhi penilaian akhir praktikum mata kuliah Komputasi Statistika, maka akan dilakukan pengelompokan provinsi berdasarkan Presentase Pengguna Internet menurut Jenjang Pendidikan dengan Metode K-Means Clustering menggunakan bantuan software R-Studio (R Version 4.1.1) dalam pengerjaannya.
Analisis cluster merupakan salah satu analisis multivariat yang mengelompokan objek-objek atau data ke dalam beberapa kelompok dimana setiap objek dalam satu kelompok memiliki karakteristik yang sama.
Suatu cluster dikatakan cluster yang baik jika memiliki ciri-ciri sebagai berikut (Amalia & Sumargo, 2019: 2):
Clustering banyak digunakan pada dalam kehidupan sehari-hari seperti pada business intelligence, pengenalan pola citra, web search, bidang ilmu biologi, dan untuk keamanan (security). Di dalam business intelligence, clustering bisa mengatur banyak customer ke dalam banyaknya kelompok (customer segmentation).
Terdapat beberapa metode analisis cluster, yaitu:
Pengelompokan dengan metode hirarki dimulai dengan mengelompokan dua atau lebih objek yang mempunyai kesamaan paling dekat.
Hasil pengelompokan metode hirarki membentuk sebuah dendogram yang digunakan untuk membantu menjelaskan proses hirarki tersebut. Metode hirarki terbagi menjadi dua (Prabowo et al, 2020: 50) :
Metode Non-Hierarki umumnya digunakan jika jumlah satuan pengamatan besar. Berbeda dengan metode hirarki, proses metode non-hirarki dimulai dengan menentukan jumlah cluster yang diinginkan terlebih dahulu. Setelah jumlah cluster ditentukan, maka proses pengelompokan dilakukan tanpa mengikuti proses hirarki. Contoh dari metode ini adalah K-means clustering.
K-Means clustering adalah mengelompokkan data/objek dengan memaksimalkan kemiripan data dalam satu cluster dan meminimalkan kemiripan data antar cluster. Ukuran kemiripan yang digunakan dalam k-means clustering adalah ukuran jarak (Amalia & Sumargo, 2019: 4).
Pada bab ini, kita menggunakan dua packages yaitu cluster dan factoextra untuk perhitungan dan visualisasi cluster-nya. Kemudian, dilanjutkan memulai menyiapkan data yang digunakan untuk Clustering Analysis.
Berikut merupakan dua packages utama yang dibutuhkan dalam penyelesaian tugas kali ini.
library(cluster)
library(factoextra)Untuk detail lengkap dari dua packages diatas, sebagai berikut:
cluster untuk perhitungan atau komputasi algoritma clusteringfactoextra untuk visualisasi hasil dari clusteringPackages factoextra berisi banyak functions untuk kebutuhan analisis cluster dan visualisasinya, antara lain:
| Functions | Deskripsi |
|---|---|
| dist(fviz_dist, get_dist) | Komputasi Jarak Matriks dan Visualisasi |
| get_clust_tendency | Menilai Banyaknya Clustering |
| fviz_nbclust(fviz_gap_stat) | Menentukan Jumlah Optimal Cluster |
| fviz_dend | Meningkatkan Visualisasi Dendogram |
| fviz_cluster | Memvisualisasikan Hasil Clustering |
| fviz_mclust | Memvisualisasikan Hasil Model Clustering |
| fviz_silhouette | Memvisualisasikan Bentuk Silhouette dari Clustering |
| hcut | Menghitung Clustering Hirarki dan Memotong Jumlah Cluster |
| hkmeans | Clustering untuk K-Means Hirarki |
| eclust | Memvisualisasikan Penyebaran Cluster |
Data yang digunakan dalam tugas ini diperoleh melalui bagian pusat data dan sarana informatika (PDSI) Kementerian Komunikasi dan Informatika Republik Indonesia yang berupa data persentase siswa umur 5-24 tahun yang mengakses internet selama 3 Bulan terakhir menurut Provinsi dan Jenjang Pendidikan, 2017 data perkotaan & pedesaan (Amalia & Sumargo, 2019: 5).
Data tersebut bersumber dari Pengelompokan Pengguna Internet dengan Metode K-Means Clustering. Data-data tersebut berisi data persentase jumlah pengguna internet berpendidikan SD, SMP, SMA dan Perguruan tinggi yang akan dijadikan variabel dalam tugas ini. Untuk mendownload dataset disini.
Data tersebut disajikan dalam tabel berikut:
library(readxl)
datapenggunainternet <- read_excel("D:/Mata Kuliah Semester VI/Komputasi Statistika/Praktikum Komstat/Tugas Akhir Praktikum Analisis Cluster/Analisis Cluster Data Internet Final Project/Data Pengguna Internet.xlsx")library(FSA)
library(knitr)
library(dplyr)
headtail (datapenggunainternet) %>%
kable(digits = 5,
align = "c",
col.names = c("Provinsi", "SD", "SMP", "SMA", "Perguruan Tinggi (PT)"),
caption = "**Tabel 2. Data Jumlah Persentase Pengguna Internet Berpendidikan SD, SMP, SMA, dan Perguruan Tinggi (PT) per Provinsi 2017**")| Provinsi | SD | SMP | SMA | Perguruan Tinggi (PT) | |
|---|---|---|---|---|---|
| 1 | Aceh | 3.33 | 24.37 | 52.61 | 79.03 |
| 2 | Sumatera Utara | 8.79 | 44.92 | 74.60 | 90.18 |
| 3 | Sumatera Barat | 11.27 | 53.90 | 81.64 | 88.56 |
| 32 | Maluku Utara | 3.17 | 21.85 | 39.83 | 66.09 |
| 33 | Papua Barat | 6.45 | 33.61 | 62.05 | 75.91 |
| 34 | Papua | 3.87 | 20.22 | 44.03 | 78.45 |
Untuk melakukan analisis cluster dengan R, data harus disiapkan dengan ketentuan sebagai berikut:
# Memanggil kembali Dataset Pengguna Internet dari Sub-Bab 2.2.1., kemudian assign dataset ke variabel df dari variabel datapenggunainternet sebelumnya
df <- datapenggunainternetdf <- na.omit(object = df)scale(), berikut perintahnya:# Standarisasi data pada kolom ke-2 sampai kolom ke-5
df <- scale(df[,2:5])# Menampilkan 3 data teratas dan terbawah dari Data Pengguna Internet yang telah distandarisasi ke bentuk Z-Score
headtail(df) %>%
kable(digits = 4,
align = "c",
col.names = c("SD", "SMP", "SMA", "PT"),
caption = "**Tabel 3. Data Pengguna Internet yang Telah Distandarisasi ke dalam Bentuk *Z-Score***")| SD | SMP | SMA | PT | |
|---|---|---|---|---|
| [1,] | -1.1858 | -1.4426 | -1.6234 | -1.1448 |
| [2,] | -0.3223 | -0.1741 | -0.0458 | 0.3141 |
| [3,] | 0.0700 | 0.3802 | 0.4593 | 0.1021 |
| [32,] | -1.2111 | -1.5981 | -2.5403 | -2.8379 |
| [33,] | -0.6923 | -0.8722 | -0.9462 | -1.5531 |
| [34,] | -1.1004 | -1.6987 | -2.2390 | -1.2207 |
Proses yang terjadi dalam fungsi scale() adalah menghitung rata-rata (mean) dan standar deviasi dari seluruh vektor yaitu dataset Penggunan Internet atau variabel df, lalu menskalakan setiap elemen dengan nilai-nilai tersebut dengan mengurangi mean dan membaginya dengan sd.
\[ \begin{aligned} z &= \frac{x - \bar{X}}\sigma \end{aligned} \tag{1} \] Dimana:
Berikut contoh prosesnya:
# Scaling secara manual kolom Tingkat Pendidikan SD
scl <- (datapenggunainternet$SD - mean(datapenggunainternet$SD)) / sd(datapenggunainternet$SD)
head(scl, 5)
[1] -1.18576544 -0.32225730 0.06995886 -0.09768192 -0.28904544Terlihat output diatas, hasilnya sama dengan kolom tingkat pendidikan SD dari variabel df yang sudah dihitung dengan fungsi scale().
Dalam analisis cluster diperlukan beberapa ukuran untuk mengetahui seberapa mirip objek-objek yang akan dikelompokan ke dalam cluster yang sama. Terdapat beberapa metode yang digunakan dalam mengukur kemiripan / kesamaan antar objek yaitu:
Ada dua metode klasik yang digunakan mengukur jarak yaitu Euclidean dan Manhattan distances, yang berumus seperti berikut:
\[ \begin{aligned} d_{euc} (x,y) &= \sqrt{\sum^{n}_{i=1}(x_i - y_i)^2} \end{aligned} \tag{2} \]
\[ \begin{aligned} d_{man} (x,y) &= {\sum^{n}_{i=1}{|(x_i - y_i)}|} \end{aligned} \tag{3} \] Dimana, \(x\) dan \(y\) adalah dua vektor dengan panjang \(n\).
Ada pengukur untuk ketidaksamaan (dissimilarity) lainnya seperti jarak berbasis korelasi atau correlation-based distances. Jarak berbasis korelasi didefinisikan dengan mengurangkan koefisien korelasi dari 1. Berbagai jenis metode korelasi dapat digunakan sebagai berikut:
\[ \begin{aligned} d_{cor} (x,y) &= 1 - {\frac{\sum^{n}_{i=1}(x_i - \bar{x})(y_i - \bar{y})}{\sqrt{\sum^{n}_{i=1}(x_i - \bar{x})^2} \sum^{n}_{i=1}(y_i - \bar{y})^2}} \end{aligned} \tag{4} \] Korelasi Pearson mengukur derajat hubungan linier antara dua profil.
Ini adalah kasus khusus korelasi Pearson dengan \(\bar{x}\) dan \(\bar{y}\) keduanya diganti dengan nol (Eisen, et al., 1998):
\[ \begin{aligned} d_{eisen} (x,y) &= 1 - {\frac{|\sum^{n}_{i=1}x_i y_i|} {\sqrt{{\sum^{n}_{i=1}x_i^2} \sum^{n}_{i=1}y_i^2}}} \end{aligned} \tag{5} \]
Metode korelasi Spearman menghitung korelasi antara pangkat \(x\) dan pangkat variabel \(y\).
\[ \begin{aligned} d_{spear} (x,y) &= 1 - {\frac{\sum^{n}_{i=1}{(x'_i - \bar x')}{(y'_i - \bar y'_i)}} {\sqrt{{\sum^{n}_{i=1}{(x'_i - \bar x')^2}} \sum^{n}_{i=1}{(y'_i - \bar y')^2}}}} \end{aligned} \tag{6} \] Dimana \(x'_i = rank(x_i)\) dan \(y'_i = rank(y)\).
Metode korelasi Kendall mengukur korespondensi atau kecocokan antara pemeringkatan variabel \(x\) dan \(y\). Jumlah total kemungkinan pemasangan observasi \(x\) dengan \(y\) adalah \(n(n−1)/2\), di mana n adalah ukuran dari \(x\) dan \(y\). Mulai dengan mengurutkan pasangan \((x, y)\) dengan nilai \(x\). Jika \(x\) dan \(y\) berkorelasi, maka mereka akan memiliki urutan peringkat relatif yang sama. Lalu, untuk setiap \(y_i\), hitung banyaknya \(y_j>y_i\) (kesusaian pasangan (c)) dan banyaknya \(y_j<y_i\) (ketidaksesuaian pasangan (d)).
Jarak korelasi Kendall didefinisikan sebagai berikut:
\[ \begin{aligned} d_{kend} (x,y) &= 1 - {\frac{n_c - n_d} {\frac{1}{2}n(n-1)}} \end{aligned} \tag{7} \] Dimana:
Notes:
Untuk percobaan perhitungan kali ini menggunakan dataset Data Jumlah Persentase Pengguna Internet Berpendidikan SD, SMP, SMA, dan Perguruan Tinggi (PT) per Provinsi 2017. Data yang diambil akan di-subset atau hanya menggunakan 20 baris acak yang diambil dari 34 baris yang ada. Perintah subset dilakukan dengan fungsi sample(). Selanjutnya, dilakukan standardized data yang diambil dengan fungsi scale().
set.seed(123)
ss <- sample(1:34, 20)
df <- datapenggunainternet[ss, ]
df.scaled <- scale(df[,2:5])
print(df.scaled)
SD SMP SMA PT
[1,] -0.598133586 -0.51981112 -1.06672631 -1.02214303
[2,] 0.587868770 1.09676412 0.82596612 0.93927639
[3,] -1.100277273 -1.50658061 -1.40317654 -0.45516076
[4,] 2.063782813 1.97561433 1.43490265 1.38632010
[5,] 0.057982337 0.38394354 0.51829965 0.16028153
[6,] 1.095561006 1.21187800 0.94877684 1.29424606
[7,] -0.910239469 -0.79486689 -0.43668169 -1.07181455
[8,] 0.746002417 0.82779610 0.69675899 0.41348514
[9,] 2.481311127 1.63802074 1.24684872 1.51837366
[10,] -0.256897820 0.01701804 0.30849799 0.21358755
[11,] -0.387288722 -0.41189186 -0.37079885 -0.09413359
[12,] -0.968499234 -1.48001586 -1.88738342 -1.06454555
[13,] -0.003051702 0.23064284 0.47800238 0.66547726
[14,] 0.420025162 0.18747513 0.23429984 0.36865962
[15,] -1.065598842 -1.38980643 -2.15603189 -2.56196025
[16,] 0.119016377 0.05133083 0.61360590 0.51040519
[17,] -1.005951940 -1.13080019 -0.65160047 -0.72774839
[18,] -0.566229429 -0.26135832 0.40060604 -0.45516076
[19,] -0.446935625 -0.05880216 0.25284938 0.37229412
[20,] -0.262446369 -0.06655021 0.01298468 -0.38973973
attr(,"scaled:center")
SD SMP SMA PT
10.8520 46.9625 73.5370 87.2370
attr(,"scaled:scale")
SD SMP SMA PT
7.209092 18.069063 15.633813 8.254226 Dimana:
set.seed(123) : Fungsi yang digunakan untuk menentukan seed/Random Number Generator (RNG) agar data/keacakan sesuatu dapat diatur sehingga antara percobaan pertema dan seterusnya menggunakan data acak yang sama.datapenggunainternet[ss, ] : Semua baris di dalam dataset Pengguna Internet mengikuti kondisi yang sesuai pada variabel ss, kecuali kolom/field-nya.scale(df[,2:5]) : Fungsi scale() akan menghitung mean dan standar deviasi dari seluruh variabel df, lalu menskalakan setiap elemen dengan nilai-nilai hasil tersebut yaitu mengurangi dengan mean dan membaginya dengan sd. Sebagai contoh perhitungan manualnya di bawah ini.x <- df$SD # Mengambil semua baris pada kolom SD
(x - mean(x)) / sd(x) # Rumus manual fungsi scale()
[1] -0.598133586 0.587868770 -1.100277273 2.063782813 0.057982337
[6] 1.095561006 -0.910239469 0.746002417 2.481311127 -0.256897820
[11] -0.387288722 -0.968499234 -0.003051702 0.420025162 -1.065598842
[16] 0.119016377 -1.005951940 -0.566229429 -0.446935625 -0.262446369Untuk menghitungnya, kita dapat menggunakan fungsi dist().
dist() : Fungsi dari paket stats. Hanya menerima tipe data numerik sebagai input-an.dist.eucl <- dist(df.scaled, method = "euclidean")Dari argumen method juga dapat menerima metode lain, diantaranya seperti: “euclidean”, “maximum”, “manhattan”, “canberra”, “binray”, “minkowski”.
Untuk memudahkan dalam melihat jarak yang dihasilkan oleh fungsi dist(), kita bisa format ulang vektor jaraknya ke bentuk matriks menggunakan fungsi as.matrix().
# Menampilkan matriks 5x5 dari perhitungan jarak Euclidean
round(as.matrix(dist.eucl)[1:5, 1:5], 1)
1 2 3 4 5
1 0.0 3.4 1.3 5.0 2.3
2 3.4 0.0 4.1 1.9 1.2
3 1.3 4.1 0.0 5.8 3.0
4 5.0 1.9 5.8 0.0 3.0
5 2.3 1.2 3.0 3.0 0.0Hasil matriks diatas, nilai merepresentasikan jarak antar objek. Nilai-nilai pada diagonal matriks mewakili jarak antara objek dan dirinya sendiri (yang bernilai nol: 0.0, 0.0, 0.0).
Dimana:
round(..., 1) : Fungsi ini membulatkan nilai dengan menetapkan satu bilangan setelah koma.as.matrix() : Fungsi untuk mengkonversi ke bentuk matriks.(dist.eucl)[1:5, 1:5] : Mengambil baris 1 sampai 5 dan kolom 1 sampai 5 dari variabel dist.eucl.Untuk memvisualisasikan matrix jarak adalah dengan menggunakan fungsi fviz_dist() dari packages factoextra.
library(factoextra)
fviz_dist(dist.eucl) Dimana untuk heatmap diatas:
Tingkat warna sebanding dengan nilai ketidaksamaan antara hasil pengamatan: Merah jika \(dist(x_i,x_j) = 0\) dan Biru sesuai dengan nilai tertinggi jarak euclidean yang dihitung (lihat bagian legend value). Objek yang termasuk dalam cluster yang sama ditampilkan secara berurutan.
library(cluster) # Perhitungan atau komputasi algoritma clustering
library(factoextra) # Visualisasi hasil dari clustering
library(readxl) # Import dataset dari file excel
library(FSA) # Head & Tail
library(knitr) # Mencetak tabel
library(dplyr) # Data ProcessingData yang digunakan sama seperti sub-bab 2.2 yaitu data persentase siswa umur 5-24 tahun yang mengakses internet selama 3 Bulan terakhir menurut Provinsi dan Jenjang Pendidikan, 2017 (Perkotaan + Perdesaan) di Indonesia.
datapenggunainternet <- read_excel("D:/Mata Kuliah Semester VI/Komputasi Statistika/Praktikum Komstat/Tugas Akhir Praktikum Analisis Cluster/Analisis Cluster Data Internet Final Project/Data Pengguna Internet.xlsx")
df <- datapenggunainternet
df <- na.omit(object = df)
df <- scale(df[ ,2:5])
headtail(df) %>%
kable(digits = 4,
align = "c",
col.names = c("SD", "SMP", "SMA", "PT"),
caption = "**Tabel 4. Data Pengguna Internet yang Telah Distandarisasi ke dalam Bentuk *Z-Score***")| SD | SMP | SMA | PT | |
|---|---|---|---|---|
| [1,] | -1.1858 | -1.4426 | -1.6234 | -1.1448 |
| [2,] | -0.3223 | -0.1741 | -0.0458 | 0.3141 |
| [3,] | 0.0700 | 0.3802 | 0.4593 | 0.1021 |
| [32,] | -1.2111 | -1.5981 | -2.5403 | -2.8379 |
| [33,] | -0.6923 | -0.8722 | -0.9462 | -1.5531 |
| [34,] | -1.1004 | -1.6987 | -2.2390 | -1.2207 |
K-Means adalah teknik pengelompokan atau clustering yang membagi kumpulan data menjadi sekumpulan k grup, dimana k adalah jumlah grup yang sudah ditentukan sebelumnya.
Untuk menentukan jumlah cluster yang optimal dengan menggunakan fungsi fviz_nbclust().
fviz_nbclust(x = df, FUNcluster = kmeans, method = "wss") Penentuan k optimal dengan melihat pergerakan grafik yang landai setelah grafik curam. Dari gambar diatas, grafik landai setelah banyaknya k ke-2 sampai ke-3. Berdasarkan output diatas diduga bahwa jumlah cluster atau k optimal yang disarankan menurut metode
"wss" adalah 3. Maka, untuk k optimal yang dipakai pada tugas kali ini adalah 3.
Dimana penjelasan code diatas yaitu:
fviz_nbclust() : Fungsi yang menentukan dan memvisualisasikan jumlah cluster yang optimal.x = df : Variabel x untuk memanggil dataframe df.FUNcluster = kmeans : Parameter partisi atau yang berfungsi untuk membagi clustermethod = "wss" : Metode yang digunakan untuk memperkirakan jumlah cluster dapat juga menggunakan "silhouette" atau "gap_stat".Analisis cluster dapat dilakukan dengan fungsi kmeans() dan menggunakan data yang telah distandardisasi.
set.seed(123)
km.result <- kmeans(x = df, centers = 3, nstart = 25)
str(km.result) #Menampilkan struktur variabel km.result
List of 9
$ cluster : int [1:34] 3 1 1 1 1 1 1 1 1 2 ...
$ centers : num [1:3, 1:4] -0.2003 1.3 -1.0369 -0.0891 1.303 ...
..- attr(*, "dimnames")=List of 2
.. ..$ : chr [1:3] "1" "2" "3"
.. ..$ : chr [1:4] "SD" "SMP" "SMA" "PT"
$ totss : num 132
$ withinss : num [1:3] 11.66 9.24 8.02
$ tot.withinss: num 28.9
$ betweenss : num 103
$ size : int [1:3] 17 9 8
$ iter : int 2
$ ifault : int 0
- attr(*, "class")= chr "kmeans"
km.result$cluster #Menampilkan hasil K-Means Cluster dari 34 Provinsi yang menjadi 3 Cluster
[1] 3 1 1 1 1 1 1 1 1 2 2 2 2 2 2 1 2 3 3 1 1 2 2 1 1 1 1 1 1 3 3 3 3 3
fviz_cluster(object = km.result, data = df, palette = "viridis", ggtheme = theme_gray()) Dimana penjelasan code diatas yaitu:
kmeans() : Proses Clustering pada data matriks dengan perhitungan K-Means.x = df : Variabel x untuk memanggil dataframe df.centers = 3 : Jumlah k atau cluster yang didapat atau diinginkan.nstart = 25 : Jumlah random sets yang dipilih (berlaku hanya jika parameter center berisi angka)fviz_cluster() : Fungsi untuk memvisualisasikan hasil clustering.object = km.result : Objek yang berisi hasil partisi dari fungsi kmeans().data = df : df adalah data yang sudah digunakan untuk clustering. Ini hanya digunakan bila objeknya berbentuk class yang terlihat seperti di akhir baris dari kode str(km.result) diatas.ggtheme = theme_gray() : Tema yang disediakan packages ggplot2. Terdapat beberapa pilihan seperti theme_minimal(), theme_classic(), dan lain-lain.Nilai mean/centroid yang termuat masih dalam nilai yang distandardisasi, maka nilainya perlu dikembalikan ke nilai awal untuk mengidentifikasi karakteristik sebenarnya dari tiap cluster.
nilai.centroid <- datapenggunainternet %>%
mutate(Cluster = km.result$cluster) %>%
group_by(Cluster) %>%
summarise(Mean_SD = mean(SD), Mean_SMP = mean(SMP), Mean_SMA = mean(SMA), Mean_PT = mean(PT))nilai.centroid %>%
kable(digits = 5,
align = "c",
col.names = c("Cluster", "Mean_SD", "Mean_SMP", "Mean_SMA", "Mean_PT"),
caption = "**Tabel 5. Nilai Centroid Tiap Cluster**")| Cluster | Mean_SD | Mean_SMP | Mean_SMA | Mean_PT |
|---|---|---|---|---|
| 1 | 9.56118 | 46.29706 | 77.43588 | 88.54118 |
| 2 | 19.04778 | 68.85000 | 89.40556 | 95.32556 |
| 3 | 4.27125 | 27.06125 | 54.63000 | 77.67250 |
Pengelompokkan objek ke dalam cluster yang terbentuk dapat dilihat dari code berikut:
final.kmeans <- datapenggunainternet %>%
mutate(Cluster = km.result$cluster) %>%
select(`Provinsi`, Cluster) %>%
arrange(Cluster)final.kmeans %>%
kable(digits = 2,
align = "c",
col.names = c("Provinsi", "Cluster"),
caption = "**Tabel 6. Hasil Pengelompokkan Objek ke dalam Cluster**")| Provinsi | Cluster |
|---|---|
| Sumatera Utara | 1 |
| Sumatera Barat | 1 |
| Riau | 1 |
| Jambi | 1 |
| Sumatera Selatan | 1 |
| Bengkulu | 1 |
| Lampung | 1 |
| Kep. Bangka Belitung | 1 |
| Banten | 1 |
| Kalimantan Barat | 1 |
| Kalimantan Tengah | 1 |
| Kalimantan Utara | 1 |
| Sulawesi Utara | 1 |
| Sulawesi Tengah | 1 |
| Sulawesi Selatan | 1 |
| Sulawesi Tenggara | 1 |
| Gorontalo | 1 |
| Kepulauan Riau | 2 |
| DKI Jakarta | 2 |
| Jawa Barat | 2 |
| Jawa Tengah | 2 |
| DI Yogyakarta | 2 |
| Jawa Timur | 2 |
| Bali | 2 |
| Kalimantan Selatan | 2 |
| Kalimantan Timur | 2 |
| Aceh | 3 |
| Nusa Tenggara Barat | 3 |
| Nusa Tenggara Timur | 3 |
| Sulawesi Barat | 3 |
| Maluku | 3 |
| Maluku Utara | 3 |
| Papua Barat | 3 |
| Papua | 3 |
Dari Tabel 6. didapatkan hasil sebagai berikut:
# Memanggil & menampilkan hasil clustering Tabel 6. yang dikelompokkan per Cluster, kemudian menggabungkannya dengan Tabel 5. Nilai Centroid untuk mempermudah interpretasi
tabelfinal.kmeans <- read_excel("D:/Mata Kuliah Semester VI/Komputasi Statistika/Praktikum Komstat/Tugas Akhir Praktikum Analisis Cluster/Analisis Cluster Data Internet Final Project/Tabel 7. Hasil K-Means Clustering.xlsx")
tabelFINAL <- as.data.frame(c(nilai.centroid, tabelfinal.kmeans[,2]))
tabelFINAL %>%
kable(digits = 6,
align = "c",
col.names = c("Cluster", "Mean_SD", "Mean_SMP", "Mean_SMA", "Mean_PT", "Provinsi"),
caption = "**Tabel 7. Nilai Centroid & Hasil Pengelompokkan Objek Tiap Cluster**")| Cluster | Mean_SD | Mean_SMP | Mean_SMA | Mean_PT | Provinsi |
|---|---|---|---|---|---|
| 1 | 9.561176 | 46.29706 | 77.43588 | 88.54118 | Sumatera Utara, Sumatera Barat, Riau, Jambi, Sumatera Selatan, Bengkulu, Lampung, Kep. Bangka Belitung, Banten, Kalimantan Barat, Kalimantan Tengah, Kalimantan Utara, Sulawesi Utara, Sulawesi Tengah, Sulawesi Selatan, Sulawesi Tenggara, & Gorontalo |
| 2 | 19.047778 | 68.85000 | 89.40556 | 95.32556 | Kepulauan Riau, DKI Jakarta, Jawa Barat, Jawa Tengah, DI Yogyakarta, Jawa Timur, Bali, Kalimantan Selatan, & Kalimantan Timur |
| 3 | 4.271250 | 27.06125 | 54.63000 | 77.67250 | Aceh, Nusa Tenggara Barat, Nusa Tenggara Timur, Sulawesi Barat, Maluku, Maluku Utara, Papua Barat, & Papua |
Berdasarkan Tabel 7. di atas dapat diketahui bahwa Cluster 1 terdiri dari 17 Provinsi, Cluster 2 terdiri dari 9 Provinsi, & Cluster 3 terdiri dari 8 Provinsi.
Untuk mengetahui provinsi-provinsi dengan persentase pengguna internet yang tinggi, sedang atau rendah dapat dilihat dari rata-rata keseluruhan variabel pada tiap cluster yang terbentuk. Berikut merupakan rata- rata keseluruhan variabel pada tiap cluster.
# Membuat variabel baru untuk mendapatkan rata-rata persentase tiap Cluster dengan menjumlahkan rata-rata per Cluster berdasarkan jenjang pendidikan, kemudian dibagi 4 atau banyaknya variabel jenjang pendidikan (SD, SMP. SMA, & PT)
cluster1 <- (tabelFINAL[1,2] + tabelFINAL[1,3] + tabelFINAL[1,4] + tabelFINAL[1,5])/4
cluster2 <- (tabelFINAL[2,2] + tabelFINAL[2,3] + tabelFINAL[2,4] + tabelFINAL[2,5])/4
cluster3 <- (tabelFINAL[3,2] + tabelFINAL[3,3] + tabelFINAL[3,4] + tabelFINAL[3,5])/4
nilaimean <- c(cluster1, cluster2, cluster3)
rata.all <- as.data.frame(cbind(tabelFINAL$Cluster, nilaimean))
rata.all %>%
kable(digits = 2,
align = "c",
col.names = c("Cluster", "Rata-Rata"),
caption = "**Tabel 8. Rata-Rata Persentase Jumlah Pengguna Internet Tahun 2017**")| Cluster | Rata-Rata |
|---|---|
| 1 | 55.46 |
| 2 | 68.16 |
| 3 | 40.91 |
Dari uraian interpretasi di atas, dapat diketahui bahwa urutan cluster provinsi dengan persentase jumlah pengguna internet menurut jenjang pendidikan tertinggi sampai terendah yaitu Cluster 2, Cluster 1, & Cluster 3.
Amalia, D., & Sumargo, B. (2019). Pengelompokan Pengguna Internet dengan Metode K-Means Clustering. Jurnal Statistika dan Aplikasinya, 3(1), 1-12, doi: https://doi.org/10.21009/JSA.03101.
Murakami, Akira. (2015, Oktober 08). Clustering Methods With R. Diakses pada Mei 18, 2022, dari http://rstudio-pubs-static.s3.amazonaws.com/116139_6d44f83bd0be4d9fbd0e745dae7aeb3f.html.
Prabowo, R. A., Nisa, K., Faisol, A., & Setiawan, E. (2020). Simulasi Pemilihan Metode Analisis Cluster Hirarki Agglomerative Terbaik Antara Average Linkage dan Ward Pada Data Yang Mengandung Masalah Multikolinearitas. Jurnal Siger Matematika, 1(2), 49-55, doi: http://dx.doi.org/10.23960%2Fjsm.v1i2.2497.
Suhartono., & Wahyu, Muhammad Andryan. (2021, November 23). Analisis Klaster Indikator Kesehatan Pulau Jawa. Diakses pada Mei 18, 2022, dari https://rpubs.com/andryan-uinmaliki/838727.
Contact Me for Details: Herdika Diky Anto