Introduction

Problem Statement

Efforts to provide development assistance to Asia recognize that the continent is home to countries with various levels of economic development. While we have a general idea of patterns of development in this region, what are the patterns in relation to these different countries’ income groups? For my final project, I wanted to uncover this fewer-mentioned angle of funding provided to Asia and Asia-Pacific by major donor countries in the world.

Dataset used

Major donor countries are defined as the 30 members in the OECD Development Assistance Committee, the biggest international forum of many of the largest providers of aid. For practical reasons, the timeframe of funding I will consider is in 2016 and 2017. The original source of the dataset is called “AAAG_DACmembers.csv”, and can be found at the OECD website: http://www.oecd.org/dac/financing-sustainable-development/development-finance-data/aid-at-a-glance.htm.

Loading Package and Dataset

First, we will load the dataset and the packages required for data manipulation.

library(dplyr)
library(ggplot2)
library(tidyverse)
library(knitr)
funds <- read.csv("AAAG_DACmembers.csv")

In addition, because the original dataset covers funding for all regions of the world, we will filter out the regions of interest, specifically Asia and sub-regions of Asia. We will also clean the dataframe to only include the variables we need:

asiafunds <- filter(funds, Regionnname == "Asia" | 
                      Regionnname == "FarEastAsia" | 
                      Regionnname == "SouthCentralAsia")
asiafunds <- select(asiafunds, -c(6:8,10,12,14,16:20))

Data Top-level Summaries

As a result, our overarching dataset, called “asiafunds”, looks as follows:

dim(asiafunds)
## [1] 1762    9
kable(head(asiafunds))
year DonorCode donornamee col colname RecipientNameE Regionnname incomegrname Defl
2016 2 Belgium 201 Grants, Total Pakistan SouthCentralAsia LMICs 0.0020513
2016 701 Japan 204 ODA Gross Loans Asia, regional Asia UnallocatedIncome 17.8700000
2017 4 France 204 ODA Gross Loans Georgia SouthCentralAsia LMICs 4.4632245
2016 18 Finland 201 Grants, Total Sri Lanka SouthCentralAsia LMICs 0.7411915
2017 20001 Total DAC Countries 201 Grants, Total China (People’s Republic of) FarEastAsia UMICs 560.1060196
2016 10 Sweden 201 Grants, Total Asia, regional Asia UnallocatedIncome 28.6403466

It is worth noting that the amount of the development assistance provided varies quite drastically, as shown by a historgram of the amount of funding (defined under variable “Defl”):

asiafunds %>%
  ggplot() +
  geom_histogram(mapping = aes(x = Defl), bins = 100)

This means that future data visualizations will need to be sensitive to the weight given to extremely high values in relation to the generally lowers, specifically through usage of log10.

Preparing for Data Analysis

Before we proceed to data analysis, below is an explanation of variables used:

# Subset of unique donor countries, which excludes datapoints that are aggregated funding from all 30 members
asiafunds_nosum <- filter(asiafunds,!donornamee == "Total DAC Countries")

# Subset of unique income grous, which excludes an income group category called unallocated income,  used in raw dataset for regional sums
incomegruniq <- filter(asiafunds_nosum,!incomegrname == "UnallocatedIncome")

# Subset of only gross ODA loans, and subset of only grants
asiafunds_oda <- filter(asiafunds_nosum,!colname == "Grants, Total")
asiafunds_grants <- filter(asiafunds_nosum,!colname == "ODA Gross Loans")

Data Analysis

Our overarching “asiafunds” dataset breaks recipient countries down into 5 types:

Visualization 1: Funding for Different Income Groups by Value, with Funding Type

We first examine the quantity of funding across different income groups, and we do so by producing a bar chart that takes into account the different types of funding from both 2016 and 2017 for all 5 income groups:

asiafunds_nosum %>%
  ggplot(aes(x = incomegrname, y = Defl, fill = as.factor(colname))) + 
  geom_bar(stat = "identity")+
  labs(title = "Funding for Different Income Groups by Value, with Funding Type",
       x = "Income Group", y = "Funding Received (USD millions, Adjusted)",
       fill = "Funding Type")

Analysis:

  1. Contrary to what I thought, the data visualization shows that the countries that received most funding in terms of monetary value in 2016 and 2017 are not the least developed countries (LDCs), but rather lower-middle income countries (LMICs). This might be because countries in this category have a better capacity to utilize the funding.

  2. In addition, it is interesting to see the disproportionality in the type of funding provided: for LDCs, the majority of the value of funding come from grants, while over half of funding for LMICs come from Official Development Assiantace (ODA) loans. This would make sense, as the latter income group may be able to pay back the loans better.

Visualization 2-4: Funding for Different Income Groups by Quantity & Distribution, with Funding Type

From Visualization 1, we know that different income groups receive varied portions of development assistance from 2 different types (grants and ODA loans). This begs the question: do these funding inflows have the same monetary value?

To answer this question, we produce a scatter plot to plot the distribution of funding by their monetary value AND numeric count. Because of the existence of extreme values on both ends in our dataset, we applied log10 to compress the higher-end values and expand the lower end values. In the scatterplot, the funding is seperated into two types (201 corresponding to grants, and 204 corresponding to ODA loans). The results are separated into five panels for easier comparison across 5 income groups:

asiafunds_nosum %>%
ggplot() +
  geom_point(aes(x = col,y = log10(Defl), col = colname))+
  facet_wrap(~ incomegrname, nrow =1)+
  labs(title = "Funding Received across Income Groups: Pattern 1",
       x = "Income Group", y = "Spread of Funding Received")

Analysis:

This scatterplot reveals that there is no one “go-to” monetary amount of funding provided for either grants or ODA loans. In fact, across all five income groups (with the exception of OtherLICs due to lack of data), grants and ODA come in all sorts of sizes.

In addition, we also learn that LMICs not only have the majority of the value of their funding from ODA loans (see Visualization 1), countries in this income group in aggregate receive the most of ODA loans in terms of quantity of all 5 groups.


If there are so many grants and ODA loans, the next question becomes: is most of the funding coming from a small number of large contributions, or from a large number of small contributions? We can address this question by plotting two separate boxplots for ODA loans and grants, once again separating by 5 income groups:

asiafunds_oda %>%
  ggplot()+ 
  geom_boxplot(aes(x = incomegrname, y = log10(Defl)))+
  labs(title = "Funding Received across Income Groups: Pattern 2, ODA only",
       x = "Income Group", y = "Log10 of Funding")

asiafunds_grants %>%
  ggplot()+ 
  geom_boxplot(aes(x = incomegrname, y = log10(Defl)))+
  labs(title = "Funding Received across Income Groups: Pattern 2, Grants only",
       x = "Income Group", y = "Log10 of Funding")

Analysis:

The middle line of the boxes in the boxplots help us see that the median value for ODA gross loans across income groups (excluding Unallocated Income) are quite similar, and this holds true to a lesser degree in the case of grants. However, comparison between the ODA and grant boxplots show that funding from ODA tends to be much more varied than for grants.

Visualization 5-6: Top 10 Recipient and Donor Countries

To proceed, it would be interesting to see the list of top 10 recipient countries of funding fall in a certain income group. To uncover this information, we first calculate the total amount of funding each recipient country receives in both 2016 and 2017. We proceed to display the top 10 results through the geom_col chart in a descending order, in which each result is marked by their income group AND region. The result is as follows:

incomegruniq %>%
    group_by(RecipientNameE)%>%
    summarize(totalfunding = sum(Defl, na.rm = TRUE),
              incomegroup = unique(incomegrname)) %>%
    top_n(n = 10, wt = totalfunding) %>%
    ggplot(aes(x = fct_reorder(RecipientNameE, totalfunding), 
               y = totalfunding, fill = incomegroup)) +
    geom_col() +
    coord_flip() +
    theme(legend.position = "bottom") +
    labs(title = "Top 10 Recipients of Funding in Asia",
         x = "Recipient Country", y = "Grants & ODA Loans Received (USD millions)", 
         fill = "Income Group")

incomegruniq %>%
  group_by(RecipientNameE)%>%
  summarize(totalfunding = sum(Defl, na.rm = TRUE),
            region = unique(Regionnname)) %>%
  top_n(n = 10, wt = totalfunding) %>%
  ggplot(aes(x = fct_reorder(RecipientNameE, totalfunding), 
             y = totalfunding, fill = region)) +
  geom_col() +
  coord_flip() +
  theme(legend.position = "bottom") +
  labs(title = "Top 10 Recipients of Funding in Asia",
       x = "Recipient Country", y = "Grants & ODA Loans Received (USD millions)", 
       fill = "Region Name")

A summary allow helps us to see that these top 10 recipient countries receive a similar count of ~60-70 instances of funding:

incomegruniq %>%
  group_by(RecipientNameE)%>%
  summarize(totalfunding = sum(Defl, na.rm = TRUE), count = n())%>%
  arrange(desc(totalfunding))
## # A tibble: 28 x 3
##    RecipientNameE               totalfunding count
##    <fct>                               <dbl> <int>
##  1 India                               7821.    69
##  2 Afghanistan                         6806.    60
##  3 Viet Nam                            4770.    70
##  4 Bangladesh                          4035.    63
##  5 Indonesia                           3997.    64
##  6 Pakistan                            3795.    60
##  7 China (People's Republic of)        2477.    69
##  8 Myanmar                             2359.    56
##  9 Philippines                         1621.    56
## 10 Nepal                               1430.    60
## # ... with 18 more rows

Analaysis

Based on the chart, we can see that LMICs are well-represented in the top 10, followed by LDCs. China stands out as the only upper-middle income country in Asia to join the top 10 in receiving development assistance. In addition, more of the development assistance goes to South and Central Asia in the top 10.


We can proceed to follow the same code but adjust it to display the top 10 donor countries:

asiafunds_nosum %>% 
  group_by(donornamee)%>%
  summarize(totalfunding = sum(Defl, na.rm = TRUE)) %>%
  top_n(n = 10, wt = totalfunding) %>%
  ggplot(aes(x = fct_reorder(donornamee, totalfunding), 
             y = totalfunding)) +
  geom_col() +
  coord_flip() +
  theme(legend.position = "bottom") +
  labs(title = "Top 10 Donors of Grants & ODA in Asia",
       x = "Donor Country", y = "Grants & ODA Loans Given (USD millions)")

A summary allow helps us to see that these top 10 donor countries’ instances of funding:

asiafunds_nosum %>%
  group_by(donornamee)%>%
  summarize(totalfunding = sum(Defl, na.rm = TRUE), count = n())%>%
  arrange(desc(totalfunding))
## # A tibble: 30 x 3
##    donornamee      totalfunding count
##    <fct>                  <dbl> <int>
##  1 Japan                 16892.   105
##  2 United States          8142.    65
##  3 Germany                7600.    92
##  4 EU Institutions        4497.    88
##  5 United Kingdom         3827.    66
##  6 France                 2216.    92
##  7 Australia              1520.    51
##  8 Korea                  1479.    84
##  9 Canada                 1054.    64
## 10 Switzerland             881.    62
## # ... with 20 more rows

Analysis:

It is surprising to see that Japan emerged as the largest giver of development assistance in Asia when summing data from 2016 and 2017. Japan gives roughly twice the monetary value and count of funding compared to the runner-up, the United States.

Visualization 7: Top 3 Donor Countries’ Funding Patterns across Income Groups

This brings us to the nature of giving countries: do all donor countries give the same way, in terms of amount and value across recipient income groups? We may get a glimpse of the answer by analyzing the giving behavior of the top 3 donor countries: Japan, the United States and Germany. The code below provides a boxplot that plots the distribution of funding (separating ODA and grants) for top 3 donor countries. Note: a scaling limit for the y variable has been inserted in order to show the box values more easily. The result is as follows:

top3grants <- filter(asiafunds_grants, donornamee == "Japan" | donornamee == "Germany" | donornamee == "United States"  )
top3grants %>%
  ggplot(aes(incomegrname, Defl))+ 
  geom_boxplot(aes(fill = donornamee))+
  scale_y_continuous(limits = c(0,500))+
  theme_classic()+
  labs (title = "Funding provided across Income Groups by Top 3 Donor Countries",
        x = "Income Group", y = "Grants Given (USD millions, Adjusted)",
        fill = "Donor Country")
## Warning: Removed 5 rows containing non-finite values (stat_boxplot).

top3oda <- filter(asiafunds_oda, donornamee == "Japan" | donornamee == "Germany" | donornamee == "United States"  )
top3oda %>%
  ggplot(aes(incomegrname, Defl))+ 
  geom_boxplot(aes(fill = donornamee))+
  scale_y_continuous(limits = c(0,500))+
  theme_classic()+
  labs (title = "Funding provided across Income Groups by Top 3 Donor Countries",
        x = "Income Group", y = "ODA Loans Given (USD millions, Adjusted)",
        fill = "Donor Country")
## Warning: Removed 8 rows containing non-finite values (stat_boxplot).

Analysis: The skewed boxplots for ODA funding and grant funding show that each country gives to different income groups differently. We see, for example, how Japan has the tendency to give grants to the entire region as a whole (indicated by Japan’s contribution to “UnallocatedIncome”), or how the United States did not even give any grants to Asia in 2016 and 2017! Regardless, the top 3 countries do focus on LDCs and LMICs as the destination for development assistance, in line with the larger trends we observed in Visualization 1.

Conclusion

I was quite happy that the final product adhered to the conception during the project proposal stage. There were two surprises that emerged from this data analysis. First is that lower-middle income countries (LMICs), not the least developed countries, received the lion share of development assistance to Asia from the OECD Development Assistance Committee in 2016 and 2017 (Visualization 1). LMICs not only have the majority of the value of funding from ODA loans (see Visualization 1), this group receives the highest quantity of ODA loans out of the 5 income groups (Visualizaton 2). Second is that Japan was the largest giver of development assistance in Asia when summing data from 2016 and 2017. In fact, Japan gave twice the monetary value and count of funding compared to the runner-up, the United States (Visualization 6).

On a macro scale, development assistance in 2016 and 2017 skewed towards countries in South and Central Asia (Visualization 5). Countries that are LMICs and LDCs make up most of the top 10 recipients of funding, with the exception of China as the only upper-middle income country in this list (Visualization 5).

From the giving country perspective, while there is no one “go-to” monetary amount of funding that a country in one income group should expect to receive, inflows from ODA tends to be much more varied than for grants(Visualization 2-4). Each country has different standards for how much development assitance to provide, what type to provide, and for what recipient income group (Visualization 7).