Multivariate Data Exploration
Package
library(tidyverse)## Warning: package 'tidyverse' was built under R version 4.0.5
## -- Attaching packages --------------------------------------- tidyverse 1.3.1 --
## v ggplot2 3.3.5 v purrr 0.3.4
## v tibble 3.1.0 v dplyr 1.0.5
## v tidyr 1.1.3 v stringr 1.4.0
## v readr 1.4.0 v forcats 0.5.1
## Warning: package 'ggplot2' was built under R version 4.0.5
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
library(readxl)## Warning: package 'readxl' was built under R version 4.0.5
library(scatterPlotMatrix)## Warning: package 'scatterPlotMatrix' was built under R version 4.0.5
library(factoextra)## Warning: package 'factoextra' was built under R version 4.0.5
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
Data
Multivariate Data Exploration atau Eksplorasi Data Multivariat dalam
kesempatan ini menggunakan Data yang bersumber dari Indonesia Database
for Policy and Economic Research dari Worldbank Data yang sejalan dengan
topik paper yang bertemakan
Pembangunan dan Pemberdayaan Masyarakat Desa / Kelurahan di Indonesia.
Namun dalam eksplorasi ini, data yang digunakan berupa
Data Kabupaten karena menyesuaikan sumber data yang ada
dari website worldbank Data.
Variabel yang digunakan dalam data ini adalah sebagai berikut:
Kab/Kota = ID Kabupaten atau KOta di Indonesia yang menjadi
Pengamatan Lahir = Kelahiran yang ditolong oleh Tenaga
Kesehatan Terampil (dalam % dari total kelahiran) Listrik =
Akses Rumah Tangga terhadap Listrik: Total (dalam % dari total rumah
tangga) Sanitasi = Akses Rumah Tangga terhadap Sanitasi
yang Aman (dalam % dari total Rumah Tangga)
Denga total pengamatan sebanyak 223 Kabupaten/Kota di Indonesia pada Tahun 2020.
Import Data
tgs2 <- read_excel("D:/VISUALISASI DATA/pembangunan.xlsx")
tgs2Tipe Data
untuk mengetahui tipe data di setiap kolom digunakan perintah
str
str(tgs2)## tibble [223 x 4] (S3: tbl_df/tbl/data.frame)
## $ Kab/kota: chr [1:223] "Adm. Kepulauan Seribu, Kab." "Jakarta Barat, Kota" "Jakarta Pusat, Kota" "Jakarta Selatan, Kota" ...
## $ Lahir : num [1:223] 100 98.2 98.8 100 100 ...
## $ Listrik : num [1:223] 100 100 100 100 100 ...
## $ Sanitasi: num [1:223] 89.9 83.1 67.3 90.2 90.8 ...
Ringkasan Data
Pertama-tama perlu melihat gambaran umum dari data
summary(tgs2)## Kab/kota Lahir Listrik Sanitasi
## Length:223 Min. : 4.636 Min. : 12.99 Min. : 2.836
## Class :character 1st Qu.: 83.742 1st Qu.: 94.33 1st Qu.:71.574
## Mode :character Median : 97.952 Median : 99.88 Median :81.452
## Mean : 88.641 Mean : 94.32 Mean :77.211
## 3rd Qu.:100.000 3rd Qu.:100.00 3rd Qu.:87.535
## Max. :100.000 Max. :100.00 Max. :97.644
Pemilihan variabel menyesuaikan dengan tema pembangunan dan pemberdayaan masyarakat di Indonesia. Variabel Kab/Kota memuat daftar Kab/Kota yang ada di Indonesia yang menjadi objek penelitian. Variabel lahir memuat persentase angka kelahiran yang ditolong oleh tenaga ahli. Hal ini untuk menunjukkan ketersediaan dan kecukupann tenaga ahli medis di kab/kota terkait. Semakin tinggi persentasi angka kelahiran yang ditolong tenaga ahli mengindikasikan daerah tersebut sudah cukup berkembang dan berdaya. Variabel Listrik, memuat persentase rumah tangga yang sudah menikmati listrik dari PLN. Variabel Sanitasi, memuat persentase rumah tangga yang sudah menikmati dan merasakan air bersih untuk kebutuhan kesehariannya
Scatter Plot
#khusus numerik
tgs <- tgs2 %>% select(Lahir,Listrik,Sanitasi)
tgs#Scatter Plot
scatterPlotMatrix(tgs)Dari Scatterplot Matriks diatas, didapatakan visualisasi data berupa histogram masing-masing variabel, plot data, dan nilai korelasi dengan menunjukkan pointer ke Correlation Circular treemap. Dari Histogram msing-masing variabel menunjukkan bahwa di setiap kab/kota masih terjadi perbedaan pembangunan dan pemberdayaan daerah yang cukup signifikan. Dilihat dari plot data, data tidak menyebar normal tetapi cenderung bergerombol di daerah tertentu artinya masih terjadi kesenjangan angka kelahiran, Penggunaan listrik, dan Kebutuhan Sanitasi Air bersih. Dilihat dari Correlation Circular treemap, nilai korelasi antara variabel listrik dengan lahir sebesar 0.756, Sanitasi dengan Lahir 0.621, Sanitasi dengan Listrik 0.572. Nilai korelasi antarvariabel menunjukkan korelasi yang positif dan menunjukkan hubungan yang cukup kuat
K-Means
Procedures:
Data Pre-processing Decide number of cluster K-means application Cluster interpretation
dim(tgs)## [1] 223 3
head(tgs)Standardisasi
tgs_standardize <- scale(tgs)
apply(tgs_standardize,2,mean)## Lahir Listrik Sanitasi
## -3.215948e-16 1.150645e-16 3.414977e-16
apply(tgs_standardize,2,sd)## Lahir Listrik Sanitasi
## 1 1 1
Optimal number
fviz_nbclust(tgs_standardize,FUNcluster = kmeans,method = "silhouette")fviz_nbclust(tgs_standardize,FUNcluster = kmeans,method = "wss")fviz_nbclust(tgs_standardize,FUNcluster = kmeans, k.max = 20, method = "wss")Application
kmeans_tgs <- eclust(tgs,stand = TRUE,FUNcluster = "kmeans",k=4,graph = F)
kmeans_tgs$cluster## [1] 4 4 3 4 4 4 4 4 4 4 4 4 4 4 4 3 4 3 4 4 3 4 4 4 4 4 4 4 4 4 4 3 4 4 4 4 4
## [38] 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 3 4 4 4 4 4 4 4 3 4
## [75] 4 4 4 4 4 3 4 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 3 4 4 4 3 4 3 4 3 3 3 4 4 4
## [112] 4 3 3 4 4 4 4 4 4 3 4 4 4 4 3 4 4 3 4 3 3 3 3 3 4 4 4 2 3 3 4 3 3 4 3 3 2
## [149] 3 4 4 2 4 3 2 3 3 3 2 4 3 2 3 2 2 3 4 3 2 2 4 3 3 3 3 3 2 4 3 2 3 3 3 3 4
## [186] 3 1 2 2 4 4 2 3 3 1 4 3 2 1 2 4 4 1 4 2 2 2 3 2 4 4 4 1 2 1 1 1 3 4 1 4 1
## [223] 2
kmeans_tgs$centers## Lahir Listrik Sanitasi
## 1 -2.87360561 -3.4577755 -2.7274012
## 2 -1.59323490 -1.0681032 -0.6806229
## 3 0.02031918 0.1570154 -0.5901911
## 4 0.47942227 0.3757557 0.5670078
Interpretation
aggregate(tgs,by =list(cluster=kmeans_tgs$cluster),
FUN = mean)fviz_cluster(kmeans_tgs)pca_tgs <- prcomp(tgs_standardize)
pca_tgs$rotation## PC1 PC2 PC3
## Lahir -0.5998240 0.2861889 -0.7471995
## Listrik -0.5868795 0.4773837 0.6539704
## Sanitasi -0.5438599 -0.8307832 0.1183878
Hierarchical Clustering
Procedures:
Data Pre-processing Linkage Method and Number of Cluster Selection Hierarchical Clustering Implementation Interpretation of the Formed Cluster
#complete
fviz_nbclust(tgs_standardize,FUNcluster = hcut,method = "silhouette",
hc_method = "complete",hc_metric = "euclidean")#average
fviz_nbclust(tgs_standardize,FUNcluster = hcut,method = "silhouette",
hc_method = "average",hc_metric = "euclidean")#centroid
fviz_nbclust(tgs_standardize,FUNcluster = hcut,method = "silhouette",
hc_method = "centroid",hc_metric = "euclidean")#ward
fviz_nbclust(tgs_standardize,FUNcluster = hcut,method = "silhouette",
hc_method = "ward.D",hc_metric = "euclidean")linkage_methods <- c("complete","average","centroid","ward.D")
hc_tgs_dend <- lapply(linkage_methods, function(i)
hclust(dist(tgs_standardize,method = 'euclidean'),method = i)
)
#complete
fviz_dend(hc_tgs_dend[[1]])## Warning: `guides(<scale> = FALSE)` is deprecated. Please use `guides(<scale> =
## "none")` instead.
#average
fviz_dend(hc_tgs_dend[[2]])## Warning: `guides(<scale> = FALSE)` is deprecated. Please use `guides(<scale> =
## "none")` instead.
#centroid
fviz_dend(hc_tgs_dend[[3]])## Warning: `guides(<scale> = FALSE)` is deprecated. Please use `guides(<scale> =
## "none")` instead.
#ward
fviz_dend(hc_tgs_dend[[4]])## Warning: `guides(<scale> = FALSE)` is deprecated. Please use `guides(<scale> =
## "none")` instead.
Implementation
hc_tgs <- eclust(tgs,stand = TRUE,FUNcluster = "hclust",k=5,hc_method = "complete",hc_metric = "euclidean",graph = F)
hc_tgs$cluster## [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [38] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [75] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [112] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [149] 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [186] 1 2 1 1 1 1 2 1 1 2 1 1 1 3 1 1 1 2 1 1 1 1 4 2 1 1 1 2 5 2 2 2 1 1 4 1 2
## [223] 2
Interpretation
aggregate(tgs,by =list(cluster=hc_tgs$cluster),
FUN = mean)fviz_cluster(hc_tgs)pca_tgs <- prcomp(tgs_standardize)
pca_tgs$rotation## PC1 PC2 PC3
## Lahir -0.5998240 0.2861889 -0.7471995
## Listrik -0.5868795 0.4773837 0.6539704
## Sanitasi -0.5438599 -0.8307832 0.1183878
Referensi
Blog: https://profeksis.blogspot.com/, Email: mistereko@apps.ipb.ac.id, Rpubs: https://rpubs.com/profeksis↩︎