knitr::opts_chunk$set( collapse = TRUE,echo = FALSE, message = FALSE,warning = FALSE, comment = "#>" )
library(tidyverse) library(xts) library(lubridate) library(stargazer) devtools::load_all() # library(MiscImport)
ta_125 = read_csv(paste0(Sys.getenv("USERPROFILE"), "\\OneDrive - Bank Of Israel\\Data", "\\TASE liquidity\\michael files", "\\TA125.csv"), show_col_types = FALSE) %>% mutate(date = dmy(date))
market_df_filepath = paste0(Sys.getenv("USERPROFILE"), "\\OneDrive - Bank Of Israel\\Data", "\\TASE liquidity\\Rdata files", "\\market_data_2022-12-12.rds") market_df = import_boi_market_data(market_df_filepath) %>% calculate_adjusted_price() %>% filter(date <= max(ta_125$date)) rm(market_df_filepath)
stocks_ipo = read_csv(paste0(Sys.getenv("USERPROFILE"), "\\OneDrive - Bank Of Israel", "\\Data\\TASE liquidity", "\\michael files\\stocks_ipo.csv"), show_col_types = FALSE) %>% mutate(tase_id = as.character(tase_id)) stocks_ipo = stocks_ipo %>% mutate(tase_id = recode(tase_id, `456` = "259")) ipo_trade_dur_df = market_df %>% group_by(tase_id, sec_id) %>% summarise(tibble(first_trade_year = year(min(date)), trade_years = (max(date) - min(date)) %/% dyears(1)), .groups = "drop") stocks_ipo = stocks_ipo %>% left_join(ipo_trade_dur_df, by = "tase_id") %>% arrange(tase_id) %>% filter(!is.na(trade_years)) num_ipo = stocks_ipo %>% count(tase_id, sort = TRUE) stocks_ipo = stocks_ipo %>% inner_join(num_ipo %>% filter(n == 1) %>% select(tase_id), by = "tase_id") rm(ipo_trade_dur_df)
tase_sector_df = read_csv(paste0(Sys.getenv("USERPROFILE"), "\\OneDrive - Bank Of Israel\\Data", "\\TASE liquidity\\michael files", "\\tase_sector_classification.csv"), show_col_types = FALSE) %>% select(-comp_name_hebrew) %>% filter(!tase_sector == "#N/A") %>% mutate(date = as.yearmon(date, format = "%d/%m/%Y")) %>% mutate(across(-date, as.character)) %>% select(-tase_sub_sector) ipo_control_match_df = match_control_group(market_df, tase_sector_df,stocks_ipo)
price_df = make_price_df(market_df,ipo_control_match_df,ta_125)
ret_df = calculate_return_df(price_df) ret_df = ret_df %>% mutate(tase_id = str_extract(id,"^[0-9]+")) %>% left_join(stocks_ipo %>% select(tase_id, tase_sector), by = "tase_id") %>% select(-tase_id) cum_ret_df = ret_df %>% calculate_cum_return()
hold_ret = calculate_holding_return(ret_df)
stocks_ipo %>% count(year) %>% left_join(ta_125 %>% group_by(year = year(date)) %>% summarise(ta_125 = mean(ta_125), .groups = "drop"), by = "year") %>% write_csv(paste0(Sys.getenv("USERPROFILE"), "\\OneDrive - Bank Of Israel\\current_work", "\\annual_report\\2022\\data", "\\plots\\ipo_vs_ta_125.csv"))
ret_df %>% filter(month < 120) %>% count(month,adjustment_type, sort = TRUE) %>% tail() ggplot(aes(month, n, fill = adjustment_type)) + geom_col(position = "dodge")
cum_ret_df %>% ggplot(aes(month, value, color = adjustment_type)) + geom_line() + geom_hline(yintercept = 0, linetype = "dashed") + scale_y_continuous(labels = scales::percent_format()) + facet_wrap( ~ summary_measure, scales = "free") + # scale_x_continuous(breaks = seq(0,10,2)) + xlab("Months since IPO") + ylab(NULL) + ggtitle("Cumulative returns since IPO") + theme(legend.title = element_blank()) cum_ret_df %>% filter(!adjustment_type == "Control group returns") %>% filter(summary_measure == "median") %>% select(-summary_measure) %>% pivot_wider(names_from = adjustment_type) %>% write_csv(paste0(Sys.getenv("USERPROFILE"), "\\OneDrive - Bank Of Israel\\current_work", "\\annual_report\\2022\\data", "\\plots\\cum_ret_ipo.csv"))
hold_ret %>% filter(!adjustment_type == "control_ret") %>% mutate(tase_id = str_extract(id, "^[0-9]+")) %>% left_join(stocks_ipo %>% select(tase_id, tase_sector), by = "tase_id") %>% count(tase_sector, adjustment_type, sort = TRUE) group_by(tase_sector, adjustment_type) %>% summarise(avg_ret = mean(hold_ret, na.rm = TRUE), .groups = "drop") %>% ggplot(aes(x = avg_ret, y = reorder(tase_sector, avg_ret), fill = adjustment_type)) + geom_col(position = "dodge")
hold_ret %>% filter(!adjustment_type == "control_ret") %>% mutate(tase_id = str_extract(id, "^[0-9]+")) %>% left_join(stocks_ipo %>% select(tase_id, year), by = "tase_id") %>% group_by(year, adjustment_type) %>% summarise(avg_ret = mean(hold_ret, na.rm = TRUE), .groups = "drop") %>% ggplot(aes(x = as.character(year), y = avg_ret, fill = adjustment_type)) + geom_col(position = "dodge") hold_ret %>% filter(!adjustment_type == "control_ret") %>% mutate(tase_id = str_extract(id, "^[0-9]+")) %>% left_join(stocks_ipo %>% select(tase_id, year), by = "tase_id") %>% group_by(year, adjustment_type) %>% summarise(avg_ret = mean(hold_ret, na.rm = TRUE), .groups = "drop") %>% pivot_wider(names_from = "adjustment_type", values_from = "avg_ret") %>% write_csv(paste0(Sys.getenv("USERPROFILE"), "\\OneDrive - Bank Of Israel\\current_work", "\\annual_report\\2022\\data", "\\plots\\hold_return_by_year.csv"))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.