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.
library(rsample)
library(tidymodels)
library(caret)
library(gridExtra)
library(dplyr)
library(FactoMineR)
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
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
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
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.
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))
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)
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
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
head(knegara$cluster)
## Afghanistan Albania Algeria Angola
## 1 2 2 1
## Antigua and Barbuda Argentina
## 2 2
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
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
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
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.