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