# created by bb_bank_data_prelim_03.RMD
parent_sub <- fread("ticker_parentRSSD_subRSSD_2.csv")

bhc_ids <- parent_sub[!duplicated(parent_sub[,c("ID_RSSD_PARENT","ticker")])]
file_path  <-"bb_bank_with_BAC.xlsx"
sheets <- excel_sheets(file_path)
sheets <- sheets[sheets !="tickers"]
sheet_list <- list()
sheet_list <- lapply(sheets, function(x) read_excel(file_path, sheet = x))


data_list <- list()

for(i in 1:length(sheet_list)) {
  
  tmp <- data.table(sheet_list[[i]])
  var_name <- as.character(tmp[1,2])
  var_name <- substr(var_name, 1, regexpr("\\(FA_PERIOD_REFERENCE", var_name)-1)
  # print(paste(i,var_name))
  
  tmp <- tmp[-1]
  names(tmp)[1] <- "date"
  tmp <- tmp[!is.na(date)]
  
  tmp <- melt(tmp,id.vars = "date")
  tmp <- data.table(tmp)
  tmp[,value:=as.numeric(value)]
  tmp <- tmp[!is.na(value)]
  
  tmp[,date:=as.Date(as.numeric(date),origin="1899-12-30")]
  tmp[,date:=ceiling_date(date, "quarter")-1]
  tmp[,var_name:=var_name]
  
  data_list[[i]] <- copy(tmp)
}

data_list <- do.call(rbind,data_list)
data_list <- dcast(data_list,date+variable~var_name,value.var = "value",fun.aggregate = sum)
data_list <- data.table(data_list)
data_list[,variable:=as.character(variable)]
setnames(data_list,"variable","ticker")
data_list[,ticker:=substr(ticker, 1, regexpr(" US Equity", ticker)-1)]
data_list <- data_list[ticker!=""]

data_list <- data_list[date<="2022-12-31"]
data_periods <-  apply(expand.grid(2017:2022,c("0331","0630","0930","1231")), 1, paste, collapse="")

bhc_y9c <- list()
i <- 1
for(dp in data_periods) {
  temp <- fread(paste0("C:/Users/dratnadiwakara2/Documents/OneDrive - Louisiana State University/Raw Data/Call Reports/Bank Holding Companies/BHCF_data/BHCF",dp,".txt"),sep="^",
             select =c("RSSD9001","BHCK2170","BHCK0081","BHCK0395","BHCK0397","BHCK1754","BHCK1773",
                       "BHDMB987","BHCKB989","BHCK5369","BHCKB529","BHCK3545","BHCK2145","BHCK2150","BHCK2130",
                       "BHCK3656","BHCK2160",
                       "BHDM6631","BHDM6636","BHFN6631","BHFN6636",
                       "BHDMB993","BHCKB995","BHCK3548",
                       "BHCK3190","BHCK4062","BHCKC699","BHCK2750",
                       "BHCK3283","BHCK3230","BHCK3240","BHCK3247","BHCKB530","BHCKA130","BHCKG105",
                       "BHCK1410","BHCK1771","BHCKB558","BHCKB559","BHCKB560","BHCKF161","BHCK4340",
                       "BHCK4107","BHCK4074") )
  temp[,report_date:=dp]
  bhc_y9c[[i]] <- temp
  i=i+1
}

bhc_y9c <- do.call(rbind,bhc_y9c)


names(bhc_y9c) <-  c("BHC_RSSD","bs_assets_total","bs_cash","bs_ib_assets_domestic","bs_ib_assets_foreign","bs_htm","bs_afs",
                     "bs_fed_fund_assets","bs_repo_assets","bs_loans_for_sale","bs_loans_total","bs_trading","bs_fixed_assets","bs_other_reo","bs_subsidiaries",
                     "bs_re_ventures","bs_other_assets",
                     "bs_deposits_domestic_non_int","bs_deposits_domestic_int","bs_deposits_foreign_non_int","bs_deposits_foreign_int",
                     "bs_fed_fund_liabilities","bs_repo_liabilities","bs_trading_liabilities",
                     "bs_other_borrowed_money","bs_subordinated_debt","bs_subordinated_notes","bs_other_liabilities",
                     "bs_preferred_stock","bs_equity_par","bs_equity_surplus","bs_retained_earnings","bs_other_comp_income","bs_other_equity","bs_equity_total",
                     "bs_loans_re","hcb_htm_value","bs_treasury_govt","bs_mbs", "bs_other_securities","bs_loans_cre","is_net_income",
                     "is_interest_income","is_net_interest_income",
                     "report_date"
                     )

bhc_y9c[,date:=as.Date(report_date,"%Y%m%d")]
bhc_y9c[,year:=year(date)]
bhc_y9c[,yr2022:=ifelse(date>"2022-01-30",1,0)]
bhc_y9c[,bs_liabilities_total:=bs_assets_total-bs_equity_total]
bhc_y9c[,assets_equity:=bs_assets_total/bs_equity_total]
bhc_y9c[,liabilities_equity:=bs_liabilities_total/bs_equity_total]

bhc_y9c <- merge(bhc_y9c,bhc_ids[,c("ID_RSSD_PARENT","ticker")],by.x="BHC_RSSD",by.y="ID_RSSD_PARENT")
bhc_y9c <- merge(bhc_y9c,data_list,by=c("ticker","date"))

bhc_y9c[,bs_total_deposits:=bs_deposits_domestic_int+bs_deposits_domestic_non_int+bs_deposits_foreign_int+bs_deposits_foreign_non_int]
# t(bhc_vars[BHC_RSSD==1073757])
bhc_y9c[,tier_1_share:=BS_TIER1_CAPITAL/(bs_equity_total*1000)]
bhc_y9c[,tier_1_assets:=BS_TIER1_CAPITAL/(bs_assets_total*1000)]

setorder(bhc_y9c,BHC_RSSD,date)
bhc_y9c[, lag_bs_total_deposits := shift(bs_total_deposits, n = 4, type = "lag"), by = .(BHC_RSSD)]
bhc_y9c[, lag_bs_assets_total := shift(bs_assets_total, n = 4, type = "lag"), by = .(BHC_RSSD)]

bhc_y9c[,asset_growth:=bs_assets_total/lag_bs_assets_total-1]
bhc_y9c[,deposit_growth:=bs_total_deposits/lag_bs_total_deposits-1]
bb_tickers <- data_list[,c("ticker")]
bb_tickers <- bb_tickers[!duplicated(bb_tickers)]
bb_tickers[,bb:=1]
bhc_tickers <- bhc_y9c[,c("ticker")]
bhc_tickers <- bhc_tickers[!duplicated(bhc_tickers)]
bhc_tickers[,bhc:=1]

bb_tickers <- merge(bb_tickers,bhc_tickers,by="ticker",all.x = T)
nrow(bb_tickers[is.na(bhc)]) #10 banks don't have Y9C Data
## [1] 10
con_call <- dbConnect(RSQLite::SQLite(), "C:/Users/dratnadiwakara2/Documents/OneDrive - Louisiana State University/Raw Data/Call Reports/call_reports.db")

con_ubpr <- dbConnect(RSQLite::SQLite(),  "C:/Users/dratnadiwakara2/Documents/OneDrive - Louisiana State University/Raw Data/Call Reports/ubpr.db")


data_periods <- apply(expand.grid(c("0331","0630","0930","1231"), 2017:2022), 1, paste, collapse="")
# data_periods <- apply(expand.grid(c("1231"), 2022), 1, paste, collapse="")

call <- list()

i=1
for (dp in data_periods) {
  ubpr_dp <- as.Date(dp,"%m%d%Y")
  ubpr_yr <- year(ubpr_dp)
  
  ubpr_data <- dbGetQuery(con_ubpr,paste0("select 
                                        UBPR2170 assets_total,
                                        UBPRB559 assets_mbs,
                                        UBPRB558 assets_treasury_agency,
                                        UBPR2122 loans_total,
                                        UBPR3123 allowance_loan_loss,
                                        UBPRHR48 interest_on_domestic_deposits,
                                        UBPR2200 deposits,
                                        UBPRE209 deposit_growth,
                                        UBPR1754 htm_cost,
                                        UBPR0211 htm_cost_treasury,
                                        UBPRB558 htm_cost_treasury_plus_agency,
                                        UBPR1771 htm_value,
                                        UBPR1772 afs_cost,
                                        UBPR1773 afs_value,
                                        UBPR3545 trading_account_assets,
                                        UBPR2145 premises_fixed_assets,
                                        UBPRD125 loans_commercial_ind,
                                        UBPR1410 loans_real_estate,
                                        UBPRB538 loans_consumer,
                                        UBPRE630 roe,
                                        UBPR3210 total_equity,
                                        UBPRD486 leverage_ratio,
                                        UBPRD487 tier_1_ratio,
                                        UBPRD488 total_capital_ratio,
                                        UBPRM011 nontransacion_deposit_pct,
                                        UBPRE559 loans_securities_over_15_yrs,
                                        UBPRE570 loans_securities_over_3_yrs,
                                        UBPRE566 htm_assets_ubpr,
                                        UBPRE088 efficiency_ratio,
                                        UBPRE091 yeild_on_loans,
                                        UBPR4074 net_int_income,
                                        UBPR4107 total_int_income,
                                        UBPR2150 other_real_estate_owned,
                                        UBPR2130 unconsolidated_subsidiaries,
                                        UBPR2143 intangible_assets,
                                        UBPRB993 fed_funds_purchased,
                                        UBPRB995 repo_liabilities,
                                        UBPR3548 trading_liabilities,
                                        UBPR3190 other_borrowed_money,
                                        UBPR3200 subordinated_debt_debentures,
                                        UBPR2930 other_liabilties,
                                        UBPRA549+UBPRA555+UBPRA564+UBPRA570 assets_maturity_less_than_3_months,
                                        UBPRA550+UBPRA556+UBPRA248+UBPRA565+UBPRA571+UBPRA247 assets_maturity_3_mn_1yr,
                                        UBPRA551+UBPRA557+UBPRA561+UBPRA566+UBPRA572 assets_maturity_1_to_3_yr,
                                        UBPRA552+UBPRA558+UBPRA562+UBPRA567+UBPRA573 assets_maturity_3_to_5_yr,
                                        UBPRA553+UBPRA559+UBPRA568+UBPRA574 assets_maturity_5_to_15_yr,
                                        UBPRA553 govt_agency_maturity_5_to_15_yr,
                                        UBPRA559 mbs_maturity_5_to_15_yr,
                                        UBPRA564 re_loans_maturity_less_than_3_months,
                                        UBPRA570 other_loans_maturity_less_than_3_months,
                                        UBPRA565 re_loans_maturity_3_mn_1yr,
                                        UBPRA571 other_loans_maturity_3_mn_1yr,
                                        UBPRA566 re_loans_maturity_1_to_3_yr,
                                        UBPRA572 other_loans_maturity_1_to_3_yr,
                                        UBPRA567 re_loans_maturity_3_to_5_yr,
                                        UBPRA573 other_loans_maturity_3_to_5_yr,
                                        UBPRA568 re_loans_maturity_5_to_15_yr,
                                        UBPRA574 other_loans_maturity_5_to_15_yr,
                                        UBPRA554+UBPRA560+UBPRA569+UBPRA575 assets_maturity_more_than_15_yr,
                                        UBPRA554 govt_agency_maturity_more_than_15_yr,
                                        UBPRA560 mbs_maturity_more_than_15_yr,
                                        UBPRA569 re_loans_maturity_more_than_15_yr,
                                        UBPRA575 other_loans_maturity_more_than_15_yr,
                                        UBPR0081+UBPR0071 cash,
                                        UBPR4340 net_income,
                                        IDRSSD
                                      from ubpr_",ubpr_yr," 
                                      where 
                                      data_period=",as.numeric(ubpr_dp),""))
  
  
  call_1 <- dbGetQuery(con_call,paste0("select 
                                      RCON2200 deposits_domestic,
                                      RCON2385 non_transaction_deposits,
                                      RCONF049 deposits_domestic_insured,
                                      RCONF051 deposits_domestic_uninsured,
                                      RCONF050 deposits_domestic_no_insured,
                                      RCONF052 deposits_domestic_no_uninsured,
                                      RCON6631 deposits_domestic_non_interest,
                                      RCON1797+RCON5367+RCON5368+RCON1460+RCONF158 secured_by_residential_real_estate,
                                      RCONF160+RCONF161+RCONF159 secured_by_nonresidential_real_estate,
                                      RCONB538+RCONB539+RCONK137+RCONK207 consumer_loans,
                                      IDRSSD 
                                   from call_1_",dp," "))

  call_2 <- dbGetQuery(con_call,paste0("select 
                                        RCFN2200 deposits_foreign,
                                        FDIC_Certificate_Number,
                                        Financial_Institution_Name,
                                        Financial_Institution_State,
                                        data_period,
                                        IDRSSD 
                                     from call_2_",dp," "))
  
  call_2022 <- merge(call_1,call_2,by="IDRSSD")
  call_2022 <- merge(call_2022,ubpr_data,by="IDRSSD")
  call_2022 <- data.table(call_2022)
  call_2022[,deposits_foreign:=ifelse(is.na(deposits_foreign),0,deposits_foreign)]


  # call_2022[,c("cash_2","cash_1","assets_maturity_more_than_15_yr_1","assets_maturity_5_to_15_yr_1","assets_maturity_3_to_5_yr_1","assets_maturity_1_to_3_yr_1","assets_maturity_3_mn_1yr_1","assets_maturity_3_mn_1yr_1","assets_maturity_less_than_3_months_1"):=list(NULL)]
  
  
  call[[i]] <- call_2022

  i=i+1
}

call <- rbindlist(call,fill=T)

dbDisconnect(con_call)
dbDisconnect(con_ubpr)

call[,date:=as.Date(data_period,"%m%d%Y")]

call <- merge(call,parent_sub,by.x="IDRSSD",by.y="ID_RSSD_OFFSPRING")

call[,deposits_uninsured_assets:=deposits_domestic_uninsured/assets_total]

call[,wa_maturiy_assets:=(assets_maturity_less_than_3_months*0.25+assets_maturity_3_mn_1yr*0.75+assets_maturity_1_to_3_yr*2+assets_maturity_3_to_5_yr*4+assets_maturity_5_to_15_yr*10+assets_maturity_more_than_15_yr*20)/(cash+assets_maturity_less_than_3_months+assets_maturity_3_mn_1yr+assets_maturity_1_to_3_yr+assets_maturity_3_to_5_yr+assets_maturity_5_to_15_yr+assets_maturity_more_than_15_yr)]
# 
#                                       
# call[,maturity_5_to_15_yr_assets:=assets_maturity_5_to_15_yr/assets_total]
# call[,maturity_more_than_15_yr_assets:=assets_maturity_more_than_15_yr/assets_total]
# 
# call[,govt_agency_more_than_5_yr_assets:=(govt_agency_maturity_more_than_15_yr+govt_agency_maturity_5_to_15_yr)/assets_total]
# call[,mbs_more_than_5_yr_assets:=(mbs_maturity_more_than_15_yr+mbs_maturity_5_to_15_yr)/assets_total]
# call[,re_loans_more_than_5_yr_assets:=(re_loans_maturity_more_than_15_yr+re_loans_maturity_5_to_15_yr)/assets_total]
# call[,other_loans_more_than_5_yr_assets:=(other_loans_maturity_more_than_15_yr+other_loans_maturity_5_to_15_yr)/assets_total]
# call[,loans_5_to_15_yr:=(re_loans_maturity_more_than_15_yr+re_loans_maturity_5_to_15_yr)/assets_total]
# call[,other_loans_more_than_5_yr_assets:=(other_loans_maturity_more_than_15_yr+other_loans_maturity_5_to_15_yr)/assets_total]



deposit_betas <- fread("deposit_betas_pschnabl.csv")
deposit_betas <- deposit_betas[,c("rssdid","expbeta","depexpbeta")]

call <- merge(call,deposit_betas,by.x ="IDRSSD",by.y="rssdid",all.x=T)
f1 <- call
setorder(f1,IDRSSD,date)
f1[,year:=year(date)]
f1[, lag_net_int_income := shift(net_int_income, n = 1, type = "lag"), by = .(IDRSSD,year)]
f1[, lag_total_int_income := shift(total_int_income, n = 1, type = "lag"), by = .(IDRSSD,year)]
f1[,nii:=net_int_income-lag_net_int_income]
f1[,nii:=ifelse(is.na(nii),net_int_income,nii)]

f1[,nim:=nii*100/assets_total]
f1[,bank_size_category:=ifelse(assets_total>250e6,"4. more than 250b",
                               ifelse(assets_total>50e6,"3. 50b to 250b",
                                      ifelse(assets_total>5e6,"2. 5b to 50b",
                                             ifelse(assets_total>1e6,"1. 1b to 5b","0. less than 1b"))))]


f1 <- f1[date>"2018-12-31",.(nim=mean(nim,na.rm=T)),by=.(date,bank_size_category)]

ggplot(f1,aes(x=date,y=nim,color=bank_size_category))+geom_line()+geom_point()+
  theme_minimal()+
  theme(legend.position = "bottom",legend.title = element_blank())+
  labs(y="Net interest income/Assets (%)",x="")

call_parent <- call[,.(assets_total=sum(assets_total,na.rm=T),
                       expbeta = mean(expbeta,na.rm=T),
                       depexpbeta = mean(depexpbeta,na.rm=T),
                       assets_mbs=sum(assets_mbs,na.rm=T),
                       assets_treasury_agency=sum(assets_treasury_agency,na.rm=T),
                       loans_total=sum(loans_total,na.rm=T),
                       deposits_total = sum(deposits,na.rm=T),
                       htm_cost = sum(htm_cost,na.rm=T),
                       htm_value = sum(htm_value,na.rm=T),
                       htm_cost_treasury = sum(htm_cost_treasury,na.rm = T),
                       htm_cost_treasury_plus_agency = sum(htm_cost_treasury_plus_agency,na.rm=T),
                       afs_cost = sum(afs_cost,na.rm=T),
                       afs_value = sum(afs_value,na.rm=T),
                       equity_total = sum(total_equity,na.rm=T),
                       trading_account_assets = sum(trading_account_assets,na.rm=T),
                       deposits_domestic = sum(deposits_domestic,na.rm=T),
                       deposits_domestic_uninsured = sum(deposits_domestic_uninsured,na.rm=T),
                       deposits_domestic_insured = sum(deposits_domestic_insured,na.rm=T),
                       non_transaction_deposits = sum(non_transaction_deposits,na.rm=T),
                       cash = sum(cash,na.rm=T),
                       loans_commercial_ind = sum(loans_commercial_ind,na.rm=T),
                       loans_real_estate = sum(loans_real_estate,na.rm=T),
                       loans_sfr = sum(secured_by_residential_real_estate,na.rm=T),
                       loans_cre = sum(secured_by_nonresidential_real_estate,na.rm=T),
                       loans_consumer = sum(consumer_loans,na.rm=T),
                       loans_securities_over_15_yrs=mean(loans_securities_over_15_yrs,na.rm=T),
                       loans_securities_over_3_yrs=mean(loans_securities_over_3_yrs,na.rm=T),
                       interest_on_domestic_deposits = mean(interest_on_domestic_deposits,na.rm=T),
                       htm_assets_ubpr=mean(htm_assets_ubpr,na.rm=T),
                       deposit_growth=mean(deposit_growth,na.rm=T),
                       premises_fixed_assets=sum(premises_fixed_assets,na.rm=T),
                       other_real_estate_owned = sum(other_real_estate_owned,na.rm = T),
                       unconsolidated_subsidiaries = sum(unconsolidated_subsidiaries,na.rm = T),
                       intangible_assets = sum(intangible_assets,na.rm=T),
                       deposits_foreign=sum(deposits_foreign,na.rm=T),
                       fed_funds_purchased=sum(fed_funds_purchased,na.rm=T),
                       repo_liabilities=sum(repo_liabilities,na.rm=T),
                       trading_liabilities=sum(trading_liabilities,na.rm=T),
                       other_borrowed_money=sum(other_borrowed_money,na.rm=T),
                       subordinated_debt_debentures=sum(subordinated_debt_debentures,na.rm=T),
                       other_liabilties=sum(other_liabilties,na.rm=T),
                       wa_maturiy_assets=mean(wa_maturiy_assets,na.rm=T),
                       re_loans_less_than_3_months_assets = sum(re_loans_maturity_less_than_3_months,na.rm=T)/sum(assets_total,na.rm=T),
                       other_loans_less_than_3_months_assets = sum(other_loans_maturity_less_than_3_months,na.rm=T)/sum(assets_total,na.rm=T),
                       re_loans_3_mn_1yr_assets = sum(re_loans_maturity_3_mn_1yr,na.rm=T)/sum(assets_total,na.rm=T),
                       re_loans_1_to_3_yr_assets = sum(re_loans_maturity_1_to_3_yr,na.rm=T)/sum(assets_total,na.rm=T),
                       re_loans_3_to_5_yr_assets = sum(re_loans_maturity_3_to_5_yr,na.rm=T)/sum(assets_total,na.rm=T),
                       re_loans_5_to_15_yr_assets = sum(re_loans_maturity_5_to_15_yr,na.rm=T)/sum(assets_total,na.rm=T),
                       re_loans_more_than_15_yr_assets = sum(re_loans_maturity_more_than_15_yr,na.rm=T)/sum(assets_total,na.rm=T),
                       other_loans_3_mn_1yr_assets = sum(other_loans_maturity_3_mn_1yr,na.rm=T)/sum(assets_total,na.rm=T),
                       other_loans_1_to_3_yr_assets = sum(other_loans_maturity_1_to_3_yr,na.rm=T)/sum(assets_total,na.rm=T),
                       other_loans_3_to_5_yr_assets = sum(other_loans_maturity_3_to_5_yr,na.rm=T)/sum(assets_total,na.rm=T),
                       other_loans_5_to_15_yr_assets = sum(other_loans_maturity_5_to_15_yr,na.rm=T)/sum(assets_total,na.rm=T),
                       other_loans_more_than_15_yr_assets = sum(other_loans_maturity_more_than_15_yr,na.rm=T)/sum(assets_total,na.rm=T),
                       tier_1_ratio=mean(tier_1_ratio,na.rm=T),
                       assets_maturity_3_to_5_yr = sum(assets_maturity_3_to_5_yr,na.rm=T),
                       assets_maturity_5_to_15_yr=sum(assets_maturity_5_to_15_yr,na.rm=T),
                       assets_maturity_more_than_15_yr=sum(assets_maturity_more_than_15_yr,na.rm=T)
                       ),
                    by=.(ticker,date)]

call_parent[,deposits_domestic_insured_to_assets:=deposits_domestic_insured/assets_total]
call_parent[,deposits_domestic_uninsured_to_assets:=deposits_domestic_uninsured/assets_total]

# call_parent <- call_parent[,c("ticker","date","deposits_domestic_insured_to_assets","deposits_domestic_uninsured_to_assets","wa_maturiy_assets","re_loans_3_to_5_yr_assets","re_loans_5_to_15_yr_assets", "re_loans_more_than_15_yr_assets","other_loans_3_to_5_yr_assets","other_loans_5_to_15_yr_assets","other_loans_more_than_15_yr_assets","expbeta","depexpbeta")]


bhc_y9c <- merge(bhc_y9c,call_parent,by=c("ticker","date"),all.x=T)
crsp <- fread("crsp_price_shout_2016_2022.csv")
crsp[,date:=as.Date(date)]
crsp[,date:=ceiling_date(as.Date(date),unit="months")-days(1)]
crsp[,PRC:=abs(PRC)/CFACPR]
crsp[,SHROUT:=abs(SHROUT)/CFACSHR]

bhc_y9c <- merge(bhc_y9c,crsp[,c("TICKER","date","PRC","SHROUT")],by.x=c("ticker","date"),by.y=c("TICKER","date"),all.x=T)
bhc_y9c[,market_cap:=PRC*SHROUT]
bhc_y9c[,market_cap:=ifelse(is.na(market_cap),HISTORICAL_MARKET_CAP/1000,abs(market_cap))]
# montyly_price <- function(ticker) {
#   tryCatch({
#     t <- getSymbols(ticker, from = "2016-01-01", to = "2023-03-31", auto.assign = FALSE,periodicity="monthly")
#     t <- t[,4]
#     names(t) <- ticker
#     return(t)
#   },error=function(cond) {})
# }
# 
# stock_prices <- lapply(unique(bhc_y9c$ticker),montyly_price)
# stock_prices <- do.call(cbind, stock_prices)
# stock_prices <- as.data.table(stock_prices)
# setnames(stock_prices,"index","date")
# stock_prices[,date:=ceiling_date(date,unit = "month")-days(1)]
# 
# saveRDS(stock_prices,"bank_stock_prices_2016_2023_March.rds")

stock_prices <- readRDS("bank_stock_prices_2016_2023_March.rds")

stock_prices_copy <- copy(stock_prices)

stock_price_long <- melt(stock_prices,id.vars = "date")
stock_price_long <- data.table(stock_price_long)
stock_price_long[,ticker:=as.character(variable)]
stock_price_long[,stock_price:=value]
stock_price_long[,c("variable","value"):=list(NULL)]

bhc_y9c <- merge(bhc_y9c,stock_price_long,by=c("ticker","date"),all.x=T)

temp1 <- stock_prices[date=="2022-12-31"]
temp1[,date:=NULL]
temp1 <- melt(temp1)
setnames(temp1,"value","prc_20221231")
temp1 <- data.table(temp1)
temp1[,variable:=as.character(variable)]

temp3 <- stock_prices[date=="2023-03-31"]
temp3[,date:=NULL]
temp3 <- data.table(temp3)
temp3 <- melt(temp3)
setnames(temp3,"value","prc_20230331")
temp3 <- data.table(temp3)
temp3[,variable:=as.character(variable)]

march2023 <- bhc_y9c[date=="2022-12-31"]
march2023[,date:=as.Date("2023-03-31")]

march2023 <- merge(march2023,temp1,by.x="ticker",by.y="variable")
march2023 <- merge(march2023,temp3,by.x="ticker",by.y="variable")
march2023[,market_cap:=prc_20230331*market_cap/prc_20221231]
march2023[,c("prc_20230331","prc_20221231"):=list(NULL)]

bhc_y9c <- rbind(bhc_y9c[date<="2022-12-31"],march2023)
bhc_y9c[,htm_assets:=bs_htm/bs_assets_total]
bhc_y9c[,afs_assets:=bs_afs/bs_assets_total]
bhc_y9c[,trading_assets:=bs_trading/bs_assets_total]
bhc_y9c[,large_deposits_assets:=BS_LARGE_DPST/BS_TOT_ASSET]
bhc_y9c[,other_deposits_assets:=(bs_total_deposits*1000-BS_LARGE_DPST)/BS_TOT_ASSET]
bhc_y9c[,subordinated_debt_assets:= bs_subordinated_debt/bs_assets_total]
bhc_y9c[,total_deposit_assets:=bs_total_deposits/bs_assets_total]
bhc_y9c[,equity_assets:=bs_equity_total/bs_assets_total]
bhc_y9c[,loans_re_assets:=bs_loans_re/bs_assets_total]
bhc_y9c[,loans_other_assets:=(bs_loans_total-bs_loans_re)/bs_assets_total]
bhc_y9c[,unins_deposits_assets:=deposits_domestic_uninsured_to_assets]
bhc_y9c[,ins_deposits_assets:=deposits_domestic_insured_to_assets]
bhc_y9c[,unrealized_loss_htm:=hcb_htm_value-bs_htm]
bhc_y9c[,cre_assets:=bs_loans_cre/bs_assets_total]

bhc_y9c[,MV_e:=market_cap]#ifelse(!is.na(market_cap_20230503),market_cap_20230503,market_cap)]
bhc_y9c[,q_MV_L_A:=(MV_e+bs_liabilities_total)/bs_assets_total]
bhc_y9c[,q_MV_BV:=MV_e/bs_equity_total]

bhc_y9c[,ROE:=is_net_income/bs_equity_total]

bhc_y9c[,nim:=is_net_interest_income/is_interest_income]
temp_bhc_y9c <- copy(bhc_y9c)
bhc_y9c[,bank_size_cat:=ifelse(ticker %in% bhc_y9c[date=="2022-12-31" & BS_TOT_ASSET>250e9]$ticker,"3. more than 250b",
                               ifelse(ticker %in% bhc_y9c[date=="2022-12-31" & BS_TOT_ASSET>50e9]$ticker,"2. 50b to 250b","1. less than 50b"))]

fed_funds <- fread("FEDFUNDS.csv")
fed_funds[,date:=as.Date(date,"%m/%d/%Y")]
t <- fed_funds[date=="2022-12-31"]
t[,date:=as.Date("2023-03-31")]
t[,fed_funds_rate:=5]
fed_funds <- rbind(fed_funds,t)

bhc_y9c <- merge(bhc_y9c,fed_funds,by="date")

bhc_y9c[,unrealized_loss_estimated:= (assets_maturity_3_to_5_yr*3+assets_maturity_5_to_15_yr*5+assets_maturity_more_than_15_yr*10)*fed_funds_rate/100]
f2 <- bhc_y9c

f2[,market_cap_initial:=MV_e[date=="2019-03-31"],by=ticker]
f2[,mkt_val_change:=MV_e/market_cap_initial]

f2 <- f2[date>="2019-01-01" & is.finite(mkt_val_change),.(mkt_cap=mean(mkt_val_change,na.rm=T)),by=.(date,bank_size_cat)]

ggplot(f2,aes(x=date,y=mkt_cap,color=bank_size_cat))+geom_point()+geom_line()+
   theme_minimal()+
  theme(legend.position = "bottom",legend.title = element_blank())+
  labs(y="Mean market cap change (Q1 2019=1)",x="")

q_summary <- bhc_y9c[,.(q=mean(q_MV_BV,na.rm=T),se=sd(q_MV_L_A,na.rm=T)),by=.(date,bank_size_cat)]

ggplot(q_summary,aes(x=date,y=q,color=bank_size_cat))+geom_point()+geom_line()+labs(x="",y="Price-to-book")+theme_minimal()+theme(legend.title = element_blank(),legend.position = "bottom")

g <- list()


mv_summary <- bhc_y9c[ date>"2019-01-01",
                      .(equity=sum(bs_equity_total,na.rm=T),
                        market_cap = sum(MV_e,na.rm=T),
                        unrealized_loss=sum(unrealized_loss_estimated,na.rm=T)),
                      by=date]

mv_summary_melt <- reshape2::melt(mv_summary, id.vars = "date")

g[[1]] <- ggplot(mv_summary_melt, aes(x = date, y = value/1e6, color = variable)) +
  geom_line(size=1)+
  geom_point(aes(shape=variable))+
  theme_minimal()+
  theme(legend.position = "none",legend.title = element_blank())+
  #scale_color_manual(values=c("dodgerblue4","cornflowerblue","darkred"))+
  labs(x="",y="$ billions")#+ggtitle("Panel A: All banks")



mv_summary <- bhc_y9c[ticker %in% bhc_y9c[date=="2022-12-31" & BS_TOT_ASSET>250e6]$ticker & date>"2019-01-01",
                      .(equity=sum(bs_equity_total,na.rm=T),
                        market_cap = sum(MV_e,na.rm=T),
                        unrealized_loss=sum(unrealized_loss_estimated,na.rm=T)),
                      by=date]

mv_summary_melt <- reshape2::melt(mv_summary, id.vars = "date")

g[[2]] <- ggplot(mv_summary_melt, aes(x = date, y = value/1e6, color = variable)) +
  geom_line(size=1)+
  geom_point(aes(shape=variable))+
  theme_minimal()+
  theme(legend.position = "none",legend.title = element_blank())+
  #scale_color_manual(values=c("dodgerblue4","cornflowerblue","darkred"))+
  labs(x="",y="")#+ggtitle("Panel B: Large banks (assets>= $ 100 billion)")



mv_summary <- bhc_y9c[ticker %in% bhc_y9c[date=="2022-12-31" & BS_TOT_ASSET<250e9 & BS_TOT_ASSET > 50e9]$ticker & date>"2019-01-01",
                      .(equity=sum(bs_equity_total,na.rm=T),
                        market_cap = sum(MV_e,na.rm=T),
                        unrealized_loss=sum(unrealized_loss_estimated,na.rm=T)),
                      by=date]

mv_summary_melt <- reshape2::melt(mv_summary, id.vars = "date")

g[[3]] <- ggplot(mv_summary_melt, aes(x = date, y = value/1e6, color = variable)) +
  geom_line(size=1)+
  geom_point(aes(shape=variable))+
  theme_minimal()+
  theme(legend.position = "bottom",legend.title = element_blank())+
  #scale_color_manual(values=c("dodgerblue4","cornflowerblue","darkred"))+
  labs(x="",y="$ billions")#+ggtitle("Panel C: Regional banks (assets < $ 100 bn and > $ 10 bn")


mv_summary <- bhc_y9c[ticker %in% bhc_y9c[date=="2022-12-31" & BS_TOT_ASSET <= 50e9]$ticker & date>"2019-01-01",
                      .(equity=sum(bs_equity_total,na.rm=T),
                        market_cap = sum(MV_e,na.rm=T),
                        unrealized_loss=sum(unrealized_loss_estimated,na.rm=T)),
                      by=date]

mv_summary_melt <- reshape2::melt(mv_summary, id.vars = "date")

g[[4]] <- ggplot(mv_summary_melt, aes(x = date, y = value/1e6, color = variable)) +
  geom_line(size=1)+
  geom_point(aes(shape=variable))+
  theme_minimal()+
  theme(legend.position = "bottom",legend.title = element_blank())+
  #scale_color_manual(values=c("dodgerblue4","cornflowerblue","darkred"))+
  labs(x="",y="")#+ggtitle("Panel D: Small banks (assets <= $ 10 bn)")

grid.arrange(g[[1]],g[[2]],g[[3]],g[[4]])

# destination = 'C:\\Users\\dratnadiwakara2\\Downloads\\mv_bv_ul.pdf'
# pdf(file=destination,width = 7,height = 5)
# for (i in 1:4) {
#   print(g[[i]])
# }
# dev.off()
reg_sample <- bhc_y9c[ticker %in% bhc_y9c[date=="2022-12-31" & BS_TOT_ASSET<250e9 ]$ticker]
reg_sample[,year:=year(date)]
reg_sample[,unr_assets:=unrealized_loss_estimated/bs_assets_total]
reg_sample[,deposit_growth:=deposit_growth.x]
reg_sample[,re_loans_less_than_3_yr_assets:=re_loans_less_than_3_months_assets+re_loans_3_mn_1yr_assets+re_loans_1_to_3_yr_assets]                 
reg_sample[,qtrs:=((year(date) - 2021) * 4) + quarter(date) -4 ]
reg_sample[,qtrs:=as.factor(qtrs)]
reg_sample[,qtrs:=relevel(qtrs,ref = "0")]

cols <- c("q_MV_L_A","q_MV_BV","htm_assets","afs_assets","depexpbeta","unins_deposits_assets","tier_1_assets","year","bs_assets_total","ROE","deposit_growth","date","re_loans_less_than_3_yr_assets","re_loans_3_to_5_yr_assets","re_loans_5_to_15_yr_assets", "re_loans_more_than_15_yr_assets","other_loans_less_than_3_months_assets","other_loans_3_mn_1yr_assets","other_loans_1_to_3_yr_assets","other_loans_3_to_5_yr_assets","other_loans_5_to_15_yr_assets","other_loans_more_than_15_yr_assets","qtrs","ticker","DEPOSITS_TO_FUNDING")
reg_sample <- reg_sample[,..cols]
reg_sample <- reg_sample[complete.cases(reg_sample)]
reg_sample[,w_assets:=bs_assets_total/sum(bs_assets_total,na.rm = T),by=year]
stargazer(reg_sample[date=="2022-12-31"],summary.stat = c("mean","sd","p25","median","p75","N"),type="text")
## 
## ==================================================================================================================
## Statistic                                  Mean         St. Dev.      Pctl(25)       Median        Pctl(75)     N 
## ------------------------------------------------------------------------------------------------------------------
## q_MV_L_A                                  1.030          0.047          1.003         1.019         1.046      174
## q_MV_BV                                   1.325          0.523          1.027         1.210         1.461      174
## htm_assets                                0.054          0.070          0.000         0.038         0.083      174
## afs_assets                                0.151          0.091          0.091         0.129         0.189      174
## depexpbeta                                0.391          0.094          0.336         0.380         0.447      174
## unins_deposits_assets                     0.448          0.118          0.381         0.444         0.509      174
## tier_1_assets                             0.086          0.030          0.084         0.091         0.101      174
## year                                    2,022.000        0.000          2,022         2,022         2,022      174
## bs_assets_total                       26,098,620.000 43,995,603.000 5,154,224.000 9,686,066.000 23,606,877.000 174
## ROE                                       0.128          0.041          0.102         0.121         0.150      174
## deposit_growth                            0.047          0.154         -0.040         0.014         0.084      174
## re_loans_less_than_3_yr_assets            0.019          0.019          0.007         0.015         0.026      174
## re_loans_3_to_5_yr_assets                 0.015          0.016          0.005         0.012         0.020      174
## re_loans_5_to_15_yr_assets                0.035          0.028          0.014         0.028         0.051      174
## re_loans_more_than_15_yr_assets           0.051          0.049          0.015         0.041         0.068      174
## other_loans_less_than_3_months_assets     0.221          0.135          0.118         0.190         0.310      174
## other_loans_3_mn_1yr_assets               0.032          0.027          0.016         0.024         0.041      174
## other_loans_1_to_3_yr_assets              0.071          0.036          0.043         0.066         0.095      174
## other_loans_3_to_5_yr_assets              0.108          0.056          0.064         0.103         0.141      174
## other_loans_5_to_15_yr_assets             0.114          0.076          0.060         0.098         0.151      174
## other_loans_more_than_15_yr_assets        0.018          0.026          0.003         0.010         0.021      174
## DEPOSITS_TO_FUNDING                       90.974         12.837        89.862        92.885         95.637     174
## w_assets                                  0.001          0.002         0.0003         0.001         0.001      174
## ------------------------------------------------------------------------------------------------------------------
dep_var = "q_MV_L_A~"
controls = c("re_loans_less_than_3_yr_assets","re_loans_3_to_5_yr_assets","re_loans_5_to_15_yr_assets","re_loans_more_than_15_yr_assets","other_loans_less_than_3_months_assets","other_loans_3_mn_1yr_assets","other_loans_1_to_3_yr_assets","other_loans_3_to_5_yr_assets","other_loans_5_to_15_yr_assets","other_loans_more_than_15_yr_assets","depexpbeta","unins_deposits_assets","htm_assets","tier_1_assets") 

# +ROE+log(bs_assets_total)+deposit_growth

r <- list()

r[[1]] <- felm(as.formula(paste0(dep_var,paste(controls,collapse = "+"))),data=reg_sample[date=="2022-03-31"],weights = reg_sample[date=="2022-03-31"]$w_assets  )
r[[2]] <- felm(as.formula(paste0(dep_var,paste(controls,collapse = "+"))),data=reg_sample[date=="2022-06-30"],weights = reg_sample[date=="2022-06-30"]$w_assets  )
r[[3]] <- felm(as.formula(paste0(dep_var,paste(controls,collapse = "+"))),data=reg_sample[date=="2022-09-30"],weights = reg_sample[date=="2022-09-30"]$w_assets  )
r[[4]] <- felm(as.formula(paste0(dep_var,paste(controls,collapse = "+"))),data=reg_sample[date=="2022-12-31"],weights = reg_sample[date=="2022-12-31"]$w_assets  )
r[[5]] <- felm(as.formula(paste0(dep_var,paste(controls,collapse = "+"))),data=reg_sample[year==2022],weights = reg_sample[year==2022]$w_assets )
r[[6]] <- felm(as.formula(paste0(dep_var,paste(controls,collapse = "+"))),data=reg_sample[date=="2023-03-31"],weights = reg_sample[date=="2023-03-31"]$w_assets  )

stargazer(r,type="text",no.space = T,omit.stat = "ser",
          column.labels = c("22 Q1","22 Q2","22 Q3","22 Q4","2022","23 Q1"),
          dep.var.labels = c("(MV+L)/A"))
## 
## =================================================================================================
##                                                           Dependent variable:                    
##                                       -----------------------------------------------------------
##                                                                (MV+L)/A                          
##                                         22 Q1     22 Q2     22 Q3     22 Q4     2022      23 Q1  
##                                          (1)       (2)       (3)       (4)       (5)       (6)   
## -------------------------------------------------------------------------------------------------
## re_loans_less_than_3_yr_assets         -0.583*  -0.554**   -0.622*   -0.328   -0.473***  -0.217  
##                                        (0.308)   (0.278)   (0.319)   (0.296)   (0.147)   (0.285) 
## re_loans_3_to_5_yr_assets              1.385*   1.596***  1.401***    0.303   0.898***    0.099  
##                                        (0.748)   (0.608)   (0.529)   (0.450)   (0.271)   (0.426) 
## re_loans_5_to_15_yr_assets            -0.630*** -0.528*** -0.324**    0.083   -0.280***   0.003  
##                                        (0.206)   (0.161)   (0.147)   (0.134)   (0.079)   (0.126) 
## re_loans_more_than_15_yr_assets        -0.043    -0.065    -0.109   -0.174**  -0.119*** -0.199***
##                                        (0.091)   (0.070)   (0.073)   (0.069)   (0.037)   (0.064) 
## other_loans_less_than_3_months_assets  -0.064*  -0.121*** -0.136*** -0.148*** -0.128*** -0.167***
##                                        (0.039)   (0.031)   (0.036)   (0.035)   (0.017)   (0.032) 
## other_loans_3_mn_1yr_assets             0.234    0.268*     0.143     0.158   0.209***    0.147  
##                                        (0.172)   (0.137)   (0.139)   (0.129)   (0.071)   (0.119) 
## other_loans_1_to_3_yr_assets           -0.115   -0.400**   -0.360*   -0.264   -0.228**   -0.249  
##                                        (0.218)   (0.195)   (0.196)   (0.178)   (0.097)   (0.165) 
## other_loans_3_to_5_yr_assets           -0.164    -0.044    -0.092    -0.103    -0.116*   -0.133  
##                                        (0.146)   (0.120)   (0.120)   (0.115)   (0.062)   (0.106) 
## other_loans_5_to_15_yr_assets         -0.189**  -0.171*** -0.156**  -0.153**  -0.171*** -0.155** 
##                                        (0.075)   (0.062)   (0.066)   (0.064)   (0.033)   (0.060) 
## other_loans_more_than_15_yr_assets     -0.150    -0.151    -0.199    -0.254*  -0.211*** -0.475***
##                                        (0.165)   (0.142)   (0.148)   (0.136)   (0.074)   (0.177) 
## depexpbeta                            -0.109*** -0.118*** -0.118*** -0.123*** -0.116*** -0.108***
##                                        (0.034)   (0.030)   (0.031)   (0.030)   (0.016)   (0.028) 
## unins_deposits_assets                 -0.054**   -0.032    -0.039*  -0.052**  -0.038*** -0.109***
##                                        (0.025)   (0.022)   (0.023)   (0.023)   (0.012)   (0.021) 
## htm_assets                             -0.042   -0.070**  -0.154*** -0.183*** -0.119*** -0.247***
##                                        (0.039)   (0.035)   (0.037)   (0.038)   (0.018)   (0.035) 
## tier_1_assets                         0.633***  0.792***  0.701***  0.602***  0.672***  0.495*** 
##                                        (0.218)   (0.179)   (0.181)   (0.166)   (0.092)   (0.153) 
## Constant                              1.122***  1.103***  1.129***  1.142***  1.123***  1.169*** 
##                                        (0.030)   (0.026)   (0.027)   (0.028)   (0.014)   (0.026) 
## -------------------------------------------------------------------------------------------------
## Observations                             167       168       168       174       677       173   
## R2                                      0.337     0.362     0.342     0.389     0.317     0.510  
## Adjusted R2                             0.276     0.304     0.282     0.335     0.303     0.467  
## =================================================================================================
## Note:                                                                 *p<0.1; **p<0.05; ***p<0.01
#,weights = reg_sample[date>=st_dt]$w_assets
st_dt <- as.Date("2020-03-31")
r <- list()

r[[1]] <- felm(as.formula(paste0(dep_var,paste(controls,collapse = "+"),"+htm_assets*qtrs+ROE+log(bs_assets_total)+deposit_growth","|date+ticker|0|date")),data=reg_sample[date>=st_dt]  )
r[[2]] <- felm(as.formula(paste0(dep_var,paste(controls,collapse = "+"),"+unins_deposits_assets*qtrs+ROE+log(bs_assets_total)+deposit_growth","|date+ticker|0|date")),data=reg_sample[date>=st_dt]  )
r[[3]] <- felm(as.formula(paste0(dep_var,paste(controls,collapse = "+"),"+depexpbeta*qtrs+ROE+log(bs_assets_total)+deposit_growth","|date+ticker|0|date")),data=reg_sample[date>=st_dt]  )
r[[4]] <- felm(as.formula(paste0(dep_var,paste(controls,collapse = "+"),"+other_loans_more_than_15_yr_assets*qtrs+ROE+log(bs_assets_total)+deposit_growth","|date+ticker|0|date")),data=reg_sample[date>=st_dt] )
r[[5]] <- felm(as.formula(paste0(dep_var,paste(controls,collapse = "+"),"+re_loans_more_than_15_yr_assets*qtrs+ROE+log(bs_assets_total)+deposit_growth","|date+ticker|0|date")),data=reg_sample[date>=st_dt] )
# r[[6]] <- felm(as.formula(paste0(dep_var,paste(controls,collapse = "+"),"+other_loans_5_to_15_yr_assets*qtrs+ROE","|date+ticker|0|date")),data=reg_sample[date>=st_dt] )



# stargazer(r,type="text",no.space = T,omit.stat = "ser")

coef_plot_1reg(r[[1]],"htm_assets:qtrs",0)+ggtitle("htm_assets")+labs(x="quarters since Dec 2021")

coef_plot_1reg(r[[2]],"unins_deposits_assets:qtrs",0)+ggtitle("unins_deposits_assets")+labs(x="quarters since Dec 2021")

coef_plot_1reg(r[[3]],"depexpbeta:qtrs",0)+ggtitle("depexpbeta")+labs(x="quarters since Dec 2021")

coef_plot_1reg(r[[4]],"other_loans_more_than_15_yr_assets:qtrs",0)+ggtitle("other_loans_more_than_15_yr_assets")+labs(x="quarters since Dec 2021")

coef_plot_1reg(r[[5]],"re_loans_more_than_15_yr_assets:qtrs",0)+ggtitle("re_loans_more_than_15_yr_assets")+labs(x="quarters since Dec 2021")

# coef_plot_1reg(r[[6]],"tier_1_assets:qtrs",0)+ggtitle("tier_1_assets")+labs(x="quarters since Dec 2021")