source("explorationFunction.R")
library(ggplot2)
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ lubridate 1.9.3 ✔ tibble 3.2.1
## ✔ purrr 1.0.2 ✔ tidyr 1.3.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ✖ dplyr::select() masks MASS::select()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(dplyr)
library(data.table)
##
## Attaching package: 'data.table'
##
## The following objects are masked from 'package:lubridate':
##
## hour, isoweek, mday, minute, month, quarter, second, wday, week,
## yday, year
##
## The following objects are masked from 'package:dplyr':
##
## between, first, last
##
## The following object is masked from 'package:purrr':
##
## transpose
global_hunger_index <- read.csv("C:/Users/DELL/OneDrive/Documents/Kampus/DMV/Tugas/global-hunger-index.csv")
child_under <- read.csv("C:/Users/DELL/OneDrive/Documents/Kampus/DMV/Tugas/share-of-children-underweight.csv")
child_under_wasting <- read.csv("C:/Users/DELL/OneDrive/Documents/Kampus/DMV/Tugas/share-of-children-with-a-weight-too-low-for-their-height-wasting.csv")
child_stunting <- read.csv("C:/Users/DELL/OneDrive/Documents/Kampus/DMV/Tugas/share-of-children-younger-than-5-who-suffer-from-stunting.csv")
b <- merge(child_under, child_stunting, all=T)
b <- merge(b, child_under_wasting, all=T)
b <- merge(b, global_hunger_index, all =T)
colnames(b)[4] = "Prevelance underweight under 5"
colnames(b)[5] = "Prevalence stunting under 5"
colnames(b)[6] = "Prevalence wasting weight under 5"
colnames(b)[7] = "Hunger Indexes"
str(b)
## 'data.frame': 1603 obs. of 8 variables:
## $ Entity : chr "Afghanistan" "Afghanistan" "Afghanistan" "Afghanistan" ...
## $ Code : chr "AFG" "AFG" "AFG" "AFG" ...
## $ Year : int 1997 2000 2004 2006 2012 2013 2018 2021 1997 2000 ...
## $ Prevelance underweight under 5 : num 44.9 NA 32.9 NA NA ...
## $ Prevalence stunting under 5 : num 53.2 NA 59.3 NA NA ...
## $ Prevalence wasting weight under 5: num 18.2 NA 8.6 NA NA ...
## $ Hunger Indexes : num NA 50.9 NA 42.7 34.3 NA NA 28.3 NA 20.7 ...
## $ X411773.annotations : chr NA "" NA "" ...
summary(b)
## Entity Code Year
## Length:1603 Length:1603 Min. :1983
## Class :character Class :character 1st Qu.:2000
## Mode :character Mode :character Median :2007
## Mean :2007
## 3rd Qu.:2014
## Max. :2021
##
## Prevelance underweight under 5 Prevalence stunting under 5
## Min. : 0.00 Min. : 0.00
## 1st Qu.: 4.60 1st Qu.:15.18
## Median :13.17 Median :28.00
## Mean :15.07 Mean :28.14
## 3rd Qu.:22.10 3rd Qu.:39.35
## Max. :66.80 Max. :73.60
## NA's :377 NA's :663
## Prevalence wasting weight under 5 Hunger Indexes X411773.annotations
## Min. : 0.000 Min. : 2.50 Length:1603
## 1st Qu.: 2.800 1st Qu.: 8.80 Class :character
## Median : 5.600 Median :17.00 Mode :character
## Mean : 6.701 Mean :19.82
## 3rd Qu.: 9.600 3rd Qu.:28.55
## Max. :25.300 Max. :65.10
## NA's :660 NA's :1132
b <- subset(b, select = -c(X411773.annotations))
EXPLANATION : menghapus kolom yang tidak dibutuhkan
clean_data <- b[rowSums(is.na(b))<=2, ]
EXPLANATION : membuang baris yang NA valuenya lbh dari 2 karena jika membiarkan baris yang NA valuenya lbh dari 2, data akan memiliki terlalu banyak NA value sehingga jika kita mengganti NA value per variable nya dengan mean/median per variablenya maka akan menghasilkan lbh banyak outlier dan merusak data
str(clean_data)
## 'data.frame': 949 obs. of 7 variables:
## $ Entity : chr "Afghanistan" "Afghanistan" "Afghanistan" "Afghanistan" ...
## $ Code : chr "AFG" "AFG" "AFG" "AFG" ...
## $ Year : int 1997 2004 2013 2018 1997 2000 2005 2009 2017 1987 ...
## $ Prevelance underweight under 5 : num 44.9 32.9 24.6 19.1 7.1 ...
## $ Prevalence stunting under 5 : num 53.2 59.3 40.4 38.2 20.4 ...
## $ Prevalence wasting weight under 5: num 18.2 8.6 9.5 5.1 8.1 ...
## $ Hunger Indexes : num NA NA NA NA NA 20.7 NA NA NA NA ...
summary(clean_data)
## Entity Code Year
## Length:949 Length:949 Min. :1983
## Class :character Class :character 1st Qu.:1998
## Mode :character Mode :character Median :2006
## Mean :2005
## 3rd Qu.:2013
## Max. :2020
##
## Prevelance underweight under 5 Prevalence stunting under 5
## Min. : 0.00 Min. : 0.00
## 1st Qu.: 4.50 1st Qu.:15.20
## Median :12.72 Median :28.00
## Mean :15.28 Mean :28.14
## 3rd Qu.:22.55 3rd Qu.:39.30
## Max. :66.80 Max. :73.60
## NA's :14 NA's :13
## Prevalence wasting weight under 5 Hunger Indexes
## Min. : 0.000 Min. : 2.50
## 1st Qu.: 2.800 1st Qu.:12.40
## Median : 5.650 Median :20.60
## Mean : 6.706 Mean :22.94
## 3rd Qu.: 9.600 3rd Qu.:31.00
## Max. :25.300 Max. :57.90
## NA's :7 NA's :836
clean_data <- subset(clean_data, select = -c(`Hunger Indexes`))
EXPLANATION : kita menghapus kolom hunger indexes karena berdasarkan summary dari clean_data na value di variable “Hunger indexes” terlalu banyak sehingga jika tidak dihapus maka dapat merusak kolom yang lain dan merusak data
for (i in 4:6){
mean_2 <- mean(unlist(clean_data[i]), na.rm = T)
clean_data[[i]] <- replace(clean_data[[i]], is.na(clean_data[[i]]), mean_2)
}
summary(clean_data)
## Entity Code Year
## Length:949 Length:949 Min. :1983
## Class :character Class :character 1st Qu.:1998
## Mode :character Mode :character Median :2006
## Mean :2005
## 3rd Qu.:2013
## Max. :2020
## Prevelance underweight under 5 Prevalence stunting under 5
## Min. : 0.00 Min. : 0.00
## 1st Qu.: 4.60 1st Qu.:15.30
## Median :13.00 Median :28.14
## Mean :15.28 Mean :28.14
## 3rd Qu.:22.10 3rd Qu.:39.20
## Max. :66.80 Max. :73.60
## Prevalence wasting weight under 5
## Min. : 0.000
## 1st Qu.: 2.800
## Median : 5.700
## Mean : 6.706
## 3rd Qu.: 9.500
## Max. :25.300
data_rate <- clean_data %>% mutate(clean_data, hunger_rate = (`Prevelance underweight under 5` + `Prevalence stunting under 5` + `Prevalence wasting weight under 5`) / 3)
EXPLANATION : cari rata - rata hunger ratenya per negara lalu diurutkan secara descending supaya dapat terlihat negara mana yang rata rata hunger ratenya paling tinggi
summary(data_rate)
## Entity Code Year
## Length:949 Length:949 Min. :1983
## Class :character Class :character 1st Qu.:1998
## Mode :character Mode :character Median :2006
## Mean :2005
## 3rd Qu.:2013
## Max. :2020
## Prevelance underweight under 5 Prevalence stunting under 5
## Min. : 0.00 Min. : 0.00
## 1st Qu.: 4.60 1st Qu.:15.30
## Median :13.00 Median :28.14
## Mean :15.28 Mean :28.14
## 3rd Qu.:22.10 3rd Qu.:39.20
## Max. :66.80 Max. :73.60
## Prevalence wasting weight under 5 hunger_rate
## Min. : 0.000 Min. : 0.000
## 1st Qu.: 2.800 1st Qu.: 8.033
## Median : 5.700 Median :16.000
## Mean : 6.706 Mean :16.711
## 3rd Qu.: 9.500 3rd Qu.:23.367
## Max. :25.300 Max. :51.667
EXPLANATION : Bisa dilihat bahwa variabel “Prevalence stunting under 5” dan “hunger_rate” memiliki nilai median dan mean yang sama sehingga kedua variabel tersebut dapat dikatakan terdistribusi normal (zero skewness) sedangkan variabel lainnya seperti “Prevalence wasting weight under 5” dan “Prevelance underweight under 5” memiliki nilai mean yang lebih besar daripada mediannya sehingga dapat dikatakan berbentuk right skewed
boxplot(data_rate$`Prevelance underweight under 5`)
boxplot(data_rate$`Prevalence stunting under 5`)
boxplot(data_rate$`Prevalence wasting weight under 5`)
boxplot(data_rate$hunger_rate)
EXPLANATION : Bisa dilihat bahwa hanya variabel “Prevalence stunting
under 5” yang tidak mempunyai outlier
FindOutliers(data_rate$`Prevelance underweight under 5`)
## $summary
## method n nMiss nOut lowLim upLim minNom maxNom
## 1 ThreeSigma 949 0 12 -21.88501 52.45015 0 51.2
## 2 Hampel 949 0 13 -24.80630 50.80630 0 50.7
## 3 BoxplotRule 949 0 16 -4.15000 48.35000 0 47.1
##
## $threeSigma
## index values type
## 1 40 66.8 U
## 2 41 61.5 U
## 3 42 61.2 U
## 4 43 60.6 U
## 5 44 56.1 U
## 6 45 58.0 U
## 7 46 55.2 U
## 8 47 54.0 U
## 9 48 53.6 U
## 10 337 55.5 U
## 11 338 52.8 U
## 12 612 55.5 U
##
## $Hampel
## index values type
## 1 40 66.8 U
## 2 41 61.5 U
## 3 42 61.2 U
## 4 43 60.6 U
## 5 44 56.1 U
## 6 45 58.0 U
## 7 46 55.2 U
## 8 47 54.0 U
## 9 48 53.6 U
## 10 337 55.5 U
## 11 338 52.8 U
## 12 339 51.2 U
## 13 612 55.5 U
##
## $boxplotRule
## index values type
## 1 40 66.8 U
## 2 41 61.5 U
## 3 42 61.2 U
## 4 43 60.6 U
## 5 44 56.1 U
## 6 45 58.0 U
## 7 46 55.2 U
## 8 47 54.0 U
## 9 48 53.6 U
## 10 49 50.7 U
## 11 50 49.5 U
## 12 337 55.5 U
## 13 338 52.8 U
## 14 339 51.2 U
## 15 612 55.5 U
## 16 808 49.5 U
FindOutliers(data_rate$`Prevalence wasting weight under 5`)
## $summary
## method n nMiss nOut lowLim upLim minNom maxNom
## 1 ThreeSigma 949 0 7 -8.0493654 21.46207 0 21.3
## 2 Hampel 949 0 16 -8.5329593 19.93296 0 19.9
## 3 BoxplotRule 949 0 19 -0.5500001 19.55000 0 19.4
##
## $threeSigma
## index values type
## 1 215 21.5 U
## 2 443 22.4 U
## 3 494 22.0 U
## 4 585 25.3 U
## 5 629 24.0 U
## 6 753 24.6 U
## 7 754 22.7 U
##
## $Hampel
## index values type
## 1 48 20.7 U
## 2 215 21.5 U
## 3 337 20.3 U
## 4 338 20.0 U
## 5 342 20.0 U
## 6 344 20.8 U
## 7 443 22.4 U
## 8 494 22.0 U
## 9 585 25.3 U
## 10 603 20.6 U
## 11 612 20.8 U
## 12 629 24.0 U
## 13 753 24.6 U
## 14 754 22.7 U
## 15 761 21.3 U
## 16 808 21.3 U
##
## $boxplotRule
## index values type
## 1 48 20.7 U
## 2 215 21.5 U
## 3 337 20.3 U
## 4 338 20.0 U
## 5 339 19.9 U
## 6 342 20.0 U
## 7 344 20.8 U
## 8 443 22.4 U
## 9 489 19.9 U
## 10 494 22.0 U
## 11 585 25.3 U
## 12 587 19.8 U
## 13 603 20.6 U
## 14 612 20.8 U
## 15 629 24.0 U
## 16 753 24.6 U
## 17 754 22.7 U
## 18 761 21.3 U
## 19 808 21.3 U
FindOutliers(data_rate$hunger_rate)
## $summary
## method n nMiss nOut lowLim upLim minNom maxNom
## 1 ThreeSigma 949 0 3 -14.1100538 47.53180 0.0000000 47.46667
## 2 Hampel 949 0 2 -17.6550197 49.65502 0.0000000 49.40000
## 3 BoxplotRule 949 0 8 0.3666665 46.36667 0.7333333 46.16667
##
## $threeSigma
## index values type
## 1 40 51.66667 U
## 2 42 50.00000 U
## 3 43 49.40000 U
##
## $Hampel
## index values type
## 1 40 51.66667 U
## 2 42 50.00000 U
##
## $boxplotRule
## index values type
## 1 30 0.00000 L
## 2 40 51.66667 U
## 3 41 47.46667 U
## 4 42 50.00000 U
## 5 43 49.40000 U
## 6 44 46.43333 U
## 7 45 47.33333 U
## 8 612 46.73333 U
EXPLANATION : Berdasarkan data diatas, jumlah outlier masing masing variabel dibawah 5% dari total keseluruhan data yang sudah dibersihkan sehingga cukup baik untuk menggantikan NA value dengan rata - rata dari per kolomnya
desc_data <- data_rate %>% group_by(Entity) %>% summarize(mean_hungerRate= mean(hunger_rate)) %>% arrange(desc(mean_hungerRate))
library(maps)
##
## Attaching package: 'maps'
## The following object is masked from 'package:purrr':
##
## map
world_map <- map_data("world")
world_map <- subset(world_map, region != "Antartica")
ggplot(desc_data) +
geom_map(dat = world_map, map = world_map, aes(map_id = region),
fill = "white", color = "#7f7f7f", size = 0.25
) +
geom_map(map = world_map, aes(map_id = Entity, fill = mean_hungerRate), size = 0.25) +
scale_fill_gradient(low = "#fff7bc", high = "#cc4c02", name = "Hunger Rate") +
expand_limits(x = world_map$long, y = world_map$lat)
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
EXPLANATION: Dapat dilihat, hunger rate paling banyak berkumpul di benua
asia dan benua africa yang cuaca disana relatif sangat panas
data2 <- as_tibble(clean_data)
data2 <- data2 %>% group_by(Entity) %>% summarize_at(c("Prevelance underweight under 5", "Prevalence stunting under 5","Prevalence wasting weight under 5"), mean, na.rm = TRUE) %>% arrange(desc(`Prevelance underweight under 5`))
ggplot(data2, aes(x = `Prevelance underweight under 5`, y = `Prevalence stunting under 5`)) +
geom_point(pch=21, color = "blue", fill = "gray", size = 3) +
labs(x = "Underweight", y = "Stunting", title = "Underweight and Stunting") +
geom_smooth(method = "lm")
## `geom_smooth()` using formula = 'y ~ x'
EXPLANATION : Berdasarkan visualisasi diatas, terdapat korelasi antara
underweight dan stunting yang artinya dimana anak berumuran dibawah 5
ketika rata - rata prevalensi underweight nya semakin tinggi, maka
prevalensi rata - rata anak dibawah 5 tahun yang kekurangan gizi juga
meningkat
colnames(global_hunger_index)[4] = "Global Index"
global_hunger_index$Year <- as.factor(global_hunger_index$Year)
ggplot(global_hunger_index, aes(x = `Global Index`, fill = Year)) +
geom_density(alpha=0.4) +
labs(title = "Global Hunger Index Distributed by Year")
EXPLANATION : Dapat terlihat bahwa data yang paling menonjol ada pada
tahun 2000, dimana hunger indexnya secara keseluruhan lebih besar
dibandingkan yang lain
Summarize :
Description: Untuk projek ini kami menggunakan beberapa macam dataset yang berisikan prevalensi tentang kelaparan di beberapa negara di dunia. Untuk dataset pertama berisikan variabel “Entity” yang menandakan nama negara, “Code” menandakan code dari negara, “Prevalence underweight under 5” yang menandakan prevalensi anak - anak dibawah 5 tahun yang beratnya dibawah normal, lalu juga ada “Year” yang menandakan nilai prevalensi tahun ke berapa untuk setiap negara. Untuk dataset kedua, juga terdapat “Entity”, “Code” , “Year” dan “Prevalence stunting under 5” yang menandakan prevalensi dari anak - anak dibawah 5 tahun yang mengalami kekurangan gizi. Untuk dataset yang ke 3 juga terdapat variabel “Code”, “Entity” , “Year”, dan “Prevalence under wasting” yang menandakan prevalensi anak - anak dibawah 5 tahun yang wasting weight yang artinya berat badan akan terus menurun seiring waktu. Untuk dataset ke 4 juga memiliki 3 variabel seperti nama negara, code, dan tahun, namun ada “Hunger Index” yang digunakan untuk mengukur tingkat kelaparan di suatu negara di tahun ke berapa.
Format: untuk dataset pertama terdiri dari 4 variabel dan 1226 rows, untuk dataset kedua terdiri dari 4 variabel dan 940 rows, untuk dataset ketiga terdiri dari 4 variabel dan 943 rows, untuk dataset keempat terdiri dari 5 variabel dan 471 rows. Kami menggabungkan keempat dataset tersebut dan menghasilkan 7 variabel dan 1603 rows
Source : keempat dataset tersebut kita dapatkan dari ….
Summaries of missing data: Setelah kita gabung datanya ternyata setiap variabel memiliki nilai NA values yang banyak, setelah itu kita cek dengan boxplot juga ternyata juga memiliki banyak outlier sehingga kami berencana untuk menghapus setiap row yang memiliki lebih dari 2 NA value dan mengisi NA value tiap variabelnya dengan rata - rata dari variabel itu sendiri. Hasilnya menhasilkan 949 rows dan 7 variabel dengan outlier hanya kurang dari 5% dari total data
Conclusion : Conclusion yang kita dapatkan adalah bahwa rata - rata hunger index yang paling besar berada dibawah tahun 2000 dan negara - negara yang hunger ratenya tinggi berada pada lokasi geografi dimana negara sekitarnya juga memiliki hunger rate yang lumayan tinggi, dan juga kebanyakan negara - negara yang hunger ratenya tinggi berasal dari benua yang iklimnya cendenrung panas