# Required packages install.packages('dplyr') install.packages('ramify') install.packages('tibble') install.packages('tidyr') install.packages('purrr') install.packages('slider') library('dplyr', verbose = FALSE, warn.conflicts = FALSE) library('ramify', verbose = FALSE, warn.conflicts = FALSE) library('tibble', verbose = FALSE, warn.conflicts = FALSE) library('tidyr', verbose = FALSE, warn.conflicts = FALSE) library('purrr', verbose = FALSE, warn.conflicts = FALSE) library('slider', verbose = FALSE, warn.conflicts = FALSE) csv <- 'https://github.com/Brent-Morrison/Misc_scripts/raw/master/daily_price_ts_vw_20201018.csv' daily_price_ts_vw_20201018 <- read.csv(csv) tail(daily_price_ts_vw_20201018) head(daily_price_ts_vw_20201018) mtrx <- mat('1,2,3,4; 2,1,5,6; 3,5,1,7; 4,6,7,1') # View as a tibble for nice formatting as_tibble(mtrx) mtrx_triu <- triu(mtrx, diag = FALSE) as_tibble(mtrx_triu) mean(mtrx_triu[mtrx_triu != 0], na.rm= TRUE) mean(triu(mtrx, diag = FALSE)[triu(mtrx, diag = FALSE) != 0], na.rm= TRUE) mean(mtrx[upper.tri(mtrx)]) mean_mtrx <- function(x) { mean(x[upper.tri(x)]) } mean_mtrx(mtrx) daily_price_ts_vw_20201018 %>% group_by(symbol) %>% mutate(rtn_log_1d = log(adjusted_close) - lag(log(adjusted_close))) %>% slice(2:n()) %>% # remove first row for each group, 'rtn_log_1d' will be NA ungroup() %>% select(date_stamp, symbol, rtn_log_1d) %>% pivot_wider(names_from = symbol, values_from = rtn_log_1d) %>% select(-date_stamp) %>% cor() daily_price_ts_vw_20201018 %>% group_by(symbol) %>% mutate(rtn_log_1d = log(adjusted_close) - lag(log(adjusted_close))) %>% slice(2:n()) %>% # remove first row for each group, 'rtn_log_1d' will be NA ungroup() %>% select(date_stamp, symbol, rtn_log_1d) %>% pivot_wider(names_from = symbol, values_from = rtn_log_1d) %>% select(-date_stamp) %>% cor(use = 'pairwise.complete.obs') daily_price_ts_vw_20201018 %>% group_by(symbol) %>% mutate(rtn_log_1d = log(adjusted_close) - lag(log(adjusted_close))) %>% slice(2:n()) %>% # remove first row for each group, 'rtn_log_1d' will be NA ungroup() %>% select(date_stamp, symbol, rtn_log_1d) %>% pivot_wider(names_from = symbol, values_from = rtn_log_1d) %>% select(-date_stamp) %>% cor(use = 'pairwise.complete.obs') %>% mean_mtrx() ipc <- function(df) { max_date = max(df$date_stamp) ipc = df %>% select(date_stamp, symbol, rtn_log_1d) %>% pivot_wider(names_from = symbol, values_from = rtn_log_1d) %>% select(-date_stamp) %>% cor(use = 'pairwise.complete.obs') %>% mean_mtrx() return(tibble(date_stamp = max_date, ipc = ipc)) } daily_price_rtn <- daily_price_ts_vw_20201018 %>% mutate( date_stamp = as.Date(date_stamp), rtn_log_1d = log(adjusted_close) - lag(log(adjusted_close)) ) %>% slice(2:n()) %>% arrange(date_stamp) head(daily_price_rtn) ipc(daily_price_rtn) daily_price_rtn %>% filter(date_stamp >= '2020-02-11' & date_stamp <= '2020-07-31') %>% split(.$sector) %>% map_dfr(., ipc, .id = 'sector') daily_price_rtn %>% filter(date_stamp >= '2020-02-11' & date_stamp <= '2020-07-31') %>% group_by(sector) %>% group_modify(~ ipc(.x)) daily_price_rtn %>% filter(sector == 2) %>% filter(date_stamp >= '2020-02-11' & date_stamp <= '2020-07-31') %>% select(date_stamp, symbol, rtn_log_1d) %>% pivot_wider(names_from = symbol, values_from = rtn_log_1d) %>% select(-date_stamp) %>% cor(use = 'pairwise.complete.obs') %>% mean_mtrx() ipc_by_grp <- function(df) { df %>% split(.$sector) %>% map_dfr(., ipc, .id = 'sector') } daily_price_rtn %>% filter(date_stamp >= '2020-02-11' & date_stamp <= '2020-07-31') %>% ipc_by_grp() slide_period_dfr( .x = daily_price_rtn, .i = daily_price_rtn$date_stamp, .period = "month", .f = ipc_by_grp, .before = 5, .complete = TRUE ) daily_price_rtn %>% filter(date_stamp >= '2020-02-01' & date_stamp <= '2020-07-31') %>% ipc_by_grp()