Data: This report is based off of the OECD Creditor Reporting System data, accessed via the bulk download files on 6/18/2024.
Filters: I have looked at a subset of the CRS as follows:
Country Programmable Aid (excluding items listed in CPA definition)
Rows with commitments data
Low income and lower middle income countries only
The number of distinct donors is based on the number of unique DonorCodes.
How to interpret: In 2022 there were 93 donors that made CPA commitments to low and lower middle income countries.
#Number of Donors Total
plotTS(yr, "distinctdonors","Number of Donors","Number of donors each year, 2005-2022")
How to interpret: In 2022 there were 85 donors that made CPA commitments to low income countries.
plotTS(yr_income, "distinctdonors","Number of Donors","Number of donors each year, 2005-2022", GROUP="Income")
How to interpret: In 2022, the median low income country had 55 donors that made CPA commitments.
plotTS(yr_income, "median_distinctdonors","Number of Donors","Median number of donors per country each year, 2005-2022", GROUP="Income")
plotTS(yr_region, "distinctdonors","Number of Donors","Number of donors each year, 2005-2022", GROUP="Region")
plotTS(yr_region, "median_distinctdonors","Number of Donors","Median number of donors per country each year, 2005-2022", GROUP="Region")
How to interpret: In 2005, there were 21 donors that made commitments to Syria. The median across all low income countries in 2005 was 28 donors (blue line).
#Number of Donors for each country
licplotdf <- yr_recipient%>%
filter(Income=="Low income")%>%
addSummaryCol("median","distinctdonors", "Year")%>%
orderGroup("RecipientName","distinctdonors")
plotTS(licplotdf, "distinctdonors","Number of Donors","Number of donors each year: Low income countries, 2005-2022",FACET="RecipientName", FACET_CONST="median")
lmicplotdf <- yr_recipient%>%
filter(Income=="Lower middle income")%>%
addSummaryCol("median","distinctdonors", "Year")%>%
orderGroup("RecipientName","distinctdonors")
plotTS(lmicplotdf, "distinctdonors","Number of Donors","Number of donors each year: Lower middle income countries, 2005-2022",FACET="RecipientName", FACET_CONST="median")
How to interpret: In 2022, there were 42 multilateral donors that made commitments to low and lower middle income countries.
#Number of Donors by type of donor
plotTS(yr_donortype,"distinctdonors","Number of Donors","Number of donors each year, 2005-2022",GROUP="DonorType")
#Number of Donors by multilateral type
plotTS(yr_mlattype%>%filter(!is.na(MultilateralType)),"distinctdonors","Number of Donors","Number of Multilateral Donors each year by type, 2005-2022",GROUP="MultilateralType")
The number of distinct projects is based off of the number of unique ProjectNumbers
How to interpret: In 2018, commitments were made for 48,873 projects to low and lower income countries.
#Number of Projects for Low and Middle Income Countries
plotTS(yr, "distinctprojs","Number of Projects","Number of projects each year, 2005-2022")
How to interpret: In 2018, commitments were made for 32,306 projects to lower middle income countries, and 17,110 projects to low income countries. Notice that this sums to a total greater than the 48,873 indicating that the same project code is used across different countries. Is this because there are projects that have more than one country recipient? Or are the Project Numbers in one country separate from those in another?
#Number of Projects for Low and Middle Income Countries
plotTS(yr_income%>%filter(Income %in% c("Low income","Lower middle income")), "distinctprojs","Number of Projects","Number of projects each year, 2005-2022", GROUP="Income")
Average across countries…
plotdf <- yr_recipient%>%
group_by(Year, Income)%>%
summarise(median_projs=median(distinctprojs))
plotTS(plotdf, "median_projs","Number of Projects","Median number of projects per country each year, 2005-2022",GROUP="Income")
plotTS(yr_region, "distinctprojs","Number of Projects","Number of projects each year, 2005-2022", GROUP="Region")
plotTS(yr_region, "median_distinctprojs","Number of Projects","Median number of projects per country each year, 2005-2022", GROUP="Region")
How to interpret: In 2011, commitments were made for 2,257 projects to Ethiopia. The median across all low income countries in 2011 was 915 projects (blue line).
#Number of Projects for each country
licplotdf <- yr_recipient%>%
filter(Income=="Low income")%>%
addSummaryCol("median","distinctprojs", "Year")%>%
orderGroup("RecipientName","distinctprojs")
plotTS(licplotdf, "distinctprojs","Number of Projects","Number of Projects each year: Low income countries, 2005-2022",FACET="RecipientName", FACET_CONST="median")
lmicplotdf <- yr_recipient%>%
filter(Income=="Lower middle income")%>%
addSummaryCol("median","distinctprojs", "Year")%>%
orderGroup("RecipientName","distinctprojs")
plotTS(lmicplotdf, "distinctprojs","Number of Projects","Number of Projects each year: Lower middle income countries, 2005-2022",FACET="RecipientName", FACET_CONST="median")
How to interpret: In 2011, DAC donors made commitments on 55,138 projects to low and lower income countries.
#Number of Projects by type of donor
plotTS(yr_donortype,"distinctprojs","Number of Projects","Number of Projects each year, 2005-2022",GROUP="DonorType")
# plotTS(yr_mlattype%>%filter(!is.na(MultilateralType)),"distinctprojs","Number of Projects","Number of Multilateral Projects each year by type, 2005-2022",GROUP="MultilateralType")
#DAC Donors
dacdf <- yr_donors%>%
filter(DonorType=="DAC")%>%
mutate(DonorName=gsub("European Investment Bank","EIB",DonorName),
DonorName=gsub("European Development Fund","European Dev. Fund", DonorName),
DonorName=gsub("European Commission","European Comm.", DonorName))%>%
addSummaryCol("median","distinctprojs")
plotTS(dacdf, "distinctprojs","Number of Projects","DAC Donors",FACET="DonorName", FACET_CONST="median")
#Multilateral Donors
mlatdf <- yr_donors%>%
#filter(DonorType=="Multilateral")%>%
filter(MultilateralType=="MDB")%>%
mutate(DonorName=gsub("Development","Dev.",DonorName))%>%
addSummaryCol("median","distinctprojs")
plotTS(mlatdf, "distinctprojs","Number of Projects","Multilateral Donors",FACET="DonorName", FACET_CONST="median")
The number of distinct channels is based off of the number of unique ChannelCodes
How to interpret: In 2022, there were 198 channels used for CPA commitments to low and lower middle income countries.
#Number of Channels Total
plotTS(yr, "distinctchannels","Number of Channels","Number of channels each year, 2005-2022")
How to interpret: In 2022, there were were 137 channels used for CPA commitments to Low income countries.
#Number of Channels for Low and Middle Income Countries
plotTS(yr_income, "distinctchannels","Number of Channels","Number of channels each year, 2005-2022", GROUP="Income")
plotTS(yr_income, "median_distinctchannels","Number of Channels","Median number of channels per country each year, 2005-2022", GROUP="Income")
plotTS(yr_region, "distinctchannels","Number of Channels","Number of channels each year, 2005-2022", GROUP="Region")
plotTS(yr_region, "median_distinctchannels","Number of Donors","Median number of channels per country each year, 2005-2022", GROUP="Region")
How to interpret: In 2021, CPA commitments were made to Mali using 71 different channels.
#Number of Channels for each country
licplotdf <- yr_recipient%>%
filter(Income=="Low income")%>%
addSummaryCol("median","distinctchannels", "Year")%>%
orderGroup("RecipientName","distinctchannels")
plotTS(licplotdf, "distinctchannels","Number of Channels","Low income countries",FACET="RecipientName", FACET_CONST="median")
lmicplotdf <- yr_recipient%>%
filter(Income=="Lower middle income")%>%
addSummaryCol("median","distinctchannels", "Year")%>%
orderGroup("RecipientName","distinctchannels")
plotTS(lmicplotdf, "distinctchannels","Number of Channels","Lower middle income countries",FACET="RecipientName", FACET_CONST="median")
How to interpret: In 2022, there were 185 channels used by DAC donors, while only 78 used by multilateral donors, for CPA commitments to low and lower middle income countries. Within multilateral, MDBs used only 20 channels.
#Number of Channels by type of donor
plotTS(yr_donortype,"distinctchannels","Number of Channels","Number of channels each year, 2005-2022",GROUP="DonorType")
plotTS(yr_mlattype%>%filter(!is.na(MultilateralType)),"distinctchannels","Number of Channels","Number of channels by Multilateral Donors, 2005-2022",GROUP="MultilateralType")
#DAC Donors
dacdf <- yr_donors%>%
filter(DonorType=="DAC")%>%
mutate(DonorName=gsub("European Investment Bank","EIB",DonorName),
DonorName=gsub("European Development Fund","European Dev. Fund", DonorName),
DonorName=gsub("European Commission","European Comm.", DonorName))%>%
addSummaryCol("median","distinctchannels")
plotTS(dacdf, "distinctchannels","Number of Channels","DAC Donors",FACET="DonorName", FACET_CONST="median")
#Multilateral Donors
mlatdf <- yr_donors%>%
#filter(DonorType=="Multilateral")%>%
filter(MultilateralType=="MDB")%>%
mutate(DonorName=gsub("Development","Dev.",DonorName))%>%
addSummaryCol("median","distinctchannels")
plotTS(mlatdf, "distinctchannels","Number of Channels","Multilateral Donors",FACET="DonorName", FACET_CONST="median")
\(AverageDonorsPerChannel=\frac{Number of Donors}{Number of Channels}\)
plotTS(yr_income, "donors_to_channels","Donors to Channels ratio","Donors to Channels ratio each year, 2005-2022",GROUP="Income")
Median across countries…
plotTS(yr_income, "median_donors_to_channels","Donors to Channels ratio","Median Donors to Channels ratio each year, 2005-2022",GROUP="Income")
plotTS(yr_region, "donors_to_channels","Donors to Channels ratio","Donors to Channels ratio each year, 2005-2022",GROUP="Region")
Median across countries…
plotTS(yr_region, "median_donors_to_channels","Donors to Channels ratio","Median Donors to Channels ratio each year, 2005-2022",GROUP="Region")
# #Number Donors over Number of Channels
#
# donors_to_channels <- yr_recipient%>%
# mutate(donors_to_channels = distinctdonors/distinctchannels)
licplotdf <- yr_recipient%>%
filter(RecipientName != "Afghanistan")%>%
filter(Income=="Low income")%>%
addSummaryCol("median","donors_to_channels", "Year")#%>%
#orderGroup("RecipientName","distinctdonors_channels")
plotTS(licplotdf, "donors_to_channels","Donors to Channels ratio","Donors to Channels ratio each year: Low income countries, 2005-2022",FACET="RecipientName", FACET_CONST="median")
lmicplotdf <- yr_recipient%>%
filter(Income=="Lower middle income")%>%
addSummaryCol("median","donors_to_channels", "Year")#%>%
#orderGroup("RecipientName","distinctdonors_channels")
plotTS(lmicplotdf, "donors_to_channels","Donors to Channels ratio","Donors to Channels ratio each year: Low income countries, 2005-2022",FACET="RecipientName", FACET_CONST="median")
\(AverageProjectsPerDonor=\frac{Number of Projects}{Number of Donors}\)
Can also be thought of as a weighted average number of projects per donor.
How to interpret: In 2009 lower middle income countries had over 940 projects per donor, on average.
plotTS(yr_income, "projs_to_donors","Projects to donors ratio","Projects to donors ratio each year, 2005-2022",GROUP="Income")
How to interpret: In 2011, the median lower middle income country had 27 projects per donor. In 2022, the median lower middle country had ~17 projects per donor.
plotTS(yr_income, "median_projs_to_donors","Projects to donors ratio","Project to donor ratio, median across countries, 2005-2022",GROUP="Income")
plotTS(yr_region, "projs_to_donors","Projects to donors ratio","Projects to donors ratio each year, 2005-2022",GROUP="Region")
plotTS(yr_region, "median_projs_to_donors","Projects to donors ratio","Project to donor ratio, median across countries, 2005-2022",GROUP="Region")
#Number Projects over Number of Donors
projs_to_donors <- yr_recipient%>%
mutate(projs_to_donors = distinctprojs/distinctdonors)
licplotdf <- projs_to_donors%>%
#filter(RecipientName != "Afghanistan")%>%
filter(Income=="Low income")%>%
addSummaryCol("median","projs_to_donors", "Year")#%>%
#orderGroup("RecipientName","distinctdonors_channels")
plotTS(licplotdf, "projs_to_donors","Projects to donors ratio","Low income countries, 2005-2022",FACET="RecipientName", FACET_CONST="median")
lmicplotdf <- projs_to_donors%>%
filter(Income=="Lower middle income")%>%
addSummaryCol("median","projs_to_donors", "Year")#%>%
#orderGroup("RecipientName","distinctdonors_channels")
plotTS(lmicplotdf, "projs_to_donors","Projects to donors ratio","Lower middle income countries, 2005-2022",FACET="RecipientName", FACET_CONST="median")
#Number Projects over Number of Donors
projs_to_donors <- yr_donortype%>%
#filter(RecipientName != "Afghanistan")%>%
mutate(projs_to_donors = distinctprojs/distinctdonors)
plotTS(projs_to_donors, "projs_to_donors","Projects to donors ratio","Projects to donors ratio each year, 2005-2022",GROUP="DonorType")
donordf <- yr_donors%>%
group_by(Year, DonorType)%>%
summarize(Median_Projects_per_Donor=median(distinctprojs))
plotTS(donordf, "Median_Projects_per_Donor","Median projects per donor","Median projects to donors ratio each year, 2005-2022",GROUP="DonorType")