rm(list = ls())

Sys.setenv(LANG = "en")
library(xlsx)
library(readr)
library(readxl)
library(tidyverse)
library(stringr)
library(stringi)
library(gghighlight)
library(countrycode)
library(countries)
library(janitor)
library(sf)

library(janitor)
library(sf)
library(ggthemes)
library(here)
library(viridis)
library(ggplot2)
library(formatR)
library(gtools)
library(nnet) 
library(patchwork)
library(ggh4x)

library(plm)
library(broom)
library(ggalluvial)

library(pals)

Load data —————————————————————

Large datasets (move load to different notebook)

aggregates <- read_csv("../aggregated_data/aggregates.csv")
gd_world_or <- read_sf("../aggregated_data/TM_WORLD_BORDERS-0.3")

Figure 2A. Map

gd_world <- gd_world_or %>%
  select(ISO3, LON, LAT) %>% 
  filter(ISO3 != "ATA")

corpus_shape_sel <- left_join(aggregates, gd_world, by = join_by(ISO3))
(map_repr_s <- corpus_shape_sel %>% 
    ggplot(aes(geometry = geometry)) +
    geom_sf(aes()) +
    coord_sf(datum = NA) + 
    geom_sf(aes(fill = repr_s)) +
    theme_map() +
    theme(legend.title = element_text(size = 10),
          legend.text = element_text(size = 9),
          legend.position = "bottom",
          plot.title = element_text(hjust = 0.5, size = 14),
          plot.subtitle = element_text(hjust = 0.5, size = 12)) +
   labs(fill = "Research representation index") +
    scale_fill_manual(values = c("#d1bfa3", "#6baed6", "#e34a33"), na.value = "gray"))

ggsave("../output_figures/map_repr_s.png", width = 50, height = 25, units = "cm", dpi = 300, scale = 1, plot = last_plot())

p_legend <- aggregates %>% 
    ggplot(aes(x = log(emig_immig), y = log(art_country))) +
    geom_point(aes(color = repr_s), alpha = .6) +
    scale_color_manual(values = c("#d1bfa3", "#6baed6", "#e34a33"), na.value = "gray") +
    labs(color = "Research representation") +
    theme_minimal() +
    theme(
      legend.title = element_text(size = 10),
      legend.text = element_text(size = 9),
      legend.key.size = unit(0.6, "lines"),
      legend.spacing = unit(0.3, "lines"),
      legend.box.spacing = unit(0.3, "lines"),
      legend.background = element_blank(),
      legend.box.background = element_blank())

only_legend <- cowplot::get_legend(p_legend)

Figure 2B. Scatter

World and subregions

(scat_plot <- aggregates %>% 
    filter(!is.na(repr_s), mig_rel_index <= 100) %>% 
    ggplot(aes(x = log(emig_immig), y = log(art_country))) +
    geom_point(aes(color = repr_s), alpha = .6) +
    scale_color_manual(values = c("#d1bfa3", "#6baed6", "#e34a33")) +
    labs(color = "Research representation",
         size = "Relative migration index",
         x = "Immigration + emigration stock (log)",
         y = "Research salience (log)") + 
  theme_minimal() +
  theme(legend.position = "bottom",
        legend.title = element_text(size = 10)))

ggsave("../output_figures/scatter_world_repr_s.png", width = 50, height = 25, units = "cm", dpi = 300, scale = 1, plot = last_plot())

Continents. Selected version

design = "
#A
BC
DE
"

(scatter_continents_repr_s <- scat_plot + 
  geom_text(data = subset(aggregates, repr_s == "Under" & continent != "Europe"),
            aes(x = log(emig_immig), y = log(art_country), label = ISO3),
            size = 3.5, check_overlap = T) +
    geom_text(data = subset(aggregates, repr_s == "Under" & continent == "Europe"),
            aes(x = log(emig_immig), y = log(art_country), label = ISO3),
            size = 3, check_overlap = T) +
    geom_text(data = subset(aggregates, ISO3 == "USA"),
              aes(x = log(emig_immig), y = log(art_country), label = ISO3),
              size = 3.5, check_overlap = T) +
  ggh4x::facet_manual(~continent, design = design)) 

ggsave("../output_figures/scatter_continents_repr_s.png", width = 50, height = 25, units = "cm", dpi = 300, scale = 1, plot = last_plot())

Combine figures 2A and 2B

# Remove legend before combining plots.
(map_repr_s_new <- map_repr_s + theme(legend.position = "none"))


scatter_continents_repr_s <- scatter_continents_repr_s + theme(legend.position = "none")

combined_map_scatter <- map_repr_s_new / scatter_continents_repr_s

combined_map_scatter + 
  inset_element(
    only_legend,
    left = 0.02, bottom = 0.9, right = 0.2, top = .9, 
    align_to = 'panel'
  )

ggsave("../output_figures/figure_2.png", width = 50, height = 25, units = "cm", dpi = 500, scale = 1, plot = last_plot())

Appendix

Figure S2. Relative migration.

design = "
#A
BC
DE
"

(scat_plot_rel <- aggregates %>% 
    filter(!is.na(repr_rel_s)) %>% 
    ggplot(aes(x = log(mig_rel_index), y = log(art_country))) +
    geom_point(aes(color = repr_rel_s)) +
   geom_text(data = subset(aggregates, repr_rel_s == "Under"),
            aes(x = log(mig_rel_index), y = log(art_country), label = ISO3),
            check_overlap = T) +
    scale_color_manual(values = c("#f0e6d2", "#6baed6", "#e34a33")) +
    labs(color = "Research representation",
         x = "Relative immigration + emigration (log)",
         y = "Research salience (log)") + 
    theme_minimal() +
    theme(legend.position = c(0.2, 0.9)) +
  ggh4x::facet_manual(~continent, design = design)) 

ggsave("../output_figures/scatter_continents_repr_rel_s.png", plot = last_plot())

LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpgYGB7cn0NCnJtKGxpc3QgPSBscygpKQ0KDQpTeXMuc2V0ZW52KExBTkcgPSAiZW4iKQ0KbGlicmFyeSh4bHN4KQ0KbGlicmFyeShyZWFkcikNCmxpYnJhcnkocmVhZHhsKQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KHN0cmluZ3IpDQpsaWJyYXJ5KHN0cmluZ2kpDQpsaWJyYXJ5KGdnaGlnaGxpZ2h0KQ0KbGlicmFyeShjb3VudHJ5Y29kZSkNCmxpYnJhcnkoY291bnRyaWVzKQ0KbGlicmFyeShqYW5pdG9yKQ0KbGlicmFyeShzZikNCg0KbGlicmFyeShqYW5pdG9yKQ0KbGlicmFyeShzZikNCmxpYnJhcnkoZ2d0aGVtZXMpDQpsaWJyYXJ5KGhlcmUpDQpsaWJyYXJ5KHZpcmlkaXMpDQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KGZvcm1hdFIpDQpsaWJyYXJ5KGd0b29scykNCmxpYnJhcnkobm5ldCkgDQpsaWJyYXJ5KHBhdGNod29yaykNCmxpYnJhcnkoZ2doNHgpDQoNCmxpYnJhcnkocGxtKQ0KbGlicmFyeShicm9vbSkNCmxpYnJhcnkoZ2dhbGx1dmlhbCkNCg0KbGlicmFyeShwYWxzKQ0KYGBgDQoNCiMgTG9hZCBkYXRhIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQojIyBMYXJnZSBkYXRhc2V0cyAobW92ZSBsb2FkIHRvIGRpZmZlcmVudCBub3RlYm9vaykNCg0KYGBge3J9DQphZ2dyZWdhdGVzIDwtIHJlYWRfY3N2KCIuLi9hZ2dyZWdhdGVkX2RhdGEvYWdncmVnYXRlcy5jc3YiKQ0KZ2Rfd29ybGRfb3IgPC0gcmVhZF9zZigiLi4vYWdncmVnYXRlZF9kYXRhL1RNX1dPUkxEX0JPUkRFUlMtMC4zIikNCmBgYA0KIyBGaWd1cmUgMkEuIE1hcA0KDQpgYGB7cn0NCmdkX3dvcmxkIDwtIGdkX3dvcmxkX29yICU+JQ0KICBzZWxlY3QoSVNPMywgTE9OLCBMQVQpICU+JSANCiAgZmlsdGVyKElTTzMgIT0gIkFUQSIpDQoNCmNvcnB1c19zaGFwZV9zZWwgPC0gbGVmdF9qb2luKGFnZ3JlZ2F0ZXMsIGdkX3dvcmxkLCBieSA9IGpvaW5fYnkoSVNPMykpDQpgYGANCg0KYGBge3J9DQoobWFwX3JlcHJfcyA8LSBjb3JwdXNfc2hhcGVfc2VsICU+JSANCiAgICBnZ3Bsb3QoYWVzKGdlb21ldHJ5ID0gZ2VvbWV0cnkpKSArDQogICAgZ2VvbV9zZihhZXMoKSkgKw0KICAgIGNvb3JkX3NmKGRhdHVtID0gTkEpICsgDQogICAgZ2VvbV9zZihhZXMoZmlsbCA9IHJlcHJfcykpICsNCiAgICB0aGVtZV9tYXAoKSArDQogICAgdGhlbWUobGVnZW5kLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMCksDQogICAgICAgICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDkpLA0KICAgICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLA0KICAgICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIHNpemUgPSAxNCksDQogICAgICAgICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgc2l6ZSA9IDEyKSkgKw0KICAgbGFicyhmaWxsID0gIlJlc2VhcmNoIHJlcHJlc2VudGF0aW9uIGluZGV4IikgKw0KICAgIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoIiNkMWJmYTMiLCAiIzZiYWVkNiIsICIjZTM0YTMzIiksIG5hLnZhbHVlID0gImdyYXkiKSkNCmBgYA0KDQpgYGB7cn0NCnBfbGVnZW5kIDwtIGFnZ3JlZ2F0ZXMgJT4lIA0KICAgIGdncGxvdChhZXMoeCA9IGxvZyhlbWlnX2ltbWlnKSwgeSA9IGxvZyhhcnRfY291bnRyeSkpKSArDQogICAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSByZXByX3MpLCBhbHBoYSA9IC42KSArDQogICAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIiNkMWJmYTMiLCAiIzZiYWVkNiIsICIjZTM0YTMzIiksIG5hLnZhbHVlID0gImdyYXkiKSArDQogICAgbGFicyhjb2xvciA9ICJSZXNlYXJjaCByZXByZXNlbnRhdGlvbiIpICsNCiAgICB0aGVtZV9taW5pbWFsKCkgKw0KICAgIHRoZW1lKA0KICAgICAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMCksDQogICAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gOSksDQogICAgICBsZWdlbmQua2V5LnNpemUgPSB1bml0KDAuNiwgImxpbmVzIiksDQogICAgICBsZWdlbmQuc3BhY2luZyA9IHVuaXQoMC4zLCAibGluZXMiKSwNCiAgICAgIGxlZ2VuZC5ib3guc3BhY2luZyA9IHVuaXQoMC4zLCAibGluZXMiKSwNCiAgICAgIGxlZ2VuZC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgbGVnZW5kLmJveC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpKQ0KDQpvbmx5X2xlZ2VuZCA8LSBjb3dwbG90OjpnZXRfbGVnZW5kKHBfbGVnZW5kKQ0KDQpgYGANCiMgRmlndXJlIDJCLiBTY2F0dGVyDQoNCiMjIFdvcmxkIGFuZCBzdWJyZWdpb25zDQpgYGB7cn0NCihzY2F0X3Bsb3QgPC0gYWdncmVnYXRlcyAlPiUgDQogICAgZmlsdGVyKCFpcy5uYShyZXByX3MpLCBtaWdfcmVsX2luZGV4IDw9IDEwMCkgJT4lIA0KICAgIGdncGxvdChhZXMoeCA9IGxvZyhlbWlnX2ltbWlnKSwgeSA9IGxvZyhhcnRfY291bnRyeSkpKSArDQogICAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSByZXByX3MpLCBhbHBoYSA9IC42KSArDQogICAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIiNkMWJmYTMiLCAiIzZiYWVkNiIsICIjZTM0YTMzIikpICsNCiAgICBsYWJzKGNvbG9yID0gIlJlc2VhcmNoIHJlcHJlc2VudGF0aW9uIiwNCiAgICAgICAgIHNpemUgPSAiUmVsYXRpdmUgbWlncmF0aW9uIGluZGV4IiwNCiAgICAgICAgIHggPSAiSW1taWdyYXRpb24gKyBlbWlncmF0aW9uIHN0b2NrIChsb2cpIiwNCiAgICAgICAgIHkgPSAiUmVzZWFyY2ggc2FsaWVuY2UgKGxvZykiKSArIA0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwNCiAgICAgICAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMCkpKQ0KYGBgDQoNCiMjIENvbnRpbmVudHMuIFNlbGVjdGVkIHZlcnNpb24NCmBgYHtyfQ0KZGVzaWduID0gIg0KI0ENCkJDDQpERQ0KIg0KDQooc2NhdHRlcl9jb250aW5lbnRzX3JlcHJfcyA8LSBzY2F0X3Bsb3QgKyANCiAgZ2VvbV90ZXh0KGRhdGEgPSBzdWJzZXQoYWdncmVnYXRlcywgcmVwcl9zID09ICJVbmRlciIgJiBjb250aW5lbnQgIT0gIkV1cm9wZSIpLA0KICAgICAgICAgICAgYWVzKHggPSBsb2coZW1pZ19pbW1pZyksIHkgPSBsb2coYXJ0X2NvdW50cnkpLCBsYWJlbCA9IElTTzMpLA0KICAgICAgICAgICAgc2l6ZSA9IDMuNSwgY2hlY2tfb3ZlcmxhcCA9IFQpICsNCiAgICBnZW9tX3RleHQoZGF0YSA9IHN1YnNldChhZ2dyZWdhdGVzLCByZXByX3MgPT0gIlVuZGVyIiAmIGNvbnRpbmVudCA9PSAiRXVyb3BlIiksDQogICAgICAgICAgICBhZXMoeCA9IGxvZyhlbWlnX2ltbWlnKSwgeSA9IGxvZyhhcnRfY291bnRyeSksIGxhYmVsID0gSVNPMyksDQogICAgICAgICAgICBzaXplID0gMywgY2hlY2tfb3ZlcmxhcCA9IFQpICsNCiAgICBnZW9tX3RleHQoZGF0YSA9IHN1YnNldChhZ2dyZWdhdGVzLCBJU08zID09ICJVU0EiKSwNCiAgICAgICAgICAgICAgYWVzKHggPSBsb2coZW1pZ19pbW1pZyksIHkgPSBsb2coYXJ0X2NvdW50cnkpLCBsYWJlbCA9IElTTzMpLA0KICAgICAgICAgICAgICBzaXplID0gMy41LCBjaGVja19vdmVybGFwID0gVCkgKw0KICBnZ2g0eDo6ZmFjZXRfbWFudWFsKH5jb250aW5lbnQsIGRlc2lnbiA9IGRlc2lnbikpIA0KYGBgDQoNCiMgQ29tYmluZSBmaWd1cmVzIDJBIGFuZCAyQg0KYGBge3J9DQojIFJlbW92ZSBsZWdlbmQgYmVmb3JlIGNvbWJpbmluZyBwbG90cy4NCihtYXBfcmVwcl9zX25ldyA8LSBtYXBfcmVwcl9zICsgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSkNCg0Kc2NhdHRlcl9jb250aW5lbnRzX3JlcHJfcyA8LSBzY2F0dGVyX2NvbnRpbmVudHNfcmVwcl9zICsgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKQ0KDQpjb21iaW5lZF9tYXBfc2NhdHRlciA8LSBtYXBfcmVwcl9zX25ldyAvIHNjYXR0ZXJfY29udGluZW50c19yZXByX3MNCg0KY29tYmluZWRfbWFwX3NjYXR0ZXIgKyANCiAgaW5zZXRfZWxlbWVudCgNCiAgICBvbmx5X2xlZ2VuZCwNCiAgICBsZWZ0ID0gMC4wMiwgYm90dG9tID0gMC45LCByaWdodCA9IDAuMiwgdG9wID0gLjksIA0KICAgIGFsaWduX3RvID0gJ3BhbmVsJw0KICApDQoNCmdnc2F2ZSgiLi4vb3V0cHV0X2ZpZ3VyZXMvZmlndXJlXzIucG5nIiwgd2lkdGggPSA1MCwgaGVpZ2h0ID0gMjUsIHVuaXRzID0gImNtIiwgZHBpID0gNTAwLCBzY2FsZSA9IDEsIHBsb3QgPSBsYXN0X3Bsb3QoKSkNCmBgYA0KDQojIEFwcGVuZGl4DQoNCiMjIEZpZ3VyZSBTMi4gUmVsYXRpdmUgbWlncmF0aW9uLg0KYGBge3J9DQpkZXNpZ24gPSAiDQojQQ0KQkMNCkRFDQoiDQoNCihzY2F0X3Bsb3RfcmVsIDwtIGFnZ3JlZ2F0ZXMgJT4lIA0KICAgIGZpbHRlcighaXMubmEocmVwcl9yZWxfcykpICU+JSANCiAgICBnZ3Bsb3QoYWVzKHggPSBsb2cobWlnX3JlbF9pbmRleCksIHkgPSBsb2coYXJ0X2NvdW50cnkpKSkgKw0KICAgIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gcmVwcl9yZWxfcykpICsNCiAgIGdlb21fdGV4dChkYXRhID0gc3Vic2V0KGFnZ3JlZ2F0ZXMsIHJlcHJfcmVsX3MgPT0gIlVuZGVyIiksDQogICAgICAgICAgICBhZXMoeCA9IGxvZyhtaWdfcmVsX2luZGV4KSwgeSA9IGxvZyhhcnRfY291bnRyeSksIGxhYmVsID0gSVNPMyksDQogICAgICAgICAgICBjaGVja19vdmVybGFwID0gVCkgKw0KICAgIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCIjZjBlNmQyIiwgIiM2YmFlZDYiLCAiI2UzNGEzMyIpKSArDQogICAgbGFicyhjb2xvciA9ICJSZXNlYXJjaCByZXByZXNlbnRhdGlvbiIsDQogICAgICAgICB4ID0gIlJlbGF0aXZlIGltbWlncmF0aW9uICsgZW1pZ3JhdGlvbiAobG9nKSIsDQogICAgICAgICB5ID0gIlJlc2VhcmNoIHNhbGllbmNlIChsb2cpIikgKyANCiAgICB0aGVtZV9taW5pbWFsKCkgKw0KICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9IGMoMC4yLCAwLjkpKSArDQogIGdnaDR4OjpmYWNldF9tYW51YWwofmNvbnRpbmVudCwgZGVzaWduID0gZGVzaWduKSkgDQoNCmdnc2F2ZSgiLi4vb3V0cHV0X2ZpZ3VyZXMvZmlndXJlX1MyX3NjYXR0ZXJfY29udGluZW50c19yZXByX3JlbF9zLnBuZyIsIHBsb3QgPSBsYXN0X3Bsb3QoKSkNCmBgYA0KDQoNCg0KDQoNCg0KDQoNCg0K