Analisis ini bertujuan untuk melakukan clustering
atau pengelompokan pada dataset usaha pertanian perorangan tanaman
pangan di Kabupaten Flores Timur menggunakan metode
K-Means.
Langkah-langkah yang dilakukan meliputi:
1. Import data dan pra-pemrosesan.
2. Statistik deskriptif.
3. Standarisasi (Z-Score).
4. Perhitungan jarak Euclidean.
5. Penentuan jumlah klaster optimal (Elbow & Silhouette).
6. Penerapan K-Means dengan K=3.
7. Evaluasi klaster menggunakan Davies-Bouldin Index
(DBI).
library(readxl)
DATASET <- read_excel("D:/Downloads/Projet K-Means/datasetpenelitian.xlsx",
sheet = "Sheet2")
# Hapus kolom KEC
DATASET <- DATASET[, -1]
head(DATASET)
## # A tibble: 6 × 6
## X1 X2 X3 X4 X5 X6
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1665 268 94 14 0 1
## 2 887 400 864 354 9 40
## 3 1053 3 900 15 7 35
## 4 1806 110 1179 185 16 106
## 5 735 2 411 20 2 0
## 6 138 3 293 719 6 5
# Statistik deskriptif
summary(DATASET)
## X1 X2 X3 X4
## Min. : 3.0 Min. : 0.00 Min. : 85.0 Min. : 2.0
## 1st Qu.: 162.5 1st Qu.: 2.00 1st Qu.: 387.0 1st Qu.: 106.0
## Median : 506.0 Median : 6.00 Median : 623.0 Median : 185.0
## Mean : 611.0 Mean : 56.42 Mean : 897.9 Mean : 462.8
## 3rd Qu.: 869.5 3rd Qu.: 40.00 3rd Qu.:1171.5 3rd Qu.: 312.0
## Max. :1806.0 Max. :400.00 Max. :2562.0 Max. :2241.0
## X5 X6
## Min. : 0.000 Min. : 0.0
## 1st Qu.: 1.500 1st Qu.: 2.0
## Median : 3.000 Median : 38.0
## Mean : 7.158 Mean : 226.5
## 3rd Qu.: 8.000 3rd Qu.: 347.5
## Max. :43.000 Max. :1434.0
# Standar deviasi tiap variabel
sapply(DATASET, sd)
## X1 X2 X3 X4 X5 X6
## 530.4075 107.3118 764.4769 691.9983 10.2538 375.7273
#Standarisasi Data
zscore_data <- scale(DATASET)
head(zscore_data)
## X1 X2 X3 X4 X5 X6
## [1,] 1.9871514 1.9716288 -1.051561790 -0.6486174 -0.69807261 -0.6000992
## [2,] 0.5203546 3.2016897 -0.044337161 -0.1572867 0.17965104 -0.4963005
## [3,] 0.8333216 -0.4978117 0.002753861 -0.6471723 -0.01539866 -0.5096081
## [4,] 2.2529848 0.4992831 0.367709278 -0.4015069 0.86232499 -0.3206412
## [5,] 0.2337825 -0.5071304 -0.636899183 -0.6399469 -0.50302291 -0.6027607
## [6,] -0.8917672 -0.4978117 -0.791253087 0.3701713 -0.11292351 -0.5894532
#Jarak Euclidean
jarak_euclidean <- dist(zscore_data, method = "euclidean")
jarak_matrix_euclidean <- as.matrix(jarak_euclidean)
jarak_matrix_euclidean[1:5, 1:5]
## 1 2 3 4 5
## 1 0.000000 2.387807 3.002545 2.612815 3.070606
## 2 2.387807 0.000000 3.750292 3.321345 3.859914
## 3 3.002545 3.750292 0.000000 2.002322 1.007570
## 4 2.612815 3.321345 2.002322 0.000000 2.846033
## 5 3.070606 3.859914 1.007570 2.846033 0.000000
#Menentukan K Optimal
library(cluster)
library(factoextra)
## Loading required package: ggplot2
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
set.seed(1000)
# Elbow Method
fviz_nbclust(zscore_data, kmeans, k.max = 10, method = "wss") +
geom_vline(xintercept = 3, linetype = 2, color = "red") +
ggtitle("K Optimal - Metode Elbow")
# Silhouette Method
fviz_nbclust(zscore_data, kmeans, k.max = 10, method = "silhouette") +
geom_vline(xintercept = 3, linetype = 2, color = "red") +
ggtitle("K Optimal - Metode Silhouette")
#K-Means Clustering
library(amap)
set.seed(1000)
km <- Kmeans(zscore_data, 3, method = "euclidean")
km
## K-means clustering with 3 clusters of sizes 2, 4, 13
##
## Cluster means:
## X1 X2 X3 X4 X5 X6
## 1 -0.9379581 -0.4884931 2.1695949 1.973499 -0.5030229 2.3594937
## 2 0.9817923 1.6082017 -0.3569692 -0.402952 0.9598498 -0.4796661
## 3 -0.1577887 -0.4196785 -0.2239471 -0.179630 -0.2179503 -0.2154095
##
## Clustering vector:
## [1] 2 2 3 2 3 3 3 3 3 3 3 2 3 3 3 1 1 3 3
##
## Within cluster sum of squares by cluster:
## [1] 1.136992 10.561177 2.547079
##
## Available components:
##
## [1] "cluster" "centers" "withinss" "size"
dataakhir <- data.frame(zscore_data, Cluster = km$cluster)
head(dataakhir)
## X1 X2 X3 X4 X5 X6 Cluster
## 1 1.9871514 1.9716288 -1.051561790 -0.6486174 -0.69807261 -0.6000992 2
## 2 0.5203546 3.2016897 -0.044337161 -0.1572867 0.17965104 -0.4963005 2
## 3 0.8333216 -0.4978117 0.002753861 -0.6471723 -0.01539866 -0.5096081 3
## 4 2.2529848 0.4992831 0.367709278 -0.4015069 0.86232499 -0.3206412 2
## 5 0.2337825 -0.5071304 -0.636899183 -0.6399469 -0.50302291 -0.6027607 3
## 6 -0.8917672 -0.4978117 -0.791253087 0.3701713 -0.11292351 -0.5894532 3
#Visualisasi Klaster
fviz_cluster(km,
data = zscore_data,
geom = "point",
ellipse.type = "convex",
show.clust.cent = TRUE,
palette = "jco",
ggtheme = theme_minimal(base_size = 14)) +
ggtitle("Visualisasi Klaster K-Means (K=3)")
#Evaluasi Klaster (DBI)
library(clusterSim)
## Loading required package: MASS
dbi_score <- index.DB(zscore_data, km$cluster)$DB
cat("Davies-Bouldin Index (DBI):", dbi_score)
## Davies-Bouldin Index (DBI): 1.169572