Cílem tohoto cvičení je projít praktickou ukázku, ve které si ukážeme jak se staví dataset pro výzkum v mezinárodní migraci. Budeme používat pouze volně dostupná data.

  • Ukážeme si několik nových balíků pro stahování dat z otevřených databází
  • Provičíme praktikou aplikaci nástrojů z balíků tidyr a dplyr
  • Ukážeme si, jaké problémy můžeme potkat v divočině

Trocha teorie…

V neoklasických modelech migrace se vychází z toho, že migrant (nebo jeho rodina) maximalizují užitek z migrace. Kontinuálně zvažují, do které země \(j \in J\) se přestěhují. Součástí množiny \(J\) je i země \(i\), ve které se momentálně nalézají. Užitek z migrace do zěmě \(j\) je přitom dán jako rozdíl mezi očekávanými přínosy z migrace a jejími náklady.

Na hraní můžeme použít následující empirickou specifikaci migračního modelu:

\[\log(\frac{M_{ijt}}{P_{it}})=\alpha + \beta_1 \log(GDP_{i,t-1}) + \beta_2 \log(GDP_{j,t-1}) + \beta_3 \log(U_{i,t-1}) + \beta_4 \log(U_{j,t-1})\] \[+ \beta_5\log(\frac{M_{i,t-1}}{P_{i,t-1}}) + \mathbf{\gamma} X_{ij} + \Theta_i + \Theta_j + \Theta_t + \varepsilon\] Kde \(M\) je migrační tok ze země \(i\) do země \(j\) v čase \(t\), \(P\) je velikost populace, \(GDP\) je GDP per capita, \(U\) je míra nezaměstnanosti a \(X\) je vektor bilaterálních gravotačních proměnných (vzdálenost, atp.).

Získávání dat z connections

Stahování dat ze vzdálených zdrojů

V divočině na síti najdete mnoho zdrojů dat. Pro jednoduchost se dají rozdělit do tří skupin:

  • zdroj má API (Application Programming Interface)
  • zdroj nemá API, ale umožňuje interakci například prostřednictvím simulace chování lidského uživatele
  • data se válí v podobě připraveného datasetu (dta – Stata, sav – SPSS, csv, xls) na webu
  • data jsou připravená v balíčku pro R

Zdroje s API

Pro mnoho poskytovatelů dat (statistických úřadů,…) existují možnosti jak stahovat aktuální data “přímo do R”. Zajímavá je tato možnost zejména v případě, že existuje balík specializovaný pro komunikaci s API konkrétního poskytovatele.

World bank

Balík WDI obsahuje World Development Indicators – tedy většinu dat veřejně poskytovaných World Bank

library(WDI)

Balík obsahuje dvě základní funkce: WDIsearch a WDI. WDIsearch umožňuje vyhledávat indikátory z databáze WDI.

WDIsearch(string = "gdp", field = "name", short = TRUE, cache = NULL)

Vrací matrix (help tvrdí, že data.frame) s celkem logickou strukturou:

WDIsearch() %>% head
##      indicator          
## [1,] "BG.GSR.NFSV.GD.ZS"
## [2,] "BM.KLT.DINV.GD.ZS"
## [3,] "BN.CAB.XOKA.GD.ZS"
## [4,] "BN.CUR.GDPM.ZS"   
## [5,] "BN.GSR.FCTY.CD.ZS"
## [6,] "BN.KLT.DINV.CD.ZS"
##      name                                                                      
## [1,] "Trade in services (% of GDP)"                                            
## [2,] "Foreign direct investment, net outflows (% of GDP)"                      
## [3,] "Current account balance (% of GDP)"                                      
## [4,] "Current account balance excluding net official capital grants (% of GDP)"
## [5,] "Net income (% of GDP)"                                                   
## [6,] "Foreign direct investment (% of GDP)"

Vlastní stahování dat zařizuje funkce WDI():

WDI(country = "all", indicator = "NY.GNS.ICTR.GN.ZS",
    start = 2005, end = 2011, extra = FALSE, cache = NULL)
  • country – ISO-2 kód
  • indicator – kód indikátoru – lze najít pomocí WDIsearch() nebo na webu World Bank (http://data.worldbank.org/). Tamtéž lze najít bližší popis indikátorů.
  • start a end – udává první a poslední rok. WDI obsahuje pouze roční data.
  • extra – pokud je nastaveno na TRUE vrací více proměnné – jméno regionu, iso3c kód,… (defaultně FALSE, doporučuji TRUE)
WDI(indicator = c("NY.GNS.ICTR.GN.ZS","BN.KLT.DINV.CD.ZS"), extra = TRUE) -> wdi_data

wdi_data %>% class
## [1] "data.frame"
head(wdi_data)
##   iso2c country year NY.GNS.ICTR.GN.ZS BN.KLT.DINV.CD.ZS iso3c region
## 1        Africa 2005                NA          2.816084  <NA>   <NA>
## 2        Africa 2006                NA          2.504447  <NA>   <NA>
## 3        Africa 2007                NA          3.028385  <NA>   <NA>
## 4        Africa 2008                NA          3.183462  <NA>   <NA>
## 5        Africa 2009                NA          2.896574  <NA>   <NA>
## 6        Africa 2010                NA          2.382063  <NA>   <NA>
##   capital longitude latitude income lending
## 1    <NA>      <NA>     <NA>   <NA>    <NA>
## 2    <NA>      <NA>     <NA>   <NA>    <NA>
## 3    <NA>      <NA>     <NA>   <NA>    <NA>
## 4    <NA>      <NA>     <NA>   <NA>    <NA>
## 5    <NA>      <NA>     <NA>   <NA>    <NA>
## 6    <NA>      <NA>     <NA>   <NA>    <NA>

Všiměte si, že balík WDI Vám dodá tidy data. Webové rozhraní nikoliv.

Nepříjemné je, že kromě dat pro jednotlivé země se vám vrátí i data pro aregáty (viz výše). Ty můžeme jednoduše odfiltrovat:

wdi_data %>% 
    as_tibble() %>% 
    filter(!is.na(iso3c)) %>% 
    print(n=5)
## # A tibble: 1,638 × 12
##   iso2c country  year NY.GNS.ICTR.GN.ZS BN.KLT.DINV.CD.ZS  iso3c
##   <chr>   <chr> <dbl>             <dbl>             <dbl> <fctr>
## 1    AD Andorra  2011                NA                NA    AND
## 2    AD Andorra  2007                NA                NA    AND
## 3    AD Andorra  2008                NA                NA    AND
## 4    AD Andorra  2010                NA                NA    AND
## 5    AD Andorra  2006                NA                NA    AND
## # ... with 1,633 more rows, and 6 more variables: region <fctr>,
## #   capital <fctr>, longitude <fctr>, latitude <fctr>, income <fctr>,
## #   lending <fctr>

OECD

Balík OECD pro stahování dat z databáze OECD (http://stats.oecd.org/) funguje velmi podobně jako balík WDI. Poskytuje funkce pro hledání indikátorů a pro samotné stažení dat.

library(OECD)

Funkce pro hledání indikátorů:

search_dataset(string, data = get_datasets(), ignore.case = TRUE)
  • string – regulární výraz použitý pro vyhledání indikátoru
search_dataset("FDI") %>% head
## # A tibble: 6 × 2
##                               id                                     title
##                           <fctr>                                    <fctr>
## 1              FDI_FLOW_INDUSTRY                     FDI flows by industry
## 2          FDI_POSITION_INDUSTRY                 FDI positions by industry
## 3               FDI_FLOW_PARTNER              FDI flows by partner country
## 4                    FDI_BOP_IIP      FDI series of BOP and IIP aggregates
## 5           FDI_POSITION_PARTNER          FDI positions by partner country
## 6 AEO11_INDEPTH_CHAPTER6_FIG5_EN Figure 6.5: African FDI inflows 1995-2008

Samotná funkce pro stažení dat funguje podobně jako její ekvivalet z balíku WDI:

get_dataset(dataset, filter = NULL, start_time = NULL, end_time = NULL,
  pre_formatted = FALSE, ...)
  • dataset – string specifikující požadovaný dataset (id z search_dataset())
  • filter – podmínka pro filtrování dat. Pokud není nastavena, stáhne se celý dataset.
get_dataset("EPL_OV", 
            filter = list(c("DEU", "FRA"), 
                          c("EPRC_V1", "EPRC_V2")), 
            start_time = 2008, end_time = 2010) -> oecd_data

Parametr filter může být velmi užitečný. Některé databáze OECD jsou velmi obsáhlé – klidně desítky MB – a jejich stahování pomocí balíků OECD bývá problémové. Nastavení filter může tento problém vyřešit. Pokud se tento problém vyskytne, tak spíše doporučuji stahovat data přes webové rozhraní. V takovém případě doporučuji vždy stahovat komprimované CSV. (Web OECD má nepříjemnou vlastnost. Při exportu do xls vrací pouze vyfiltrovanou část tabulky. Při exportu do CSV vrací celou. Tato vlastnost není, pokud vím, nikde dokumentovaná.)

Stahování dat přes balík OECD je obecně velmi pomalé a dost nestabilní.

oecd_data %>% print(n=5)
## # A tibble: 12 × 5
##   COUNTRY  SERIES TIME_FORMAT obsTime obsValue
## *   <chr>   <chr>       <chr>   <chr>    <dbl>
## 1     FRA EPRC_V1         P1Y    2008 2.468254
## 2     FRA EPRC_V1         P1Y    2009 2.384921
## 3     FRA EPRC_V1         P1Y    2010 2.384921
## 4     DEU EPRC_V1         P1Y    2008 2.678571
## 5     DEU EPRC_V1         P1Y    2009 2.678571
## # ... with 7 more rows

Je příjemné, že get_dataset() vrací tibble, který sice není tidy, ale obyvkle (jako v tomto případě) není konverze do tidy dat problém:

oecd_data %>% 
    spread(SERIES,obsValue) %>% 
    print(n=5)
## # A tibble: 6 × 5
##   COUNTRY TIME_FORMAT obsTime  EPRC_V1  EPRC_V2
## *   <chr>       <chr>   <chr>    <dbl>    <dbl>
## 1     DEU         P1Y    2008 2.678571 2.948980
## 2     DEU         P1Y    2009 2.678571 2.948980
## 3     DEU         P1Y    2010 2.678571 2.948980
## 4     FRA         P1Y    2008 2.468254 2.727324
## 5     FRA         P1Y    2009 2.384921 2.667800
## # ... with 1 more rows

Eurostat

Data z Eurostatu jsou dostupná přes balík eurostat.

library(eurostat)

Ten poskytuje celou řadu funkcí, které mohou být velmi užitečné (umožňuje například stahovat geolokovaná – spatial – data atp.). Základní funkcionalitou je ovšem hledání a stažení dat.

Vhledat data lze pomocí funkce search_eurostat():

search_eurostat(pattern, type = "dataset")
  • type – může nabývat hodnot dataset, folder, table nebo all
search_eurostat("migration") %>% names
## [1] "title"                       "code"                       
## [3] "type"                        "last update of data"        
## [5] "last table structure change" "data start"                 
## [7] "data end"                    "values"
search_eurostat("migration") %>% head()
## # A tibble: 6 × 8
##                                                          title
##                                                          <chr>
## 1 Main scenario - Net migration by age, sex and NUTS 2 regions
## 2 Main scenario - Net migration by age, sex and NUTS 3 regions
## 3                                   Immigration by age and sex
## 4      Immigration by five year age group, sex and citizenship
## 5 Immigration by five year age group, sex and country of birth
## 6       Immigration by age, sex and broad group of citizenship
## # ... with 7 more variables: code <chr>, type <chr>, `last update of
## #   data` <chr>, `last table structure change` <chr>, `data start` <chr>,
## #   `data end` <chr>, values <chr>
search_eurostat("migration", type = "folder") %>% head()
## # A tibble: 6 × 8
##                                     title       code   type
##                                     <chr>      <chr>  <chr>
## 1                Demography and migration        pop folder
## 2                             Immigration  migr_immi folder
## 3                              Emigration   migr_emi folder
## 4            Asylum and managed migration       migr folder
## 5  Enforcement of Immigration Legislation   migr_eil folder
## 6 Population by migration characteristics cens_11rmc folder
## # ... with 5 more variables: `last update of data` <chr>, `last table
## #   structure change` <chr>, `data start` <chr>, `data end` <chr>,
## #   values <chr>
search_eurostat("migration", type = "table") %>% head()
## # A tibble: 4 × 8
##                                         title     code  type
##                                         <chr>    <chr> <chr>
## 1 Crude rate of net migration plus adjustment tsdde230 table
## 2                                 Immigration tps00176 table
## 3                                  Emigration tps00177 table
## 4 Crude rate of net migration plus adjustment tsdde230 table
## # ... with 5 more variables: `last update of data` <chr>, `last table
## #   structure change` <chr>, `data start` <chr>, `data end` <chr>,
## #   values <chr>

Pro vlastní satžení dat je klíčová funkce get_eurostat():

get_eurostat(id, time_format = "date", filters = "none", type = "code",
  select_time = NULL, cache = TRUE, update_cache = FALSE,
  cache_dir = NULL, compress_file = TRUE,
  stringsAsFactors = default.stringsAsFactors(), keepFlags = FALSE, ...)
  • id – kód datasetu
  • select_time – umožňuje zvolit si frekvenci pozorování
# Immigration by age and sex
get_eurostat("migr_imm8") -> eu_data
## Table migr_imm8 cached at /tmp/RtmpxQquXy/eurostat/migr_imm8_date_code_TF.rds
eu_data %>% print(n=5)
## # A tibble: 158,914 × 7
##    agedef    age   unit    sex    geo       time values
##    <fctr> <fctr> <fctr> <fctr> <fctr>     <date>  <dbl>
## 1 COMPLET  TOTAL     NR      F     AT 2014-01-01  52494
## 2 COMPLET  TOTAL     NR      F     BE 2014-01-01  58318
## 3 COMPLET  TOTAL     NR      F     BG 2014-01-01  11903
## 4 COMPLET  TOTAL     NR      F     CH 2014-01-01  75173
## 5 COMPLET  TOTAL     NR      F     CY 2014-01-01   6422
## # ... with 1.589e+05 more rows

get_eurostat() vrací tibble, který se dá relativně lehce překlopit do tidy formátu.

Ostatní

Balíků, které umožňují přístup k datům je celá řada, viz například:

Existují i balíky, které umožňují načítat data z webových služeb a sociálních sítí (Wikipedia, Google Trends,…):

Web Scraping

Lokální soubory

Data obsažená v R packages

Některá užitečná data mají své vlastní balíky, které zpravidla neobsahují nic jiného než právě data. Mezi zajímavé kousky patří:

  • Penn World Tables v balících pwt a pwt8
  • World Population Prospects v balících wpp2008, wpp2010, wpp2012 a wpp2015

Tabulka postavená od základů

Pro přípravu tabulky je vhodné si rozmyslet, jaký bude její záběr. Chceme zahrnout všechna myslitelná pozorování, nebo nám stačí soustředit se na ty, u kterých můžeme získat data?

V tomto konkrétním případě je rozumné zvolit spíše druhou variantu. Ta v praxi znamená, že získáme maximální rozsah dat pro vysvětlovanou proměnnou a následně budeme doplňovat data pro pravou stranu rovnice.

Migrační data

Data o migraci jsou dostupná v několika databázích:

  • World Bank (ne WDI!) – počty imigrantů dle země narození pro celá desetiletí 1960, 1970, …, 2000 (Özden et al. 200X)
  • UN – počty imigrantů pro celá destiletí a nově jejich interpolace pro poloviny desetiletí
  • Odhadované globální bilaterální migrační toky (Abel, Sander 2014, Abel 2013, 2015, 2016) dostupné v agregaci pro pětiletky – nástroje pro odhady jsou dostupné v balíku migest
  • Databáze OECD zahrnující roční data o migraci do OECD – velmi reprezentativní zdroj pro migraci po roce 1990
  • Databáze z Adsera & Pytliková (2015), která doplňuje chybějící hodnoty v datech OECD
  • Databáze Eurostatu – překvapivě děravá. Skoro nikdo ji nepoužívá.

My budeme používat databázi OECD International Migration Database. Tu lze stáhnout pomocí balíku OECD nebo z webové aplikace. Výsledný soubor CSV má 89 MB a proto je celkem jasnou volbou stahování z webové aplikace. Výsledný soubor je MIG_OECD.CSV.

U práce s takto velkými soubory už se vyplatí přemýšlet o tom, jakou funkci použít pro načtení dat:

system.time(
    read.csv("data/MIG_OECD.csv") -> data
)
##    user  system elapsed 
##   7.560   0.208   7.862
system.time(
    read_csv("data/MIG_OECD.csv",
             col_types = "cccccccccnncc") -> data
)
##    user  system elapsed 
##   1.372   0.028   1.401

read_csv() z balíku readr je nepřekvapivě jasný vítěz.

data %>% print(n=5)
## # A tibble: 718,142 × 13
##   `"CO2"` `Country of birth/nationality`   VAR
##     <chr>                          <chr> <chr>
## 1     AFG                    Afghanistan   B11
## 2     AFG                    Afghanistan   B11
## 3     AFG                    Afghanistan   B11
## 4     AFG                    Afghanistan   B11
## 5     AFG                    Afghanistan   B11
## # ... with 7.181e+05 more rows, and 10 more variables: Variable <chr>,
## #   GEN <chr>, Gender <chr>, COU <chr>, Country <chr>, YEA <chr>,
## #   Year <dbl>, Value <dbl>, `Flag Codes` <chr>, Flags <chr>

Data z OECD obsahují hodně sloupců, jejichž obsah je dost kriptický. Rozhodně stojí za bližší podívání:

data %>% distinct(VAR, Variable)
## # A tibble: 10 × 2
##      VAR                                                    Variable
##    <chr>                                                       <chr>
## 1    B11                Inflows of foreign population by nationality
## 2    B12               Outflows of foreign population by nationality
## 3    B14        Stock of foreign-born population by country of birth
## 4    B13                    Inflows of asylum seekers by nationality
## 5    B15                  Stock of foreign population by nationality
## 6    B16 Acquisition of nationality by country of former nationality
## 7    B21                   Inflows of foreign workers by nationality
## 8    B22          Inflows of seasonal foreign workers by nationality
## 9    B23            Stock of foreign-born labour by country of birth
## 10   B24                      Stock of foreign labour by nationality

Na první pohled je vidět, že vstupní soubor není tidy a že dokonce obsahuje data, která nás nezajímají. Saoustředíme se na proměnné B11, B14 a B15. B11 slibuje nejlepší pokrytí daty. Proměnné B14 a B15 použijeme pro aproximaci diaspor. Ostatní proměnné (řádky) zahodíme:

data %<>%
    filter(VAR %in% c("B11","B14","B15"))

print(data)
## # A tibble: 321,684 × 13
##    `"CO2"` `Country of birth/nationality`   VAR
##      <chr>                          <chr> <chr>
## 1      AFG                    Afghanistan   B11
## 2      AFG                    Afghanistan   B11
## 3      AFG                    Afghanistan   B11
## 4      AFG                    Afghanistan   B11
## 5      AFG                    Afghanistan   B11
## 6      AFG                    Afghanistan   B11
## 7      AFG                    Afghanistan   B11
## 8      AFG                    Afghanistan   B11
## 9      AFG                    Afghanistan   B11
## 10     AFG                    Afghanistan   B11
## # ... with 321,674 more rows, and 10 more variables: Variable <chr>,
## #   GEN <chr>, Gender <chr>, COU <chr>, Country <chr>, YEA <chr>,
## #   Year <dbl>, Value <dbl>, `Flag Codes` <chr>, Flags <chr>

Další mysteriózní proměnná je “Flags”:

data %>% 
    rename(FlagCodes = `Flag Codes`) %>% 
    distinct(FlagCodes,Flags)
## # A tibble: 3 × 2
##   FlagCodes           Flags
##       <chr>           <chr>
## 1      <NA>            <NA>
## 2         b           Break
## 3         e Estimated value

Nyní je potřeba zjistit, co vlastně “flags” znamenají. Čisté řešení je nastudovat si metodiku zjišťování a publikování dat. My se podíváme na následující:

data %>% 
    filter(`Flag Codes`=="e", !is.na(Value))
## # A tibble: 0 × 13
## # ... with 13 variables: "CO2" <chr>, Country of birth/nationality <chr>,
## #   VAR <chr>, Variable <chr>, GEN <chr>, Gender <chr>, COU <chr>,
## #   Country <chr>, YEA <chr>, Year <dbl>, Value <dbl>, Flag Codes <chr>,
## #   Flags <chr>
data %>% 
    filter(`Flag Codes`=="b", !is.na(Value))
## # A tibble: 0 × 13
## # ... with 13 variables: "CO2" <chr>, Country of birth/nationality <chr>,
## #   VAR <chr>, Variable <chr>, GEN <chr>, Gender <chr>, COU <chr>,
## #   Country <chr>, YEA <chr>, Year <dbl>, Value <dbl>, Flag Codes <chr>,
## #   Flags <chr>

Zdá se, že z flags nás hlava bolet nemusí – u všechny hodnot jde o NA. Můžeme tedy celkem bez starostí vyčistit tabulku. Ponecháme jen relevantní sloupce:

data %<>% 
    select(
        origin_code = 1,
        origin_name = `Country of birth/nationality`,
        gender = Gender,
        destination_code = COU,
        destination_name = Country,
        year = Year,
        VAR,
        Value
    )

Pojmenovávání sloupců je věda sama o sobě. Každý postupuje jinak. V případě migračních toků se občas používá i značení pomocí dolních indexů: x_i pro charakteristiky země původu a x_ij pro charakteristiku bilaterálního vztahu (např. dataset k Adsera & Pytliková, 2015). Osobně preferuji ukecanější pojmenování, které je jen obtížně zaměnitelné. Nicméně je to věc vkusu.

Teď přišel čas data ještě trochu pročistit:

  • provedeme konverzi roků na double/integer – v praxi je to celkem jedno
  • převedeme data do tidy formátu
data %<>% 
    unite(variable,VAR,gender,sep="_") %>% 
    spread(variable,Value) %>%
    rename(
        flow = B11_Total,
        flow_women = B11_Women,
        stock_cob = B14_Total,
        stock_cob_women = B14_Women,
        stock_nat = B15_Total,
        stock_nat_women = B15_Women
    ) %>% 
    mutate(
        year = year %>% as.character() %>% as.numeric()
    )

print(data, n=5)
## # A tibble: 95,319 × 11
##   origin_code origin_name destination_code destination_name  year  flow
##         <chr>       <chr>            <chr>            <chr> <dbl> <dbl>
## 1         AFG Afghanistan              AUS        Australia  1996    NA
## 2         AFG Afghanistan              AUS        Australia  1997   368
## 3         AFG Afghanistan              AUS        Australia  1998   620
## 4         AFG Afghanistan              AUS        Australia  1999   852
## 5         AFG Afghanistan              AUS        Australia  2000   887
## # ... with 9.531e+04 more rows, and 5 more variables: flow_women <dbl>,
## #   stock_cob <dbl>, stock_cob_women <dbl>, stock_nat <dbl>,
## #   stock_nat_women <dbl>

Nyní máme v ruce základní verzi tabulky. Protože nemáme kontrolu nad zdrojem dat, vyplatí se trochu si je osahat. Zaměříme se zejména na hodnoty pro celkový tok flow, který nás zajímá jednoznačně nejvíce.

data %>% 
    filter(!is.na(flow)) %>% 
    summarise(
        year_min = range(year)[1],
        year_max = range(year)[2],
        origins = unique(origin_code) %>% length(),
        destinations = unique(destination_code) %>% length,
        nobs = n()
    )
## # A tibble: 1 × 5
##   year_min year_max origins destinations  nobs
##      <dbl>    <dbl>   <int>        <int> <int>
## 1     1980     2014     206           35 81184

Data by měla obsahovat $3520635=$2.523510^{5} pozorování. Sumarizační tabulka však ukazuje, že jich máme pouze něco přes 80.000. Je tedy zřejmé, že tabulka obsahuje implicitní chybějící hodnoty. To je něco, s čím se musí počítat.

Také je rozumné podívat se na hodnoty proměnných – dávají smysl?

Je užitečné dívat se na variabilitu v proměnných, no odhlehlé hodnoty, atp… Momentálně na to zatím nemáme všechny nástroje, ale zdá se, že hodnoty jsou rozděleny cca tak, jak je možné očekávat:

data %>% 
    gather(variable,value,flow:stock_nat_women) %>% 
    ggplot(
        aes(x=value)
    ) +
    geom_histogram(bins = 100) +
    facet_wrap(~variable, scales = "free", ncol = 2) +
    theme_bw()
## Warning: Removed 250695 rows containing non-finite values (stat_bin).

Mrkneme se i na extrémní hodnoty pro flows:

data %>% 
    arrange(desc(flow))
## # A tibble: 95,319 × 11
##    origin_code       origin_name destination_code destination_name  year
##          <chr>             <chr>            <chr>            <chr> <dbl>
## 1          MEX            Mexico              USA    United States  1991
## 2          MEX            Mexico              USA    United States  1990
## 3          MEX            Mexico              USA    United States  1989
## 4         YUCS Former Yugoslavia              DEU          Germany  1992
## 5          ROU           Romania              ITA            Italy  2007
## 6          POL            Poland              DEU          Germany  1989
## 7         YUCS Former Yugoslavia              DEU          Germany  1991
## 8          MEX            Mexico              USA    United States  2002
## 9          MEX            Mexico              USA    United States  1992
## 10         POL            Poland              DEU          Germany  1988
## # ... with 95,309 more rows, and 6 more variables: flow <dbl>,
## #   flow_women <dbl>, stock_cob <dbl>, stock_cob_women <dbl>,
## #   stock_nat <dbl>, stock_nat_women <dbl>

Zdá se, že vše dává elementární smysl. Samozřejmě tato část by si zasloužila větší pozornost. Zatím ale úplně nevíme jak na to.

Lagování

V rovnici, jejíž parametry chceme nakonec odhadovat jsou vysvětlující proměnné lagované a logaritmované. Na rozdíl od mnoha jiných software nás vůbec nemusí trápit logaritmování. R si umí data transformovat při samotném odhadu modelu – není potřeba data dopředu (pozdravujeme Gretl, Statu,…). V některých případech to platí i pro lagování – např. při odhadu na panelových datech pomocí balíku plm. Obecně však doporučuji provést lagování ručně. (Ne všechno co je potřeba je implementováno v plm/pglm – typicky zde není Poisson pseudo-ML estimátor. Navíc si můžeme být jisti, že bude lagování uděláno správně.)

Pro lagování můžeme použít jednu z tzv. window functions z balíku dplyr: lag(). (Nebylo na přednášce.)

Její fugnování je možné demostrovat na populačních datech pro Norsko a Švédsko:

load("data/POP.Rdata")

POP_implicit %>% 
    mutate(
        poplation_lag1 = lag(population)
    )
## # A tibble: 7 × 4
##   country  year population poplation_lag1
##     <chr> <int>      <int>          <int>
## 1  Norway  1995    4359788             NA
## 2  Norway  1998    4440109        4359788
## 3  Norway  2000    4491572        4440109
## 4  Sweden  1996    8849420        4491572
## 5  Sweden  1997    8859106        8849420
## 6  Sweden  1998    8861204        8859106
## 7  Sweden  2000    8872284        8861204

Funkce funguje tak, že penáší hodnoty o n (defaultně n=1L) řádků níže. Co to znamená:

  • výsledek je citlivý na řazení
  • výsledek je je citlivý na implicitní chybějící hodnoty

Obojí plyne z toho, že R vlastně neví, že data jsou fakticky panel. (Balík plm má vlastní class pro data viz plm::plm.data(), která mu lagování umožňuje.) Doplnění lagovaných hodnot můžeme provést dvojí způsobem:

  • přičtením jedničky k roku a joinem s původní tabulkou
system.time(
    data %>% 
        select(
            -origin_name,-destination_name,-flow,-flow_women
        ) %>% 
        mutate(
            year = year + 1
        ) %>% 
        left_join(data,.,
                  by=c("origin_code","destination_code","year"),
                  suffix = c("_lag0","_lag1")
        ) -> xdata
)
##    user  system elapsed 
##   0.176   0.000   0.176
  • pomocí rozšíření tabulky tak, aby obsahovala explicitní chybějící proměnné a grupovaných operací
system.time(
    data %>%
        complete(origin_code,destination_code,year) %>% 
        group_by(origin_code,destination_code) %>% 
        arrange(year) %>% 
        mutate(
            stock_cob_lag1 = lag(stock_cob),
            stock_cob_women_lag1 = lag(stock_cob_women),
            stock_nat_lag1 = lag(stock_nat),
            stock_nat_women_lag1 = lag(stock_nat_women)
        ) -> data
)
##    user  system elapsed 
##   0.404   0.000   0.411
data %<>% ungroup 

Oba způsoby vedou z praktického hlediska k identickým výsledkům bez zásadního rozdílu v náročnosti. V praxi bude záležet, který z postupů bude mít nákladnější režii – to se může lišit zejména (můj odhad) s náročností joinování.

Druhý způsob však vrací tabulku s explicitními chybějícími pozorováními. První způsob žádné řádky nepřidává. Na druhou stranu ovšem vyžaduje přejmenování původních proměnných.

Každému co jeho jest. Obecně velmi doporučuji mít v datsetu explicitní chybějící hodnoty. Proto spíše inklinuji k druhému řešení. Na druhou stranu nic nikomu nebrání v zavolání complete() po provedení prvního způsobu přidání lagovaných hodnot.

Kódování

Pro jednoznačné určení pozorování potřebujeme znát místo, ze kterého pochází. To je v našem případě země nebo dvojice zemí. Rozhodně není moudré pro joinování nebo cokoliv jiného používat jméno země. To se může dramaticky lišit mezi databázemi – podle množství členů, velikosti písmen (R je case-sensitive!), množství a umístění slov typu “demokratický”, “lidový”, “republika” a podobně. Proto se používají standardizované (kéžby) kódy zemí.

Různé databáze používají různé standardy kódování zemí, které mají – bohuželva – dosti odlišné vlastnosti. V zásadě exstují (a používají se!) následující standardy:

  • ISO třípísmenné (často něco jako iso3c) a dvoupísmenné (často něco jako iso2c) kódy.
  • ISO numerické kódy
  • pochopitelně všechny mezinárodní instituce mají za účelem zdůraznění své vyjímečnosti vlastní systémy kódování: UN, WB, IMF, FAO,…

Míra shody v rámci těchot systémů je různá a často jen zdánlivá a rozhodně na ni nelze spoléhat. Například kódování WB je skoro stejné jako iso3c. Skoro. Nejvýznamnější rozdíl je, že Rumunsko je v jednom “ROU” a ve druhém “ROM”. Tento rozdíl už zachránil tisíce životů.

Slabinou všech výše uvedených systémů je častá absence kódů pro historické (zaniklé) země, popřípadě i ignorování některých států (typicky Taiwan v databázi WB). Tímto problémem netrpí více historicky orientované standardy:

  • Correlates of War (CoC) – numerická nebo písmenná varianta
  • Gledish and Ward (GW)

Práci s kódováním může ulehčit balík countrycode, který obsahuje dva objekty: tabulku countrycode_data a funkci countrycode().

countrycode_data obsahuje vlastně pravidla pro konverzi jednotlivých kódování:

##     country.name cowc cown fao fips104 imf  ioc iso2c iso3c iso3n  un  wb
## 1    Afghanistan  AFG  700   2      AF 512  AFG    AF   AFG     4   4 AFG
## 2  Aland Islands <NA>   NA  NA    <NA>  NA <NA>    AX   ALA   248 248 ALA
## 3        Albania  ALB  339   3      AL 914  ALB    AL   ALB     8   8 ALB
## 4        Algeria  ALG  615   4      AG 612  ALG    DZ   DZA    12  12 DZA
## 5 American Samoa <NA>   NA  NA      AQ 859  ASA    AS   ASM    16  16 ASM
## 6        Andorra  AND  232   6      AN  NA  AND    AD   AND    20  20 ADO
##                  regex continent          region
## 1               afghan      Asia   Southern Asia
## 2         \\b(a|å)land    Europe Northern Europe
## 3              albania    Europe Southern Europe
## 4              algeria    Africa Northern Africa
## 5 ^(?=.*americ).*samoa   Oceania       Polynesia
## 6              andorra    Europe Southern Europe

Funkce countrycode() je využívá pro konverzi vstupního vektoru:

countrycode(sourcevar, origin, destination, warn = FALSE)

Funkce bere několik parametrů – vstupní vektor a kód vstupního a výstupního kódování (viz help). Zrádné je nastavení parametru warn = FALSE. Tento paramtr potlačí vypsání všech zpráv o problemtické konverzi. Vždy nastavujte warn = TRUE. Balíček je zrádný v tom, že navozuje falešný pocit jistoty. Doporučuji vždy detailně kontrolovat vstupní i výstupní hodnoty.

Kódování v migrační databázi OECD

Databáze OECD přímo neodkazuje na použité kódování, takže se musíme podívat přímo do dat:

data %>%
    filter(!is.na(origin_name)) %>% 
    distinct(origin_code, origin_name) -> codes

print(codes)
## # A tibble: 206 × 2
##    origin_code origin_name
##          <chr>       <chr>
## 1          DZA     Algeria
## 2          ESP       Spain
## 3          ITA       Italy
## 4          KHM    Cambodia
## 5          LAO        Laos
## 6          MAR     Morocco
## 7          POL      Poland
## 8          PRT    Portugal
## 9          SEN     Senegal
## 10         TUN     Tunisia
## # ... with 196 more rows

Poznámka: volání doplnění implicitních chybějících pozorování pomocí complete() vytvořilo chybějicí pozorování v origin_name a destination_name.

Poznámka 2: správně bychom měli vzít i origin_code a origin_name. V této konkrétní databázi to však není nutné.

Takže, co se nám to schovává pod pokličkou:

codes$origin_code %>% sort
##   [1] "AFG"  "AGO"  "ALB"  "AND"  "ARE"  "ARG"  "ARM"  "ATG"  "AUS"  "AUT" 
##  [11] "AZE"  "BDI"  "BEL"  "BEN"  "BFA"  "BGD"  "BGR"  "BHR"  "BHS"  "BIH" 
##  [21] "BLR"  "BLZ"  "BMU"  "BOL"  "BRA"  "BRB"  "BRN"  "BTN"  "BWA"  "CAF" 
##  [31] "CAN"  "CIV"  "CMR"  "COD"  "COG"  "COK"  "COL"  "COM"  "CPV"  "CRI" 
##  [41] "CSK"  "CUB"  "CYP"  "CZE"  "DEU"  "DJI"  "DMA"  "DNK"  "DOM"  "DZA" 
##  [51] "ECU"  "EGY"  "ERI"  "ESP"  "EST"  "ETH"  "FIN"  "FJI"  "FRA"  "FSM" 
##  [61] "GAB"  "GBR"  "GEO"  "GHA"  "GIN"  "GMB"  "GNB"  "GNQ"  "GRC"  "GRD" 
##  [71] "GTM"  "GUM"  "GUY"  "HKG"  "HND"  "HRV"  "HTI"  "HUN"  "CHE"  "CHL" 
##  [81] "CHN"  "IDN"  "IND"  "IRL"  "IRN"  "IRQ"  "ISL"  "ISR"  "ITA"  "JAM" 
##  [91] "JOR"  "JPN"  "KAZ"  "KEN"  "KGZ"  "KHM"  "KIR"  "KNA"  "KOR"  "KWT" 
## [101] "LAO"  "LBN"  "LBR"  "LBY"  "LCA"  "LIE"  "LKA"  "LSO"  "LTU"  "LUX" 
## [111] "LVA"  "MAC"  "MAR"  "MCO"  "MDA"  "MDG"  "MDV"  "MEX"  "MHL"  "MKD" 
## [121] "MLI"  "MLT"  "MMR"  "MNE"  "MNG"  "MOZ"  "MRT"  "MUS"  "MWI"  "MYS" 
## [131] "NAM"  "NER"  "NGA"  "NIC"  "NIU"  "NLD"  "NOR"  "NPL"  "NRU"  "NZL" 
## [141] "OMN"  "PAK"  "PAN"  "PER"  "PHL"  "PLW"  "PNG"  "POL"  "PRI"  "PRK" 
## [151] "PRT"  "PRY"  "PSE"  "QAT"  "ROU"  "RUS"  "RWA"  "SAU"  "SCG"  "SDN" 
## [161] "SEN"  "SGP"  "SLB"  "SLE"  "SLV"  "SMR"  "SOM"  "SRB"  "STP"  "SUN" 
## [171] "SUR"  "SVK"  "SVN"  "SWE"  "SWZ"  "SYC"  "SYR"  "TCD"  "TGO"  "THA" 
## [181] "TJK"  "TKL"  "TKM"  "TLS"  "TON"  "TTO"  "TUN"  "TUR"  "TUV"  "TWN" 
## [191] "TZA"  "UGA"  "UKR"  "URY"  "USA"  "UZB"  "VCT"  "VEN"  "VNM"  "VUT" 
## [201] "WSM"  "YEM"  "YUCS" "ZAF"  "ZMB"  "ZWE"

Od pohledu se zdá, že by mohlo jít o iso3c kódy. Můžeme to ověřit proti referenční tabulce z balíku countrycode. Je naše doměnka správná?

all(codes$origin_code %in% countrycode::countrycode_data$iso3c)
## [1] FALSE

Tak ne. Vypíšeme hříšníky:

codes %>% 
    filter(!(origin_code %in% countrycode::countrycode_data$iso3c))
## # A tibble: 3 × 2
##   origin_code           origin_name
##         <chr>                 <chr>
## 1        YUCS     Former Yugoslavia
## 2         SCG Serbia and Montenegro
## 3         SUN           Former USSR

Klasika. Problematické jsou historické státy. Občas můžeme mít štěstí. Vypíšeme seznam pozorování, u kterých je problém:

data %>% filter(origin_code=="SUN") %>% filter(!is.na(flow))
## # A tibble: 278 × 15
##    origin_code destination_code  year origin_name destination_name  flow
##          <chr>            <chr> <dbl>       <chr>            <chr> <dbl>
## 1          SUN              USA  1980 Former USSR    United States 10543
## 2          SUN              USA  1981 Former USSR    United States  9223
## 3          SUN              USA  1982 Former USSR    United States 15462
## 4          SUN              USA  1983 Former USSR    United States  5214
## 5          SUN              USA  1984 Former USSR    United States  6088
## 6          SUN              GBR  1985 Former USSR   United Kingdom  1000
## 7          SUN              USA  1985 Former USSR    United States  3521
## 8          SUN              USA  1986 Former USSR    United States  2588
## 9          SUN              USA  1987 Former USSR    United States  2384
## 10         SUN              USA  1988 Former USSR    United States  2949
## # ... with 268 more rows, and 9 more variables: flow_women <dbl>,
## #   stock_cob <dbl>, stock_cob_women <dbl>, stock_nat <dbl>,
## #   stock_nat_women <dbl>, stock_cob_lag1 <dbl>,
## #   stock_cob_women_lag1 <dbl>, stock_nat_lag1 <dbl>,
## #   stock_nat_women_lag1 <dbl>
data %>% filter(origin_code=="YUCS") %>% filter(!is.na(flow))
## # A tibble: 318 × 15
##    origin_code destination_code  year       origin_name destination_name
##          <chr>            <chr> <dbl>             <chr>            <chr>
## 1         YUCS              GBR  1985 Former Yugoslavia   United Kingdom
## 2         YUCS              NOR  1986 Former Yugoslavia           Norway
## 3         YUCS              NOR  1987 Former Yugoslavia           Norway
## 4         YUCS              BEL  1988 Former Yugoslavia          Belgium
## 5         YUCS              CHE  1988 Former Yugoslavia      Switzerland
## 6         YUCS              NOR  1988 Former Yugoslavia           Norway
## 7         YUCS              SWE  1988 Former Yugoslavia           Sweden
## 8         YUCS              BEL  1989 Former Yugoslavia          Belgium
## 9         YUCS              DEU  1989 Former Yugoslavia          Germany
## 10        YUCS              CHE  1989 Former Yugoslavia      Switzerland
## # ... with 308 more rows, and 10 more variables: flow <dbl>,
## #   flow_women <dbl>, stock_cob <dbl>, stock_cob_women <dbl>,
## #   stock_nat <dbl>, stock_nat_women <dbl>, stock_cob_lag1 <dbl>,
## #   stock_cob_women_lag1 <dbl>, stock_nat_lag1 <dbl>,
## #   stock_nat_women_lag1 <dbl>

Zdá se, že tyto dva státy “SUN” a “YUCS” slouží jako sběrné kategorie. Taková pozorování jsou nám k ničemu, protože je logicky nedokážeme spojit s žádnou zemí a jejími charakteristikami. Proto je ze vzorku vyloučíme.

“Serbia and Montenegro” je tvrdší oříšek. Kód “SCG” byl validním kódem, ale po zániku státu se stal rezervovanou zkratkou. Moje zkušenost říká, že pod zkratkami typu “YUG”, “SRB” nebo “SCG” se často skrývají stejné státy. Dost nenápadná noticka v http://www.oecd.org/els/mig/international-migration-outlook-2016-statistical-annex.pdf ukazuje, že to tak +/- bude i tentokrát. Mělo by tedy postačit nechat pozorování pro “SRB”.

data %<>% filter(!(origin_code %in% c("SUN","YUCS","SCG")))

Nyní máme mezi codes jen validní iso3c kódy. Ostatní databáze však mohou používat jiná kódování. Obůlíbený trik je doplinit si ostatní kódy do tabulky tak, aby bylo následné spojování tabulek jednodušší. K tabulce data tedy připojíme další kódy pro origin i destination:

data %<>% 
    select(-origin_name,-destination_name) %>%
    rename(
        origin_iso3c = origin_code,
        destination_iso3c = destination_code
        )

countrycode::countrycode_data %>% 
    select(
        name = country.name,
        iso3c, iso3n, iso2c, un, wb
    ) -> codes

codes %>% 
    set_names(
        str_c("origin",names(.),sep="_")
    ) %>% left_join(data,.) -> data
## Joining, by = "origin_iso3c"
codes %>% 
    set_names(
        str_c("destination",names(.),sep="_")
    ) %>% left_join(data,.) -> data
## Joining, by = "destination_iso3c"

A nakonec přidáme trochu štábní kultury (seřadíme sloupce):

data %<>% 
    select(
        starts_with("origin"),
        starts_with("destination"),
        everything()
        )

print(data)
## # A tibble: 255,780 × 23
##    origin_iso3c origin_name origin_iso3n origin_iso2c origin_un origin_wb
##           <chr>       <chr>        <int>        <chr>     <int>     <chr>
## 1           AFG Afghanistan            4           AF         4       AFG
## 2           AFG Afghanistan            4           AF         4       AFG
## 3           AFG Afghanistan            4           AF         4       AFG
## 4           AFG Afghanistan            4           AF         4       AFG
## 5           AFG Afghanistan            4           AF         4       AFG
## 6           AFG Afghanistan            4           AF         4       AFG
## 7           AFG Afghanistan            4           AF         4       AFG
## 8           AFG Afghanistan            4           AF         4       AFG
## 9           AFG Afghanistan            4           AF         4       AFG
## 10          AFG Afghanistan            4           AF         4       AFG
## # ... with 255,770 more rows, and 17 more variables:
## #   destination_iso3c <chr>, destination_name <chr>,
## #   destination_iso3n <int>, destination_iso2c <chr>,
## #   destination_un <int>, destination_wb <chr>, year <dbl>, flow <dbl>,
## #   flow_women <dbl>, stock_cob <dbl>, stock_cob_women <dbl>,
## #   stock_nat <dbl>, stock_nat_women <dbl>, stock_cob_lag1 <dbl>,
## #   stock_cob_women_lag1 <dbl>, stock_nat_lag1 <dbl>,
## #   stock_nat_women_lag1 <dbl>

Přídávání dat z WDI

Modelová specifikace obsahuje tři proměnné, které můžeme získat z databáze WDI:

  • velikost populace
  • velikost GDP per capita
  • míru nezaměstanosti
WDIsearch("unemployment")
##       indicator          
##  [1,] "SL.UEM.1524.FE.ZS"
##  [2,] "SL.UEM.1524.MA.ZS"
##  [3,] "SL.UEM.1524.ZS"   
##  [4,] "SL.UEM.LTRM.FE.ZS"
##  [5,] "SL.UEM.LTRM.MA.ZS"
##  [6,] "SL.UEM.LTRM.ZS"   
##  [7,] "SL.UEM.PRIM.FE.ZS"
##  [8,] "SL.UEM.PRIM.MA.ZS"
##  [9,] "SL.UEM.PRIM.ZS"   
## [10,] "SL.UEM.SECO.FE.ZS"
## [11,] "SL.UEM.SECO.MA.ZS"
## [12,] "SL.UEM.SECO.ZS"   
## [13,] "SL.UEM.TERT.FE.ZS"
## [14,] "SL.UEM.TERT.MA.ZS"
## [15,] "SL.UEM.TERT.ZS"   
## [16,] "SL.UEM.TOTL.FE.ZS"
## [17,] "SL.UEM.TOTL.MA.ZS"
## [18,] "SL.UEM.TOTL.ZS"   
##       name                                                                      
##  [1,] "Unemployment, youth female (% of female labor force ages 15-24)"         
##  [2,] "Unemployment, youth male (% of male labor force ages 15-24)"             
##  [3,] "Unemployment, youth total (% of total labor force ages 15-24)"           
##  [4,] "Long-term unemployment, female (% of female unemployment)"               
##  [5,] "Long-term unemployment, male (% of male unemployment)"                   
##  [6,] "Long-term unemployment (% of total unemployment)"                        
##  [7,] "Unemployment with primary education, female (% of female unemployment)"  
##  [8,] "Unemployment with primary education, male (% of male unemployment)"      
##  [9,] "Unemployment with primary education (% of total unemployment)"           
## [10,] "Unemployment with secondary education, female (% of female unemployment)"
## [11,] "Unemployment with secondary education, male (% of male unemployment)"    
## [12,] "Unemployment with secondary education (% of total unemployment)"         
## [13,] "Unemployment with tertiary education, female (% of female unemployment)" 
## [14,] "Unemployment with tertiary education, male (% of male unemployment)"     
## [15,] "Unemployment with tertiary education (% of total unemployment)"          
## [16,] "Unemployment, female (% of female labor force)"                          
## [17,] "Unemployment, male (% of male labor force)"                              
## [18,] "Unemployment, total (% of total labor force)"

Zajímat nás bude celková nezaměstnanost pro jednotlivá pohlaví – tedy “SL.UEM.TOTL.FE.ZS”, “SL.UEM.TOTL.MA.ZS”, “SL.UEM.TOTL.ZS”. Googlením kódu rychle zjistíme, že se ve skutečnosti jedná o odhady ILO. Sice to není skutečně měření, ale alespoň budeme mít nejkompletnější dostupné pokrytí.

WDIsearch("population, total")
##           indicator                name 
##       "SP.POP.TOTL" "Population, total"

Opět se vyplatí vyggoglit si indikátor “SP.POP.TOTL” a podívávat se na jeho popis. Údaje jsou v tisících.

WDIsearch("gdp per capita")
##       indicator             
##  [1,] "GDPPCKD"             
##  [2,] "GDPPCKN"             
##  [3,] "NV.AGR.PCAP.KD.ZG"   
##  [4,] "NY.GDP.PCAP.CD"      
##  [5,] "NY.GDP.PCAP.KD"      
##  [6,] "NY.GDP.PCAP.KD.ZG"   
##  [7,] "NY.GDP.PCAP.KN"      
##  [8,] "NY.GDP.PCAP.PP.CD"   
##  [9,] "NY.GDP.PCAP.PP.KD"   
## [10,] "NY.GDP.PCAP.PP.KD.ZG"
## [11,] "SE.XPD.PRIM.PC.ZS"   
## [12,] "SE.XPD.SECO.PC.ZS"   
## [13,] "SE.XPD.TERT.PC.ZS"   
##       name                                                                 
##  [1,] "GDP per Capita, constant US$, millions"                             
##  [2,] "Real GDP per Capita (real local currency units, various base years)"
##  [3,] "Real agricultural GDP per capita growth rate (%)"                   
##  [4,] "GDP per capita (current US$)"                                       
##  [5,] "GDP per capita (constant 2000 US$)"                                 
##  [6,] "GDP per capita growth (annual %)"                                   
##  [7,] "GDP per capita (constant LCU)"                                      
##  [8,] "GDP per capita, PPP (current international $)"                      
##  [9,] "GDP per capita, PPP (constant 2005 international $)"                
## [10,] "GDP per capita, PPP annual growth (%)"                              
## [11,] "Expenditure per student, primary (% of GDP per capita)"             
## [12,] "Expenditure per student, secondary (% of GDP per capita)"           
## [13,] "Expenditure per student, tertiary (% of GDP per capita)"

Chceme srovnávat v čase a napříč státy – ergo “NY.GDP.PCAP.PP.KD” je naše volba.

Nyní si můžeme data stáhnout:

WDI(indicator = c("SL.UEM.TOTL.FE.ZS",
                  "SL.UEM.TOTL.MA.ZS",
                  "SL.UEM.TOTL.ZS",
                  "SP.POP.TOTL",
                  "NY.GDP.PCAP.PP.KD"),
    extra = TRUE,
    start = 1975,
    end = 2015
    ) %>% as_tibble() -> wdi_data

save(wdi_data, file="data/wdi_data.Rdata")

print(wdi_data)
## # A tibble: 10,824 × 15
##    iso2c country  year SL.UEM.TOTL.FE.ZS SL.UEM.TOTL.MA.ZS SL.UEM.TOTL.ZS
##    <chr>   <chr> <dbl>             <dbl>             <dbl>          <dbl>
## 1     AD Andorra  2004                NA                NA             NA
## 2     AD Andorra  1992                NA                NA             NA
## 3     AD Andorra  1981                NA                NA             NA
## 4     AD Andorra  2007                NA                NA             NA
## 5     AD Andorra  1982                NA                NA             NA
## 6     AD Andorra  1980                NA                NA             NA
## 7     AD Andorra  1994                NA                NA             NA
## 8     AD Andorra  1979                NA                NA             NA
## 9     AD Andorra  1985                NA                NA             NA
## 10    AD Andorra  2005                NA                NA             NA
## # ... with 10,814 more rows, and 9 more variables: SP.POP.TOTL <dbl>,
## #   NY.GDP.PCAP.PP.KD <dbl>, iso3c <fctr>, region <fctr>, capital <fctr>,
## #   longitude <fctr>, latitude <fctr>, income <fctr>, lending <fctr>

API WDI mívá docela dlouhé výpadky. Proto je moudré si data uložit. Stahování aktuálních dat je pěkná věc, ale lehko se může stát, že ojde k jejich revizi a my pak už nikdy neodhalíme, proč se – dejme tomu – změnil regresní koeficient.

Data si transformujeme:

  • odstraníme kryptické názvy proměnných
  • vybereme jen relevantní sloupce
  • převedem velikost populace na jednotky
wdi_data %<>% 
    select(
        iso3c,
        year,
        country,
        unemployment_women = SL.UEM.TOTL.ZS,
        unemployment_men = SL.UEM.TOTL.MA.ZS,
        unemployment = SL.UEM.TOTL.FE.ZS,
        population = SP.POP.TOTL,
        GDPpc = NY.GDP.PCAP.PP.KD
    ) %>% 
    mutate(
        iso3c = as.character(iso3c),
        population = population*1000
    )

print(wdi_data)
## # A tibble: 10,824 × 8
##    iso3c  year country unemployment_women unemployment_men unemployment
##    <chr> <dbl>   <chr>              <dbl>            <dbl>        <dbl>
## 1    AND  2004 Andorra                 NA               NA           NA
## 2    AND  1992 Andorra                 NA               NA           NA
## 3    AND  1981 Andorra                 NA               NA           NA
## 4    AND  2007 Andorra                 NA               NA           NA
## 5    AND  1982 Andorra                 NA               NA           NA
## 6    AND  1980 Andorra                 NA               NA           NA
## 7    AND  1994 Andorra                 NA               NA           NA
## 8    AND  1979 Andorra                 NA               NA           NA
## 9    AND  1985 Andorra                 NA               NA           NA
## 10   AND  2005 Andorra                 NA               NA           NA
## # ... with 10,814 more rows, and 2 more variables: population <dbl>,
## #   GDPpc <dbl>

V dalším kroku vytvoříme přidáme lagované proměnné:

wdi_data %<>% 
    complete(iso3c,year) %>% 
    group_by(iso3c) %>% 
    arrange(year) %>% 
    mutate(
        unemployment_lag1 = lag(unemployment),
        unemployment_women_lag1 = lag(unemployment_women),
        unemployment_men_lag1 = lag(unemployment_men),
        GDPpc_lag1 = lag(GDPpc),
        population_lag1 = lag(population)
    ) %>% ungroup()
    
print(wdi_data)
## # A tibble: 9,471 × 13
##    iso3c  year              country unemployment_women unemployment_men
##    <chr> <dbl>                <chr>              <dbl>            <dbl>
## 1    ABW  1975                Aruba                 NA               NA
## 2    AFG  1975          Afghanistan                 NA               NA
## 3    AGO  1975               Angola                 NA               NA
## 4    ALB  1975              Albania                 NA               NA
## 5    AND  1975              Andorra                 NA               NA
## 6    ARB  1975           Arab World                 NA               NA
## 7    ARE  1975 United Arab Emirates                 NA               NA
## 8    ARG  1975            Argentina                 NA               NA
## 9    ARM  1975              Armenia                 NA               NA
## 10   ASM  1975       American Samoa                 NA               NA
## # ... with 9,461 more rows, and 8 more variables: unemployment <dbl>,
## #   population <dbl>, GDPpc <dbl>, unemployment_lag1 <dbl>,
## #   unemployment_women_lag1 <dbl>, unemployment_men_lag1 <dbl>,
## #   GDPpc_lag1 <dbl>, population_lag1 <dbl>

Teď chceme přidat proměnné z wdi do tabulky s migračními daty. Musíme si ale ověřit, jestli je všechno v pořádku:

wdi_data %>% distinct(iso3c,year) %>% nrow
## [1] 9471
nrow(wdi_data)
## [1] 9471

Nyní se podíváme, zde je možné tabulky bezpečně spojit. Balík WDI se tváří, že vrací iso3c kódy, ale jak říkali mudrci od Východu: důvěřuj, ale prověřuj.

codes <- wdi_data$iso3c %>% unique

codes %in% data$origin_iso3c -> loc

all(loc)
## [1] FALSE

Přes naše nebe přešel mráček. Podíváme se, který kód je problematický:

codes[!loc]
##  [1] "ABW" "ARB" "ASM" "CSS" "CUW" "CYM" "EMU" "EUU" "GIB" "GRL" "HIC"
## [12] "HPC" "CHI" "IMN" "INX" "LDC" "LIC" "LMC" "LMY" "MAF" "MIC" "MNP"
## [23] "NAC" "NCL" "OED" "OSS" "PSS" "PYF" "SAS" "SSD" "SST" "SXM" "TCA"
## [34] "UMC" "VIR" "WLD"

Tak naštěstí se nic neděje. Kódy, které nejsou v migrační databázi jsou některé agregáty (se smyšleným kódem) a mikrozemě. Můžeme tedy bez obav slučovat.

Joinování budeme muset udělat dvakrát – jednou musíme sloučit podle origin a podruhé podle destination. Nejprve ovšem vyhodíme promněnnou country, kterou už dále nepotřebujeme:

wdi_data %<>% select(-country) %>% select(year,everything())

nrow(data)
## [1] 255780
wdi_data %>% 
    set_names(
        c("year",
          str_c("origin_",names(.)[-1])
          )
        ) %>% 
    left_join(data,.,
              by=c("origin_iso3c","year")
              ) -> data

nrow(data)
## [1] 255780
wdi_data %>% 
    set_names(
        c("year",
          str_c("destination_",names(.)[-1])
          )
        ) %>% 
    left_join(data,.,
              by=c("destination_iso3c","year")
              ) -> data

nrow(data)
## [1] 255780

Kontrolní počty řádků po slučování sedí. Ještě zkontrolujeme, zda jsou všechny řádky unikátní.

nrow(distinct(data,origin_iso3c,destination_iso3c,year)) == nrow(data)
## [1] TRUE

Ufff… :-)

Přidávání dat z databáze GeoDist

GeoDist je široce používaná databáze gravitačních proměnných. Je dostupná jako excelovský soubor (nebo dta). Viz: http://www.cepii.fr/CEPII/en/publications/wp/abstract.asp?NoDoc=3877

read_excel("data/dist_cepii.xls") -> geodist

print(geodist)
## # A tibble: 50,176 × 14
##    iso_o iso_d contig comlang_off comlang_ethno colony comcol curcol col45
##    <chr> <chr>  <dbl>       <dbl>         <dbl>  <dbl>  <dbl>  <dbl> <dbl>
## 1    ABW   ABW      0           0             0      0      0      0     0
## 2    ABW   AFG      0           0             0      0      0      0     0
## 3    ABW   AGO      0           0             0      0      0      0     0
## 4    ABW   AIA      0           0             1      0      0      0     0
## 5    ABW   ALB      0           0             0      0      0      0     0
## 6    ABW   AND      0           1             0      0      0      0     0
## 7    ABW   ANT      0           1             1      0      1      0     0
## 8    ABW   ARE      0           0             0      0      0      0     0
## 9    ABW   ARG      0           1             0      0      0      0     0
## 10   ABW   ARM      0           0             0      0      0      0     0
## # ... with 50,166 more rows, and 5 more variables: smctry <dbl>,
## #   dist <dbl>, distcap <dbl>, distw <chr>, distwces <chr>

Hodnoty vGeodist se nemění s časem. Vybereme si jen relevantní sloupce:

  • identifikátory zemí
  • dummy pro společnou hranici
  • dummy pro společný jazyk
  • dummy pro společnou koloniální minulost
  • dummy pro společnou hranici
  • vzdálenost hlavních měst
geodist %<>% 
    select(
        origin_iso3c = iso_o,
        destination_iso3c = iso_d,
        border = contig,
        language = comlang_ethno,
        colony,
        distance = distcap
    )

print(geodist)
## # A tibble: 50,176 × 6
##    origin_iso3c destination_iso3c border language colony     distance
##           <chr>             <chr>  <dbl>    <dbl>  <dbl>        <dbl>
## 1           ABW               ABW      0        0      0     5.225315
## 2           ABW               AFG      0        0      0 13257.810000
## 3           ABW               AGO      0        0      0  9516.913000
## 4           ABW               AIA      0        1      0   983.268200
## 5           ABW               ALB      0        0      0  9091.742000
## 6           ABW               AND      0        0      0  7572.788000
## 7           ABW               ANT      0        1      0   136.384800
## 8           ABW               ARE      0        0      0 12735.010000
## 9           ABW               ARG      0        0      0  5396.220000
## 10          ABW               ARM      0        0      0 11107.780000
## # ... with 50,166 more rows

Podívejme se, zda jsou skutečně všechny řádky unikátní.

nrow(distinct(geodist,origin_iso3c,destination_iso3c)) == nrow(geodist)
## [1] TRUE

Jsou kódy kompatibilní?

codes <- geodist$origin_iso3c %>% unique

codes %in% data$origin_iso3c -> loc

all(loc)
## [1] FALSE
codes[!loc]
##  [1] "ABW" "AIA" "ANT" "CCK" "CXR" "CYM" "ESH" "FLK" "FRO" "GIB" "GLP"
## [12] "GRL" "GUF" "MNP" "MSR" "MTQ" "NCL" "NFK" "PAL" "PCN" "PYF" "REU"
## [23] "ROM" "SHN" "SPM" "TCA" "TMP" "VGB" "WLF" "YUG" "ZAR"

Tak jistě. Je patrných několik záměn:

  • “ROU” -> “ROM”
  • “COD” -> “ZAR”
  • “YUG” -> “SRB”

Ostatní země jsou pidizemě nebo závislá území.

Záměny musíme ručně opravit:

geodist$origin_iso3c[geodist$origin_iso3c=="ROM"] <- "ROU"
geodist$origin_iso3c[geodist$origin_iso3c=="ZAR"] <- "COD"
geodist$origin_iso3c[geodist$origin_iso3c=="YUG"] <- "SRB"

geodist$destination_iso3c[geodist$destination_iso3c=="ROM"] <- "ROU"
geodist$destination_iso3c[geodist$destination_iso3c=="ZAR"] <- "COD"
geodist$destination_iso3c[geodist$destination_iso3c=="YUG"] <- "SRB"

Nyní může provést spojení:

nrow(data)
## [1] 255780
data %<>% left_join(.,geodist)
## Joining, by = c("origin_iso3c", "destination_iso3c")
nrow(data)
## [1] 255780

Ufff… :-)

Databáze GeoDist podruhé

Databáze GeoDist obsahuje i soubor, ve kterém jsou charakteristiky jednotlivých zemí (ne bilaterálních vztahů). I ty můžeme chtít zohlednit v regersní analýze.

read_excel("data/geo_cepii.xls") -> geodist2

print(geodist2)
## # A tibble: 238 × 34
##     iso2  iso3  cnum              country                   pays    area
##    <chr> <chr> <dbl>                <chr>                  <chr>   <dbl>
## 1     AW   ABW   533                Aruba                  Aruba     193
## 2     AF   AFG     4          Afghanistan            Afghanistan  652225
## 3     AO   AGO    24               Angola                 Angola 1246700
## 4     AI   AIA   660             Anguilla               Anguilla     102
## 5     AL   ALB     8              Albania                Albanie   28748
## 6     AD   AND    20              Andorra                Andorre     453
## 7     AN   ANT   530  Netherland Antilles Antilles néerlandaises     960
## 8     AE   ARE   784 United Arab Emirates    Emirats arabes unis   83657
## 9     AR   ARG    32            Argentina              Argentine 2766889
## 10    AM   ARM    51              Armenia                Arménie   29800
## # ... with 228 more rows, and 28 more variables: dis_int <dbl>,
## #   landlocked <dbl>, continent <chr>, city_en <chr>, city_fr <chr>,
## #   lat <dbl>, lon <dbl>, cap <dbl>, maincity <dbl>, citynum <chr>,
## #   langoff_1 <chr>, langoff_2 <chr>, langoff_3 <chr>, lang20_1 <chr>,
## #   lang20_2 <chr>, lang20_3 <chr>, lang20_4 <chr>, lang9_1 <chr>,
## #   lang9_2 <chr>, lang9_3 <chr>, lang9_4 <chr>, colonizer1 <chr>,
## #   colonizer2 <chr>, colonizer3 <chr>, colonizer4 <chr>,
## #   short_colonizer1 <chr>, short_colonizer2 <chr>, short_colonizer3 <chr>

Do tabulky budeme chtít přidat infromaci o tom, zda je země “landlocked”.

geodist2 %<>% 
    select(iso3,landlocked)

Odstraníme problémy kódování detekované u souboru s bilaterálními charakteristikami:

geodist2$iso3[geodist2$iso3=="ROM"] <- "ROU"
geodist2$iso3[geodist2$iso3=="ZAR"] <- "COD"
geodist2$iso3[geodist2$iso3=="YUG"] <- "SRB"

Provedeme kontrolu před joinováním:

nrow(distinct(geodist2,iso3)) == nrow(geodist2)
## [1] FALSE

Některé pozorování jsou v databázi dvakrát. To by se nemělo stát! Vypíšeme duplicitní řádky:

geodist2 %>% 
    group_by(iso3) %>% 
    filter(n()>1)
## Source: local data frame [26 x 2]
## Groups: iso3 [13]
## 
##     iso3 landlocked
##    <chr>      <dbl>
## 1    AUS          0
## 2    AUS          0
## 3    BEN          0
## 4    BEN          0
## 5    BOL          1
## 6    BOL          1
## 7    BRA          0
## 8    BRA          0
## 9    CAN          0
## 10   CAN          0
## # ... with 16 more rows

Řádky jsou zjevně identické. Problém ve skutečnosti vznikl při změnách hlavních měst. Nicméně tato vlastnost databáze není nikde popsána a při jejím přehlédnutí by vedla k vytvoření duplicitních řádků v tabulce data.

geodist2 %>% 
    distinct() %>% 
    left_join(data,.,by=c("origin_iso3c"="iso3")) -> data

print(data)
## # A tibble: 255,780 × 48
##    origin_iso3c origin_name origin_iso3n origin_iso2c origin_un origin_wb
##           <chr>       <chr>        <int>        <chr>     <int>     <chr>
## 1           AFG Afghanistan            4           AF         4       AFG
## 2           AFG Afghanistan            4           AF         4       AFG
## 3           AFG Afghanistan            4           AF         4       AFG
## 4           AFG Afghanistan            4           AF         4       AFG
## 5           AFG Afghanistan            4           AF         4       AFG
## 6           AFG Afghanistan            4           AF         4       AFG
## 7           AFG Afghanistan            4           AF         4       AFG
## 8           AFG Afghanistan            4           AF         4       AFG
## 9           AFG Afghanistan            4           AF         4       AFG
## 10          AFG Afghanistan            4           AF         4       AFG
## # ... with 255,770 more rows, and 42 more variables:
## #   destination_iso3c <chr>, destination_name <chr>,
## #   destination_iso3n <int>, destination_iso2c <chr>,
## #   destination_un <int>, destination_wb <chr>, year <dbl>, flow <dbl>,
## #   flow_women <dbl>, stock_cob <dbl>, stock_cob_women <dbl>,
## #   stock_nat <dbl>, stock_nat_women <dbl>, stock_cob_lag1 <dbl>,
## #   stock_cob_women_lag1 <dbl>, stock_nat_lag1 <dbl>,
## #   stock_nat_women_lag1 <dbl>, origin_unemployment_women <dbl>,
## #   origin_unemployment_men <dbl>, origin_unemployment <dbl>,
## #   origin_population <dbl>, origin_GDPpc <dbl>,
## #   origin_unemployment_lag1 <dbl>, origin_unemployment_women_lag1 <dbl>,
## #   origin_unemployment_men_lag1 <dbl>, origin_GDPpc_lag1 <dbl>,
## #   origin_population_lag1 <dbl>, destination_unemployment_women <dbl>,
## #   destination_unemployment_men <dbl>, destination_unemployment <dbl>,
## #   destination_population <dbl>, destination_GDPpc <dbl>,
## #   destination_unemployment_lag1 <dbl>,
## #   destination_unemployment_women_lag1 <dbl>,
## #   destination_unemployment_men_lag1 <dbl>, destination_GDPpc_lag1 <dbl>,
## #   destination_population_lag1 <dbl>, border <dbl>, language <dbl>,
## #   colony <dbl>, distance <dbl>, landlocked <dbl>

Regrese za odměnu

library(lmtest)
library(sandwich)

model <- log((flow+1)/origin_population) ~ log(origin_GDPpc_lag1) + log(destination_GDPpc_lag1) +
    log(origin_unemployment_lag1) + log(destination_unemployment_lag1) +
    log((stock_cob_lag1+1)/origin_population_lag1) + border + colony + log(distance) + landlocked +
    factor(year) + factor(origin_iso3c) + factor(destination_iso3c)

data %>% 
    filter(year>=1990) %>% 
    lm(model, data=.) -> em
coeftest(em, .vcov=vcovHC)
## 
## t test of coefficients:
## 
##                                                    Estimate Std. Error
## (Intercept)                                      -8.5772498  2.1134821
## log(origin_GDPpc_lag1)                           -0.2424323  0.0464004
## log(destination_GDPpc_lag1)                       0.6157353  0.1987216
## log(origin_unemployment_lag1)                     0.1359757  0.0251841
## log(destination_unemployment_lag1)               -0.2147646  0.0315202
## log((stock_cob_lag1 + 1)/origin_population_lag1)  0.6445832  0.0044068
## border                                           -0.5585957  0.0414620
## colony                                            0.7636272  0.0341694
## log(distance)                                    -0.4453235  0.0123214
## landlocked                                        0.2931011  0.1462185
## factor(year)1993                                 -0.3342796  0.2275887
## factor(year)1994                                 -0.5393787  0.1843811
## factor(year)1995                                 -0.6669978  0.1753213
## factor(year)1996                                 -0.6798703  0.1604445
## factor(year)1997                                 -0.7151359  0.1570648
## factor(year)1998                                 -0.9569848  0.1552150
## factor(year)1999                                 -0.9413351  0.1560237
## factor(year)2000                                 -0.8232969  0.1561835
## factor(year)2001                                 -0.8189538  0.1573527
## factor(year)2002                                 -0.8266160  0.1574722
## factor(year)2003                                 -0.9578942  0.1582183
## factor(year)2004                                 -0.8445801  0.1591378
## factor(year)2005                                 -0.7395314  0.1602406
## factor(year)2006                                 -0.7639107  0.1625800
## factor(year)2007                                 -0.8471008  0.1641011
## factor(year)2008                                 -0.7946804  0.1668270
## factor(year)2009                                 -0.8735568  0.1670360
## factor(year)2010                                 -0.8436002  0.1632524
## factor(year)2011                                 -0.8419067  0.1641843
## factor(year)2012                                 -0.8763122  0.1649565
## factor(year)2013                                 -0.8768350  0.1653709
## factor(year)2014                                 -0.9005298  0.1658191
## factor(origin_iso3c)AGO                          -0.5053259  0.1147888
## factor(origin_iso3c)ALB                           0.7564144  0.0999923
## factor(origin_iso3c)ARE                          -0.6772638  0.1349501
## factor(origin_iso3c)ARM                           0.4232177  0.1249015
## factor(origin_iso3c)AUS                           1.5286326  0.1131638
## factor(origin_iso3c)AUT                           0.0591689  0.1840104
## factor(origin_iso3c)AZE                           0.5204966  0.1415175
## factor(origin_iso3c)BDI                          -0.3461949  0.1200603
## factor(origin_iso3c)BEL                           0.3206955  0.1115208
## factor(origin_iso3c)BEN                          -0.0470328  0.1722194
## factor(origin_iso3c)BFA                          -0.5017027  0.1194649
## factor(origin_iso3c)BGD                           0.1067250  0.1378495
## factor(origin_iso3c)BGR                           0.9215625  0.0961014
## factor(origin_iso3c)BHR                           0.6272139  0.1230286
## factor(origin_iso3c)BHS                           0.8749737  0.1080512
## factor(origin_iso3c)BIH                           0.1105164  0.0985693
## factor(origin_iso3c)BLR                           0.6559628  0.1087713
## factor(origin_iso3c)BLZ                           1.1941792  0.1046682
## factor(origin_iso3c)BOL                           0.1766943  0.1192391
## factor(origin_iso3c)BRA                           0.5940802  0.0965694
## factor(origin_iso3c)BRB                           0.7551794  0.1042772
## factor(origin_iso3c)BRN                           1.6900361  0.1397384
## factor(origin_iso3c)BTN                           1.1888401  0.1300130
## factor(origin_iso3c)BWA                           0.1455924  0.1555195
## factor(origin_iso3c)CAF                          -0.3230504  0.1199050
## factor(origin_iso3c)CAN                           0.9769789  0.1111868
## factor(origin_iso3c)CIV                          -0.0676733  0.1362109
## factor(origin_iso3c)CMR                           0.5402127  0.1304931
## factor(origin_iso3c)COD                          -0.7479878  0.1779078
## factor(origin_iso3c)COG                           0.7571381  0.1141338
## factor(origin_iso3c)COL                           0.4769283  0.0950216
## factor(origin_iso3c)COM                           0.7976928  0.1584963
## factor(origin_iso3c)CRI                           0.5768657  0.1011582
## factor(origin_iso3c)CUB                           0.9715094  0.1085204
## factor(origin_iso3c)CYP                           0.6128917  0.1104989
## factor(origin_iso3c)CZE                           0.1687562  0.1686854
## factor(origin_iso3c)DEU                           0.2509010  0.1078148
## factor(origin_iso3c)DNK                           0.7279678  0.1156043
## factor(origin_iso3c)DOM                           0.5713352  0.0969624
## factor(origin_iso3c)DZA                          -0.3719143  0.0956567
## factor(origin_iso3c)ECU                           0.6273564  0.1019445
## factor(origin_iso3c)EGY                          -0.2335025  0.0960837
## factor(origin_iso3c)ERI                           0.8533617  0.1516265
## factor(origin_iso3c)ESP                           0.3527558  0.1036557
## factor(origin_iso3c)EST                           1.0542042  0.1055398
## factor(origin_iso3c)ETH                          -0.6186260  0.1039548
## factor(origin_iso3c)FIN                           0.8229386  0.1092171
## factor(origin_iso3c)FJI                           1.2172028  0.1055691
## factor(origin_iso3c)FRA                           0.6717186  0.1052841
## factor(origin_iso3c)GAB                           0.9366992  0.1070354
## factor(origin_iso3c)GBR                           0.3616219  0.1075958
## factor(origin_iso3c)GEO                           0.8346720  0.1084856
## factor(origin_iso3c)GHA                           0.3530255  0.1290095
## factor(origin_iso3c)GIN                           0.2497379  0.1722766
## factor(origin_iso3c)GMB                           0.7340001  0.1459974
## factor(origin_iso3c)GNB                           0.1328858  0.1539884
## factor(origin_iso3c)GNQ                           1.3111743  0.1148923
## factor(origin_iso3c)GRC                           0.2651219  0.0994120
## factor(origin_iso3c)GTM                          -0.1055557  0.1169255
## factor(origin_iso3c)GUY                           0.1443162  0.1103611
## factor(origin_iso3c)HKG                           0.0975620  0.1280517
## factor(origin_iso3c)HND                           0.1796589  0.1209352
## factor(origin_iso3c)HRV                           0.2987123  0.1004377
## factor(origin_iso3c)HTI                          -0.2538482  0.1444979
## factor(origin_iso3c)HUN                           0.3181290  0.1595279
## factor(origin_iso3c)CHE                           0.0463853  0.1923546
## factor(origin_iso3c)CHL                           0.4546963  0.0983270
## factor(origin_iso3c)CHN                           0.4677390  0.1102291
## factor(origin_iso3c)IDN                          -0.3113262  0.1033782
## factor(origin_iso3c)IND                          -0.0726700  0.1213552
## factor(origin_iso3c)IRL                           1.0111935  0.1136960
## factor(origin_iso3c)IRN                           0.1656515  0.0908370
## factor(origin_iso3c)IRQ                           0.2994455  0.0912858
## factor(origin_iso3c)ISL                           2.0046874  0.1172737
## factor(origin_iso3c)ISR                           0.7790702  0.1062690
## factor(origin_iso3c)ITA                           0.2532400  0.1054678
## factor(origin_iso3c)JAM                           0.3603259  0.1009687
## factor(origin_iso3c)JOR                           0.3941492  0.0968250
## factor(origin_iso3c)JPN                           1.0785607  0.1105244
## factor(origin_iso3c)KAZ                           0.5305988  0.1563020
## factor(origin_iso3c)KEN                          -0.0240829  0.1259909
## factor(origin_iso3c)KGZ                           0.3785126  0.1156974
## factor(origin_iso3c)KHM                          -0.0221990  0.1693235
## factor(origin_iso3c)KOR                           1.0643879  0.1111762
## factor(origin_iso3c)KWT                          -0.0170069  0.1436766
## factor(origin_iso3c)LAO                          -0.4463914  0.1235039
## factor(origin_iso3c)LBN                           0.2519552  0.0959537
## factor(origin_iso3c)LBR                          -0.0077336  0.1795162
## factor(origin_iso3c)LBY                           0.3242792  0.1062951
## factor(origin_iso3c)LKA                           0.4663424  0.1023818
## factor(origin_iso3c)LSO                          -0.2171237  0.1171959
## factor(origin_iso3c)LTU                           1.2870552  0.1016306
## factor(origin_iso3c)LUX                          -0.0605023  0.2146747
## factor(origin_iso3c)LVA                           1.0592277  0.1010816
## factor(origin_iso3c)MAC                           2.0139878  0.1513247
## factor(origin_iso3c)MAR                          -0.0737761  0.1007743
## factor(origin_iso3c)MDA                           0.7396855  0.1272482
## factor(origin_iso3c)MDG                          -0.7682183  0.1560341
## factor(origin_iso3c)MDV                           1.4306370  0.1178360
## factor(origin_iso3c)MEX                           0.7016658  0.1054900
## factor(origin_iso3c)MKD                           0.2889928  0.1455740
## factor(origin_iso3c)MLI                          -0.6071011  0.1087723
## factor(origin_iso3c)MLT                           0.7695917  0.1090503
## factor(origin_iso3c)MNG                           0.9197188  0.1310646
## factor(origin_iso3c)MOZ                          -1.3617982  0.1618504
## factor(origin_iso3c)MRT                           0.1434252  0.1178195
## factor(origin_iso3c)MUS                           0.9450092  0.1044485
## factor(origin_iso3c)MWI                          -0.8824437  0.1137214
## factor(origin_iso3c)MYS                           0.8391427  0.1097178
## factor(origin_iso3c)NAM                           0.4253536  0.1054622
## factor(origin_iso3c)NER                          -0.8015222  0.1198067
## factor(origin_iso3c)NGA                           0.1500425  0.1146442
## factor(origin_iso3c)NIC                           0.0925644  0.1201410
## factor(origin_iso3c)NLD                           0.5642722  0.1160493
## factor(origin_iso3c)NOR                           1.0822858  0.1259663
## factor(origin_iso3c)NPL                           0.4809696  0.1128226
## factor(origin_iso3c)NZL                           1.7910568  0.1080576
## factor(origin_iso3c)OMN                           0.5819034  0.1206243
## factor(origin_iso3c)PAK                           0.0764385  0.1081326
## factor(origin_iso3c)PAN                           0.3648154  0.1002474
## factor(origin_iso3c)PER                           0.7051954  0.1054516
## factor(origin_iso3c)PHL                           0.5379172  0.1064885
## factor(origin_iso3c)PNG                          -0.3308886  0.1502377
## factor(origin_iso3c)POL                           0.2711091  0.0924765
## factor(origin_iso3c)PRI                           0.7704242  0.1398795
## factor(origin_iso3c)PRT                           0.7386114  0.1014734
## factor(origin_iso3c)PRY                          -0.0200076  0.1276732
## factor(origin_iso3c)QAT                           0.6284196  0.1549784
## factor(origin_iso3c)ROU                           0.9335243  0.0974024
## factor(origin_iso3c)RUS                           0.6776863  0.1008187
## factor(origin_iso3c)RWA                           0.1644728  0.1444105
## factor(origin_iso3c)SAU                          -0.4323951  0.1134880
## factor(origin_iso3c)SDN                          -0.0348853  0.1224148
## factor(origin_iso3c)SEN                           0.1884714  0.1304905
## factor(origin_iso3c)SGP                           1.5650826  0.1282607
## factor(origin_iso3c)SLB                           1.1637251  0.1568518
## factor(origin_iso3c)SLE                           0.2406835  0.1659794
## factor(origin_iso3c)SLV                           0.3326958  0.1120532
## factor(origin_iso3c)SRB                           0.6704589  0.1070332
## factor(origin_iso3c)SUR                           0.7985966  0.1054348
## factor(origin_iso3c)SVK                           0.7708384  0.1639215
## factor(origin_iso3c)SVN                           0.6654673  0.1090411
## factor(origin_iso3c)SWE                           0.9107541  0.1124954
## factor(origin_iso3c)SWZ                          -0.1065800  0.1433022
## factor(origin_iso3c)TCD                          -0.9776483  0.1196129
## factor(origin_iso3c)TGO                          -0.1286391  0.1525228
## factor(origin_iso3c)THA                           1.1649187  0.1212014
## factor(origin_iso3c)TJK                          -0.5302466  0.1176715
## factor(origin_iso3c)TKM                          -0.1633538  0.1438224
## factor(origin_iso3c)TTO                           0.7485377  0.1085801
## factor(origin_iso3c)TUN                          -0.0644030  0.0988105
## factor(origin_iso3c)TUR                           0.1576621  0.0933933
## factor(origin_iso3c)TZA                          -0.3790826  0.1454826
## factor(origin_iso3c)UGA                          -0.5327307  0.1125345
## factor(origin_iso3c)UKR                           0.6408625  0.1073719
## factor(origin_iso3c)URY                           0.2825759  0.0999658
## factor(origin_iso3c)USA                           0.9522429  0.1135965
## factor(origin_iso3c)UZB                          -0.1749611  0.1175867
## factor(origin_iso3c)VEN                           0.4417486  0.0991659
## factor(origin_iso3c)VNM                           0.0483363  0.1281976
## factor(origin_iso3c)YEM                          -0.6145083  0.1092679
## factor(origin_iso3c)ZMB                          -0.6015894  0.1143535
## factor(origin_iso3c)ZWE                          -0.3710498  0.1100581
## factor(destination_iso3c)AUT                      0.2546366  0.0360566
## factor(destination_iso3c)BEL                      0.5432175  0.0477027
## factor(destination_iso3c)CAN                      0.4761449  0.0488636
## factor(destination_iso3c)CZE                      0.0703671  0.1264708
## factor(destination_iso3c)DEU                      1.4133869  0.0498293
## factor(destination_iso3c)DNK                     -0.1601078  0.0418636
## factor(destination_iso3c)ESP                      1.1779087  0.0553113
## factor(destination_iso3c)EST                     -2.1957791  0.5682630
## factor(destination_iso3c)FIN                      0.0860254  0.0363370
## factor(destination_iso3c)FRA                     -1.0139953  0.0444051
## factor(destination_iso3c)GBR                      0.8917561  0.0672176
## factor(destination_iso3c)GRC                      0.3925995  0.3703019
## factor(destination_iso3c)HUN                      0.4951963  0.1220442
## factor(destination_iso3c)CHE                     -0.1389522  0.0728911
## factor(destination_iso3c)CHL                      1.3558575  0.1798237
## factor(destination_iso3c)IRL                     -0.4970139  0.4849014
## factor(destination_iso3c)ISL                     -0.0923521  0.0427799
## factor(destination_iso3c)ISR                     -1.8812576  0.0909768
## factor(destination_iso3c)ITA                      0.4244383  0.0495317
## factor(destination_iso3c)LUX                     -0.8425254  0.1698532
## factor(destination_iso3c)LVA                     -0.0893325  0.3890446
## factor(destination_iso3c)MEX                      0.8420458  0.2156256
## factor(destination_iso3c)NLD                     -0.1420612  0.0405720
## factor(destination_iso3c)NOR                     -0.3569163  0.0972460
## factor(destination_iso3c)NZL                      0.6215478  0.0718159
## factor(destination_iso3c)POL                      1.3727273  0.2114851
## factor(destination_iso3c)PRT                      0.5068543  0.1759509
## factor(destination_iso3c)SVK                     -0.4192329  0.1304770
## factor(destination_iso3c)SVN                     -0.1063691  0.1016527
## factor(destination_iso3c)SWE                      0.0657159  0.0329720
## factor(destination_iso3c)USA                      1.0153178  0.0541531
##                                                   t value  Pr(>|t|)    
## (Intercept)                                       -4.0583 4.954e-05 ***
## log(origin_GDPpc_lag1)                            -5.2248 1.755e-07 ***
## log(destination_GDPpc_lag1)                        3.0985 0.0019469 ** 
## log(origin_unemployment_lag1)                      5.3993 6.742e-08 ***
## log(destination_unemployment_lag1)                -6.8135 9.700e-12 ***
## log((stock_cob_lag1 + 1)/origin_population_lag1) 146.2716 < 2.2e-16 ***
## border                                           -13.4725 < 2.2e-16 ***
## colony                                            22.3483 < 2.2e-16 ***
## log(distance)                                    -36.1422 < 2.2e-16 ***
## landlocked                                         2.0045 0.0450209 *  
## factor(year)1993                                  -1.4688 0.1419005    
## factor(year)1994                                  -2.9253 0.0034433 ** 
## factor(year)1995                                  -3.8044 0.0001424 ***
## factor(year)1996                                  -4.2374 2.268e-05 ***
## factor(year)1997                                  -4.5531 5.306e-06 ***
## factor(year)1998                                  -6.1655 7.113e-10 ***
## factor(year)1999                                  -6.0333 1.625e-09 ***
## factor(year)2000                                  -5.2713 1.364e-07 ***
## factor(year)2001                                  -5.2046 1.957e-07 ***
## factor(year)2002                                  -5.2493 1.537e-07 ***
## factor(year)2003                                  -6.0543 1.427e-09 ***
## factor(year)2004                                  -5.3072 1.121e-07 ***
## factor(year)2005                                  -4.6151 3.945e-06 ***
## factor(year)2006                                  -4.6987 2.630e-06 ***
## factor(year)2007                                  -5.1621 2.458e-07 ***
## factor(year)2008                                  -4.7635 1.911e-06 ***
## factor(year)2009                                  -5.2297 1.709e-07 ***
## factor(year)2010                                  -5.1675 2.388e-07 ***
## factor(year)2011                                  -5.1278 2.949e-07 ***
## factor(year)2012                                  -5.3124 1.090e-07 ***
## factor(year)2013                                  -5.3022 1.152e-07 ***
## factor(year)2014                                  -5.4308 5.654e-08 ***
## factor(origin_iso3c)AGO                           -4.4022 1.075e-05 ***
## factor(origin_iso3c)ALB                            7.5647 3.997e-14 ***
## factor(origin_iso3c)ARE                           -5.0186 5.234e-07 ***
## factor(origin_iso3c)ARM                            3.3884 0.0007039 ***
## factor(origin_iso3c)AUS                           13.5081 < 2.2e-16 ***
## factor(origin_iso3c)AUT                            0.3216 0.7477945    
## factor(origin_iso3c)AZE                            3.6780 0.0002355 ***
## factor(origin_iso3c)BDI                           -2.8835 0.0039355 ** 
## factor(origin_iso3c)BEL                            2.8757 0.0040347 ** 
## factor(origin_iso3c)BEN                           -0.2731 0.7847796    
## factor(origin_iso3c)BFA                           -4.1996 2.682e-05 ***
## factor(origin_iso3c)BGD                            0.7742 0.4388103    
## factor(origin_iso3c)BGR                            9.5895 < 2.2e-16 ***
## factor(origin_iso3c)BHR                            5.0981 3.451e-07 ***
## factor(origin_iso3c)BHS                            8.0978 5.806e-16 ***
## factor(origin_iso3c)BIH                            1.1212 0.2622097    
## factor(origin_iso3c)BLR                            6.0307 1.652e-09 ***
## factor(origin_iso3c)BLZ                           11.4092 < 2.2e-16 ***
## factor(origin_iso3c)BOL                            1.4818 0.1383909    
## factor(origin_iso3c)BRA                            6.1518 7.755e-10 ***
## factor(origin_iso3c)BRB                            7.2420 4.525e-13 ***
## factor(origin_iso3c)BRN                           12.0943 < 2.2e-16 ***
## factor(origin_iso3c)BTN                            9.1440 < 2.2e-16 ***
## factor(origin_iso3c)BWA                            0.9362 0.3491941    
## factor(origin_iso3c)CAF                           -2.6942 0.0070593 ** 
## factor(origin_iso3c)CAN                            8.7868 < 2.2e-16 ***
## factor(origin_iso3c)CIV                           -0.4968 0.6193146    
## factor(origin_iso3c)CMR                            4.1398 3.486e-05 ***
## factor(origin_iso3c)COD                           -4.2044 2.626e-05 ***
## factor(origin_iso3c)COG                            6.6338 3.327e-11 ***
## factor(origin_iso3c)COL                            5.0192 5.219e-07 ***
## factor(origin_iso3c)COM                            5.0329 4.859e-07 ***
## factor(origin_iso3c)CRI                            5.7026 1.191e-08 ***
## factor(origin_iso3c)CUB                            8.9523 < 2.2e-16 ***
## factor(origin_iso3c)CYP                            5.5466 2.937e-08 ***
## factor(origin_iso3c)CZE                            1.0004 0.3171152    
## factor(origin_iso3c)DEU                            2.3271 0.0199640 *  
## factor(origin_iso3c)DNK                            6.2971 3.075e-10 ***
## factor(origin_iso3c)DOM                            5.8923 3.848e-09 ***
## factor(origin_iso3c)DZA                           -3.8880 0.0001013 ***
## factor(origin_iso3c)ECU                            6.1539 7.655e-10 ***
## factor(origin_iso3c)EGY                           -2.4302 0.0150963 *  
## factor(origin_iso3c)ERI                            5.6280 1.839e-08 ***
## factor(origin_iso3c)ESP                            3.4031 0.0006670 ***
## factor(origin_iso3c)EST                            9.9887 < 2.2e-16 ***
## factor(origin_iso3c)ETH                           -5.9509 2.696e-09 ***
## factor(origin_iso3c)FIN                            7.5349 5.024e-14 ***
## factor(origin_iso3c)FJI                           11.5299 < 2.2e-16 ***
## factor(origin_iso3c)FRA                            6.3801 1.796e-10 ***
## factor(origin_iso3c)GAB                            8.7513 < 2.2e-16 ***
## factor(origin_iso3c)GBR                            3.3609 0.0007778 ***
## factor(origin_iso3c)GEO                            7.6939 1.471e-14 ***
## factor(origin_iso3c)GHA                            2.7364 0.0062146 ** 
## factor(origin_iso3c)GIN                            1.4496 0.1471711    
## factor(origin_iso3c)GMB                            5.0275 4.998e-07 ***
## factor(origin_iso3c)GNB                            0.8630 0.3881664    
## factor(origin_iso3c)GNQ                           11.4122 < 2.2e-16 ***
## factor(origin_iso3c)GRC                            2.6669 0.0076595 ** 
## factor(origin_iso3c)GTM                           -0.9028 0.3666605    
## factor(origin_iso3c)GUY                            1.3077 0.1909941    
## factor(origin_iso3c)HKG                            0.7619 0.4461287    
## factor(origin_iso3c)HND                            1.4856 0.1374005    
## factor(origin_iso3c)HRV                            2.9741 0.0029408 ** 
## factor(origin_iso3c)HTI                           -1.7568 0.0789688 .  
## factor(origin_iso3c)HUN                            1.9942 0.0461402 *  
## factor(origin_iso3c)CHE                            0.2411 0.8094445    
## factor(origin_iso3c)CHL                            4.6243 3.774e-06 ***
## factor(origin_iso3c)CHN                            4.2433 2.209e-05 ***
## factor(origin_iso3c)IDN                           -3.0115 0.0026015 ** 
## factor(origin_iso3c)IND                           -0.5988 0.5492968    
## factor(origin_iso3c)IRL                            8.8938 < 2.2e-16 ***
## factor(origin_iso3c)IRN                            1.8236 0.0682206 .  
## factor(origin_iso3c)IRQ                            3.2803 0.0010381 ** 
## factor(origin_iso3c)ISL                           17.0941 < 2.2e-16 ***
## factor(origin_iso3c)ISR                            7.3311 2.340e-13 ***
## factor(origin_iso3c)ITA                            2.4011 0.0163514 *  
## factor(origin_iso3c)JAM                            3.5687 0.0003593 ***
## factor(origin_iso3c)JOR                            4.0707 4.698e-05 ***
## factor(origin_iso3c)JPN                            9.7586 < 2.2e-16 ***
## factor(origin_iso3c)KAZ                            3.3947 0.0006879 ***
## factor(origin_iso3c)KEN                           -0.1911 0.8484113    
## factor(origin_iso3c)KGZ                            3.2716 0.0010707 ** 
## factor(origin_iso3c)KHM                           -0.1311 0.8956940    
## factor(origin_iso3c)KOR                            9.5739 < 2.2e-16 ***
## factor(origin_iso3c)KWT                           -0.1184 0.9057759    
## factor(origin_iso3c)LAO                           -3.6144 0.0003015 ***
## factor(origin_iso3c)LBN                            2.6258 0.0086489 ** 
## factor(origin_iso3c)LBR                           -0.0431 0.9656380    
## factor(origin_iso3c)LBY                            3.0507 0.0022847 ** 
## factor(origin_iso3c)LKA                            4.5549 5.261e-06 ***
## factor(origin_iso3c)LSO                           -1.8527 0.0639415 .  
## factor(origin_iso3c)LTU                           12.6641 < 2.2e-16 ***
## factor(origin_iso3c)LUX                           -0.2818 0.7780740    
## factor(origin_iso3c)LVA                           10.4789 < 2.2e-16 ***
## factor(origin_iso3c)MAC                           13.3090 < 2.2e-16 ***
## factor(origin_iso3c)MAR                           -0.7321 0.4641180    
## factor(origin_iso3c)MDA                            5.8129 6.200e-09 ***
## factor(origin_iso3c)MDG                           -4.9234 8.550e-07 ***
## factor(origin_iso3c)MDV                           12.1409 < 2.2e-16 ***
## factor(origin_iso3c)MEX                            6.6515 2.951e-11 ***
## factor(origin_iso3c)MKD                            1.9852 0.0471318 *  
## factor(origin_iso3c)MLI                           -5.5814 2.406e-08 ***
## factor(origin_iso3c)MLT                            7.0572 1.735e-12 ***
## factor(origin_iso3c)MNG                            7.0173 2.310e-12 ***
## factor(origin_iso3c)MOZ                           -8.4139 < 2.2e-16 ***
## factor(origin_iso3c)MRT                            1.2173 0.2234882    
## factor(origin_iso3c)MUS                            9.0476 < 2.2e-16 ***
## factor(origin_iso3c)MWI                           -7.7597 8.781e-15 ***
## factor(origin_iso3c)MYS                            7.6482 2.099e-14 ***
## factor(origin_iso3c)NAM                            4.0332 5.515e-05 ***
## factor(origin_iso3c)NER                           -6.6901 2.269e-11 ***
## factor(origin_iso3c)NGA                            1.3088 0.1906236    
## factor(origin_iso3c)NIC                            0.7705 0.4410302    
## factor(origin_iso3c)NLD                            4.8623 1.166e-06 ***
## factor(origin_iso3c)NOR                            8.5919 < 2.2e-16 ***
## factor(origin_iso3c)NPL                            4.2631 2.023e-05 ***
## factor(origin_iso3c)NZL                           16.5750 < 2.2e-16 ***
## factor(origin_iso3c)OMN                            4.8241 1.413e-06 ***
## factor(origin_iso3c)PAK                            0.7069 0.4796367    
## factor(origin_iso3c)PAN                            3.6391 0.0002740 ***
## factor(origin_iso3c)PER                            6.6874 2.311e-11 ***
## factor(origin_iso3c)PHL                            5.0514 4.411e-07 ***
## factor(origin_iso3c)PNG                           -2.2024 0.0276421 *  
## factor(origin_iso3c)POL                            2.9317 0.0033741 ** 
## factor(origin_iso3c)PRI                            5.5078 3.664e-08 ***
## factor(origin_iso3c)PRT                            7.2789 3.448e-13 ***
## factor(origin_iso3c)PRY                           -0.1567 0.8754750    
## factor(origin_iso3c)QAT                            4.0549 5.028e-05 ***
## factor(origin_iso3c)ROU                            9.5842 < 2.2e-16 ***
## factor(origin_iso3c)RUS                            6.7218 1.826e-11 ***
## factor(origin_iso3c)RWA                            1.1389 0.2547432    
## factor(origin_iso3c)SAU                           -3.8101 0.0001392 ***
## factor(origin_iso3c)SDN                           -0.2850 0.7756643    
## factor(origin_iso3c)SEN                            1.4443 0.1486564    
## factor(origin_iso3c)SGP                           12.2024 < 2.2e-16 ***
## factor(origin_iso3c)SLB                            7.4193 1.209e-13 ***
## factor(origin_iso3c)SLE                            1.4501 0.1470465    
## factor(origin_iso3c)SLV                            2.9691 0.0029892 ** 
## factor(origin_iso3c)SRB                            6.2640 3.802e-10 ***
## factor(origin_iso3c)SUR                            7.5743 3.713e-14 ***
## factor(origin_iso3c)SVK                            4.7025 2.581e-06 ***
## factor(origin_iso3c)SVN                            6.1029 1.054e-09 ***
## factor(origin_iso3c)SWE                            8.0959 5.895e-16 ***
## factor(origin_iso3c)SWZ                           -0.7437 0.4570375    
## factor(origin_iso3c)TCD                           -8.1734 3.113e-16 ***
## factor(origin_iso3c)TGO                           -0.8434 0.3990063    
## factor(origin_iso3c)THA                            9.6114 < 2.2e-16 ***
## factor(origin_iso3c)TJK                           -4.5062 6.626e-06 ***
## factor(origin_iso3c)TKM                           -1.1358 0.2560485    
## factor(origin_iso3c)TTO                            6.8939 5.536e-12 ***
## factor(origin_iso3c)TUN                           -0.6518 0.5145464    
## factor(origin_iso3c)TUR                            1.6882 0.0913925 .  
## factor(origin_iso3c)TZA                           -2.6057 0.0091734 ** 
## factor(origin_iso3c)UGA                           -4.7339 2.212e-06 ***
## factor(origin_iso3c)UKR                            5.9686 2.419e-09 ***
## factor(origin_iso3c)URY                            2.8267 0.0047058 ** 
## factor(origin_iso3c)USA                            8.3827 < 2.2e-16 ***
## factor(origin_iso3c)UZB                           -1.4879 0.1367792    
## factor(origin_iso3c)VEN                            4.4546 8.434e-06 ***
## factor(origin_iso3c)VNM                            0.3770 0.7061425    
## factor(origin_iso3c)YEM                           -5.6239 1.884e-08 ***
## factor(origin_iso3c)ZMB                           -5.2608 1.444e-07 ***
## factor(origin_iso3c)ZWE                           -3.3714 0.0007488 ***
## factor(destination_iso3c)AUT                       7.0621 1.675e-12 ***
## factor(destination_iso3c)BEL                      11.3876 < 2.2e-16 ***
## factor(destination_iso3c)CAN                       9.7444 < 2.2e-16 ***
## factor(destination_iso3c)CZE                       0.5564 0.5779483    
## factor(destination_iso3c)DEU                      28.3646 < 2.2e-16 ***
## factor(destination_iso3c)DNK                      -3.8245 0.0001313 ***
## factor(destination_iso3c)ESP                      21.2960 < 2.2e-16 ***
## factor(destination_iso3c)EST                      -3.8640 0.0001118 ***
## factor(destination_iso3c)FIN                       2.3674 0.0179183 *  
## factor(destination_iso3c)FRA                     -22.8351 < 2.2e-16 ***
## factor(destination_iso3c)GBR                      13.2667 < 2.2e-16 ***
## factor(destination_iso3c)GRC                       1.0602 0.2890554    
## factor(destination_iso3c)HUN                       4.0575 4.972e-05 ***
## factor(destination_iso3c)CHE                      -1.9063 0.0566210 .  
## factor(destination_iso3c)CHL                       7.5399 4.834e-14 ***
## factor(destination_iso3c)IRL                      -1.0250 0.3053811    
## factor(destination_iso3c)ISL                      -2.1588 0.0308756 *  
## factor(destination_iso3c)ISR                     -20.6784 < 2.2e-16 ***
## factor(destination_iso3c)ITA                       8.5690 < 2.2e-16 ***
## factor(destination_iso3c)LUX                      -4.9603 7.076e-07 ***
## factor(destination_iso3c)LVA                      -0.2296 0.8183884    
## factor(destination_iso3c)MEX                       3.9051 9.438e-05 ***
## factor(destination_iso3c)NLD                      -3.5015 0.0004634 ***
## factor(destination_iso3c)NOR                      -3.6702 0.0002427 ***
## factor(destination_iso3c)NZL                       8.6547 < 2.2e-16 ***
## factor(destination_iso3c)POL                       6.4909 8.665e-11 ***
## factor(destination_iso3c)PRT                       2.8807 0.0039713 ** 
## factor(destination_iso3c)SVK                      -3.2131 0.0013146 ** 
## factor(destination_iso3c)SVN                      -1.0464 0.2953860    
## factor(destination_iso3c)SWE                       1.9931 0.0462617 *  
## factor(destination_iso3c)USA                      18.7490 < 2.2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1