rough draft
How the EBRD reacted to Russian aggression towards Ukraine
Introduction
EBRD founded after Soviet Union collapsed to rebuild and reconstruct the post-Soviet countries, Ukraine became member in 1992
the only MDB which has strengthening democracies in its mandate! –> when Russia annexed Crimea in 2014 and when it attacked whole Ukraine in 2022 this had a large effect on Ukraine’s economy AND really affected the core principles of the EBRD #### Setting the stage? #### GDP developments -> Ukraine’s economy heavily affected by Russian aggression
line in 2014 and 2022? Or highlighted area?
What about the other crises? GFC, Covid? #| layout-ncol: 2
#| fig-cap:
#| - "Figure 1: Ukraine's economy suffered substantially from the Russian aggression in 2014 and 2022."
#| - "Figure 2: Even though the EBRD announced large surges in project volumes both in 2014 and in 2022, these increases did not turn out to be substantial"
#KEEP:
GDP_2 <- GDP_1 %>%
mutate(GDP_current_USD_bn = GDP_current_USD_mln/1000,
GDP_current_USD_bn_r = round(GDP_current_USD_bn, 2))
Ukraine_investments <- Ukraine_all_projects_6 %>%
group_by(year) %>%
summarize(investments_bn = sum(ebrd_finance)/1000000000)
Ukraine_investments$investments_bn_r <- round(Ukraine_investments$investments_bn, 2)
GDP_2_sub <- GDP_2 %>%
filter(year %in% c(2014, 2015, 2016, 2022, 2023))
Ukraine_investments_sub <- Ukraine_investments %>%
filter(year %in% c(2014, 2015, 2016, 2022, 2023))
# KEEP
# GDP plot
GDP_plot_1 <- ggplot(GDP_2, aes(x = year, y = GDP_current_USD_bn_r)) +
geom_col(aes(text = paste0(year , " GDP: ", GDP_current_USD_bn_r, " Bn [USD]")),fill = "grey") +
geom_smooth(se = FALSE, color = "navyblue", size = .5) +
geom_col(data = GDP_2_sub, aes(x = year, y = GDP_current_USD_bn_r, text = paste0(year, " GDP: ", GDP_current_USD_bn_r, " Bn [USD]")), fill = "darkred", alpha = .4) +
theme_minimal()
GDP_widget_1 <- ggplotly(GDP_plot_1, tooltip = c("text")) %>%
layout(hovermode = "closest",
title = 'Figure : Ukrainian GDP per Year (current USD)',
xaxis = list(title = '') ,
yaxis = list(title = 'Bn USD', range = c(0, 220)),
margin = list(b = 80, t = 100) ,
annotations = list(
list(x = 2015, y = 205, xref = 'x', yref = 'y', text = 'Annexation of Crimea', showarrow = FALSE),
list(x = 2015, y = 215, xref = 'x', yref = 'y', text = '2014', showarrow = FALSE),
list(x = 2022.5, y = 205, xref = 'x', yref = 'y', text = 'Full Invasion', showarrow = FALSE),
list(x = 2022.5, y = 215, xref = 'x', yref = 'y', text = '2022', showarrow = FALSE),
list(xref = "paper", yref = "paper", xanchor = "right", x = 1, y = -0.2, showarrow = FALSE, text = "Data from WEO, IMF (2023) | Calculations by Bentje Böer",
font = list(size = 12, color = "black")
)))
saveWidget(GDP_widget_1, "./processed_02/GDP_widget_1.html")
GDP_widget_1# KEEP:
# EBRD plot
EBRD_plot_1 <- ggplot(Ukraine_investments, aes(x = year, y = investments_bn_r)) +
geom_col(aes(text = paste0(year , " Investments: ", investments_bn_r, " Bn [EUR]")),fill = "grey") +
geom_smooth(se = FALSE, color = "navyblue", size = .5) +
geom_col(data = Ukraine_investments_sub, aes(x = Ukraine_investments_sub$year, y = Ukraine_investments_sub$investments_bn_r, text = paste0(year, " Investments: ", investments_bn_r, " Bn [EUR]")), fill = "darkred", alpha = .4) +
ylim(0, 1.900) +
theme_minimal()
EBRD_widget_1 <- ggplotly(EBRD_plot_1, tooltip = c("text")) %>%
layout(hovermode = "closest",
title = 'Figure : EBRD Investment Volume in Ukraine per Year',
xaxis = list(title = ''),
yaxis = list(title = 'Bn EUR', range = c(0, 1.9)),
margin = list(b = 80, t = 100),
annotations = list(
list(x = 2014.5, y = 1, xref = 'x', yref = 'y', text = 'Annexation of Crimea', showarrow = FALSE),
list(x = 2014, y = 1.1, xref = 'x', yref = 'y', text = '2014', showarrow = FALSE),
list(x = 2022.5, y = 1, xref = 'x', yref = 'y', text = 'Full Invasion', showarrow = FALSE),
list(x = 2022.5, y = 1.1, xref = 'x', yref = 'y', text = '2022', showarrow = FALSE),
list(xref = "paper", yref = "paper", xanchor = "right", x = 1, y = -0.2, showarrow = FALSE, text = "Data from EBRD (2023) | Calculations by Bentje Böer",
font = list(size = 12, color = "black")
)))
saveWidget(EBRD_widget_1, "./processed_02/EBRD_widget_1.html")
EBRD_widget_1# Graphs without GFC - linegraphs
ggplot(GDP_2, aes(x = year, y = GDP_current_USD_bn)) +
geom_line() +
geom_smooth(se = FALSE, color = "navyblue") +
annotate("rect", xmin = 2013, xmax = 2016, ymin = 0, ymax = 200, fill = "darkred",
alpha = .2) +
annotate("rect", xmin = 2021, xmax = 2023, ymin = 0, ymax = 200, fill = "darkred",
alpha = .2) +
annotate("text", x = c(2014.5, 2014.5, 2022, 2022), y= c(75,65, 75, 65),
label = c(expression(italic("2014")), expression(italic("Annexation of Crimea")), expression(italic("2022")), expression(italic("Full Invasion"))))+
theme_minimal() +
labs(
title = "Ukrainian GDP",
subtitle = "in current USD (Bn)",
x = "",
y = "Bn USD",
caption = str_wrap("Data from IMF (forecast for 2023) | Calculations by Bentje Böer")
)`geom_smooth()` using method = 'loess' and formula = 'y ~ x'
Warning in is.na(x): is.na() auf Nicht-(Liste oder Vektor) des Typs
'expression' angewendet
ggplot(Ukraine_investments, aes(x = year, y = investments_bn)) +
geom_line() +
geom_smooth(se = FALSE, color = "navyblue") +
annotate("rect", xmin = 2013, xmax = 2016, ymin = 0, ymax = 1.9, fill = "darkred",
alpha = .2) +
annotate("rect", xmin = 2021, xmax = 2023, ymin = 0, ymax = 1.9, fill = "darkred",
alpha = .2) +
annotate("text", x = c(2014.5, 2014.5, 2022, 2022), y= c(1.750,1.650, 1.750, 1.650),
label = c(expression(italic("2014")), expression(italic("Annexation of Crimea")), expression(italic("2022")), expression(italic("Full Invasion")))) +
theme_minimal() +
labs(
title = "Signed EBRD Projects in Ukraine per Year",
subtitle = "project volume in current EUR (Bn)",
x = "",
y = "Bn EUR",
caption = "Data from EBRD (2023) | Calculations by Bentje Böer"
)`geom_smooth()` using method = 'loess' and formula = 'y ~ x'
Warning in is.na(x): is.na() auf Nicht-(Liste oder Vektor) des Typs
'expression' angewendet
# Graphs with dark aggression columns
GDP_2_sub <- GDP_2 %>%
filter(year %in% c(2014, 2015, 2016, 2022, 2023))
Ukraine_investments_sub <- Ukraine_investments %>%
filter(year %in% c(2014, 2015, 2016, 2022, 2023))
ggplot(GDP_2, aes(x = year, y = GDP_current_USD_bn)) +
geom_col(fill = "grey") +
geom_smooth(se = FALSE, color = "navyblue") +
geom_col(data = GDP_2_sub, aes(x = GDP_2_sub$year, y = GDP_2_sub$GDP_current_USD_bn), fill = "darkred", alpha = .4) +
annotate("rect", xmin = 2013.5, xmax = 2016.5, ymin = 0, ymax = 230, fill = "darkred",
alpha = .2) +
annotate("rect", xmin = 2021.5, xmax = 2023.5, ymin = 0, ymax = 230, fill = "darkred",
alpha = .2) +
annotate("text", x = c(2015, 2015, 2022.5, 2022.5), y= c(210,200, 210, 200),
label = c(expression(italic("2014")), expression(italic("Annexation of Crimea")), expression(italic("2022")), expression(italic("Full Invasion"))))+
theme_minimal() +
labs(
title = "Ukrainian GDP",
subtitle = "in current USD (Bn)",
x = "",
y = "Bn USD",
caption = str_wrap("Data from IMF (forecast for 2023) | Calculations by Bentje Böer")
)Warning: Use of `GDP_2_sub$year` is discouraged.
ℹ Use `year` instead.
Warning: Use of `GDP_2_sub$GDP_current_USD_bn` is discouraged.
ℹ Use `GDP_current_USD_bn` instead.
`geom_smooth()` using method = 'loess' and formula = 'y ~ x'
Warning in is.na(x): is.na() auf Nicht-(Liste oder Vektor) des Typs
'expression' angewendet
# Graphs with GFC
#| layout-ncol: 2
ggplot(GDP_2, aes(x = year, y = GDP_current_USD_bn)) +
geom_line() +
geom_smooth(se = FALSE, color = "navyblue") +
annotate("rect", xmin = 2007, xmax = 2010, ymin = 0, ymax = 200, fill = "darkgray",
alpha = .2) +
annotate("rect", xmin = 2013, xmax = 2016, ymin = 0, ymax = 200, fill = "darkred",
alpha = .2) +
annotate("rect", xmin = 2021, xmax = 2023, ymin = 0, ymax = 200, fill = "darkred",
alpha = .2) +
annotate("text", x = c(2009, 2009, 2014.5, 2014.5, 2022, 2022), y= c(100, 90, 75,65, 75, 65),
label = c(expression(italic("2008")), expression(italic("Global Financial Crisis")), expression(italic("2014")), expression(italic("Annexation of Crimea")), expression(italic("2022")), expression(italic("Full Invasion")))) +
theme_minimal() +
labs(
title = "Ukrainian GDP",
subtitle = "in current USD (Bn)",
x = "",
y = "Bn USD",
caption = "Data from IMF | Calculations by Bentje Böer"
)`geom_smooth()` using method = 'loess' and formula = 'y ~ x'
Warning in is.na(x): is.na() auf Nicht-(Liste oder Vektor) des Typs
'expression' angewendet
ggplot(Ukraine_investments, aes(x = year, y = investments_bn)) +
geom_line() +
geom_smooth(se = FALSE, color = "navyblue") +
ylim(0, 1900) +
annotate("rect", xmin = 2007, xmax = 2010, ymin = 0, ymax = 1900, fill = "darkgray",
alpha = .2) +
annotate("rect", xmin = 2013, xmax = 2016, ymin = 0, ymax = 1900, fill = "darkred",
alpha = .2) +
annotate("rect", xmin = 2021, xmax = 2023, ymin = 0, ymax = 1900, fill = "darkred",
alpha = .2) +
annotate("text", x = c(2008.5, 2009, 2014.5, 2014.5, 2022, 2022), y= c(1750, 1650, 1500,1400, 1750, 1650),
label = c(expression(italic("2008")), expression(italic("Global Financial Crisis")), expression(italic("2014")), expression(italic("Annexation of Crimea")), expression(italic("2022")), expression(italic("Full Invasion")))) +
theme_minimal() +
labs(
title = "Signed EBRD Projects in Ukraine per Year",
subtitle = "project volume in current EUR (Mln)",
x = "",
y = "Mln EUR",
caption = "Data from EBRD | Calculations by Bentje Böer"
)`geom_smooth()` using method = 'loess' and formula = 'y ~ x'
Warning: Removed 3 rows containing missing values (`geom_smooth()`).
is.na() auf Nicht-(Liste oder Vektor) des Typs 'expression' angewendet
–> how have investment projects of the EBRD reacted to the Russian aggression, specifically in Ukraine?
Aspect 1/ Figure 1
Most dramatic effect of the annexation of Crimea is actually not about investment in Ukraine, it’s the freezing of any projects in Russia
-> maps showing investment volumes before and after 2014 (proxy for rough draft: cumulative net investment and outstanding portfolio in two maps below) -> Ukraine has always been a major recipient of EBRD investments -> investment promises in 2014 increased - plans were focus on transport and infrastructure to connect to Central/Western Europe - data shows not such a significant surge in investment (corruption concerns raised) but changes in structure of investment (leading to next points)
# create useful subset
region_1 <- EBRD_overview_region %>%
select("country_group", "country", "net_cumulative_business_investment_ncbi", "portfolio") %>%
filter(country_group != "Total")
region_1$iso3c <- countrycode(region_1$country, "country.name", "iso3c")Warning in countrycode_convert(sourcevar = sourcevar, origin = origin, destination = dest, : Some values were not matched unambiguously: Kosovo
world_map_data <- rnaturalearth::ne_countries(returnclass = "sf")
Norway_row <- world_map_data$name_en == "Norway"
world_map_data$iso_a3[Norway_row] <- "NOR"
France_row <- world_map_data$name_en == "France"
world_map_data$iso_a3[France_row] <- "FRA"
Kosovo_row <- world_map_data$name_en == "Kosovo"
world_map_data$iso_a3[Kosovo_row] <- "XXK"
# world_map_data_valid <- st_make_valid(world_map_data)
# st_is_valid(world_map_data_valid)
# cropped map 1
world_map_data |>
left_join(region_1, by = c("iso_a3" = "iso3c")) |>
filter(iso_a3 != "ATA") %>%
ggplot(aes(fill = net_cumulative_business_investment_ncbi)) +
geom_sf() +
coord_sf(xlim = c(- 20, 180), ylim = c(20, 80)) +
scale_fill_viridis_c(option = "G") +
theme_minimal() +
theme(legend.position="bottom") +
labs(
title = "Net Cumulative EBRD Investments until 2021",
fill = NULL,
caption = str_wrap(paste("Source: EBRD | Author Calculations"))
)
# cropped map 2
world_map_data |>
left_join(region_1, by = c("iso_a3" = "iso3c")) |>
filter(iso_a3 != "ATA") %>%
ggplot(aes(fill = portfolio)) +
geom_sf() +
coord_sf(xlim = c(- 20, 180), ylim = c(20, 80)) +
scale_fill_viridis_c(option = "G") +
theme_minimal() +
theme(legend.position="bottom") +
labs(
title = "Outstanding EBRD Portfolio in 2021",
fill = NULL,
caption = str_wrap(paste("Source: EBRD | Author Calculations"))
)Aspect 2/Figure 2
Russian Aggression led to significant surge in Natural Resources and Energy investment, both in 2014 and 2022
EBRD investments reacted to European and Ukrainian energy concerns and calls for independence from Russian fossil fuels
after annexation of Crimea the Natural Resources share in investments rose from below 5% to about 20% (comparing three years after annexation with three years before)
after full scale invasion in 2022, Natural resources share rose from 6% to over 30%
before 2022, Transport and Agribusiness was actually an important sector (implementation of original 2014 plans?)
these post-aggression shares of Natural Resources are also substantially more than what the EBRD’s overall share of investments in Nat. R. (about 5%)
changes for the graphs: for first graph (volume of investment projects in Ukraine by sector): only Natural Resources get color, all other sectors are in grey shades third and fourth graph will be joined into one that highlights the increases/decreases ideas for second graph?
library(animation)Warning: Paket 'animation' wurde unter R Version 4.2.3 erstellt
# Ukraine sector investments animated
# read in necessary data
Ukraine_14_inv_type_by_sector <- read_csv("./processed_01/Ukraine_14_inv_type_by_sector.csv")Rows: 10 Columns: 12
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (1): sector
dbl (11): ebrd_fin_sum, ebrd_debt_sum, ebrd_equity_sum, ebrd_guarantee_sum, ...
ℹ 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.
Ukraine_bef_14_inv_type_by_sector <- read_csv("./processed_01/Ukraine_bef_14_inv_type_by_sector.csv")Rows: 12 Columns: 12
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (1): sector
dbl (11): ebrd_fin_sum, ebrd_debt_sum, ebrd_equity_sum, ebrd_guarantee_sum, ...
ℹ 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.
Ukraine_17_21_inv_type_by_sector <- read_csv("./processed_01/Ukraine_17_21_inv_type_by_sector.csv")Rows: 11 Columns: 12
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (1): sector
dbl (11): ebrd_fin_sum, ebrd_debt_sum, ebrd_equity_sum, ebrd_guarantee_sum, ...
ℹ 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.
sector_time_U_22_23 <- read_csv("./processed_01/sector_time_U_22_23.csv")Rows: 7 Columns: 9
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (1): sector
dbl (8): ebrd_fin_sum, ebrd_debt_sum, ebrd_equity_sum, ebrd_guarantee_sum, e...
ℹ 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.
# Ukraine Sector Shares 2010-13
sector_perc_time_U_10_13 <- Ukraine_bef_14_inv_type_by_sector %>%
mutate(total_10_finance = sum(ebrd_fin_sum),
sector_share = ebrd_fin_sum/total_10_finance*100,
time_frame = "2010-13") %>%
select(time_frame, sector, sector_share)
# Ukraine Sector Shares 2014-16
sector_perc_time_U_14 <- Ukraine_14_inv_type_by_sector %>%
mutate(total_14_finance = sum(ebrd_fin_sum),
sector_share = ebrd_fin_sum/total_14_finance*100,
time_frame = "2014-16") %>%
select(time_frame, sector, sector_share)
# Ukraine Sector Shares 2017-21
sector_perc_time_U_17_21 <- Ukraine_17_21_inv_type_by_sector %>%
mutate(total_17_21_finance = sum(ebrd_fin_sum),
sector_share = ebrd_fin_sum/total_17_21_finance*100,
time_frame = "2017-21") %>%
select(time_frame, sector, sector_share)
# Ukraine sector share 22-23
sector_perc_time_U_22_23 <- sector_time_U_22_23 %>%
mutate(total_22_23_finance = sum(ebrd_fin_sum),
sector_share = ebrd_fin_sum/total_22_23_finance*100,
time_frame = "2022-23") %>%
select(time_frame, sector, sector_share)
# Ukraine sector shares 2010-2023 by time frames
Ukraine_sectors_by_frames <- sector_perc_time_U_10_13 %>%
rbind(sector_perc_time_U_14) %>%
rbind(sector_perc_time_U_17_21) %>%
rbind(sector_perc_time_U_22_23)
write_csv(Ukraine_sectors_by_frames, "./processed_02/Ukraine_sectors_by_frames.csv")# animated plot
animated_bars <- ggplot(Ukraine_sectors_by_frames, aes(x = sector_share, y = sector, fill = sector)) +
geom_bar(stat = "identity") +
transition_states(time_frame, transition_length = 2, state_length = 1) +
enter_fade() +
exit_fade() +
labs(title = "Changes in sector shares over time",
x = "Sector Shares",
y = "Sector")
animation_01 <- animate(animated_bars, fps = 10, duration = 12)
anim_save("animation.gif", animation_01)#alternative to animation: dotplot/lollipop chart# KEEP
# alternative to animation: dotplot/lollipop chart
Ukraine_sectors_by_frames <- read.csv("./processed_02/Ukraine_sectors_by_frames.csv")
Ukraine_lolli_14 <- Ukraine_sectors_by_frames %>%
filter(time_frame == "2010-13" | time_frame == "2014-16") %>%
pivot_wider(
names_from = time_frame,
values_from = sector_share
)
Ukraine_lolli_14$`2014-16` <- ifelse(is.na(Ukraine_lolli_14$`2014-16`), 0, Ukraine_lolli_14$`2014-16`)
Ukraine_lolli_14 <- Ukraine_lolli_14 %>%
rowwise() %>%
mutate(diff = `2014-16`- `2010-13`) %>%
arrange(diff) %>%
mutate(sector = factor(sector, sector))
Ukraine_lolli_14$type <- ifelse(Ukraine_lolli_14$sector %in% c("Equity Funds",
"Property and Tourism",
"Telecommunications, Media and Technology",
"Insurance, Pension, Mutual Funds",
"Municipal and Environmental Infrastructure",
"Leasing Finance"
),
"segment", "arrow")
write_csv(Ukraine_lolli_14, "./processed_02/Ukraine_lolli_14.csv")# plot 2014 with arrows that works
annotation_arrow_14 <- data.frame(
x = c(5, 22, 24, 39, 12, 20, 2, 11, 6, 17, 2, 19),
y= c("Natural Resources", "Natural Resources", "Agribusiness", "Agribusiness", "Financial Institutions", "Financial Institutions", "Manufacturing and Services", "Manufacturing and Services", "Transport", "Transport", "Energy", "Energy"),
label = c("5 %", "22 %", "24 %", "39 %", "12 %", "20 %", "2 %", "11 %", "6 %", "17 %", "2 %", "19 %"),
color = c("black", "darkred", "black", "darkred", "black", "darkred", "darkred", "black", "darkred", "black", "darkred", "black")
)
ggplot(Ukraine_lolli_14) +
geom_segment(aes(x = `2010-13`, xend= `2014-16`, y= sector, yend= sector),
arrow = arrow(length = unit(0.15, "cm"), end = "last"),
color="black",
size = .6) +
geom_point(aes(x= `2010-13`, y= sector, color = "2010-2013"), size=3) +
geom_point(aes(x= `2014-16`, y= sector, color = "2014-2016"), size=3, alpha = .6 ) +
geom_text(data = annotation_arrow_14, aes(x = x, y = y, label = label), color = annotation_arrow_14$color, size = 2.5, angle = 0, vjust = -.7) +
labs(
title = "Figure : Change in Sector-Shares of EBRD-Investments after 2014",
subtitle = "",
y = "",
x = str_wrap("Share of EBRD-Investment in Ukraine (in %)"),
caption = ""
) +
scale_color_manual(name = "Timeframe",
values = c("2010-2013" = "black", "2014-2016" = "darkred")) +
scale_x_continuous(breaks = c(0, 10, 20, 30, 40), labels = c("0 %", "10 %", "20 %", "30 %", "40 %")) +
scale_y_discrete(labels = c(expression(bold("Energy")), expression(bold("Transport")), "Manufacturing and Services", "Leasing Finance", "Municipal and Environmental Infrastructure", "Insurance, Pension, Mutual Funds", "Telecommunications, Media and Technology", "Property and Tourism", "Equity Funds", "Financial Institutions", expression(bold("Agribusiness")), expression(bold("Natural Resources"))))+
theme_minimal()# KEEP
# decluttered 14 plot
annotation_arrow_14 <- data.frame(
x = c(5, 22, 24, 39, 6, 17, 2, 19),
y= c("Natural Resources", "Natural Resources", "Agribusiness", "Agribusiness", "Transport", "Transport", "Energy", "Energy"),
label = c("5 %", "22 %", "24 %", "39 %", "6 %", "17 %", "2 %", "19 %"),
color = c("black", "darkred", "black", "darkred", "darkred", "black", "darkred", "black")
)
Ukraine_lolliplot_14 <- ggplot(Ukraine_lolli_14) +
geom_segment(aes(x = `2010-13`, xend= `2014-16`, y= sector, yend= sector),
arrow = arrow(length = unit(0.15, "cm"), end = "last"),
color="black",
size = .6) +
geom_point(aes(x= `2010-13`, y= sector, color = "2010-2013"), size=3) +
geom_point(aes(x= `2014-16`, y= sector, color = "2014-2016"), size=3, alpha = .6 ) +
geom_text(data = annotation_arrow_14, aes(x = x, y = y, label = label), color = annotation_arrow_14$color, size = 2.5, angle = 0, vjust = -.8) +
labs(
title = str_wrap("Figure : Shares of EBRD-Investments per Sector"),
subtitle = "Ukraine - before and after 2014",
y = "",
x = str_wrap("Share of EBRD-Investment in Ukraine"),
caption = "Data from EBRD (2023) | Calculations by Bentje Böer"
) +
scale_color_manual(name = "Timeframe",
values = c("2010-2013" = "black", "2014-2016" = "darkred")) +
scale_x_continuous(breaks = c(0, 10, 20, 30, 40), labels = c("0 %", "10 %", "20 %", "30 %", "40 %")) +
scale_y_discrete(labels = c(expression(bold("Energy")), expression(bold("Transport")), "Manufacturing and Services", "Leasing Finance", "Municipal and Environmental Infrastructure", "Insurance, Pension, Mutual Funds", "Telecommunications, Media and Technology", "Property and Tourism", "Equity Funds", "Financial Institutions", expression(bold("Agribusiness")), expression(bold("Natural Resources"))))+
theme_minimal()
Ukraine_lolliplot_14# KEEP
Ukraine_lolli_22 <- Ukraine_sectors_by_frames %>%
filter(time_frame == "2017-21" | time_frame == "2022-23") %>%
pivot_wider(
names_from = time_frame,
values_from = sector_share
) %>%
rename()
Ukraine_lolli_22$`2022-23` <- ifelse(is.na(Ukraine_lolli_22$`2022-23`), 0, Ukraine_lolli_22$`2022-23`)
insurance_row <- data.frame(sector = "Insurance, Pension, Mutual Funds")
insurance_row$`2017-21` <- 0
insurance_row$`2022-23` <- 0
Ukraine_lolli_22 <- rbind(Ukraine_lolli_22, insurance_row)
Ukraine_diff_14 <- Ukraine_lolli_14 %>% select(sector, diff)
Ukraine_lolli_22 <- Ukraine_lolli_22 %>% left_join(Ukraine_diff_14, by = "sector")
Ukraine_lolli_22 <- Ukraine_lolli_22 %>%
rowwise() %>%
arrange(diff) %>%
mutate(sector = factor(sector, sector))
#write_csv(Ukraine_lolli_22, "./processed_02/Ukraine_lolli_22.csv")# plot 2022 with arrows that works
annotation_arrow_22 <- data.frame(
x = c(6, 31, 12, 18, 10, 21, 0, 15, 11, 31),
y= c("Natural Resources", "Natural Resources", "Agribusiness", "Agribusiness", "Financial Institutions", "Financial Institutions", "Transport", "Transport", "Energy", "Energy"),
label = c("6 %", "31 %", "12 %", "18 %", "10 %", "21 %", "0 %", "15 %", "11 %", "31 %"),
color = c("black", "darkred", "darkred", "black", "darkred", "black", "darkred", "black", "black", "darkred" )
)
ggplot(Ukraine_lolli_22) +
geom_segment(aes(x = `2017-21`, xend= `2022-23`, y= sector, yend= sector),
arrow = arrow(length = unit(0.15, "cm"), end = "last"),
color="black",
size = .6) +
geom_point(aes(x= `2017-21`, y= sector, color = "2017-2021"), size=3) +
geom_point(aes(x= `2022-23`, y= sector, color = "2022-2023"), size=3, alpha = .6 ) +
geom_text(data = annotation_arrow_22, aes(x = x, y = y, label = label), color = annotation_arrow_22$color, size = 2.5, angle = 0, vjust = -.7) +
labs(
title = "Figure : Sector-Shares of EBRD-Investments after 2022",
subtitle = "",
y = "",
x = str_wrap("Share of EBRD-Investment in Ukraine"),
caption = ""
) +
scale_color_manual(name = "Timeframe",
values = c("2017-2021" = "black", "2022-2023" = "darkred")) +
scale_x_continuous(breaks = c(0, 10, 20, 30, 40), labels = c("0 %", "10 %", "20 %", "30 %", "40 %")) +
scale_y_discrete(labels = c(expression(bold("Energy")), expression(bold("Transport")), "Manufacturing and Services", "Leasing Finance", "Municipal and Environmental Infrastructure", "Insurance, Pension, Mutual Funds", "Telecommunications, Media and Technology", "Property and Tourism", "Equity Funds", "Financial Institutions", expression(bold("Agribusiness")), expression(bold("Natural Resources"))))+
theme_minimal()# KEEP
# decluttered 22 plot
# Ukraine_lolli_22 <- read.csv("./processed_02/Ukraine_lolli_22.csv")
annotation_arrow_22 <- data.frame(
x = c(6, 31, 12, 18, 0, 15, 11, 31),
y= c("Natural Resources", "Natural Resources", "Agribusiness", "Agribusiness", "Transport", "Transport", "Energy", "Energy"),
label = c("6 %", "31 %", "12 %", "18 %", "0 %", "15 %", "11 %", "31 %"),
color = c("black", "darkred", "darkred", "black", "darkred", "black", "black", "darkred" )
)
ggplot(Ukraine_lolli_22) +
geom_segment(data = Ukraine_lolli_22, aes(x = `2017-21`, xend= `2022-23`, y= sector, yend= sector),
arrow = arrow(length = unit(0.15, "cm"), end = "last"),
color="black",
size = .6) +
geom_point(aes(x= `2017-21`, y= sector, color = "2017-2021"), size=3) +
geom_point(aes(x= `2022-23`, y= sector, color = "2022-2023"), size=3, alpha = .6 ) +
geom_text(data = annotation_arrow_22, aes(x = x, y = y, label = label), color = annotation_arrow_22$color, size = 2.5, angle = 0, vjust = -.7) +
labs(
title = str_wrap("Figure : Shares of EBRD-Investments per Sector"),
subtitle = "Ukraine - before and since 2022",
y = "",
x = str_wrap("Share of EBRD-Investment in Ukraine"),
caption = "Data from EBRD (2023) | Calculations by Bentje Böer"
) +
scale_color_manual(name = "Timeframe",
values = c("2017-2021" = "black", "2022-2023" = "darkred")) +
scale_x_continuous(breaks = c(0, 10, 20, 30, 40), labels = c("0 %", "10 %", "20 %", "30 %", "40 %")) +
scale_y_discrete(labels = c(expression(bold("Energy")), expression(bold("Transport")), "Manufacturing and Services", "Leasing Finance", "Municipal and Environmental Infrastructure", "Insurance, Pension, Mutual Funds", "Telecommunications, Media and Technology", "Property and Tourism", "Equity Funds", "Financial Institutions", expression(bold("Agribusiness")), expression(bold("Natural Resources"))))+
theme_minimal()# KEEP
priv_pub_ac <- EBRD_ac_inv_wo_U %>%
group_by(year, project_type) %>%
summarize(inv = sum(ebrd_finance))
priv_pub_ac <- priv_pub_ac %>%
group_by(year) %>%
mutate(total_year = sum(inv),
share_of_year = inv/total_year*100)
priv_pub_ac_10_13 <- priv_pub_ac %>%
filter(year %in% c(2010, 2011, 2012, 2013)) %>%
group_by(project_type) %>%
mutate(time_frame = "years_10_to_13",
scope = "all_except_Ukraine",
mean = mean(share_of_year)) %>%
select(project_type, time_frame, mean) %>%
slice(1)
priv_pub_ac_14_16 <- priv_pub_ac %>%
filter(year %in% c(2014, 2015, 2016)) %>%
group_by(project_type) %>%
mutate(time_frame = "years_14_to_16",
scope = "all_except_Ukraine",
mean = mean(share_of_year)) %>%
select(project_type, time_frame, mean) %>%
slice(1)
priv_pub_ac_17_21 <- priv_pub_ac %>%
filter(year %in% c(2017, 2018, 2019, 2020, 2021)) %>%
group_by(project_type) %>%
mutate(time_frame = "years_17_to_21",
scope = "all_except_Ukraine",
mean = mean(share_of_year)) %>%
select(project_type, time_frame, mean) %>%
slice(1)
priv_pub_ac_10_21 <- priv_pub_ac_10_13 %>%
rbind(priv_pub_ac_14_16) %>%
rbind(priv_pub_ac_17_21) %>%
filter(project_type == "State")
# Ukrainian
# only Ukraine 2022 2023
priv_pub_U_22 <- Ukraine_all_projects_6 %>%
filter(year == 2022 |year == 2023) %>%
group_by(project_type) %>%
summarize(inv = sum(ebrd_finance)) %>%
mutate(total_project_type = sum(inv),
share_of_type_inv = inv/total_project_type*100,
time_frame = "years_22_to_23") %>%
rename(mean = share_of_type_inv) %>%
select(project_type, time_frame, mean) %>%
slice(1:2)
# only Ukraine 2014-2016
priv_pub_U_14 <- Ukraine_all_projects_6 %>%
filter(year == 2014 |year == 2015 |year == 2016) %>%
group_by(project_type) %>%
summarize(inv = sum(ebrd_finance)) %>%
mutate(total_project_type = sum(inv),
share_of_type_inv = inv/total_project_type*100,
time_frame = "years_14_to_16") %>%
rename(mean = share_of_type_inv) %>%
select(project_type, time_frame, mean) %>%
slice(1:2)
# only Ukraine 2010-2013
priv_pub_U_10 <- Ukraine_all_projects_6 %>%
filter(year %in% c(2010, 2011, 2012, 2013)) %>%
group_by(project_type) %>%
summarize(inv = sum(ebrd_finance)) %>%
mutate(total_project_type = sum(inv),
share_of_type_inv = inv/total_project_type*100,
time_frame = "years_10_to_13") %>%
rename(mean = share_of_type_inv) %>%
select(project_type, time_frame, mean) %>%
slice(1:2)
# only Ukraine 2017-21
priv_pub_U_17 <- Ukraine_all_projects_6 %>%
filter(year %in% c(2017, 2018, 2019, 2020, 2021)) %>%
group_by(project_type) %>%
summarize(inv = sum(ebrd_finance)) %>%
mutate(total_project_type = sum(inv),
share_of_type_inv = inv/total_project_type*100,
time_frame = "years_17_to_21") %>%
rename(mean = share_of_type_inv) %>%
select(project_type, time_frame, mean) %>%
slice(1:2)
priv_pub_U_10_22 <- priv_pub_U_10 %>%
rbind(priv_pub_U_14) %>%
rbind(priv_pub_U_17) %>%
rbind(priv_pub_U_22) %>%
mutate(project_type = ifelse(project_type == "State", "Public", project_type))
color_priv <- c("Private" = "lightgrey", "Public" = "firebrick4")
ggplot(priv_pub_U_10_22) +
geom_col(data = priv_pub_U_10_22, aes(x = time_frame, y = mean, fill = project_type), alpha = .6) +
geom_point(data = priv_pub_ac_10_21, aes(x = time_frame, y = mean)) +
geom_line(data = priv_pub_ac_10_21, aes(x = time_frame, y = mean, group = project_type)) +
annotate("text", x = c("years_10_to_13", "years_14_to_16", "years_17_to_21", "years_22_to_23", "years_22_to_23"), y = c(37, 26, 31.5, 62, 15), label = c("39 %", "28 %", "33 %", "64 %", "EBRD in Ukraine"), color = "white", size = 3) +
annotate("text", x = c("years_10_to_13", "years_14_to_16", "years_17_to_21", "years_22_to_23"), y = c(14, 13, 24, 10), label = c("18 %", "17 %", "28 %", "Other EBRD"), color = "black", size = 3) +
scale_fill_manual(name = "", values = color_priv) +
scale_y_continuous(breaks = c(0, 25, 50, 75, 100), labels = c("0 %", "25 %", "50 %", "75 %", "100 %")) +
scale_x_discrete(breaks = c("years_10_to_13", "years_14_to_16", "years_17_to_21", "years_22_to_23"), labels = c("2010-2013", "2014-2016", "2017-2021", "2022-2023" )) +
labs(
title = "Figure : Share of Public Sector Investment by the EBRD",
subtitle = "EBRD projects in Ukraine vs in all other countries",
x = "",
y = "",
caption = "Data from EBRD (2023) | Calculations by Bentje Böer"
)+
theme_minimal() plot differentiating between arrows and lines that doesn’t work
ggplot(Ukraine_lolli_14) + geom_segment(aes(x = sector, xend= sector, y= 2010-13, yend= 2014-16),
arrow = ifelse(Ukraine_lolli_14\(type == "arrow", arrow(length = unit(0.5, "cm"), type = "closed"), NA) + linetype = ifelse(Ukraine_lolli_14\)type == “segment”, “solid”, NA), color = “darkgrey”) +
geom_point(aes(x= sector, y=2010-13), color = “black”, size=3 ) + geom_point(aes(x= sector, y= 2014-16), color = “darkred”, size=3 ) + coord_flip() + labs( title = ““, subtitle =”“, y = str_wrap(”Share of EBRD-investment volume in Ukraine in 2010-2013 (black) and 2014-2016 (red)“), x =”“, caption =”” ) + scale_color_manual(name = “Year”, values = c(“2010-2013” = “black”, “2014-2016” = “darkred”)) + # added legend theme_minimal()
# started projects by sector: volume of projects
new_projects_2 <- Ukraine_all_projects_6 %>%
group_by(year, sector) %>%
summarize(investments_mln = sum(ebrd_finance)/1000000)`summarise()` has grouped output by 'year'. You can override using the
`.groups` argument.
ggplot(new_projects_2, aes(x = year, y = investments_mln, fill = sector)) +
geom_col() +
labs(
title = "volume of investment projects in Ukraine by sector"
)# EBRD shares overall
total_inv_types_by_sector <- read_csv("./processed_01/total_inv_types_by_sector.csv")Rows: 12 Columns: 12
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (1): sector
dbl (11): ebrd_fin_sum, ebrd_debt_sum, ebrd_equity_sum, ebrd_guarantee_sum, ...
ℹ 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.
sector_perc_total <- total_inv_types_by_sector %>%
mutate(total_ebrd_finance = sum(ebrd_fin_sum),
sector_share = ebrd_fin_sum/total_ebrd_finance*100) %>%
select(sector, sector_share)
ggplot(sector_perc_total, aes(x = sector_share, y = sector)) +
geom_col() +
labs(
title = "EBRD all sector shares 90s-21"
)# Ukraine Sector Shares 2017-21
Ukraine_17_21_inv_type_by_sector <- read_csv("./processed_01/Ukraine_17_21_inv_type_by_sector.csv")Rows: 11 Columns: 12
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (1): sector
dbl (11): ebrd_fin_sum, ebrd_debt_sum, ebrd_equity_sum, ebrd_guarantee_sum, ...
ℹ 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.
sector_perc_time_U_17_21 <- Ukraine_17_21_inv_type_by_sector %>%
mutate(total_17_21_finance = sum(ebrd_fin_sum),
sector_share = ebrd_fin_sum/total_17_21_finance*100) %>%
select(sector, sector_share)
ggplot(sector_perc_time_U_17_21, aes(x = sector_share, y = sector)) +
geom_col() +
labs(
title = "Ukraine sector shares: 2017-21"
)# Ukraine Sector Shares 22-23
sector_time_U_22_23 <- read_csv("./processed_01/sector_time_U_22_23.csv")Rows: 7 Columns: 9
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (1): sector
dbl (8): ebrd_fin_sum, ebrd_debt_sum, ebrd_equity_sum, ebrd_guarantee_sum, e...
ℹ 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.
sector_perc_time_U_22_23 <- sector_time_U_22_23 %>%
mutate(total_22_23_finance = sum(ebrd_fin_sum),
sector_share = ebrd_fin_sum/total_22_23_finance*100) %>%
select(sector, sector_share)
ggplot(sector_perc_time_U_22_23, aes(x = sector_share, y = sector)) +
geom_col()+
labs(
title = "Ukraine sector shares: 2022-23"
)# investments in Ukraine over time
Ukraine_investments <- Ukraine_all_projects_6 %>%
group_by(year) %>%
summarize(investments_mln = sum(ebrd_finance)/1000000)
ggplot(Ukraine_investments, aes(x = year, y = investments_mln)) +
geom_line() +
labs(
title = "volume of investment projects in Ukraine by sector"
)Aspect 3/Figure 3
In 2014, the following investment projects were more tilted towards the private sector whereas in 2022 following investment projects were more than usual tilted towards the public sector (maybe reflecting more confidence in anticorruption work nowadays?)
# only Ukraine 2022 2023 sector
priv_pub_U_22_sector <- Ukraine_all_projects_6 %>%
filter(year == 2022 |year == 2023) %>%
group_by(project_type, sector) %>%
summarize(inv = sum(ebrd_finance))`summarise()` has grouped output by 'project_type'. You can override using the
`.groups` argument.
priv_pub_U_22_sector <- priv_pub_U_22_sector %>%
group_by(project_type) %>%
mutate(total_project_type = sum(inv),
share_of_type_inv = inv/total_project_type*100)
# only Ukraine 2022 2023
priv_pub_U_22 <- Ukraine_all_projects_6 %>%
filter(year == 2022 |year == 2023) %>%
group_by(project_type) %>%
summarize(inv = sum(ebrd_finance)) %>%
mutate(total_project_type = sum(inv),
share_of_type_inv = inv/total_project_type*100,
time_frame = "2022-23")