The United Nations created the Sustainable Development Goals (SDGs) to set an ambitious global development agenda to work toward by 2030. A continental development organization in Africa asked, how could we think about SDG 3 (the health goals) in a holistic and aggregate sense?
In this analysis, I explore measuring a country’s distance to target achievement. I build a composite score of standardized distance to SDG 3 achievement, and find that Nigeria is furthest from achieving SDG 3 of all African countries.
Dataset
This analysis uses results from the International Futures global forecasting model and its Current Path scenario. The results span many of the measurable targets of SDG3, including:
Maternal mortality ratio
Neonatal mortality ratio
Under-5 mortality rate
Non-communicable disease death rate
Traffic accident death rate
AIDS death rate
Malaria death rate
Setup
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
✔ ggplot2 3.5.1 ✔ tibble 3.2.1
✔ lubridate 1.9.3 ✔ tidyr 1.3.1
✔ purrr 1.0.2
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
#code for the targets of each health-related goalsdg_targets <-data.frame(variable =c("MATMORTRATIO", "NEONATMOR", "CHILDDTHR", "NonCommun", "TrafficAcc", "AIDS", "Malaria"),country =rep("TARGET", 7),`2030`=c(70, 12, 25, 2/3, 0.5, 0.001, 0.001)) %>%rename("2030"="X2030")(df <-read_csv('.//data/IFs_results_02apr2019.csv') %>%filter(scenario =='00CP_adj_ADB') %>%select(1:5, `2015`, `2020`, `2030`, `2063`))
Rows: 1458 Columns: 111
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (5): variable, country, unit, dim, scenario
dbl (89): 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, ...
num (17): 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, ...
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# A tibble: 486 × 9
variable country unit dim scenario `2015` `2020` `2030` `2063`
<chr> <chr> <chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl>
1 DeathRate Algeria TrafficAcc Total 00CP_adj_ADB 0.268 0.271 0.284 0.337
2 DeathRate Algeria AIDS Total 00CP_adj_ADB 0.005 0.008 0.005 0.001
3 DeathRate Algeria Malaria Total 00CP_adj_ADB 0.0002 0.0002 0.0001 0
4 DeathRate Angola TrafficAcc Total 00CP_adj_ADB 0.386 0.37 0.402 0.525
5 DeathRate Angola AIDS Total 00CP_adj_ADB 0.395 0.314 0.198 0.021
6 DeathRate Angola Malaria Total 00CP_adj_ADB 0.52 0.512 0.375 0.052
7 DeathRate Benin TrafficAcc Total 00CP_adj_ADB 0.213 0.219 0.229 0.387
8 DeathRate Benin AIDS Total 00CP_adj_ADB 0.274 0.203 0.111 0.007
9 DeathRate Benin Malaria Total 00CP_adj_ADB 1.21 0.808 0.424 0.083
10 DeathRate Botswana TrafficAcc Total 00CP_adj_ADB 0.174 0.177 0.183 0.192
# ℹ 476 more rows
(df_scaled_dist_results <- df %>%filter(variable %in%c('MATMORTRATIO', 'NEONATMOR', 'CHILDDTHR') | unit %in%c('AIDS', 'Malaria')) %>%mutate(variable =ifelse(unit %in%c('AIDS', 'Malaria'), as.character(unit), as.character(variable))) %>%select(variable, country, `2030`) %>%spread(variable, `2030`) %>%#add targets as row by reshaping the targets dataframebind_rows(., sdg_targets %>%spread(variable, `2030`)) %>%mutate_at(vars(AIDS:NEONATMOR), funs(scale(.))) %>%select(-c(7:8)))
Warning: `funs()` was deprecated in dplyr 0.8.0.
ℹ Please use a list of either functions or lambdas:
# Simple named list: list(mean = mean, median = median)
# Auto named with `tibble::lst()`: tibble::lst(mean, median)
# Using lambdas list(~ mean(., trim = .2), ~ median(., na.rm = TRUE))
Warning: attributes are not identical across measure variables; they will be
dropped
# A tibble: 378 × 4
country avg_val var val
<chr> <dbl> <chr> <dbl>
1 Nigeria 1.15 AIDS -0.00515
2 Somalia 0.922 AIDS -0.711
3 Equa Guinea 0.843 AIDS 0.902
4 Chad 0.766 AIDS -0.558
5 Central AfR 0.741 AIDS 0.569
6 SierraLeo 0.610 AIDS -0.372
7 Lesotho 0.610 AIDS 3.90
8 Angola 0.551 AIDS -0.340
9 Sudan South 0.527 AIDS 1.02
10 Cameroon 0.449 AIDS 0.432
# ℹ 368 more rows
# A tibble: 378 × 5
country avg_val var val target
<chr> <dbl> <chr> <dbl> <dbl>
1 Nigeria 1.15 AIDS -0.00515 -0.821
2 Somalia 0.922 AIDS -0.711 -0.821
3 Equa Guinea 0.843 AIDS 0.902 -0.821
4 Chad 0.766 AIDS -0.558 -0.821
5 Central AfR 0.741 AIDS 0.569 -0.821
6 SierraLeo 0.610 AIDS -0.372 -0.821
7 Lesotho 0.610 AIDS 3.90 -0.821
8 Angola 0.551 AIDS -0.340 -0.821
9 Sudan South 0.527 AIDS 1.02 -0.821
10 Cameroon 0.449 AIDS 0.432 -0.821
# ℹ 368 more rows