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")
tgs2

Tipe 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