raw_data = list()

raw_data$HousePrice = import.bis.property.price.data(
  countries_vec = countries_list$oecd_countries) %>%
  mutate(Date = as.yearqtr(Date, format = "%Y-Q%q"))

raw_data$TotalCredit = import.bis.tot.credit.data(
  countries_vec = countries_list$oecd_countries) %>%
  mutate(Date = as.yearqtr(Date, format = "%Y-Q%q"))

raw_data$WDI_annual = import_wdi_df(
  countries_vec = countries_list$oecd_countries) %>%
  mutate(GDP = GDP * 10 ^ (-6)) # Convert to millions USD


raw_data$bis_lbs = import.bis.lbs.data(
  countries_vec = countries_list$oecd_countries) %>%
  mutate(Date = as.yearqtr(Date, format = "%Y-Q%q"))


raw_data$codes = read.csv(paste0("C:\\Users\\Misha\\Documents",
                                 "\\Data\\ISO\\",
                                 "iso_2digit_alpha_country",
                                 "_codes.csv")) %>%
  setNames(c("Code","Country"))
eu_df = read.csv(paste0("C:\\Users\\Misha\\Documents\\",
                        "Data\\Misc\\EU_membership.csv"),
                 stringsAsFactors = FALSE) %>%
  setNames(c("Country","Euro_area","EU")) %>%
  mutate(Country = gsub("\\s","_",Country)) %>%
  mutate(Country = sub("The_Netherlands","Netherlands",
                       Country,fixed = TRUE)) %>%
  mutate(Country = sub("Slovakia","Slovak_Republic", Country,fixed = TRUE))


eu_dates_vec = seq.Date(
  from = as.Date(min(raw_data$bis_lbs$Date)),
  to = as.Date(max(raw_data$bis_lbs$Date)),
  by = "year") %>%
  format(.,"%Y")

raw_data$EU_both = construct_countrypair_EU_index(
  eu_df = eu_df %>%
    select(Country, EU) %>%
    rename(Date = EU),
  dates_vec = eu_dates_vec,
  countries = countries_list$oecd_countries) %>%
  rename(EU_both = Status) %>%
  mutate(Date = as.character(Date))

raw_data$EU_one = construct_countrypair_EU_index(
  eu_df = eu_df %>%
    select(Country, EU) %>%
    rename(Date = EU),
  dates_vec = eu_dates_vec,
  countries = countries_list$oecd_countries,
  index_status = "one") %>%
  rename(EU_one = Status) %>%
  mutate(Date = as.character(Date))


raw_data$Euro_both = construct_countrypair_EU_index(
  eu_df = eu_df %>%
    select(Country, Euro_area) %>%
    rename(Date = Euro_area) %>%
    filter(!Date == "Not a member"),
  dates_vec = eu_dates_vec,
  countries = countries_list$oecd_countries) %>%
  rename(Euro_both = Status) %>%
  mutate(Date = as.character(Date))

raw_data$Euro_one = construct_countrypair_EU_index(
  eu_df = eu_df %>%
    select(Country, Euro_area) %>%
    rename(Date = Euro_area),
  dates_vec = eu_dates_vec,
  countries = countries_list$oecd_countries,
  index_status = "one") %>%
  rename(Euro_one = Status) %>%
  mutate(Date = as.character(Date))

rm(eu_df, eu_dates_vec)
raw_data$geodist = import.geodist.data() %>%
  filter(Country %in% countries_list$oecd_countries) %>%
  filter(Counter_Country %in% countries_list$oecd_countries) %>%
  mutate(CountryPair = ifelse(Country < Counter_Country,
                              paste(Country, Counter_Country, sep = "-"),
                              paste(Counter_Country,Country, sep = "-"))) %>%
  select(-Country, -Counter_Country) %>%
  distinct()
raw_data$crises_df =  import.crises.dates.df(countries_vec = countries_list$oecd_countries)
df_list = list(raw_data$TotalCredit %>%
                 filter(quarters(Date) == "Q4") %>%
                 mutate(Date = format(Date, "%Y")) %>%
                 deflate.data(.,vars_to_deflate = "Total_Credit") %>%
                 select(-Total_Credit),
               raw_data$HousePrice %>%
                 filter(quarters(Date) == "Q4") %>%
                 mutate(Date = format(Date, "%Y")),
               raw_data$WDI_annual %>%
                 rename(Date = Year) %>%
                 select(-GDP_per_Capita) %>%
                 deflate.data(.,vars_to_deflate = c("GDP"),
                              cpi = raw_data$CPI) %>%
                 select(-GDP))


country_df = df_list %>%
  reduce(right_join, by = c("Date", "Country")) %>%
  group_by(Country) %>%
  arrange(Date) %>%
  # filter(!is.na(Total_Credit_real)) %>%
  # filter(!is.na(HousePrice)) %>%
  mutate_at(.vars = c("Total_Credit_real","HousePrice"),
            .funs = list(ret = ~ . / dplyr::lag(., order_by = Date) - 1)) %>%
  # mutate_at(.vars = vars("Total_Credit_real","HousePrice"),
  #           .funs = list(cycle = ~cffilter(., pl = 2 * 4,
  #                                          pu = 8* 4 )[["cycle"]] / .)) %>%
  mutate(Fin_ret = rowMeans(data.frame(Total_Credit_real_ret,
                                       HousePrice_ret),na.rm = TRUE)) %>%
  # mutate(Fin_cycle = rowMeans(data.frame(Total_Credit_real_cycle,
  #                                     HousePrice_cycle),na.rm = TRUE)) %>%
  ungroup() %>%
  filter(is.finite(Fin_ret)) %>%
  filter(Date >=1978)

rm(df_list)
country_df = left_join(country_df, import.trilemma.ind(),
                       by = c("Country","Date"))
country_df = left_join(country_df, import.fin.dev.ind(),
                       by = c("Country","Date"))
bank_list = list()

raw_data$bank_balance_real_norm = raw_data$bis_lbs %>%
  filter(quarters(Date) == "Q4") %>%
  mutate(Date = format(Date, "%Y")) %>%
  deflate.data(.,vars_to_deflate = "Balance") %>%
  select(Date, CountryPair,Balance_Pos, Balance_real) %>%
  normalize.bis.data(.,norm_df = country_df[,c("Date","Country", "GDP_real")],
                     norm_val = "GDP_real")

bank_list$bank_gdp = raw_data$bank_balance_real_norm   %>%
  group_by(Date, CountryPair) %>%
  summarise(bank_gdp = mean(log(Balance_real), na.rm = TRUE)) %>%
  filter(!is.na(bank_gdp))

# bank_pop = bank_balance_real  %>%
#   normalize.bis.data(.,norm_df = df[,c("Date","Country", "Pop")],
#                      norm_val = "Pop") %>%
#   group_by(Date, CountryPair) %>%
#   summarise(bank_pop = mean(log(Balance_real), na.rm = TRUE)) %>%
#   filter(!is.na(bank_pop))
trade_list = list()

export_df = lapply(list.files(paste0("C:\\Users\\Misha\\Documents\\Data",
                                     "\\IMF\\Export-Import\\Export"),
                              full.names = TRUE),
                   import_imf_df,
                   countries_vec = countries_list$oecd_countries) %>%
  bind_rows() %>%
  mutate(Exports = as.numeric(Exports)) %>%
  group_by(Date, CountryPair) %>%
  summarise(Exports = sum(Exports, na.rm = TRUE))


import_df = lapply(list.files(paste0("C:\\Users\\Misha\\Documents\\Data",
                                     "\\IMF\\Export-Import\\Import"),
                              full.names = TRUE),
                   import_imf_df,
                   countries_vec = countries_list$oecd_countries) %>%
  bind_rows() %>%
  mutate(Imports = as.numeric(Imports)) %>%
  group_by(Date, CountryPair) %>%
  summarise(Imports = sum(Imports, na.rm = TRUE))

trade_df = full_join(export_df,import_df, by = c("Date", "CountryPair")) %>%
  gather(.,key = Balance_Pos, value = Trade, -Date, - CountryPair) %>%
  deflate.data(.,vars_to_deflate = "Trade") %>%
  select(-Trade)


trade_list$trade_gdp = trade_df %>%
  ungroup() %>%
  normalize.imf.data(.,wdi_df = country_df[,c("Date","Country", "GDP_real")],
                     norm_val = "GDP_real") %>%
  group_by(Date, CountryPair) %>%
  summarise(trade_gdp = mean(log(Trade_real), na.rm = TRUE)) %>%
  filter(!is.na(trade_gdp)) %>%
  filter(is.finite(trade_gdp))

rm(export_df, import_df, trade_df)
ind_list = list()

# ind_list$Harmon_both = raw_data$Harmon_both_quarter %>%
#                        mutate(Date = format(Date, "%Y")) %>%
#                        group_by(CountryPair, Date, Directive) %>%
#                        summarise(Transposed = max(Transposed)) %>%
#                        group_by(Date,CountryPair) %>%
#                        summarise(Harmon_both_Index = log(
#                          sum(Transposed + 1,na.rm = TRUE)))
#
#  ind_list$Harmon_one = raw_data$Harmon_one_quarter %>%
#                        mutate(Date = format(Date, "%Y")) %>%
#                        group_by(CountryPair, Date, Directive) %>%
#                        summarise(Transposed = max(Transposed)) %>%
#                        group_by(Date,CountryPair) %>%
#                        summarise(Harmon_one_Index = log(
#                          sum(Transposed + 1,na.rm = TRUE)))

ind_list$EU_both = raw_data$EU_both

ind_list$EU_one =  raw_data$EU_one

ind_list$Euro_both =  raw_data$Euro_both

ind_list$Euro_one = raw_data$Euro_one
country_pair_df = unlist(list(bank_list, trade_list, ind_list),
                         recursive = FALSE) %>%
  reduce(left_join, by = c("Date","CountryPair"))
country_pair_df = country_pair_df %>%
  separate(col = CountryPair,into = c("Country_A","Country_B"),
           sep = "-", remove = FALSE) %>%
  group_by(Country_A) %>%
  mutate(Country_A_crises = classify_crises_dates(
    Target_Country = Country_A[1],
    dates_vec = Date,
    crises_df = raw_data$crises_df[,1:3])) %>%
  group_by(Country_B) %>%
  mutate(Country_B_crises = classify_crises_dates(
    Target_Country = Country_B[1],
    dates_vec = Date,
    crises_df = raw_data$crises_df[,1:3])) %>%
  ungroup() %>%
  rowwise() %>%
  mutate(Crises_tot = sum(Country_A_crises, Country_B_crises)) %>%
  mutate(Crises_one = as.numeric(Crises_tot ==1)) %>%
  mutate(Crises_both = as.numeric(Crises_tot ==2)) %>%
  mutate(Crises = min(Crises_tot,1)) %>%
  ungroup() %>%
  select(-Country_A,-Country_B)
country_pair_df = country_pair_df %>%
  left_join(.,raw_data$geodist %>%
              select(CountryPair, comlang_ethno) %>%
              rename(Common_Lang = comlang_ethno) %>%
              distinct(), by = "CountryPair")
controls =  c("FX_stab","MI_ind","FO_ind","FD","GDP_real","Pop")

country_pair_df = append.countrypair.dataframe(
  country_pair_df,
  country_df %>%
    select(Date,Country,controls) %>%
    mutate(GDP_real = log(GDP_real))) %>%
  collapse_pair_controls(controls,collapse_funcs = "sum")

rm(controls)
fin_reg_df = list(country_pair_df,
                  get.neg.abs.diff(country_df[, c("Date","Country",
                                                  "Fin_ret")]) %>%
                    rename(Fin_synch = Fin_ret)) %>%
  reduce(left_join, by = c("CountryPair","Date")) %>%
  group_by(CountryPair) %>%
  mutate(Time_Trend = seq_along(Date)) %>%
  ungroup() %>%
  mutate(Fin_synch = 100 * Fin_synch)
country_pairs_table = table(fin_reg_df$CountryPair)

fin_reg_df = fin_reg_df %>%
  filter(CountryPair %in% names(country_pairs_table)[
    country_pairs_table > 10])

# fin_reg_df = fin_reg_df %>%
#   filter(bank_gdp >= quantile(bank_gdp,0.025) &
#          bank_gdp <= quantile(bank_gdp,0.975))


MichaelGurkov/FinSynch documentation built on Oct. 30, 2019, 9:27 p.m.