Problem Statement

LSM HELP International telah berhasil mengumpulkan sekitar $ 10 juta. Sekarang CEO LSM perlu memutuskan bagaimana menggunakan uang ini secara strategis dan efektif. Jadi, CEO harus mengambil keputusan untuk memilih negara yang paling membutuhkan bantuan. Oleh karena itu, Tugas Anda sebagai ilmuwan Data adalah mengkategorikan negara menggunakan beberapa faktor sosial ekonomi dan kesehatan yang menentukan perkembangan negara secara keseluruhan. Kemudian Anda perlu menyarankan negara-negara yang paling perlu menjadi fokus CEO.

Import Library

library(rsample)
library(tidymodels)
library(caret)
library(gridExtra)
library(dplyr)
library(FactoMineR)

Data Wrangling

Read Data

Negara <- read.csv("Country-Data.csv")
head(Negara)
##               country child_mort exports health imports income inflation
## 1         Afghanistan       90.2    10.0   7.58    44.9   1610      9.44
## 2             Albania       16.6    28.0   6.55    48.6   9930      4.49
## 3             Algeria       27.3    38.4   4.17    31.4  12900     16.10
## 4              Angola      119.0    62.3   2.85    42.9   5900     22.40
## 5 Antigua and Barbuda       10.3    45.5   6.03    58.9  19100      1.44
## 6           Argentina       14.5    18.9   8.10    16.0  18700     20.90
##   life_expec total_fer  gdpp
## 1       56.2      5.82   553
## 2       76.3      1.65  4090
## 3       76.5      2.89  4460
## 4       60.1      6.16  3530
## 5       76.8      2.13 12200
## 6       75.8      2.37 10300

Description

Cek Missing Data

Pertama kita cek terlebih dahulu apakah ada missing data pada dataset kita

anyNA(Negara)
## [1] FALSE
# cek NA
colSums(is.na(Negara))
##    country child_mort    exports     health    imports     income  inflation 
##          0          0          0          0          0          0          0 
## life_expec  total_fer       gdpp 
##          0          0          0

Dari tabel di atas bisa kita ketahui bahwa tidak ada missing data pada dataset kita

Data Cleaning

Karena kita hanya butuh kolom int/dbl karena analisis PCA menggunakan nilai variance. Setelah mengecek missing data, kita dapat membuang kolom country.

rownames(Negara) <- Negara$country
# data untuk PCA
Negara <- Negara %>% 
          select(-country)
head(Negara)
##                     child_mort exports health imports income inflation
## Afghanistan               90.2    10.0   7.58    44.9   1610      9.44
## Albania                   16.6    28.0   6.55    48.6   9930      4.49
## Algeria                   27.3    38.4   4.17    31.4  12900     16.10
## Angola                   119.0    62.3   2.85    42.9   5900     22.40
## Antigua and Barbuda       10.3    45.5   6.03    58.9  19100      1.44
## Argentina                 14.5    18.9   8.10    16.0  18700     20.90
##                     life_expec total_fer  gdpp
## Afghanistan               56.2      5.82   553
## Albania                   76.3      1.65  4090
## Algeria                   76.5      2.89  4460
## Angola                    60.1      6.16  3530
## Antigua and Barbuda       76.8      2.13 12200
## Argentina                 75.8      2.37 10300

Exploratory Data Analysis

Sebelum ke proses lebih lanjut, mari kita cek apakah antar variable memiliki skala yang sama.

cov(Negara)
##               child_mort       exports        health      imports        income
## child_mort    1626.42271   -351.651128   -22.1999431  -124.201982   -407635.982
## exports       -351.65113    751.418298    -8.6145337   489.350622    273094.598
## health         -22.19994     -8.614534     7.5451162     6.365141      6861.669
## imports       -124.20198    489.350622     6.3651406   586.104198     57128.722
## income     -407635.98227 273094.598023  6861.6690711 57128.721588 371643894.155
## inflation      122.89363    -31.090078    -7.4150930   -63.208898    -30110.122
## life_expec    -318.00826     77.110598     5.1468078    11.710284    104916.786
## total_fer       51.80116    -13.279671    -0.8178281    -5.829066    -14645.728
## gdpp       -357046.30615 210378.470377 17417.9712174 51250.050217 316443012.157
##                inflation    life_expec     total_fer         gdpp
## child_mort    122.893627   -318.008262  5.180116e+01   -357046.31
## exports       -31.090078     77.110598 -1.327967e+01    210378.47
## health         -7.415093      5.146808 -8.178281e-01     17417.97
## imports       -63.208898     11.710284 -5.829066e+00     51250.05
## income     -30110.122438 104916.785517 -1.464573e+04 316443012.16
## inflation     111.739781    -22.533965  5.071509e+00    -42940.42
## life_expec    -22.533965     79.088507 -1.024358e+01     97814.72
## total_fer       5.071509    -10.243585  2.291734e+00    -12622.33
## gdpp       -42940.421636  97814.722603 -1.262233e+04 335941419.96

Di atas adalah distribusi nilai covariance dari data yang belum distandarisasi (scale). Variance dari masing-masing variabel berbeda jauh karena range/skala dari tiap variabel berbeda, begitupun covariance. Nilai variance dan covariance dipengaruhi oleh skala dari data. Semakin tinggi skala, nilai variance atau covariance akan semakin tinggi.

Data dengan perbedaan skala antar variabel yang tinggi tidak baik untuk langsung dianalisis PCA karena dapat menimbulkan bias. PC1 dianggap telah menangkap variansi tertinggi dan PC selanjutnya dianggap tidak memberikan informasi. Sebagai contoh:

Perhatikan bahwa seluruh informasi hanya jatuh di PC1. Oleh sebab itu harus kita scaling terlebih dahulu data kita.

Data Pre-processing: Scaling

Scaling perlu dilakukan sebelum PCA agar antar variabel memiliki skala yang tidak jauh berbeda.

# scaling 
Negara_scale <- scale(Negara)
# melihat variansi yang dirangkum tiap PC
plot(prcomp(Negara_scale))

Principal Component Analysis

Untuk melakukan principle component analysis di R dapat menggunakan fungsi prcomp().

#menggunakan data yang sudah di scale
prnegara <- prcomp(Negara_scale)
# cek nilai baru di tiap PC
head(prnegara$x)
##                             PC1         PC2        PC3         PC4        PC5
## Afghanistan         -2.90428986 -0.09533386  0.7159652 -1.00224038  0.1578353
## Albania              0.42862224  0.58639208  0.3324855  1.15757715 -0.1741535
## Algeria             -0.28436983  0.45380957 -1.2178421  0.86551146 -0.1560055
## Angola              -2.92362976 -1.69047094 -1.5204709 -0.83710739  0.2723897
## Antigua and Barbuda  1.03047668 -0.13624894  0.2250441  0.84452276  0.1924282
## Argentina            0.02234007  1.77385167 -0.8673884  0.03685602 -0.9781148
##                              PC6         PC7         PC8         PC9
## Afghanistan          0.253834026 -0.38185183 -0.41383141 -0.01410602
## Albania             -0.084325021 -0.24817249  0.22037967  0.17279609
## Algeria              0.400491017  0.08695208  0.18360988  0.08378519
## Angola               0.546352696  0.43951279  0.35493006 -0.09106518
## Antigua and Barbuda  0.206298298 -0.24125232  0.02361042  0.09398709
## Argentina            0.003585307  0.15038009 -0.12557185  0.12570099
biplot(prnegara)

K-mean clustering

library(factoextra)
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
fviz_nbclust(x = Negara_scale, FUNcluster = kmeans, method = "wss")

Dari grafik elbow terlihat hanya sampai cluster 3 untuk bentuk elbow yg optimal. Dari visualisasi tersebut maka saya putuskan untuk menggunakan nilai K nya adalah 3.

RNGkind(sample.kind = "Rounding")
## Warning in RNGkind(sample.kind = "Rounding"): non-uniform 'Rounding' sampler
## used
set.seed(100)

knegara <- kmeans(x = Negara_scale, centers = 3)

Dari hasil clustering k-means, saya membuat field baru untuk saya masukkan value tersebut

Negara$cluster <- as.factor(knegara$cluster)

Berikut adalah hasil jumlah data dari masing-masing cluster

knegara$size
## [1] 68 96  3
  1. Letak pusat cluster/centroid, biasa digunakan untuk profiling cluster
knegara$centers
##   child_mort    exports       health     imports     income  inflation
## 1  0.9425200 -0.3980176 -0.264137054 -0.13416458 -0.6700512  0.3137840
## 2 -0.6411665  0.1281518  0.187351410 -0.04666739  0.3986125 -0.2065545
## 3 -0.8464575  4.9208731 -0.008138555  4.53442030  2.4322274 -0.5026943
##   life_expec  total_fer       gdpp
## 1 -0.9721385  0.9683006 -0.5992197
## 2  0.6503748 -0.6535125  0.3484011
## 3  1.2231457 -1.0357477  2.4334786
  1. Label cluster untuk tiap observasi
head(knegara$cluster)
##         Afghanistan             Albania             Algeria              Angola 
##                   1                   2                   2                   1 
## Antigua and Barbuda           Argentina 
##                   2                   2

Hasil Cluster

Cluster 1

cluster1 <- Negara %>% 
  filter(cluster==1)

head(cluster1,15)
##                          child_mort exports health imports income inflation
## Afghanistan                    90.2   10.00   7.58    44.9   1610     9.440
## Angola                        119.0   62.30   2.85    42.9   5900    22.400
## Bangladesh                     49.4   16.00   3.52    21.8   2440     7.140
## Benin                         111.0   23.80   4.10    37.2   1820     0.885
## Bolivia                        46.6   41.20   4.84    34.3   5410     8.780
## Botswana                       52.5   43.60   8.30    51.3  13300     8.920
## Burkina Faso                  116.0   19.20   6.74    29.6   1430     6.810
## Burundi                        93.6    8.92  11.60    39.2    764    12.300
## Cambodia                       44.4   54.10   5.68    59.5   2520     3.120
## Cameroon                      108.0   22.20   5.13    27.0   2660     1.910
## Central African Republic      149.0   11.80   3.98    26.5    888     2.010
## Chad                          150.0   36.80   4.53    43.5   1930     6.390
## Comoros                        88.2   16.50   4.51    51.7   1410     3.870
## Congo, Dem. Rep.              116.0   41.10   7.91    49.6    609    20.800
## Congo, Rep.                    63.9   85.10   2.46    54.7   5190    20.700
##                          life_expec total_fer gdpp cluster
## Afghanistan                    56.2      5.82  553       1
## Angola                         60.1      6.16 3530       1
## Bangladesh                     70.4      2.33  758       1
## Benin                          61.8      5.36  758       1
## Bolivia                        71.6      3.20 1980       1
## Botswana                       57.1      2.88 6350       1
## Burkina Faso                   57.9      5.87  575       1
## Burundi                        57.7      6.26  231       1
## Cambodia                       66.1      2.88  786       1
## Cameroon                       57.3      5.11 1310       1
## Central African Republic       47.5      5.21  446       1
## Chad                           56.5      6.59  897       1
## Comoros                        65.9      4.75  769       1
## Congo, Dem. Rep.               57.5      6.54  334       1
## Congo, Rep.                    60.4      4.95 2740       1

Cluster 2

cluster2 <- Negara %>% 
  filter(cluster==2)

head(cluster2,15)
##                     child_mort exports health imports income inflation
## Albania                   16.6    28.0   6.55    48.6   9930     4.490
## Algeria                   27.3    38.4   4.17    31.4  12900    16.100
## Antigua and Barbuda       10.3    45.5   6.03    58.9  19100     1.440
## Argentina                 14.5    18.9   8.10    16.0  18700    20.900
## Armenia                   18.1    20.8   4.40    45.3   6700     7.770
## Australia                  4.8    19.8   8.73    20.9  41400     1.160
## Austria                    4.3    51.3  11.00    47.8  43200     0.873
## Azerbaijan                39.2    54.3   5.88    20.7  16000    13.800
## Bahamas                   13.8    35.0   7.89    43.7  22900    -0.393
## Bahrain                    8.6    69.5   4.97    50.9  41100     7.440
## Barbados                  14.2    39.5   7.97    48.7  15300     0.321
## Belarus                    5.5    51.4   5.61    64.5  16200    15.100
## Belgium                    4.5    76.4  10.70    74.7  41100     1.880
## Belize                    18.8    58.2   5.20    57.5   7880     1.140
## Bhutan                    42.7    42.5   5.20    70.7   6420     5.990
##                     life_expec total_fer  gdpp cluster
## Albania                   76.3      1.65  4090       2
## Algeria                   76.5      2.89  4460       2
## Antigua and Barbuda       76.8      2.13 12200       2
## Argentina                 75.8      2.37 10300       2
## Armenia                   73.3      1.69  3220       2
## Australia                 82.0      1.93 51900       2
## Austria                   80.5      1.44 46900       2
## Azerbaijan                69.1      1.92  5840       2
## Bahamas                   73.8      1.86 28000       2
## Bahrain                   76.0      2.16 20700       2
## Barbados                  76.7      1.78 16000       2
## Belarus                   70.4      1.49  6030       2
## Belgium                   80.0      1.86 44400       2
## Belize                    71.4      2.71  4340       2
## Bhutan                    72.1      2.38  2180       2

Cluster 3

cluster3 <- Negara %>% 
  filter(cluster==3)

head(cluster3)
##            child_mort exports health imports income inflation life_expec
## Luxembourg        2.8     175   7.77     142  91700     3.620       81.3
## Malta             6.8     153   8.65     154  28300     3.830       80.3
## Singapore         2.8     200   3.96     174  72100    -0.046       82.7
##            total_fer   gdpp cluster
## Luxembourg      1.63 105000       3
## Malta           1.36  21100       3
## Singapore       1.15  46600       3

Kesimpulan

Dari hasil tersebut maka dataset tersebut dapat di-cluster-kan dan menjadi 3 cluster. Dari hasil sekilas data diatas terlihat bahwa cluster 3 merupakan Negara yang memiliki child mortality (child_mort) yang sangat rendah dan nilai exports,imports dan income yang tinggi. Meskipun cluster 1 dan 2 terlihat memiliki value yang variatif. Namun di cluster pertama terlihat memiliki nilai variable child_mort dan total_fer yang cukup tinggi.

Lebih jelasnya bisa dilihat dari grafik berikut:

Dari Grafik di atas bisa kita simpulkan bahwa Negara yang sangat perlu dibantu adalah negara yang berada pada Cluster 1, karena memiliki Jumlah kelahiran (total_fer) tinggi namun jumlah kematian anak (child_mor)juga tinggi dan juga memiliki angka inflasi (inflation) yang tinggi.