knitr::opts_chunk$set( collapse = TRUE,echo = FALSE,cache = TRUE, message = FALSE,warning = FALSE, comment = "#>" )
devtools::load_all() library(car) library(tidyverse) library(plm) library(stargazer) library(sandwich) library(clubSandwich) library(lmtest) library(purrr) library(igraph) library(DescTools)
save_temp_status = FALSE countries_list = list( oecd_countries = c("Australia","Austria","Belgium","Canada","Chile", "Czech_Republic","Denmark","Estonia","Finland","France", "Germany","Greece","Hungary", "Iceland","Ireland", "Israel","Italy","Japan","Korea","Latvia", "Lithuania","Luxembourg","Mexico","Netherlands", "New_Zealand","Norway","Poland","Portugal", "Slovak_Republic","Slovenia","Spain","Sweden", "Switzerland","Turkey","United_Kingdom" ,"United_States"), strong_countries = c("Australia","Austria","Belgium","Canada", "Switzerland","Germany","Denmark","Spain", "Finland","France","United_Kingdom","Ireland", "Italy","Japan","Netherlands","Portugal", "Sweden","United_States"), fsap_countries = c("Austria","Belgium","Germany","Denmark","Spain", "France","Finland","Greece","Ireland","Italy", "Luxembourg","Netherlands","Portugal", "Sweden","United_Kingdom")) countries_list$weak_countries = countries_list$oecd_countries[!countries_list$oecd_countries %in% countries_list$strong_countries] pairs_list = lapply(names(countries_list), function(temp_name){ apply(combn(countries_list[[temp_name]],2), 2, function(temp_col){ ifelse(temp_col[1]<temp_col[2], paste(temp_col[1],temp_col[2],sep = "-"), paste(temp_col[2],temp_col[1],sep = "-"))}) }) names(pairs_list) = paste(names(countries_list), "pairs", sep = "_") countries_list = c(countries_list, pairs_list) rm(pairs_list) countries_list$cross_country_pairs = countries_list$oecd_countries_pairs[!countries_list$oecd_countries_pairs %in% countries_list$strong_countries_pairs & !countries_list$oecd_countries_pairs %in% countries_list$weak_countries_pairs] reg_list = list() hyp_test_list = list() control_vars = c("trade_gdp","FX_stab_tot","FO_ind_tot","MI_ind_tot")
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) 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$Harmon_both_quarter = import.harmon.data() %>% construct_countrypair_harmon_index(.,dates_vec = seq.Date( from = as.Date(min(raw_data$bis_lbs$Date)), to = as.Date(max(raw_data$bis_lbs$Date)), by = "quarter") %>% as.yearqtr()) raw_data$Harmon_one_quarter = import.harmon.data() %>% construct_countrypair_harmon_index(.,dates_vec = seq.Date( from = as.Date(min(raw_data$bis_lbs$Date)), to = as.Date(max(raw_data$bis_lbs$Date)), by = "quarter") %>% as.yearqtr(),index_status = "one") 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")) 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( df = eu_df %>% select(Country, EU) %>% rename(Date = EU),dates_vec = eu_dates_vec) %>% rename(EU_both = Status) %>% mutate(Date = as.character(Date)) raw_data$EU_one = construct_countrypair_EU_index( df = eu_df %>% select(Country, EU) %>% rename(Date = EU),dates_vec = eu_dates_vec, index_status = "one") %>% rename(EU_one = Status) %>% mutate(Date = as.character(Date)) raw_data$Euro_both = construct_countrypair_EU_index( df = eu_df %>% select(Country, Euro_area) %>% rename(Date = Euro_area),dates_vec = eu_dates_vec) %>% rename(Euro_both = Status) %>% mutate(Date = as.character(Date)) raw_data$Euro_one = construct_countrypair_EU_index( df = eu_df %>% select(Country, Euro_area) %>% rename(Date = Euro_area),dates_vec = eu_dates_vec, index_status = "one") %>% rename(Euro_one = Status) %>% mutate(Date = as.character(Date)) rm(eu_df, eu_dates_vec)
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) %>% deflate.data(.,vars_to_deflate = c("GDP","GDP_per_Capita"), cpi = raw_data$CPI) %>% select(-GDP, -GDP_per_Capita)) df = df_list %>% reduce(right_join, by = c("Date", "Country")) %>% group_by(Country) %>% mutate_at(.vars = c("Total_Credit_real","HousePrice"), .funs = list(ret = ~c(NA,diff(log(.))))) %>% mutate(Fin_ret = rowMeans(data.frame(Total_Credit_real_ret, HousePrice_ret),na.rm = TRUE)) %>% ungroup() %>% filter(is.finite(Fin_ret)) %>% filter(Date >=1978) rm(df_list)
bank_graph_df = import.bis.lbs.data( countries_vec = countries_list$oecd_countries, collapse_countrypair = FALSE) %>% filter(grepl("Q4",Date)) %>% group_by(Country, Counter_Country,Date) %>% summarise(Weight = mean(Balance, na.rm = TRUE)) %>% ungroup() %>% filter(complete.cases(.)) %>% mutate(Date = str_extract(Date,"^\\d{4}")) net_list = lapply(split(bank_graph_df,bank_graph_df$Date), function(temp_df){ links_df = temp_df %>% select(-Date) net = graph_from_data_frame(links_df) E(net)$weight = links_df$Weight return(net) }) centrality_df = lapply(names(net_list), function(temp_name){ in_cent = graph.strength(net_list[[temp_name]], mode = "in") %>% data.frame(Country = names(.), Date = temp_name, Center_in = .) out_cent = graph.strength(net_list[[temp_name]], mode = "out") %>% data.frame(Country = names(.), Date = temp_name, Center_out = .) df = full_join(in_cent, out_cent, by = c("Country","Date")) return(df) }) %>% rbind_all() df = left_join(df, centrality_df, by = c("Country","Date"))
bank_list = list() bank_balance_real = raw_data$bis_lbs %>% filter(quarters(Date) == "Q4") %>% mutate(Date = format(Date, "%Y")) %>% mutate(Balance = Balance * 10 ^ 6) %>% deflate.data(.,vars_to_deflate = "Balance") %>% select(Date, CountryPair,Balance_Pos, Balance_real) bank_list$bank_gdp = bank_balance_real %>% normalize.bis.data(.,norm_df = df[,c("Date","Country", "GDP_real")], norm_val = "GDP_real") %>% 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)) rm(bank_balance_real)
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
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) %>% 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 = 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)
country_pair_df = unlist(list(bank_list, trade_list, ind_list), recursive = FALSE) %>% reduce(left_join, by = c("Date","CountryPair"))
df = left_join(df, import.trilemma.ind(), by = c("Country","Date"))
df = full_join(df, import.macropru.ind(), by = c("Country","Date"))
df = left_join(df, import.fin.dev.ind(), by = c("Country","Date"))
df = left_join(df, import.wgi.ind(countries_vec = countries_list$oecd_countries) %>% filter(grepl("Estimate$", Indicator)) %>% group_by(Country, Date) %>% summarise(WGI = mean(Val, na.rm = TRUE)), by = c("Country","Date"))
fin_reg_df_annual = construct_fin_reg( df = df %>% mutate(GDP_real = log(GDP_real), Pop = log(Pop)), countries_vec = countries_list$oecd_countries, control_vars = names(df)[!names(df) %in% c("Country","Date","Fin_ret")], collapse_funcs = c("sum")) fin_reg_df_annual = fin_reg_df_annual %>% full_join(.,get.quasi.cor(df %>% select(Date, Country,Fin_ret)) %>% rename(Fin_synch_quasi_cor = Fin_ret), by = c("Date","CountryPair")) fin_reg_df_annual = fin_reg_df_annual %>% full_join(.,country_pair_df, by = c("Date","CountryPair")) fin_reg_df_annual = fin_reg_df_annual %>% filter(!is.na(CountryPair)) %>% filter(!is.na(Fin_synch)) %>% filter(!is.na(bank_gdp)) %>% filter(!is.na(Date)) temp_lm_resid = function(x,Time){ if(sum(!is.na(x)) < 2){return(rep(NA, length(x)))} return(residuals(lm(x ~ Time))) } fin_reg_df_annual = fin_reg_df_annual %>% group_by(CountryPair) %>% mutate(Time_trend = seq.int(from = 1,to = length(Date))) %>% mutate(bank_gdp_delta = c(NA, diff(bank_gdp))) %>% mutate(Fin_synch_delta = c(NA, diff(Fin_synch))) %>% mutate(bank_gdp_detrended = temp_lm_resid(bank_gdp, Time_trend)) %>% mutate(Fin_synch_detrended = temp_lm_resid(Fin_synch, Time_trend)) %>% mutate(Harmon_both_detrended = temp_lm_resid(Harmon_both_Index, Time_trend)) %>% ungroup() fin_reg_df_annual$CountryPair_Category[fin_reg_df_annual$CountryPair %in% countries_list$strong_countries_pairs] = "High-Income" fin_reg_df_annual$CountryPair_Category[fin_reg_df_annual$CountryPair %in% countries_list$cross_country_pairs] = "Cross (High - Low) Income" fin_reg_df_annual$CountryPair_Category[fin_reg_df_annual$CountryPair %in% countries_list$weak_countries_pairs] = "Low-Income" # saveRDS(fin_reg_df_annual, "C:\\Users\\Misha\\Desktop\\temp_df.rds")
fin_reg_df_annual = fin_reg_df_annual %>% 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)
write_rds(x = raw_data, path = "C:\\Users\\Misha\\Documents\\Data\\TempData\\temp_raw_df.rds") write_rds(x = fin_reg_df_annual, path = "C:\\Users\\Misha\\Documents\\Data\\TempData\\temp_fin_df_old.rds")
reg_formula = paste("Fin_synch ~ lag(bank_gdp,1) * Crises", "lag(bank_gdp,1) * FD_tot", # "lag(bank_gdp,1) * EU_both", # "lag(bank_gdp,1) * Euro_both", # "lag(bank_gdp,1) * Common_Lang", paste(control_vars, collapse = "+"), "CountryPair:as.integer(Date)", sep = "+") reg_list$baseline = plm(formula = formula(reg_formula),data = fin_reg_df_annual, model = "within",effect = "twoways", index = c("CountryPair","Date")) se_baseline = sqrt(diag(vcovHC(reg_list$baseline,cluster = "group")))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.