1. Research Question
To what extent does socio-economic indicators predict variations in child mortality rates globally?
2. Introduction
The relation between global variations in child mortality rates and socio-economic indicators is an important field of study with broad implications for public health interventions and policies. A nation’s overall health and socioeconomic standing can be determined in large part by looking at its child mortality rate, which reflects the quality of its healthcare system, economic conditions, level of education, and governance. Using a comprehensive set of indicators such as GDP per capita, CO2 emissions per capita, education ratio, Corruption Perception Index (CPI), and the Human Development Index (HDI), this study seeks to identify and analyse the socio-economic factors that significantly influence child mortality rates across different regions.
2.1 Group Motivation for Selecting the Topic
As a group of three international student women in STEM, we are deeply passionate about leveraging our skills and knowledge to address pressing global issues. Our diverse backgrounds and experiences have increased our awareness of the disparities in health outcomes across different regions. We believe that by identifying and understanding the key socio-economic indicators that impact child mortality, we can contribute to the development of more effective policies and interventions that support families and enhance child well-being.
Our motivation is personal and rooted in our commitment to using our STEM education to make a meaningful difference. By focusing on this topic, we aim to shed light on the socio-economic factors that can improve family health and reduce child mortality rates, ultimately contributing to healthier societies worldwide.
2.2 Novelty and Importance of the Research Question
Child mortality is a critical indicator of a country’s overall health and socio-economic status (Chao et al., 2018). Understanding the factors that influence child mortality can help policymakers develop targeted interventions to improve health outcomes. This project aims to identify key socio-economic indicators that predict variations in child mortality rates globally.
While many studies have explored the relationship between socio-economic factors and health outcomes, this project focuses on a comprehensive set of indicators across multiple dimensions—economic, environmental, educational, and political. By integrating these diverse factors, we aim to provide a more holistic understanding of the determinants of child mortality.
The novelty of this study lies in its multidimensional approach. We are not only examining economic indicators such as GDP per capita but also considering environmental factors like CO2 emissions, educational metrics such as the gender ratio of mean years in school, and political indicators like the Corruption Perception Index. This comprehensive analysis will help uncover complex interactions and dependencies that single-factor studies might miss.
Furthermore, The importance of this research cannot be overstated. Child mortality remains a pressing issue in many parts of the world, and reducing it is a key target of global health initiatives (Van Malderen et al., 2019). By identifying the key indicators, we hope to contribute to scholarly knowledge in oder to provide insights that can assist policymakers in developing strategies to reduce child mortality. This research represents a step towards understanding the complex factors that influence child mortality and contributing to efforts that ensure all children have better health outcomes.
3. Data
3.1 Data sources
Selecting a good database is crucial for ensuring the integrity and reliability of any research. The following five criteria help in evaluating the quality of a database((Ehrlinger and Wöß, 2022):
- Accuracy: Data must be correct and free from significant errors to ensure the validity of research findings.
- Completeness: All necessary data points should be included to provide a comprehensive view of the topic.
- Relevance: Data should directly relate to the research question to ensure meaningful insights.
- Timeliness: Data should be current to reflect the latest information, although it should be noted that databases from sources like the World Bank and other organizations may have census dates that are not always up to date.
- Consistency: Data should be consistently measured and recorded across different datasets to allow for accurate comparisons and analyses.
Our group applied these criteria when selecting databases. We ensured the data we chose was accurate, complete, relevant to our research question, timely, and consistently measured. While considering timeliness, we acknowledged that data from sources in Gapminder that comes from other organizations, such as the World Bank, might not always be the most current due to the timing of data collection and publication.
We inspected several datasets available on Gapminder to select the key socio-economic indicators. The following databases were selected based on their relevance and adherence to our criteria for a good dataset:
- Economic: GDP per Capita
- Environment: CO2 Emissions per Capita
- Education: Gender Ratio of Mean Years in School (Women % Men)
- Political: Corruption Perception Index All these datasets are sourced from Gapminder. https://www.gapminder.org/data/
Dataset Descriptions:
- GDP per Capita: This dataset measures the gross domestic product (GDP) per person, providing an average economic output per individual. It is a key indicator of a country’s economic performance and standard of living.
- CO2 Emissions per Capita: This dataset tracks carbon dioxide emissions per person, reflecting the environmental impact of each individual. It is critical for understanding the relationship between economic activities and environmental degradation.
- Gender Ratio of Mean Years in School (Women % Men): This dataset presents the average years of schooling received by women as a percentage of that received by men. It highlights educational gender disparities and their potential impact on socio-economic development.
- Corruption Perception Index: This dataset assesses the perceived levels of public sector corruption in various countries. It is a vital indicator of governance quality and its influence on socio-economic outcomes.
- Child mortality: The dataset on child mortality measures the number of children who die before reaching the age of five, per 1,000 live births in a given year. This metric is a critical indicator of child health and overall development in a country.
These datasets provide a comprehensive overview of the economic, environmental, educational, and political factors influencing child mortality rates globally.
3.2 Data Wrangling and Preprocessing
First, it is necessary to install and load the required libraries to handle data manipulation and analysis.
## ── 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.0 ✔ 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
library(gapminder)
library(dplyr)
library(ggplot2)
library(readr)
library(tidyverse)
library(lubridate)
library(readr)We load the datasets into R using the read_csv function from the readr package.
# Load the datasets
child_mortality <- read.csv("child_mortality_0_5_year_olds_dying_per_1000_born.csv")
gdp_pcap <- read_csv("1.gdp_pcap.csv")## Rows: 195 Columns: 302
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (216): country, 1881, 1883, 1885, 1887, 1888, 1889, 1890, 1891, 1892, 18...
## dbl (86): 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810,...
##
## ℹ 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.
## Rows: 194 Columns: 224
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (8): country, 2003, 2004, 2005, 2006, 2011, 2012, 2013
## dbl (216): 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810,...
##
## ℹ 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.
## Rows: 188 Columns: 47
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (1): country
## dbl (46): 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, ...
##
## ℹ 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.
## Rows: 181 Columns: 7
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (1): country
## dbl (6): 2012, 2013, 2014, 2015, 2016, 2017
##
## ℹ 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.
All datasets are subjected to a preliminary examination with the View function, with the objective of identifying any anomalous characters. Subsequently, the str function is employed to identified the data type in all datasets.
#View(child_mortality)
#str(child_mortality)
#View(gdp_pcap)
#str(gdp_pcap)
#View(co2_pcap)
#str(co2_pcap)
#View(education_ratio)
#str(education_ratio)
#View(cpi)
#str(cpi)Since the year columns contain mixed data types (characters and numerics), we need to convert all columns to strings first.
child_mortality <- as.data.frame(lapply(child_mortality, as.character))
gdp_pcap <- as.data.frame(lapply(gdp_pcap, as.character))
co2_pcap <- as.data.frame(lapply(co2_pcap, as.character))
education_ratio <- as.data.frame(lapply(education_ratio, as.character))
cpi <- as.data.frame(lapply(cpi, as.character))Next, we will convert the datasets from wide to long format.
- Child mortality
At the moment, we transformed all the columns in the dataset to strings to handle mixed data types. This transformation added an “X” character in front of the year columns. To properly analyze the data, we removed this “X” character and converted the year and child mortality columns back to numeric types.
child_mortality <- child_mortality %>%
pivot_longer(-country, names_to = "year", values_to = "childmortality") %>%
separate(year, into =c("character", "year"), sep = "X", remove = TRUE) %>%
select(-character) %>%
mutate(year = as.numeric(year), childmortality = as.numeric(childmortality))
# View the transformed dataset
View(child_mortality)
str(child_mortality)## tibble [59,297 × 3] (S3: tbl_df/tbl/data.frame)
## $ country : chr [1:59297] "Afghanistan" "Afghanistan" "Afghanistan" "Afghanistan" ...
## $ year : num [1:59297] 1800 1801 1802 1803 1804 ...
## $ childmortality: num [1:59297] 469 469 469 469 469 469 470 470 470 470 ...
- GDP Per Capita
When the data was transformed into strings, an “X” character was added in front of the year values. The separate function splits the “year” column into two parts: “character” (which contains the “X”) and “year” (which contains the actual year values). The “character” column is then removed, and the “year” column is converted to numeric.
By reviewing the data frame, The GDP per capita values include units (“k” for thousands). The mutate function with parse_number extracts the numeric part of the GDP per capita values, and a regular expression extracts the units.
gdp_pcap <- gdp_pcap %>%
pivot_longer(-country, names_to = "year", values_to = "gdppercap") %>%
separate(year, into =c("character", "year"), sep = "X", remove = TRUE) %>%
select(-character) %>%
mutate(year = as.numeric(year))
gdp_pcap <- gdp_pcap %>%
mutate(number = parse_number(gdppercap), unit =gsub("[^a-zA-Z]", "", gdppercap)) # Extract numeric values and units from the "gdppercap" column
# Extract numeric values and units from the "gdppercap" column
# View unique units in the "unit" column to understand the scaling
gdp_pcap$unit %>% unique()## [1] "" "k"
# Convert the "gdppercap" values to their true numeric values based on the units
gdp_pcap <- gdp_pcap %>%
mutate(gdppercap_true = case_when(unit == "k" ~ number * 1000, TRUE ~ number)) %>%
select(-c(gdppercap, number, unit))
# View the transformed dataset
str(gdp_pcap)## tibble [58,695 × 3] (S3: tbl_df/tbl/data.frame)
## $ country : chr [1:58695] "Afghanistan" "Afghanistan" "Afghanistan" "Afghanistan" ...
## $ year : num [1:58695] 1800 1801 1802 1803 1804 ...
## $ gdppercap_true: num [1:58695] 599 599 599 599 599 599 599 599 599 599 ...
- CO2 Emissions per capital
For this dataset, we have been using some of the same functions we used to clean up the previous dataframes. However, we encountered an issue with the “co2percap” column, where some non-numeric values were being coerced to NA when attempting to convert them to numeric. This usually happens when there are characters or symbols in the data that are not numbers. To handle this, we used the parse_number function to ensure that any of the characters were removed and only the numeric values were retained.
co2_pcap <- co2_pcap %>%
pivot_longer(-country, names_to = "year", values_to = "co2percap") %>%
separate(year, into =c("character", "year"), sep = "X", remove = TRUE) %>%
select(-character) %>%
mutate(year = as.numeric(year))
# We ensure co2percap is treated as a character before parsing numbers
co2_pcap <- co2_pcap %>%
mutate(co2percap = as.character(co2percap)) %>% # Convert to character
mutate(co2percap = parse_number(co2percap)) # Parse numbers from character
# View the transformed dataset
str(co2_pcap)## tibble [43,262 × 3] (S3: tbl_df/tbl/data.frame)
## $ country : chr [1:43262] "Afghanistan" "Afghanistan" "Afghanistan" "Afghanistan" ...
## $ year : num [1:43262] 1800 1801 1802 1803 1804 ...
## $ co2percap: num [1:43262] 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 ...
- Education ratio
We transformed the Education Ratio dataset from a wide format to a long format, cleaning and converting data types. We used the same functions as in other codes, and there was no unusual character detected.
education_ratio <- education_ratio %>%
pivot_longer(-country, names_to = "year", values_to = "eduratio") %>%
separate(year, into =c("character", "year"), sep = "X", remove = TRUE) %>%
select(-character) %>%
mutate(year = as.numeric(year), eduratio = as.numeric(eduratio))
# View the transformed dataset
str(education_ratio)## tibble [8,648 × 3] (S3: tbl_df/tbl/data.frame)
## $ country : chr [1:8648] "Afghanistan" "Afghanistan" "Afghanistan" "Afghanistan" ...
## $ year : num [1:8648] 1970 1971 1972 1973 1974 ...
## $ eduratio: num [1:8648] 15.4 15.8 15.4 15.6 15.9 16.1 16.4 16.6 16.2 16.4 ...
- CPI
We converted the CPI dataset from wide to long format, cleaned it, and transformed the data types. Using the same functions as in previous codes, we found no unexpected characters.
cpi <- cpi %>%
pivot_longer(-country, names_to = "year", values_to = "cpindex") %>%
separate(year, into =c("character", "year"), sep = "X", remove = TRUE) %>%
select(-character) %>%
mutate(year = as.numeric(year), cpindex = as.numeric(cpindex))
# View the transformed dataset
str(cpi)## tibble [1,086 × 3] (S3: tbl_df/tbl/data.frame)
## $ country: chr [1:1086] "Afghanistan" "Afghanistan" "Afghanistan" "Afghanistan" ...
## $ year : num [1:1086] 2012 2013 2014 2015 2016 ...
## $ cpindex: num [1:1086] 8 8 12 11 15 15 22 23 19 15 ...
Finally, each dataset is merged with the next using full_join on the columns “country” and “year”. This ensures that all data points from each dataset are included in the merged dataset, even if some data points are missing in some datasets.
The structure and content of the cleaned and merged dataset are inspected using str and View. This approach ensures a comprehensive merge of all datasets based on common columns while handling any missing values appropriately.
# Merge datasets on country and year using full_join
complete_data <- child_mortality %>%
full_join(gdp_pcap, by = c("country", "year")) %>%
full_join(co2_pcap, by = c("country", "year")) %>%
full_join(education_ratio, by = c("country", "year")) %>%
full_join(cpi, by = c("country", "year"))
# View the cleaned and merged dataset
str(complete_data)## tibble [59,309 × 7] (S3: tbl_df/tbl/data.frame)
## $ country : chr [1:59309] "Afghanistan" "Afghanistan" "Afghanistan" "Afghanistan" ...
## $ year : num [1:59309] 1800 1801 1802 1803 1804 ...
## $ childmortality: num [1:59309] 469 469 469 469 469 469 470 470 470 470 ...
## $ gdppercap_true: num [1:59309] 599 599 599 599 599 599 599 599 599 599 ...
## $ co2percap : num [1:59309] 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 ...
## $ eduratio : num [1:59309] NA NA NA NA NA NA NA NA NA NA ...
## $ cpindex : num [1:59309] NA NA NA NA NA NA NA NA NA NA ...
4. Correlation Analysis
To assess the relationship between child mortality and the socio-economic indicators—GDP per capita, CO2 emissions per capita, gender ratio of mean years in school, and Corruption Perception Index (CPI)—we will conduct a correlation analysis.
correlation_results <- complete_data %>%
select(childmortality, gdppercap_true, co2percap, eduratio, cpindex) %>%
cor(use = "complete.obs")
correlation_results## childmortality gdppercap_true co2percap eduratio cpindex
## childmortality 1.0000000 -0.5917244 -0.5296851 -0.7564617 -0.5658932
## gdppercap_true -0.5917244 1.0000000 0.8732019 0.4757087 0.7562506
## co2percap -0.5296851 0.8732019 1.0000000 0.4167747 0.6200976
## eduratio -0.7564617 0.4757087 0.4167747 1.0000000 0.4741698
## cpindex -0.5658932 0.7562506 0.6200976 0.4741698 1.0000000
The correlation matrix provides the Pearson correlation coefficients between child mortality and each of the socio-economic indicators, as well as the correlations among the indicators themselves. Here are the key values from the matrix:’
- Child Mortality (CM) and GDP per Capita (GDP): -0.592
- Child Mortality and CO2 Emissions per Capita (CO2): -0.530
- Child Mortality and Gender Ratio of Mean Years in School (Education): -0.756
- Child Mortality and Corruption Perception Index (CPI): -0.566
4.1 Interpretations:
- GDP Per Cap
There is a moderate negative correlation between child mortality and GDP per capita (-0.592). As GDP per capita increases, child mortality tends to decrease. As it can be appreciated in the following graph:
#Remove NA values
complete_data_na <- complete_data %>%
na.omit()
#Scatterplot to show the Relationship between Child Mortality and GDP per Capita
ggplot(complete_data_na, aes(x = gdppercap_true, y = childmortality)) +
geom_point(color="steelblue")+
geom_smooth( method= "lm",col = "red") +
ggtitle("Relationship between Child Mortality and GDP per Capita") +
scale_y_continuous(limits = c(0, 200)) + # Set y-axis to start at 0 and limit to 200
scale_x_log10(limits = c(500, 128000), breaks = c(500, 1000, 10000, 100000), labels = scales::comma) + # Set x-axis scale to logarithmic
theme_minimal() +
labs(x = "GDP per Capita", y = "Child Mortality") +
theme(
plot.title = element_text(hjust = 0.5, size = 16),
axis.title.x = element_text(size = 14),
axis.title.y = element_text(size = 14),
legend.position = "none")## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 15 rows containing missing values or values outside the scale range
## (`geom_smooth()`).
We present the relationship between the two variables, ‘Child Mortality’
and ‘GDP per Capita’ using a scatter plot. The code geom_point() creates
a scatter plot with GDP per Capita on the x-axis and Child Mortality on
the y-axis. We add the code geom_smooth (method=lm, col = “red”) to fit
a red linear regression line, to help visualize the relationship.
Although there are certain outliers in the data, it presents a moderate
negative relationship between GDP per Capita and Child Mortality.
*INTERPRETATION
The correlation matrix indicates a moderately negative link between GDP per capita and child mortality (correlation coefficient = -0.592). This shows that when GDP per capita rises, child mortality tends to fall at a modest rate. GDP per capita is measured in US dollars (USD), which represents economic production per person, while child mortality is measured in deaths per 1,000 live births. The moderate strength of this link implies that, while increasing economic output per person can reduce child mortality, other factors also have a substantial impact on child death rates around the world.
ECONOMIC POLICIES To increase GDP per capita and thus reduce child mortality, economic policies could prioritize fostering economic growth through investments in education, healthcare, and infrastructure, as well as encouraging innovation and productivity gains. Increased GDP per capita improves households’ access to resources, resulting in better nutrition, healthcare, and living circumstances, all of which help to reduce child mortality rates. Thus, GDP per capita is an important indicator in this context because it reflects a country’s total economic well-being, has a direct impact on health outcomes, and serves as a core tool for measuring socioeconomic progress in this project.
- CO2 Emissions per Capita
There is a moderate negative correlation between child mortality and CO2 emissions per capita (-0.530). Higher CO2 emissions are associated with lower child mortality. As it can be appreciated in the following graph:
# Scatterplot showing the Relationship between Child Mortality and CO2 Emissions
ggplot(complete_data_na, aes(x = co2percap, y = childmortality)) +
geom_point(color="orange") +
geom_smooth(method = "lm", col = "blue") +
ggtitle("Relationship between Child Mortality and CO2 Emissions") +
scale_y_continuous(limits = c(0, 200)) + scale_x_log10() + #Logarithmic Scale in X axis
theme_minimal() +
labs(x = "CO2 Emissions (tons per capita)", y = "Child Mortality (per 1000 born)") +
theme(
plot.title = element_text(hjust = 0.5, size = 16),
axis.title.x = element_text(size = 14),
axis.title.y = element_text(size = 14),
legend.position = "none")## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 13 rows containing missing values or values outside the scale range
## (`geom_smooth()`).
For analysing CO2 emissions per capita and child mortality, we use a scatter plot to depict their relationship, and plot CO2 emissions per capita on the x-axis (using a logarithmic scale) and child mortality on the y-axis. The scatter plot is created with geom_point(), and a blue linear regression line is fitted using geom_smooth(method=lm, col=“blue”) to visualize the trend. Despite the presence of some outliers, the data shows a moderate inverse relationship between CO2 emissions per capita and child mortality.
INTERPRETATION Based on the correlation matrix , the correlation coefficient between CO2 emissions per capita and child mortality is -0.530. This shows a moderate negative association, implying that as CO2 emissions per capita fall, child mortality rates likely to fall. This link implies that environmental quality, as assessed by lower CO2 emissions, is connected with lower child mortality rates.
ECONOMIC POLICIES While CO2 emissions are associated with industrial growth, it is essential to implement environmental regulations that minimize health risks associated with pollution.To capitalize on the relationship between CO2 emissions per capita and child mortality, economic policy should prioritize sustainable industrial expansion that improves energy output and efficiency. Investing in clean energy and increasing energy access can improve economic activity while reducing environmental impact. Policies that promote green energy or upgrade energy infrastructure might indirectly boost CO2 emissions per capita by increasing economic production, lowering child mortality by reflecting improved healthcare systems and living conditions. Thus, CO2 emissions per capita are an important measure of economic progress, which indirectly contributes to lower child death rates.
- Education ratio
There is a strong negative correlation between child mortality and the gender ratio of mean years in school (-0.756). This suggests that higher educational attainment for women relative to men is associated with lower child mortality rates. As it can be appreciated in the following graph:
#Scatterplot showing the Relationship between Child Mortality and Gender ratio
ggplot(complete_data_na, aes(x = eduratio, y = childmortality)) +
geom_point(color="purple") +
geom_smooth(method = "lm", col = "green") +
scale_y_log10() +
scale_x_log10() +
ggtitle("Relationship between Child Mortality and Gender ratio") +
scale_y_continuous(limits = c(0, 200)) +
scale_x_log10() + #Logarithmic Scale in X axis
theme_minimal() +
labs(x = "Gender ratio of mean years in school", y = "Child Mortality (per 1000 born)") +
theme(
plot.title = element_text(hjust = 0.5, size = 16),
axis.title.x = element_text(size = 14),
axis.title.y = element_text(size = 14),
legend.position = "None")## Scale for y is already present.
## Adding another scale for y, which will replace the existing scale.
## Scale for x is already present.
## Adding another scale for x, which will replace the existing scale.
## `geom_smooth()` using formula = 'y ~ x'
Using a scatter plot, we show the correlation between “Child Mortality” and “Gender Ratio of Mean Years in School.” To accommodate a large range of values, the plot’s x-axis is scaled logarithmically. A green linear regression line is added by the geom_smooth(method=lm, col=“green”) function to show the association between the gender ratio and child mortality, which are plotted on the x- and y-axes, respectively, by the geom_point() function. Despite some outliers, the visualization indicates a substantial negative association, demonstrating that higher educational attainment among females is related with decreased child mortality.
INTERPRETATION In this case, a unit change in the gender ratio of mean years in school (Education) has a direct and significant impact on lowering child mortality (CM). The correlation matrix shows a correlation coefficient of -0.756 between the gender ratio of mean years in school (Education) and child mortality. This substantial negative link suggests that when the gender ratio in education improves (a higher ratio indicates greater educational achievement for women relative to males), child mortality rates fall significantly.
ECONOMIC POLICIES Governments can develop policies that reduce barriers to female education to improve the gender ratio in mean years of schooling. This involves investing in girls’ schools, offering scholarships and financial incentives to female students, and creating a safe learning environment devoid of gender discrimination and violence (UNESCO, 2023). Policies that raise public awareness about the value of girls’ education and prohibit child marriage can also help to increase female enrollment and retention in schools (UNICEF, 2022). The gender ratio of mean years of schooling is an important independent variable in predicting child mortality since it indicates women’s overall social and economic strength. Education increases women’s knowledge and skills, allowing them to make better healthcare decisions for their children, resulting in improved child health and lower mortality.
- CPI
There is a moderate negative correlation between child mortality and the Corruption Perception Index (-0.566). Higher perceived levels of corruption are associated with higher child mortality. As it can be appreciated in the following grapgh:
#Scatterplot showing the relationship between Child Mortality and CPI Index
ggplot(complete_data_na, aes(x = cpindex, y = childmortality)) +
geom_point(color="navy") +
geom_smooth(method = "lm", col = "gold") +
scale_x_log10() +
ggtitle("Relationship between Child Mortality and CPI Index") +
scale_y_continuous(limits = c(0, 200)) +
scale_x_log10() + #Logarithmic Scale in X axis
theme_minimal() +
labs(x = "CPI index", y = "Child Mortality (per 1000 born)") +
theme(
plot.title = element_text(hjust = 0.5, size = 16),
axis.title.x = element_text(size = 14),
axis.title.y = element_text(size = 14),
legend.position = "none")## Scale for x is already present.
## Adding another scale for x, which will replace the existing scale.
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 2 rows containing missing values or values outside the scale range
## (`geom_smooth()`).
Here, we use a scatter plot to show the correlation between “Child Mortality” and the “Corruption Perception Index (CPI)”. The graphic is constructed using a logarithmic scale with CPI on the x-axis and Child Mortality on the y-axis. The geom_point() function is used to plot individual data points, whereas geom_smooth(method = lm, col = “gold”) adds a golden linear regression line to represent the trend. Despite some exceptions, this graph shows a modest negative association between CPI and Child Mortality, showing that higher CPI ratings (which indicate lower perceived corruption) are generally related with lower child mortality rates.
INTERPRETATION
the Corruption Perception Index (CPI) has a moderate negative connection with child mortality (r=-0.566). This shows that as the CPI rises (indicating lesser perceived corruption), the child mortality rate falls. The CPI is usually calculated on a scale of 0 (high corruption) to 100 (low corruption), whereas child mortality is measured in deaths per 1,000 live births. Thus, decreasing corruption appears to have a moderate influence on lowering child death rates.
ECONOMIC POLICES Economic strategies to boost the CPI should prioritize reducing corruption through better governance, transparency, and accountability. The CPI can be raised by strengthening anti-corruption laws, improving public sector efficiency, and promoting ethical conduct. Higher CPI scores indicate stronger governance, which leads to more efficient allocation of resources to health and education, lowering child death rates. CPI is an important factor in our analysis because it represents institutions’ integrity and ability to manage resources effectively, which influences general socioeconomic conditions and child health outcomes. The CPI is a crucial predictor in understanding global variations in child mortality rates because effective governance guarantees that resources reach vital services, which directly influences child mortality.
5. Multiple Linear regression Analysis
Multiple linear regression allows us to examine the relationship between one dependent variable (child mortality rate) and multiple independent variables (socio-economic indicators). This method helps us understand how much of the variation in child mortality rates can be explained by the combined effect of the independent variables. Given the multidimensional nature of the socio-economic factors, multiple linear regression is appropriate as it enables us to quantify the impact of each variable while controlling for the others.
- Hypotheses for Multiple Linear Regression
H0: β(GDP per Capita) = β(CO2 Emissions) = β(Gender ratio) = β(CPI) = 0
H1: β(GDP per Capita) != β(CO2 Emissions) != β(Gender ratio) != β(CPI) != 0
For our null hypothesis (H0), the coefficients of the socio-economic variables (GDP per capita, CO2 emissions per capita, gender ratio of mean years in school, and Corruption Perception Index) are equal to zero. This means that there is no significant relationship between the socio-economic indicators and child mortality rates.
For our alternative hypothesis (H1), at least one of the coefficients of the socio-economic variables is not equal to zero. This means that there is a significant relationship between at least one of the socio-economic indicators and child mortality rates.
# Fit the multiple linear regression model
model_total <- lm(childmortality ~ gdppercap_true + co2percap + eduratio + cpindex, data = complete_data_na)
# Summary of the model
summary(model_total)##
## Call:
## lm(formula = childmortality ~ gdppercap_true + co2percap + eduratio +
## cpindex, data = complete_data_na)
##
## Residuals:
## Min 1Q Median 3Q Max
## -51.227 -11.448 -2.843 7.670 92.290
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.406e+02 3.826e+00 36.736 < 2e-16 ***
## gdppercap_true -2.594e-04 9.713e-05 -2.671 0.007749 **
## co2percap -4.073e-01 2.650e-01 -1.537 0.124869
## eduratio -9.960e-01 4.414e-02 -22.568 < 2e-16 ***
## cpindex -2.155e-01 6.201e-02 -3.475 0.000543 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 20.43 on 680 degrees of freedom
## Multiple R-squared: 0.6486, Adjusted R-squared: 0.6465
## F-statistic: 313.8 on 4 and 680 DF, p-value: < 2.2e-16
The multiple regression model predicts the child mortality using the following socio-economic indicators:
- GDP per capita
- CO2 emissions per capita
- Education Ratio
- Corruption Perception Index The main take aways from the mutiple regression model are:
- The model explains nearly 64.86% of the variability in child mortality rates as explained by the r squared value.
- The education ratio and GDP per capita are significant predictors of the child mortality as explained by their p-values.
- CO2 emission per capita is not a significant predictor as p-value is greater than 0.05 indicating it may not be a useful variable in this context.
There are many ways in which we can increase the fit and accuracy of our model.
5.1.Removing outliers:
The accuracy and fit can be affected disproportionately due to presence of extreme values in the data set. Hence, we created box plot to identify the outliers and remove them.
remove_outliers <- function(data, column) {
q1 <- quantile(data[[column]], 0.25, na.rm = TRUE)
q3 <- quantile(data[[column]], 0.75, na.rm = TRUE)
iqr <- q3 - q1
lower_bound <- q1 - 1.5 * iqr
upper_bound <- q3 + 1.5 * iqr
data %>% filter(data[[column]] >= lower_bound & data[[column]] <= upper_bound)
}
complete_data_no_outliers <- complete_data_na %>%
remove_outliers("childmortality") %>%
remove_outliers("gdppercap_true") %>%
remove_outliers("co2percap") %>%
remove_outliers("eduratio") %>%
remove_outliers("cpindex")
View(complete_data_no_outliers)
box_plot <- function(data, column, title) {
ggplot(data, aes_string(y = column)) +
geom_boxplot() +
ggtitle(title) +
theme_minimal()
}
box_plot(complete_data_na, "childmortality", "Child Mortality Before Removing Outliers")## Warning: `aes_string()` was deprecated in ggplot2 3.0.0.
## ℹ Please use tidy evaluation idioms with `aes()`.
## ℹ See also `vignette("ggplot2-in-packages")` for more information.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
model_total_no_outliers <- lm(childmortality ~ gdppercap_true + co2percap + eduratio + cpindex , data = complete_data_no_outliers)
summary(model_total_no_outliers)##
## Call:
## lm(formula = childmortality ~ gdppercap_true + co2percap + eduratio +
## cpindex, data = complete_data_no_outliers)
##
## Residuals:
## Min 1Q Median 3Q Max
## -43.446 -11.246 -2.406 9.372 82.833
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.264e+02 4.309e+00 29.336 < 2e-16 ***
## gdppercap_true -6.279e-04 1.197e-04 -5.248 2.16e-07 ***
## co2percap -7.616e-01 3.600e-01 -2.115 0.0348 *
## eduratio -8.549e-01 4.745e-02 -18.019 < 2e-16 ***
## cpindex -5.607e-02 6.459e-02 -0.868 0.3857
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 17.86 on 585 degrees of freedom
## Multiple R-squared: 0.6445, Adjusted R-squared: 0.6421
## F-statistic: 265.1 on 4 and 585 DF, p-value: < 2.2e-16
The result was unpredictable, as it reduced the r-squared value more. This could be due to the loss of data variability, reduction in the sample size of the data and distribution changes in the data. In our case, removing a large number of outliers has reduced the same size substantially. The complete_data_no_outliers variable has only 590 entries. Hence, the model is less reliable and reduces the statistical power.
5.2 Introducing the Human Development Index (HDI):
Adding another variable can significantly impact the model fit, hence, its crucial to pick the right variable.
We decided to include Human Development Index in the model as it is one of the most comprehensive measure of development. The reason for including HDI are listed below:
Multidimensional aspect: It includes all the basic aspects of human development like health (health expectancy at birth), education(mean years of schooling and expected years of schooling), and standard of living (gross national income per capita).
Direct relationship with health: Educated population tend to have better health knowledge. They are also better informed in terms of best practices for healthy children.
Economic Component: HDI also reflects upon the economic condition which becomes a relevant factor for this research as the economic prosperity enables access to top notch heathcare services and nutrition.
Policy benchmark: Both international and national organizations uses the HDI index to access the progress across all the countries, hence, HDI is one of the most credible variable.
High explanatory power: The variability in child mortality can be explained better since HDI integrates multiple socio-economic factors.
Now we are going to clean the HDI data and include it in our regression model.
hdi_data <- read.csv("7.hdi_human_development_index.csv")
hdi_data <- hdi_data %>%
pivot_longer(-country, names_to = "year", values_to = "hdi") %>%
separate(year, into =c("character", "year"), sep = "X", remove = TRUE) %>%
select(-character) %>%
mutate(year = as.numeric(year))
View(hdi_data )
complete_data_try5 <- complete_data %>%
full_join(hdi_data, by = c("country", "year"))
View( complete_data_try5)
str( complete_data_try5 )## tibble [59,309 × 8] (S3: tbl_df/tbl/data.frame)
## $ country : chr [1:59309] "Afghanistan" "Afghanistan" "Afghanistan" "Afghanistan" ...
## $ year : num [1:59309] 1800 1801 1802 1803 1804 ...
## $ childmortality: num [1:59309] 469 469 469 469 469 469 470 470 470 470 ...
## $ gdppercap_true: num [1:59309] 599 599 599 599 599 599 599 599 599 599 ...
## $ co2percap : num [1:59309] 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 0.001 ...
## $ eduratio : num [1:59309] NA NA NA NA NA NA NA NA NA NA ...
## $ cpindex : num [1:59309] NA NA NA NA NA NA NA NA NA NA ...
## $ hdi : num [1:59309] NA NA NA NA NA NA NA NA NA NA ...
model_total_try5 <- lm(childmortality ~ gdppercap_true + co2percap + eduratio + cpindex +hdi, data = complete_data_try5)
summary(model_total_try5)##
## Call:
## lm(formula = childmortality ~ gdppercap_true + co2percap + eduratio +
## cpindex + hdi, data = complete_data_try5)
##
## Residuals:
## Min 1Q Median 3Q Max
## -42.680 -7.675 0.061 5.899 56.343
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.904e+02 3.242e+00 58.737 < 2e-16 ***
## gdppercap_true 2.835e-04 6.852e-05 4.137 3.97e-05 ***
## co2percap 7.897e-02 1.789e-01 0.441 0.65901
## eduratio -1.873e-01 4.096e-02 -4.574 5.71e-06 ***
## cpindex 1.423e-01 4.410e-02 3.227 0.00131 **
## hdi -2.158e+02 7.774e+00 -27.755 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 13.72 on 667 degrees of freedom
## (58636 observations deleted due to missingness)
## Multiple R-squared: 0.8344, Adjusted R-squared: 0.8332
## F-statistic: 672.2 on 5 and 667 DF, p-value: < 2.2e-16
As expected HDI variable has made the model more robust and captures the multifaceted aspects of the development that affects child mortality as well. The model appears to be the most fit model, the high R-squared and Adjusted R-squared values, significant coefficients for most variables.
5.3 Removing insignificant variables:
We can still make our model more efficient by removing insignificant variables like “co2percap”. So, we are going to remove CO2 per capita from our regression model. There are several reasons to justify the removal:
Statistical insignificance due to high p-value: The “co2percap” variable has a p-vale of 0.124869, which is greater than the conventional threshold of 0.05.
Potential Multicollinearity: The multicollinearity introduced in the model due to insignificant variables can inflate the standard error of the coefficients and makes it difficult to assess the true effect of each predictor.
Improving model simplicity: Removing insignificant variables make the model more parsimonious, focusing on the main predictors that have an impact on child mortality.
Reduction in over fitting: Removing insignificant outlines also helps in creating a more generalization model that performs better.
Minimal impact on R-squared value: Removing a statistically insignificant variable does not impact the R-squared value of the model, hence, it does not impacts the explanatory power of the model.
Hence, it is crucial to remove all the insignificant outliers from our model.
model_total_try5 <- lm(childmortality ~ gdppercap_true + eduratio + cpindex +hdi, data = complete_data_try5)
summary(model_total_try5)##
## Call:
## lm(formula = childmortality ~ gdppercap_true + eduratio + cpindex +
## hdi, data = complete_data_try5)
##
## Residuals:
## Min 1Q Median 3Q Max
## -42.713 -7.642 -0.014 5.785 56.288
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.904e+02 3.239e+00 58.782 < 2e-16 ***
## gdppercap_true 3.050e-04 4.805e-05 6.348 4.02e-10 ***
## eduratio -1.881e-01 4.089e-02 -4.601 5.04e-06 ***
## cpindex 1.394e-01 4.357e-02 3.199 0.00144 **
## hdi -2.154e+02 7.735e+00 -27.852 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 13.72 on 668 degrees of freedom
## (58636 observations deleted due to missingness)
## Multiple R-squared: 0.8344, Adjusted R-squared: 0.8334
## F-statistic: 841.2 on 4 and 668 DF, p-value: < 2.2e-16
The model explains 83.3% variability in child mortality rate. All the predictors in the model are statistically significant at the 0.01 level, emphasizing on their importance in explaining child mortality rates:
- GDP per capita has a positive effect on child mortality indicating that high economic output per person is associated with lower child mortality rate.
- Education Ratio has a negative and significant effect which shows that higher education qualification correlates with lower child mortality.
- Corruption Perception Index has a significant positive effect, suggesting that lower corruption is correlated with lower child mortality rate.
- Human Development Index which includes the overall health, education and standard of living of an individual has a strong negative effect on child mortality.
GDP per capita, is correlated with reduced rates of child mortality, highlighting the role that economic prosperity plays in improving the health of children. The education ratio demonstrates that, probably as a result of better health practices and understanding, greater educational attainment—especially among women—is essential for lowering child mortality. Given that corruption has the potential to harm public health programmes and healthcare systems, the Corruption Perception Index suggests that lower levels of corruption are associated with better child health outcomes. Lastly, child mortality is strongly impacted negatively by the Human Development Index, which measures living standards, general health, and education. This emphasises the significance of holistic development in preserving the health of children.
6. Conclusion:
“To what extent do socio-economic indicators predict variations in child mortality rates globally?” was the research question that gave direction to this study. Based on our thorough investigation, we have found that child mortality rates are highly influenced by socioeconomic factors such as GDP per capita, education ratio, Corruption Perception Index, and Human Development Index. The important roles these factors play are highlighted by the fact that the model accounts for 83.3% of the variability in child mortality.
Our results highlight the significance of economic success in improving child health outcomes by showing that GDP per capita, which measures economic output per person, is linked to reduced child mortality rates. The education ratio demonstrates that, probably as a result of better health practices and understanding, greater educational attainment—especially among women—is essential for lowering child mortality. Given that corruption has the potential to harm public health programmes and healthcare systems, the Corruption Perception Index reveals that lower levels of corruption are associated with better child health outcomes. Last but not least, child mortality is significantly impacted negatively by the Human Development Index, which measures living standards, general health, and education. This emphasises the significance of total development in preserving child health. This study highlights the need of addressing these elements in policy-making and offers insightful information about the socioeconomic determinants of child mortality
References
Chao, F. et al. (2018) ‘National and regional under-5 mortality rate by economic status for low-income and middle-income countries: a systematic assessment,’ the Lancet. Global Health, 6(5), pp. e535–e547. https://doi.org/10.1016/s2214-109x(18)30059-7.
Van Malderen, C. et al. (2019) ‘Socioeconomic factors contributing to under-five mortality in sub-Saharan Africa: a decomposition analysis,’ BMC Public Health, 19(1). https://doi.org/10.1186/s12889-019-7111-8.
Ehrlinger, L. and Wöß, W. (2022) ‘A survey of data quality measurement and monitoring tools,’ Frontiers in Big Data, 5. https://doi.org/10.3389/fdata.2022.850611.