files = paste0("C:/Users/dratnadiwakara2/Documents/OneDrive - Louisiana State University/Raw Data/HMDA/Ultimate Panel Data/",c("2014.fst","2015.fst","2016.fst","2017.fst","2018.fst","2019.fst"))

panel = lapply(files, read_fst, as.data.table = TRUE,columns=c("asofdate","respondentid","rssd","agencycode","reportername","topholderrssdid","parentrssd")) 
panel <- do.call(rbind , panel)

panel[,rssd:=as.numeric(rssd)]
panel[,parentrssd:=as.numeric(parentrssd)]
panel[,topholderrssdid:=as.numeric(topholderrssdid)]
panel[,asofdate:=as.integer(asofdate)]
panel[,hmda_id:=ifelse(asofdate<=2017,paste0(agencycode,"-",respondentid),respondentid)]

panel <- panel[!duplicated(panel[,c("hmda_id","asofdate")])]

panelcomplete1 <- panel[,c("hmda_id","rssd","parentrssd","topholderrssdid")]
panelcomplete1 <- panelcomplete1[!duplicated(panelcomplete1[,c("hmda_id")])]



files = paste0("C:/Users/dratnadiwakara2/Documents/OneDrive - Louisiana State University/Raw Data/HMDA/Ultimate Panel Data/",paste0(as.character(2004:2013),".fst"))

panel = lapply(files, read_fst, as.data.table = TRUE,columns=c("asofdate","respondentid","rssd","agencycode","parentidentifier")) 
panel <- do.call(rbind , panel)

panel[,rssd:=as.numeric(rssd)]
panel[,parentrssd:=as.numeric(parentidentifier)]
panel[,asofdate:=as.integer(asofdate)]
panel[,hmda_id:=ifelse(asofdate<=2017,paste0(agencycode,"-",respondentid),respondentid)]

panel <- panel[!duplicated(panel[,c("hmda_id","asofdate")])]

panel <- panel[,c("hmda_id","rssd","parentrssd")]
panel[,topholderrssdid:=NA]
panel <- panel[!duplicated(panel[,c("hmda_id")])]

panel <- panel[!hmda_id %in% panelcomplete1$hmda_id]

panelcomplete1 <- rbind(panelcomplete1,panel)



files = paste0("C:/Users/dratnadiwakara2/Documents/OneDrive - Louisiana State University/Raw Data/HMDA/Ultimate Panel Data/",paste0(as.character(1995:2019),".fst"))

panel = lapply(files, read_fst, as.data.table = TRUE,columns=c("asofdate","respondentid","agencycode")) 
panel <- do.call(rbind , panel)

panel[,asofdate:=as.integer(asofdate)]
panel[,hmda_id:=ifelse(asofdate<=2017,paste0(agencycode,"-",respondentid),respondentid)]

panel <- panel[!duplicated(panel[,c("hmda_id","asofdate")])]

panel <- merge(panel,panelcomplete1,by="hmda_id",all.x = T)

panel[is.na(panel)]<-0

panel[,unique_id:=ifelse(parentrssd>0,parentrssd,ifelse(rssd>0,rssd,hmda_id))]

panel <- panel[!duplicated(panel[,c("hmda_id")])]
setkey(panel,hmda_id)

rm(panelcomplete1)

files <- NULL
files  <- list.files(pattern="*.fst",path = "C:/Users/dratnadiwakara2/Documents/OneDrive - Louisiana State University/Raw Data/HMDA/pre2004/OO_NP/",full.names = TRUE)
files  <- c(files,list.files(pattern="*.fst",path = "C:/Users/dratnadiwakara2/Documents/OneDrive - Louisiana State University/Raw Data/HMDA/pre2004/OO_RF/",full.names = TRUE))
files  <- c(files,list.files(pattern="*.fst",path = "C:/Users/dratnadiwakara2/Documents/OneDrive - Louisiana State University/Raw Data/HMDA/OO_NP/",full.names = TRUE))
files  <- c(files,list.files(pattern="*.fst",path = "C:/Users/dratnadiwakara2/Documents/OneDrive - Louisiana State University/Raw Data/HMDA/OO_RF/",full.names = TRUE))


hmda = lapply(files, read_fst, as.data.table = TRUE, columns=c("asofdate","respondentid","agencycode","actiontaken","censustract","purposeofloan"))
hmda <- do.call(rbind , hmda)

hmda <- hmda[actiontaken=="1"]

hmda[,hmda_id:=ifelse(asofdate<=2017,paste0(agencycode,"-",respondentid),respondentid)]

hmda <- hmda[nchar(censustract)==11]

hmda[,countycode:=substr(censustract,1,5)]

setkey(hmda,countycode)

cbsa_fips <- fread("C:/Users/dratnadiwakara2/Documents/OneDrive - Louisiana State University/Raw Data/Crosswalk Files/cbsa_countyfips.csv")
cbsa_fips[,fips:=ifelse(nchar(fips)==4,paste0("0",fips),paste0(fips))]
setkey(cbsa_fips,fips)

hmda <- merge(hmda,cbsa_fips,by.x="countycode",by.y="fips",all.x=T)

setkey(hmda,hmda_id)

hmda <- merge(hmda,panel[,c("hmda_id","unique_id")],by=c("hmda_id"))

1 Market Share of Top Lenders

1.1 National

1.1.1 All loans

yearrank <- hmda[,.N,by=.(asofdate,unique_id)]
yearrank[,rank:=frankv(N,order=-1),by=asofdate]
yearrank[,rank:=ifelse(rank<=5,"top 5",ifelse(rank<=10,"top 5 to 10","other"))]
yearrank <- yearrank[,.(N=sum(N)),by=.(asofdate,rank)]
yearrank <- dcast(yearrank,asofdate~rank)
yearrank[,top5pct:=`top 5`/(other+`top 5`+`top 5 to 10`)]
yearrank[,top10pct:=(`top 5`+`top 5 to 10`)/(other+`top 5`+`top 5 to 10`)]

yearrank <- yearrank[,c("asofdate","top5pct","top10pct")]
yearrank <- melt(yearrank,id.vars = c("asofdate"))
yearrank[,variable:=as.character(variable)]
yearrank[,variable:=ifelse(variable=="top5pct","Top 5 lenders","Top 10 lenders")]
yearrank[,value:=value*100]
ggplot(yearrank)+geom_line(aes(x=asofdate,y=value,color=variable),size=1)+theme_minimal()+scale_color_manual(values=c('royalblue','darkgreen'))+theme(legend.position = "bottom", legend.title = element_blank(), 
      panel.border = element_blank(), axis.line.x = element_line(color = "gray80"), 
      axis.text.x = element_text(angle = 90, hjust = 1))+labs(x="",y="% of loans") +scale_x_continuous(breaks = 1990:2019)

1.1.2 New purchases

yearrank <- hmda[purposeofloan=="1",.N,by=.(asofdate,unique_id)]
yearrank[,rank:=frankv(N,order=-1),by=asofdate]
yearrank[,rank:=ifelse(rank<=5,"top 5",ifelse(rank<=10,"top 5 to 10","other"))]
yearrank <- yearrank[,.(N=sum(N)),by=.(asofdate,rank)]
yearrank <- dcast(yearrank,asofdate~rank)
yearrank[,top5pct:=`top 5`/(other+`top 5`+`top 5 to 10`)]
yearrank[,top10pct:=(`top 5`+`top 5 to 10`)/(other+`top 5`+`top 5 to 10`)]

yearrank <- yearrank[,c("asofdate","top5pct","top10pct")]
yearrank <- melt(yearrank,id.vars = c("asofdate"))
yearrank[,variable:=as.character(variable)]
yearrank[,variable:=ifelse(variable=="top5pct","Top 5 lenders","Top 10 lenders")]
yearrank[,value:=value*100]
ggplot(yearrank)+geom_line(aes(x=asofdate,y=value,color=variable),size=1)+theme_minimal()+scale_color_manual(values=c('royalblue','darkgreen'))+theme(legend.position = "bottom", legend.title = element_blank(), 
      panel.border = element_blank(), axis.line.x = element_line(color = "gray80"), 
      axis.text.x = element_text(angle = 90, hjust = 1))+labs(x="",y="% of loans") +scale_x_continuous(breaks = 1990:2019)

1.1.3 Refinances

yearrank <- hmda[purposeofloan!="1",.N,by=.(asofdate,unique_id)]
yearrank[,rank:=frankv(N,order=-1),by=asofdate]
yearrank[,rank:=ifelse(rank<=5,"top 5",ifelse(rank<=10,"top 5 to 10","other"))]
yearrank <- yearrank[,.(N=sum(N)),by=.(asofdate,rank)]
yearrank <- dcast(yearrank,asofdate~rank)
yearrank[,top5pct:=`top 5`/(other+`top 5`+`top 5 to 10`)]
yearrank[,top10pct:=(`top 5`+`top 5 to 10`)/(other+`top 5`+`top 5 to 10`)]

yearrank <- yearrank[,c("asofdate","top5pct","top10pct")]
yearrank <- melt(yearrank,id.vars = c("asofdate"))
yearrank[,variable:=as.character(variable)]
yearrank[,variable:=ifelse(variable=="top5pct","Top 5 lenders","Top 10 lenders")]
yearrank[,value:=value*100]
ggplot(yearrank)+geom_line(aes(x=asofdate,y=value,color=variable),size=1)+theme_minimal()+scale_color_manual(values=c('royalblue','darkgreen'))+theme(legend.position = "bottom", legend.title = element_blank(), 
      panel.border = element_blank(), axis.line.x = element_line(color = "gray80"), 
      axis.text.x = element_text(angle = 90, hjust = 1))+labs(x="",y="% of loans") +scale_x_continuous(breaks = 1990:2019)

1.2 MSA Level

1.2.1 All loans

yearrank <- hmda[,.N,by=.(asofdate,unique_id)]
yearrank[,rank:=frankv(N,order=-1),by=asofdate]
yearrank[,rank:=ifelse(rank<=5,"top5","other")]
yearrank[,N:=NULL]


msarank <- hmda[,.N,by=.(asofdate,cbsa,unique_id)]
msarank <- merge(msarank,yearrank,by=c("asofdate","unique_id"))
msarank <- msarank[!is.na(cbsa)]
msarank <- msarank[,.(N=sum(N)),by=.(asofdate,cbsa,rank)]
msarank <- dcast(msarank,asofdate+cbsa~rank)
msarank[is.na(msarank)] <- 0
msarank[,top5:=top5/(top5+other)]
msarank[,top5:=top5*100]

msarank <- msarank[,.(P25=quantile(top5,0.25,na.rm = T),P50=quantile(top5,0.5,na.rm = T),P75=quantile(top5,0.75,na.rm = T)),by=asofdate]

msarank <- melt(msarank,id.vars = c("asofdate"))
msarank[,variable:=as.character(variable)]

ggplot(msarank)+geom_line(aes(x=asofdate,y=value,color=variable),size=1)+theme_minimal()+scale_color_manual(values=c('royalblue','darkgreen',"darkred"))+theme(legend.position = "bottom", legend.title = element_blank(), 
      panel.border = element_blank(), axis.line.x = element_line(color = "gray80"), 
      axis.text.x = element_text(angle = 90, hjust = 1))+labs(x="",y="% of loans") +scale_x_continuous(breaks = 1990:2019)

1.2.2 New purchases

yearrank <- hmda[purposeofloan=="1",.N,by=.(asofdate,unique_id)]
yearrank[,rank:=frankv(N,order=-1),by=asofdate]
yearrank[,rank:=ifelse(rank<=5,"top5","other")]
yearrank[,N:=NULL]


msarank <- hmda[purposeofloan=="1",.N,by=.(asofdate,cbsa,unique_id)]
msarank <- merge(msarank,yearrank,by=c("asofdate","unique_id"))
msarank <- msarank[!is.na(cbsa)]
msarank <- msarank[,.(N=sum(N)),by=.(asofdate,cbsa,rank)]
msarank <- dcast(msarank,asofdate+cbsa~rank)
msarank[is.na(msarank)] <- 0
msarank[,top5:=top5/(top5+other)]
msarank[,top5:=top5*100]

msarank <- msarank[,.(P25=quantile(top5,0.25,na.rm = T),P50=quantile(top5,0.5,na.rm = T),P75=quantile(top5,0.75,na.rm = T)),by=asofdate]

msarank <- melt(msarank,id.vars = c("asofdate"))
msarank[,variable:=as.character(variable)]

ggplot(msarank)+geom_line(aes(x=asofdate,y=value,color=variable),size=1)+theme_minimal()+scale_color_manual(values=c('royalblue','darkgreen',"darkred"))+theme(legend.position = "bottom", legend.title = element_blank(), 
      panel.border = element_blank(), axis.line.x = element_line(color = "gray80"), 
      axis.text.x = element_text(angle = 90, hjust = 1))+labs(x="",y="% of loans") +scale_x_continuous(breaks = 1990:2019)

1.2.3 Refinances

yearrank <- hmda[purposeofloan!="1",.N,by=.(asofdate,unique_id)]
yearrank[,rank:=frankv(N,order=-1),by=asofdate]
yearrank[,rank:=ifelse(rank<=5,"top5","other")]
yearrank[,N:=NULL]


msarank <- hmda[purposeofloan!="1",.N,by=.(asofdate,cbsa,unique_id)]
msarank <- merge(msarank,yearrank,by=c("asofdate","unique_id"))
msarank <- msarank[!is.na(cbsa)]
msarank <- msarank[,.(N=sum(N)),by=.(asofdate,cbsa,rank)]
msarank <- dcast(msarank,asofdate+cbsa~rank)
msarank[is.na(msarank)] <- 0
msarank[,top5:=top5/(top5+other)]
msarank[,top5:=top5*100]

msarank <- msarank[,.(P25=quantile(top5,0.25,na.rm = T),P50=quantile(top5,0.5,na.rm = T),P75=quantile(top5,0.75,na.rm = T)),by=asofdate]

msarank <- melt(msarank,id.vars = c("asofdate"))
msarank[,variable:=as.character(variable)]

ggplot(msarank)+geom_line(aes(x=asofdate,y=value,color=variable),size=1)+theme_minimal()+scale_color_manual(values=c('royalblue','darkgreen',"darkred"))+theme(legend.position = "bottom", legend.title = element_blank(), 
      panel.border = element_blank(), axis.line.x = element_line(color = "gray80"), 
      axis.text.x = element_text(angle = 90, hjust = 1))+labs(x="",y="% of loans") +scale_x_continuous(breaks = 1990:2019)

files = paste0("C:/Users/dratnadiwakara2/Documents/OneDrive - Louisiana State University/Raw Data/HMDA/Ultimate Panel Data/",as.character(2000:2016),".fst")

panel = lapply(files, read_fst, as.data.table = TRUE,columns=c("respondentid","agencycode","reportername","asofdate","parentname","parentidentifier","reporterhomecity","reporterhomestate","rssd"))
panel <- do.call(rbind , panel)

panel[,asofdate:=as.integer(asofdate)]
panel <- panel[!duplicated(panel[,c("respondentid","agencycode","asofdate")])]
panel[,parentidentifier:=stri_trim(parentidentifier)]

panel[,rssd:=as.numeric(rssd)]

panel[,hmda_id:=paste0(agencycode,"-",respondentid)]

files <- NULL
files  <- list.files(pattern="*.fst",path = "C:/Users/dratnadiwakara2/Documents/OneDrive - Louisiana State University/Raw Data/HMDA/pre2004/OO_NP/",full.names = TRUE)
files  <- c(files,list.files(pattern="*.fst",path = "C:/Users/dratnadiwakara2/Documents/OneDrive - Louisiana State University/Raw Data/HMDA/pre2004/OO_RF/",full.names = TRUE))
files  <- c(files,list.files(pattern="*.fst",path = "C:/Users/dratnadiwakara2/Documents/OneDrive - Louisiana State University/Raw Data/HMDA/OO_NP/",full.names = TRUE))
files  <- c(files,list.files(pattern="*.fst",path = "C:/Users/dratnadiwakara2/Documents/OneDrive - Louisiana State University/Raw Data/HMDA/OO_RF/",full.names = TRUE))

hmda = lapply(files, read_fst, as.data.table = TRUE,
              columns=c("asofdate","respondentid","agencycode","state","countycode","msa"))
hmda <- do.call(rbind , hmda)
hmda[,lender:=paste0(agencycode,"-",respondentid)]
hmda[,countycode:=paste0(state,countycode)]


cbsa_fips <- fread("C:/Users/dratnadiwakara2/Documents/OneDrive - Louisiana State University/Raw Data/Crosswalk Files/cbsa_countyfips.csv")
cbsa_fips[,fips:=ifelse(nchar(fips)==4,paste0("0",fips),paste0(fips))]

hmda <- merge(hmda,cbsa_fips,by.x="countycode",by.y="fips",all.x=T)
hmda[,c("agencycode","respondentid"):=list(NULL)]

gc()
##              used    (Mb) gc trigger    (Mb)   max used    (Mb)
## Ncells    2197739   117.4    4105467   219.3    4105467   219.3
## Vcells 2224100639 16968.6 6822701357 52053.1 7327129911 55901.6
mergers <- list()

temp <- list(1,"BANK ONE - JPMORGAN CHASE 2004",
             c("1-0000000008","1-0000007621","1-0000003106","1-0000011230","1-0000013655","1-0000013759","1-0000013914","1-0000014320","1-0000015184","1-0000018785","1-0000021969","1-0000023237","2-0000331647","3-0000002487"),
             unique(c(unique(panel[parentidentifier %in% c("0000002370","0000000008","0001039502","0000852218","0001040795"),]$hmda_id),"2-0000852218","1-0000023160","2-0000043557","1-22-1092200","1-0000000008")),
             2000,"JPMORGAN CHASE BANK, NA",2004)
mergers[[1]] <- temp

temp <- list(2,"COUNTRYWIDE - BANK OF AMERIC 2009" ,c("1-0000024141","2-0001644643","2-0003267484","7-20-2241771","1-0000024141","4-0000018039"),c("1-0000013044"),
             2005,"BANK OF AMERICA, N.A.",2009)
mergers[[2]] <- temp

temp <- list(3,"FLEET NA - BANK OF AMERICA 2005",c("1-0000000200"),c("1-0000013044"),
             2003,"BANK OF AMERICA, N.A.",2005)
mergers[[3]] <- temp

temp <- list(4,"WACHOVIA BK NA - WELLS FARGO 2010", c("1-0000000001","1-0000022559","1-56-0811711"), panel[substr(reportername,1,7)=="WELLS F"]$hmda_id,
             2005,"WELLS FARGO BANK, N.A.",2009)
mergers[[4]] <- temp

temp <- list(5,"ABN AMRO MTG GROUP - CITI BANK 2007",c("1-36-3744610"),unique(panel[parentidentifier=="0001951350"]$hmda_id),
             2004,"CITIMORTGAGE, INC.",2007)
mergers[[5]] <- temp

temp <- list(6,"UNION PLANTERS BANK - REGIONS FINANCIAL CORP 2004",
             c("1-0000013349"),
             c("9-0000233031","2-0000233031"),
             2002,c("REGIONS BANK"),2004)
mergers[[6]] <- temp

temp <- list(7,"AmSouth Bancorporation - REGIONS FINANCIAL CORP 2006",
             c("2-0000245333"),
             c("9-0000233031","2-0000233031"),
             2004,c("REGIONS BANK"),2006)
mergers[[7]] <- temp


temp <- list(8,"Washington Mutual - JPMORGAN CHASE 2008",
             c("4-0000008551","4-0000011905"),
             unique(c(unique(panel[parentidentifier %in% c("0000002370","0000000008","0001039502","0000852218","0001040795"),]$hmda_id),"2-0000852218","1-0000023160","2-0000043557","1-22-1092200","1-0000000008")),
             2005,"JPMORGAN CHASE BANK, NA",
             2008)
mergers[[8]] <- temp


temp <- list(9,"FIRST INTERSTATE BK CA  - Wells Fargo 1996",c("2-0000669667"),panel[substr(reportername,1,7)=="WELLS F"]$hmda_id,
             1994,"WELLS FARGO BANK, N.A.",1996)
mergers[[9]] <- temp



cbsas <- unique(hmda$cbsa)
yrs <- 2000:2016
acqbanks <- NULL
for(i in 1:length(mergers)) {
  acqbanks <- c(acqbanks,mergers[[i]][6][[1]])
}
acqbanks <- c(unique(acqbanks),"other")

cbsas1 <- merge(cbsas,yrs)
cbsas2 <- merge(cbsas,acqbanks)

cbsas <- merge(cbsas1,cbsas2,by="x")
names(cbsas) <- c("cbsa","acyr","bank")
cbsas <- data.table(cbsas)

cbsas[,bank:=as.character(bank)]
cbsas[,acqbank:=0]
cbsas[,pred_share:=0]


cbsa_bnk <- NULL
lender_bank <- NULL
sumtable <- NULL
for(i in 1:length(mergers)) {
  # print(i)
  mid=mergers[[i]][1][[1]]
  mname=mergers[[i]][2][[1]]
  pred_hmda_id=mergers[[i]][3][[1]]
  suc_hmda_id=mergers[[i]][4][[1]]
  yr=mergers[[i]][5][[1]]
  acname = mergers[[i]][6][[1]]
  acyr = mergers[[i]][7][[1]]

  temp <- hmda[asofdate == yr ]
  temp[,pred:=ifelse(lender %in% pred_hmda_id,1,0)]
  cw <- temp[,.(pred_share=mean(pred)),by=.(cbsa)]
  
  temp1 <- hmda[asofdate == (acyr-1) ]
  temp1[,suc:=ifelse(lender %in% suc_hmda_id,1,0)]
  cw1 <- temp1[,.(suc_share=mean(suc)),by=.(cbsa)]
  
  cw <- merge(cw,cw1,by="cbsa",all.x=T)
  cw <- cw[!is.na(cbsa)]
  cw[is.na(cw)] <- 0
  
  cw[,joint_share:=pred_share+suc_share]
  cw[,bank:=acname]
  cw[,acyr:=acyr]

  cw[,c("suc_share","joint_share"):=list(NULL)]
  cbsa_bnk <- rbind(cbsa_bnk,cw)
}


cbsa_bnk[,acqbank:=1]


cbsa_bnk <- rbind(cbsa_bnk,cbsas)
cbsa_bnk <- cbsa_bnk[!duplicated(cbsa_bnk[,c("cbsa","acyr","bank")])]
cbsa_bnk <- cbsa_bnk[!is.na(cbsa)]


cbsa_bnk_1 <- cbsa_bnk[,c("cbsa","pred_share","bank","acyr")]

names(cbsa_bnk_1) <- c("cbsa","pred_share_1","bank","acyr")
cbsa_bnk_1[,acyr:=acyr+1]
cbsa_bnk <- merge(cbsa_bnk,cbsa_bnk_1,by=c("cbsa","bank","acyr"),all.x = T)

names(cbsa_bnk_1) <- c("cbsa","pred_share_2","bank","acyr")
cbsa_bnk_1[,acyr:=acyr+1]
cbsa_bnk <- merge(cbsa_bnk,cbsa_bnk_1,by=c("cbsa","bank","acyr"),all.x = T)

names(cbsa_bnk_1) <- c("cbsa","pred_share_3","bank","acyr")
cbsa_bnk_1[,acyr:=acyr+1]
cbsa_bnk <- merge(cbsa_bnk,cbsa_bnk_1,by=c("cbsa","bank","acyr"),all.x = T)

names(cbsa_bnk_1) <- c("cbsa","pred_share_4","bank","acyr")
cbsa_bnk_1[,acyr:=acyr+1]
cbsa_bnk <- merge(cbsa_bnk,cbsa_bnk_1,by=c("cbsa","bank","acyr"),all.x = T)

names(cbsa_bnk_1) <- c("cbsa","pred_share_5","bank","acyr")
cbsa_bnk_1[,acyr:=acyr+1]
cbsa_bnk <- merge(cbsa_bnk,cbsa_bnk_1,by=c("cbsa","bank","acyr"),all.x = T)

names(cbsa_bnk_1) <- c("cbsa","pred_share_6","bank","acyr")
cbsa_bnk_1[,acyr:=acyr+1]
cbsa_bnk <- merge(cbsa_bnk,cbsa_bnk_1,by=c("cbsa","bank","acyr"),all.x = T)

names(cbsa_bnk_1) <- c("cbsa","pred_share_7","bank","acyr")
cbsa_bnk_1[,acyr:=acyr+1]
cbsa_bnk <- merge(cbsa_bnk,cbsa_bnk_1,by=c("cbsa","bank","acyr"),all.x = T)

names(cbsa_bnk_1) <- c("cbsa","pred_share_8","bank","acyr")
cbsa_bnk_1[,acyr:=acyr+1]
cbsa_bnk <- merge(cbsa_bnk,cbsa_bnk_1,by=c("cbsa","bank","acyr"),all.x = T)

names(cbsa_bnk_1) <- c("cbsa","pred_share_9","bank","acyr")
cbsa_bnk_1[,acyr:=acyr+1]
cbsa_bnk <- merge(cbsa_bnk,cbsa_bnk_1,by=c("cbsa","bank","acyr"),all.x = T)

cbsa_bnk[,pred_share_1:=ifelse(is.na(pred_share_1),0,pred_share_1)]
cbsa_bnk[,pred_share_2:=ifelse(is.na(pred_share_2),0,pred_share_2)]
cbsa_bnk[,pred_share_3:=ifelse(is.na(pred_share_3),0,pred_share_3)]
cbsa_bnk[,pred_share_4:=ifelse(is.na(pred_share_4),0,pred_share_4)]
cbsa_bnk[,pred_share_5:=ifelse(is.na(pred_share_5),0,pred_share_5)]
cbsa_bnk[,pred_share_6:=ifelse(is.na(pred_share_6),0,pred_share_6)]
cbsa_bnk[,pred_share_7:=ifelse(is.na(pred_share_7),0,pred_share_7)]
cbsa_bnk[,pred_share_8:=ifelse(is.na(pred_share_8),0,pred_share_8)]
cbsa_bnk[,pred_share_9:=ifelse(is.na(pred_share_9),0,pred_share_9)]

cbsa_bnk[,msinc13:=pred_share_1+pred_share_2+pred_share_3+0.00001]
cbsa_bnk[,msinc46:=pred_share_4+pred_share_5+pred_share_6+0.00001]
cbsa_bnk[,msinc79:=pred_share_7+pred_share_8+pred_share_9+0.00001]
 
# cbsa_share <- cbsa_bnk[,.(msinc13=sum(msinc13,na.rm=T)),by=.(cbsa,acyr)]


cbsa_bnk[,msinc13G:=ifelse(msinc13<=0.0001,"0. 0",
                           ifelse(msinc13<0.01,"1. Less than 1pct",
                           ifelse(msinc13<0.05,"2. 1 - 5pct",
                                  ifelse(msinc13<0.1,"3. 5pct - 10pct", "4. More than 10pct"))))]

cbsa_bnk[,msinc46G:=ifelse(msinc46<=0.0001,"0. 0",
                           ifelse(msinc46<0.01,"1. Less than 1pct",
                           ifelse(msinc46<0.05,"2. 1 - 5pct",
                                  ifelse(msinc46<0.1,"3. 5pct - 10pct", "4. More than 10pct"))))]


cbsa_bnk[,msinc79G:=ifelse(msinc79<=0.0001,"0. 0",
                           ifelse(msinc79<0.01,"1. Less than 1pct",
                           ifelse(msinc79<0.05,"2. 1 - 5pct",
                                  ifelse(msinc79<0.1,"3. 5pct - 10pct", "4. More than 10pct"))))]
# 
# cbsa_share<- read_fst("C:/Users/dratnadiwakara2/Documents/OneDrive - Louisiana State University/Projects/Bank Mergers/data/cbsa_share.fst",as.data.table = T)

# cbsa_share[,msinc13G:=ifelse(msinc13<=0.0001,"0. 0",
#                            ifelse(msinc13<0.01,"1. Less than 1pct",
#                            ifelse(msinc13<0.05,"2. 1 - 5pct",
#                                   ifelse(msinc13<0.1,"3. 5pct - 10pct", "4. More than 10pct"))))]
# 
# cbsa_share[,msinc46G:=ifelse(msinc46<=0.0001,"0. 0",
#                            ifelse(msinc46<0.01,"1. Less than 1pct",
#                            ifelse(msinc46<0.05,"2. 1 - 5pct",
#                                   ifelse(msinc46<0.1,"3. 5pct - 10pct", "4. More than 10pct"))))]

2 List of Mergers

2.1 Step 1: Identifying Lenders

We identified lenders that are consistently identified across in freddie and fannie data sets. Freddie and fannie identify lenders with a total loan amount epresenting 1% or more of the total loan amount of all loans in the Dataset for a given calendar quarter. Otherwise, the lender name is set to “Other Sellers”. The lists of Freddie and Fannie lenders with the corresponding number of loans in each year are available here and here, respectively.

List of Lenders Identified
  • Bank of America
  • JPMorgan Chase
  • Wells Fargo
  • US Bank
  • Flagstar FSB
  • Fifth Thrid Bank
  • Regions Financial Corp

2.2 Step 2: Identifying mergers

We identified all the mergers since 1995 where the acquirer is one the selected banks in the list above. The list of all identified mergers is available here

2.3 Step 3: Identifying targets present in HMDA data

Next, we exclude mergers if the target is not present in HMDA data. The list of selected mergers is available here

2.4 Step 4: Identify ‘large’ targets

Criteria: at least one MSA where target had 5% or more market share.

3 Summary Statistics

3.1 Freddie

freddie <- list.files(pattern="*.fst",path = "C:/Users/dratnadiwakara2/Documents/OneDrive - Louisiana State University/Raw Data/Freddie/Acq",full.names = TRUE)
freddie = lapply(freddie, read_fst,as.data.table=T, columns = c("fico","dt_first_pi","cd_msa","ltv","dti","orig_upb","int_rt","prop_type","zipcode","id_loan","orig_loan_term","seller_name","loan_purpose"))
freddie <- do.call(rbind , freddie)

freddie <- freddie[orig_loan_term==360 & prop_type=="SF"]
freddie[,loanyr:=year(dt_first_pi)]
freddie[,msa:=cd_msa]
freddie[,c("orig_loan_term","dt_first_pi","prop_type","cd_msa"):=list(NULL)]
freddie[,seller_name:= ifelse(seller_name %in% c("JPMORGAN CHASE BANK, NA","JPMORGAN CHASE BANK, NATIONAL ASSOCIATION","CHASE MANHATTAN MORTGAGE CORPORATION","CHASE HOME FINANCE LLC","CHASE HOME FINANCE","CHASE HOME FINANCE, LLC","JPMORGAN CHASE BANK, NATIONAL ASSOCIATION","JPMORGAN CHASE BANK, N.A."),"JPMORGAN CHASE BANK, NA",seller_name)]
freddie[,seller_name:= ifelse(seller_name %in%  c("CITIMORTGAGE, INC.","ABN AMRO, NKA CITIMORTGAGE INC.","CITIMORTGAGE, INC."),"CITIMORTGAGE, INC.",seller_name)]
freddie[,seller_name:= ifelse(seller_name %in% c("WELLS FARGO HOME MORTGAGE, INC.","WELLS FARGO BANK, N.A."),"WELLS FARGO BANK, N.A.",seller_name)]

freddie[,bank:=seller_name]
freddie[,bank:=ifelse(bank %in% unique(cbsa_bnk$bank),bank,"other")]
freddie[,freddie:=1]
vars <- c("fico","ltv","dti","orig_upb","int_rt","loanyr")

stargazer(freddie[,..vars],type="text",summary.stat = c("N","mean","sd","p25","median","p75"))
## 
## ======================================================================
## Statistic     N         Mean      St. Dev.   Pctl(25) Median  Pctl(75)
## ----------------------------------------------------------------------
## fico      16,245,111   748.509     395.911     695      741     776   
## ltv       16,245,111   73.367      17.035       66      78       80   
## dti       16,245,111   47.668      113.969      26      35       43   
## orig_upb  16,245,111 189,852.800 107,056.600 111,000  165,000 245,000 
## int_rt    16,245,111    5.699       1.234     4.750    5.875   6.625  
## loanyr    16,245,111  2,007.242     5.630     2,003    2,006   2,012  
## ----------------------------------------------------------------------

3.2 Fannie

fannie <- list.files(pattern="*.fst",path = "C:/Users/dratnadiwakara2/Documents/OneDrive - Louisiana State University/Raw Data/Fannie/Acq",full.names = TRUE)
fannie = lapply(fannie, read_fst,as.data.table=T, columns = c("loan_identifier","seller_name","original_interest_rate","original_upb","original_loan_term","origination_date","original_ltv","original_dti","credit_score","property_type","property_state","zip_code","msa","loan_purpose"))
fannie <- do.call(rbind , fannie)

fannie <- fannie[original_loan_term==360 & property_type=="SF"]
fannie[,loanyr:=year(origination_date)]
fannie[,seller_name:= ifelse(seller_name %in% c("JPMORGAN CHASE BANK, NA","JPMORGAN CHASE BANK, NATIONAL ASSOCIATION","CHASE MANHATTAN MORTGAGE CORPORATION","CHASE HOME FINANCE LLC","CHASE HOME FINANCE","CHASE HOME FINANCE, LLC","JPMORGAN CHASE BANK, NATIONAL ASSOCIATION","JPMORGAN CHASE BANK, N.A."),"JPMORGAN CHASE BANK, NA",seller_name)]
fannie[,seller_name:= ifelse(seller_name %in%  c("CITIMORTGAGE, INC.","ABN AMRO, NKA CITIMORTGAGE INC.","CITIMORTGAGE, INC."),"CITIMORTGAGE, INC.",seller_name)]
fannie[,seller_name:= ifelse(seller_name %in% c("WELLS FARGO HOME MORTGAGE, INC.","WELLS FARGO BANK, N.A."),"WELLS FARGO BANK, N.A.",seller_name)]

fannie[,bank:=seller_name]
fannie[,bank:=ifelse(bank %in% unique(cbsa_bnk$bank),bank,"other")]
fannie[,freddie:=0]

setnames(fannie,"zip_code","zipcode")
setnames(fannie,"original_ltv","ltv")
setnames(fannie,"original_upb","orig_upb")
setnames(fannie,"original_interest_rate","int_rt")
setnames(fannie,"loan_identifier","id_loan")
setnames(fannie,"credit_score","fico")
setnames(fannie,"original_dti","dti")

fannie[,c("property_type","property_state","original_loan_term","origination_date"):=list(NULL)]
fannie[,loan_purpose:=ifelse(loan_purpose=="R","N",loan_purpose)]

fannie <- fannie[loan_purpose != "U"]
fannie[,id_loan:=as.character(id_loan)]
vars <- c("fico","ltv","dti","orig_upb","int_rt","loanyr")

stargazer(fannie[,..vars],type="text",summary.stat = c("N","mean","sd","p25","median","p75"))
## 
## ======================================================================
## Statistic     N         Mean      St. Dev.   Pctl(25) Median  Pctl(75)
## ----------------------------------------------------------------------
## fico      20,256,524   736.426     54.519    700.000  747.000 781.000 
## ltv       20,347,997   73.220      16.213     65.000  78.000   80.000 
## dti       19,924,305   34.426      11.429     26.000  35.000   42.000 
## orig_upb  20,348,007 197,397.000 111,678.300 115,000  172,000 254,000 
## int_rt    20,348,004    5.542       1.240     4.500    5.625   6.375  
## loanyr    20,348,007  2,007.760     5.680     2,003    2,007   2,013  
## ----------------------------------------------------------------------

3.3 Moodys

moodys <- read_fst("C:/Users/dratnadiwakara2/Documents/OneDrive - Louisiana State University/Raw Data/Moodys/0001/LoanChars.fst",as.data.table = TRUE, columns=c("loanid","loanoriginationdate","zipcode","originalloanbalance","originalcltv","state","originator","armflag","originalfico","originalterm","originalltv","documentationtype","originalinterestrate","purposetype")) 

cbsa <- fread("C:/Users/dratnadiwakara2/Documents/OneDrive - Louisiana State University/Raw Data/Crosswalk Files/ZIP_CBSA.csv")
cbsa[,ZIP:=ifelse(nchar(ZIP)==3,paste0("00",ZIP),ifelse(nchar(ZIP)==4,paste0("0",ZIP),paste0(ZIP)))]
setorder(cbsa,ZIP,-RES_RATIO)
cbsa <- cbsa[!duplicated(cbsa[,c("ZIP")])]
cbsa[,c("RES_RATIO","BUS_RATIO","OTH_RATIO","TOT_RATIO"):=list(NULL)]
names(cbsa) <- c("zipcode","msa")
moodys <- merge(moodys,cbsa,by=c("zipcode"))

moodys <- moodys[originalterm==360 & armflag=="F"]
moodys[,loanyr:=as.numeric(substr(loanoriginationdate,1,4))]
moodys[,seller_name:= originator]
moodys[,seller_name:= ifelse(seller_name %in% c("JPMORGAN CHASE BANK, NA","JPMORGAN CHASE BANK, NATIONAL ASSOCIATION","CHASE MANHATTAN MORTGAGE CORPORATION","CHASE HOME FINANCE LLC","CHASE HOME FINANCE","CHASE HOME FINANCE, LLC","JPMORGAN CHASE BANK, NATIONAL ASSOCIATION","JPMORGAN CHASE BANK, N.A.","JP MORGAN CHASE BANK NA","CHASE MANHATTAN MORTGAGE CORP"),"JPMORGAN CHASE BANK, NA",seller_name)]
moodys[,seller_name:= ifelse(seller_name %in%  c("B OF A"),"BANK OF AMERICA, N.A.",seller_name)]
moodys[,seller_name:= ifelse(seller_name %in% c("WELLS FARGO HOME MORTGAGE, INC.","WELLS FARGO BANK, N.A.","WELLS FARGO BANK N.A"," WELLS FARGO HOME MTG, INC"),"WELLS FARGO BANK, N.A.",seller_name)]

moodys[,int_rt:=originalinterestrate]
moodys[,dti:=0]
moodys[,ltv:=originalltv]
moodys[,fico:=originalfico]
moodys[,orig_upb:= originalloanbalance]

moodys[,c("originalinterestrate","originalltv","originalfico","originalloanbalance","msacode","csacode","divcode","loanoriginationdate","armflag","originalterm"):=list(NULL)]

moodys[,fulldocumentation:=ifelse(documentationtype=="FU",1,0)]
gc()
##              used    (Mb) gc trigger    (Mb)   max used    (Mb)
## Ncells   38948152  2080.1   63281294  3379.6   42259062  2256.9
## Vcells 3088946713 23566.8 6822701357 52053.1 7327129911 55901.6
moodys[,bank:=seller_name]
moodys[,bank:=ifelse(bank %in% unique(cbsa_bnk$bank),bank,"other")]
vars <- c("fico","ltv","dti","orig_upb","int_rt","loanyr","fulldocumentation")

stargazer(moodys[,..vars],type="text",summary.stat = c("N","mean","sd","p25","median","p75"))
## 
## ======================================================================================
## Statistic             N        Mean      St. Dev.    Pctl(25)    Median     Pctl(75)  
## --------------------------------------------------------------------------------------
## fico              3,931,302   681.319     69.930     632.000     684.000     737.000  
## ltv               4,322,951   70.640      23.984      63.600     79.700      80.000   
## dti               4,399,462    0.000       0.000        0           0           0     
## orig_upb          4,398,108 232,097.600 213,490.700 84,980.000 161,000.000 332,000.000
## int_rt            4,391,198    7.441       2.059      6.250       6.890       8.400   
## loanyr            4,385,059  2,004.073     3.607    2,004.000   2,005.000   2,006.000 
## fulldocumentation 4,399,462    0.397       0.489        0           0           1     
## --------------------------------------------------------------------------------------

4 Descriptive Statistics: Market Share Changes

4.1 msinc13

print(ggplot(cbsa_bnk[msinc13>0.00001],aes(x=msinc13))+geom_histogram(fill="royalblue",alpha=0.3,color="royalblue")+theme_minimal())

4.2 msinc46

print(ggplot(cbsa_bnk[msinc46>0.00001],aes(x=msinc46))+geom_histogram(fill="royalblue",alpha=0.3,color="royalblue")+theme_minimal())

5 Dep. Var: Interest Increase by the Acquiring Bank

5.1 Linear Specification

\[ interest rate = \Sigma_{bin} \beta_{bin} \times msinc13 \in bin+ \Sigma_{bin}\beta_{bin} \times msinc46 \in bin+fico+ltv+dti+log(loanamount) +BANK*MSA\text{ }FE+YR\text{ }FE\]

\(msinc13\) : Change in market share in last 3 years
\(msinc46\) : Change in market share 4-6 years

regsample <- rbind(freddie[loan_purpose=="P"],fannie[loan_purpose=="P"])

regsample <- merge(regsample,cbsa_bnk,by.x=c("bank","msa","loanyr"),by.y=c("bank","cbsa","acyr"))

regsample[,bank_msa:=paste(seller_name,msa)]


  r <- list()
  r3 <- list()
  r[[1]] <- felm(int_rt~msinc13+msinc46+msinc79+fico+ltv+dti+log(orig_upb)+freddie|bank_msa+loanyr|0|msa,data=regsample)

  r3[[1]] <- felm(int_rt~factor(msinc13G)+factor(msinc46G)+factor(msinc79G)+fico+ltv+dti+log(orig_upb)+freddie|bank_msa+loanyr|0|msa,data=regsample)
regsample <- rbind(freddie[loan_purpose!="P"],fannie[loan_purpose!="P"])

regsample <- merge(regsample,cbsa_bnk,by.x=c("bank","msa","loanyr"),by.y=c("bank","cbsa","acyr"))

regsample[,bank_msa:=paste(seller_name,msa)]
regsample[,cashoutref:=ifelse(loan_purpose=="C",1,0)]

r[[2]] <- felm(int_rt~msinc13+msinc46+msinc79+fico+ltv+dti+log(orig_upb)+freddie+cashoutref|bank_msa+loanyr|0|msa,data=regsample)

r3[[2]] <- felm(int_rt~factor(msinc13G)+factor(msinc46G)+factor(msinc79G)+fico+ltv+dti+log(orig_upb)+freddie+cashoutref|bank_msa+loanyr|0|msa,data=regsample)
regsample <- merge(moodys[purposetype=="PUR"],cbsa_bnk,by.x=c("bank","msa","loanyr"),by.y=c("bank","cbsa","acyr"))
# regsample[,msinccat13:=ifelse(msinc13<=0,"0",ifelse(msinc13<= 0.02 ,"Less than 2%",ifelse(msinc13<0.05,"Less than 5%","More than 5%")))]
regsample[,bank_msa:=paste(seller_name,msa)]
# regsample[,yr_msa:=paste(loanyr,msa)]

  r[[3]] <- felm(int_rt~msinc13+msinc46+fico+ltv+fulldocumentation+log(orig_upb)|bank_msa+loanyr|0|msa,data=regsample)
  # r2[[3]] <- felm(int_rt~msinc13+I(msinc13^2)+msinc46+I(msinc46^2)+fico+ltv+fulldocumentation+log(orig_upb)|bank_msa+loanyr|0|msa,data=regsample)
  r3[[3]] <- felm(int_rt~factor(msinc13G)+fico+ltv+fulldocumentation+log(orig_upb)|bank_msa+loanyr|0|msa,data=regsample)
regsample <- merge(moodys[purposetype %in% c("CSH","REF")],cbsa_bnk,by.x=c("bank","msa","loanyr"),by.y=c("bank","cbsa","acyr"))
# regsample[,msinccat13:=ifelse(msinc13<=0,"0",ifelse(msinc13<= 0.02 ,"Less than 2%",ifelse(msinc13<0.05,"Less than 5%","More than 5%")))]
regsample[,bank_msa:=paste(seller_name,msa)]
regsample[,cashoutref:=ifelse(purposetype=="CSH",1,0)]

  r[[4]] <- felm(int_rt~msinc13+msinc46+fico+ltv+fulldocumentation+log(orig_upb)|bank_msa+loanyr|0|msa,data=regsample)
  r3[[4]] <- felm(int_rt~factor(msinc13G)+fico+ltv+fulldocumentation+log(orig_upb)+cashoutref|bank_msa+loanyr|0|msa,data=regsample)

5.2 Linear

  .printtable(r,column.labels = c("GSE-New Purchase","GSE - Fefinances","Moody's-New Purchase","Moody's-Refinances"),lines = list(c("Fixed Effects","MSA*Bank, Yr","MSA*Bank, Yr","MSA*Bank, Yr")))
## 
## ===========================================================================================
##                                              Dependent variable:                           
##                   -------------------------------------------------------------------------
##                   GSE-New Purchase GSE - Fefinances Moody's-New Purchase Moody's-Refinances
##                         (1)              (2)                (3)                 (4)        
## -------------------------------------------------------------------------------------------
## msinc13               0.599***         0.917***           5.732**            12.516***     
##                       (0.052)          (0.053)            (2.235)             (2.275)      
## msinc46              -0.239***         0.473***            4.581               -1.971      
##                       (0.086)          (0.092)            (2.824)             (3.224)      
## msinc79                -0.125          1.180***                                            
##                       (0.199)          (0.215)                                             
## fico                -0.00003***       -0.0001***         -0.006***           -0.006***     
##                      (0.00000)        (0.00001)           (0.0001)            (0.0002)     
## ltv                   0.004***         0.004***          -0.020***           -0.007***     
##                       (0.0001)         (0.0001)           (0.001)             (0.001)      
## dti                  0.0001***        0.0001***                                            
##                      (0.00001)        (0.00001)                                            
## fulldocumentation                                        -0.170***           -0.127***     
##                                                           (0.015)             (0.009)      
## log(orig_upb)        -0.238***        -0.205***          -0.946***           -0.742***     
##                       (0.005)          (0.007)            (0.026)             (0.013)      
## freddie               0.032***         0.060***                                            
##                       (0.002)          (0.002)                                             
## cashoutref                             0.093***                                            
##                                        (0.004)                                             
## -------------------------------------------------------------------------------------------
## Fixed Effects       MSA*Bank, Yr     MSA*Bank, Yr       MSA*Bank, Yr                       
## Observations         9,483,199        14,406,011         1,400,431           1,588,104     
## Adjusted R2            0.915            0.885              0.561               0.359       
## ===========================================================================================
## Note:                                                           *p<0.1; **p<0.05; ***p<0.01
## 

5.3 Market Share Bins

  .printtable(r3,column.labels = c("GSE - Purchase","GSE - Refinance","Moody's - Purchase","Moody's - Refinance"),lines = list(c("Fixed Effects","MSA*Bank, Yr","MSA*Bank, Yr","MSA*Bank, Yr")))
## 
## ========================================================================================================
##                                                             Dependent variable:                         
##                                    ---------------------------------------------------------------------
##                                    GSE - Purchase GSE - Refinance Moody's - Purchase Moody's - Refinance
##                                         (1)             (2)              (3)                 (4)        
## --------------------------------------------------------------------------------------------------------
## factor(msinc13G)1. Less than 1pct     0.050***       0.069***         -0.154***             0.026       
##                                       (0.004)         (0.004)          (0.016)             (0.022)      
## factor(msinc13G)2. 1 - 5pct           0.047***       0.046***          0.310***           0.419***      
##                                       (0.005)         (0.005)          (0.100)             (0.089)      
## factor(msinc13G)3. 5pct - 10pct       0.033***       0.054***           0.343*            0.736***      
##                                       (0.007)         (0.008)          (0.175)             (0.139)      
## factor(msinc13G)4. More than 10pct    0.101***       0.117***                             2.178***      
##                                       (0.010)         (0.010)          (0.000)             (0.147)      
## factor(msinc46G)1. Less than 1pct      -0.002        0.020***                                           
##                                       (0.005)         (0.005)                                           
## factor(msinc46G)2. 1 - 5pct           0.015**        0.031***                                           
##                                       (0.006)         (0.006)                                           
## factor(msinc46G)3. 5pct - 10pct      -0.028***         0.015                                            
##                                       (0.007)         (0.010)                                           
## factor(msinc46G)4. More than 10pct   -0.095***         0.013                                            
##                                       (0.015)         (0.010)                                           
## factor(msinc79G)1. Less than 1pct      -0.004         0.024*                                            
##                                       (0.009)         (0.012)                                           
## factor(msinc79G)2. 1 - 5pct            0.004         0.049***                                           
##                                       (0.011)         (0.012)                                           
## factor(msinc79G)3. 5pct - 10pct        -0.023         0.049**                                           
##                                       (0.015)         (0.020)                                           
## factor(msinc79G)4. More than 10pct   -0.070***       0.068***                                           
##                                       (0.021)         (0.015)                                           
## fico                                -0.00003***     -0.0001***        -0.006***           -0.006***     
##                                      (0.00000)       (0.00001)         (0.0001)           (0.0002)      
## ltv                                   0.004***       0.004***         -0.020***           -0.007***     
##                                       (0.0001)       (0.0001)          (0.001)             (0.001)      
## dti                                  0.0001***       0.0001***                                          
##                                      (0.00001)       (0.00001)                                          
## fulldocumentation                                                     -0.168***           -0.128***     
##                                                                        (0.015)             (0.009)      
## log(orig_upb)                        -0.238***       -0.205***        -0.946***           -0.743***     
##                                       (0.005)         (0.007)          (0.026)             (0.013)      
## freddie                               0.033***       0.061***                                           
##                                       (0.002)         (0.002)                                           
## cashoutref                                           0.093***                             -0.017**      
##                                                       (0.004)                              (0.007)      
## --------------------------------------------------------------------------------------------------------
## Fixed Effects                       MSA*Bank, Yr   MSA*Bank, Yr      MSA*Bank, Yr                       
## Observations                         9,483,199      14,406,011        1,400,431           1,588,104     
## Adjusted R2                            0.915           0.885            0.561               0.359       
## ========================================================================================================
## Note:                                                                        *p<0.1; **p<0.05; ***p<0.01
## 

6 Dep. Var: Loan-to-value

6.1 Linear

regsample <- rbind(freddie[loan_purpose=="P"],fannie[loan_purpose=="P"])

regsample <- merge(regsample,cbsa_bnk,by.x=c("bank","msa","loanyr"),by.y=c("bank","cbsa","acyr"))

regsample[,bank_msa:=paste(seller_name,msa)]


  r <- list()
  r3 <- list()
  r[[1]] <- felm(I(ltv/100)~msinc13+msinc46+msinc79+fico+dti+log(orig_upb)+freddie|bank_msa+loanyr|0|msa,data=regsample)

  r3[[1]] <- felm(I(ltv/100)~factor(msinc13G)+factor(msinc46G)+factor(msinc79G)+fico+dti+log(orig_upb)+freddie|bank_msa+loanyr|0|msa,data=regsample)
regsample <- rbind(freddie[loan_purpose!="P"],fannie[loan_purpose!="P"])

regsample <- merge(regsample,cbsa_bnk,by.x=c("bank","msa","loanyr"),by.y=c("bank","cbsa","acyr"))

regsample[,bank_msa:=paste(seller_name,msa)]
regsample[,cashoutref:=ifelse(loan_purpose=="C",1,0)]

r[[2]] <- felm(I(ltv/100)~msinc13+msinc46+msinc79+fico+dti+log(orig_upb)+freddie+cashoutref|bank_msa+loanyr|0|msa,data=regsample)

r3[[2]] <- felm(I(ltv/100)~factor(msinc13G)+factor(msinc46G)+factor(msinc79G)+fico+dti+log(orig_upb)+freddie+cashoutref|bank_msa+loanyr|0|msa,data=regsample)
regsample <- merge(moodys[purposetype=="PUR"],cbsa_bnk,by.x=c("bank","msa","loanyr"),by.y=c("bank","cbsa","acyr"))

regsample[,bank_msa:=paste(seller_name,msa)]

  r[[3]] <- felm(I(ltv/100)~msinc13+msinc46+fico+fulldocumentation+log(orig_upb)|bank_msa+loanyr|0|msa,data=regsample)
  r3[[3]] <- felm(I(ltv/100)~factor(msinc13G)+fico+fulldocumentation+log(orig_upb)|bank_msa+loanyr|0|msa,data=regsample)
regsample <- merge(moodys[purposetype %in% c("CSH","REF")],cbsa_bnk,by.x=c("bank","msa","loanyr"),by.y=c("bank","cbsa","acyr"))
regsample[,bank_msa:=paste(seller_name,msa)]
regsample[,cashoutref:=ifelse(purposetype=="CSH",1,0)]

  r[[4]] <- felm(I(ltv/100)~msinc13+msinc46+fico+fulldocumentation+log(orig_upb)|bank_msa+loanyr|0|msa,data=regsample)
  r3[[4]] <- felm(I(ltv/100)~factor(msinc13G)+fico+fulldocumentation+log(orig_upb)+cashoutref|bank_msa+loanyr|0|msa,data=regsample)
  .printtable(r,column.labels = c("GSE - New Purchase","GSE - Refinances","Moodys - New Purchase","Moodys - Refinances"),lines = list(c("Fixed Effects","MSA*Bank, Yr","MSA*Bank, Yr","MSA*Bank, Yr","MSA*Bank, Yr")))
## 
## ===============================================================================================
##                                                Dependent variable:                             
##                   -----------------------------------------------------------------------------
##                   GSE - New Purchase GSE - Refinances Moodys - New Purchase Moodys - Refinances
##                          (1)               (2)                 (3)                  (4)        
## -----------------------------------------------------------------------------------------------
## msinc13               -0.062***          0.072***           -0.818***            0.304***      
##                        (0.017)           (0.025)             (0.201)              (0.101)      
## msinc46               -0.206***          0.065**            -3.870***            -3.581***     
##                        (0.027)           (0.029)             (0.727)              (0.673)      
## msinc79               -0.218***         -0.219***                                              
##                        (0.036)           (0.049)                                               
## fico                 -0.00001***       -0.00004***         -0.0002***           -0.0005***     
##                       (0.00000)         (0.00000)           (0.00002)            (0.00001)     
## dti                  -0.00001***        0.00002***                                             
##                       (0.00000)         (0.00000)                                              
## fulldocumentation                                           0.011***             0.022***      
##                                                              (0.002)              (0.002)      
## log(orig_upb)          0.044***          0.090***           0.167***             0.106***      
##                        (0.002)           (0.005)             (0.004)              (0.006)      
## freddie               -0.005***         -0.003***                                              
##                        (0.001)           (0.001)                                               
## cashoutref                              -0.021***                                              
##                                          (0.001)                                               
## -----------------------------------------------------------------------------------------------
## Fixed Effects        MSA*Bank, Yr      MSA*Bank, Yr       MSA*Bank, Yr         MSA*Bank, Yr    
## Observations          9,483,199         14,406,013          1,401,329            1,588,419     
## Adjusted R2             0.089             0.202               0.474                0.217       
## ===============================================================================================
## Note:                                                               *p<0.1; **p<0.05; ***p<0.01
## 

6.2 Market Share Bins

  .printtable(r3,column.labels = c("GSE - New Purchase","GSE - Refinances","Moodys - New Purchase","Moodys - Refinances"),lines = list(c("Fixed Effects","MSA*Bank, Yr","MSA*Bank, Yr","MSA*Bank, Yr","MSA*Bank, Yr")))
## 
## ================================================================================================================
##                                                                 Dependent variable:                             
##                                    -----------------------------------------------------------------------------
##                                    GSE - New Purchase GSE - Refinances Moodys - New Purchase Moodys - Refinances
##                                           (1)               (2)                 (3)                  (4)        
## ----------------------------------------------------------------------------------------------------------------
## factor(msinc13G)1. Less than 1pct       0.005***           0.003*            -0.025***            -0.007**      
##                                         (0.001)           (0.001)             (0.003)              (0.003)      
## factor(msinc13G)2. 1 - 5pct            -0.005***          -0.0004            -0.039***              0.004       
##                                         (0.002)           (0.002)             (0.009)              (0.004)      
## factor(msinc13G)3. 5pct - 10pct         -0.003*            0.005*             -0.021*             0.029***      
##                                         (0.002)           (0.003)             (0.012)              (0.007)      
## factor(msinc13G)4. More than 10pct       -0.001            0.002                                  0.129***      
##                                         (0.004)           (0.005)             (0.000)              (0.037)      
## factor(msinc46G)1. Less than 1pct        -0.002            0.001                                                
##                                         (0.002)           (0.002)                                               
## factor(msinc46G)2. 1 - 5pct            -0.006***          0.004**                                               
##                                         (0.002)           (0.002)                                               
## factor(msinc46G)3. 5pct - 10pct        -0.010***           0.005                                                
##                                         (0.002)           (0.004)                                               
## factor(msinc46G)4. More than 10pct     -0.029***           0.006                                                
##                                         (0.005)           (0.008)                                               
## factor(msinc79G)1. Less than 1pct        -0.003           -0.006*                                               
##                                         (0.002)           (0.004)                                               
## factor(msinc79G)2. 1 - 5pct            -0.012***         -0.008***                                              
##                                         (0.002)           (0.003)                                               
## factor(msinc79G)3. 5pct - 10pct        -0.007***         -0.013***                                              
##                                         (0.002)           (0.005)                                               
## factor(msinc79G)4. More than 10pct     -0.035***         -0.026***                                              
##                                         (0.005)           (0.009)                                               
## fico                                  -0.00001***       -0.00004***         -0.0002***           -0.0005***     
##                                        (0.00000)         (0.00000)           (0.00002)            (0.00001)     
## dti                                   -0.00001***        0.00002***                                             
##                                        (0.00000)         (0.00000)                                              
## fulldocumentation                                                            0.011***             0.022***      
##                                                                               (0.002)              (0.002)      
## log(orig_upb)                           0.044***          0.090***           0.167***             0.106***      
##                                         (0.002)           (0.005)             (0.004)              (0.006)      
## freddie                                -0.005***         -0.003***                                              
##                                         (0.001)           (0.001)                                               
## cashoutref                                               -0.021***                                 -0.002       
##                                                           (0.001)                                  (0.001)      
## ----------------------------------------------------------------------------------------------------------------
## Fixed Effects                         MSA*Bank, Yr      MSA*Bank, Yr       MSA*Bank, Yr         MSA*Bank, Yr    
## Observations                           9,483,199         14,406,013          1,401,329            1,588,419     
## Adjusted R2                              0.089             0.202               0.474                0.217       
## ================================================================================================================
## Note:                                                                                *p<0.1; **p<0.05; ***p<0.01
## 

8 HMDA Data: New Purchases

files <- NULL
files  <- list.files(pattern="*.fst",path = "C:/Users/dratnadiwakara2/Documents/OneDrive - Louisiana State University/Raw Data/HMDA/pre2004/OO_NP/",full.names = TRUE)
# files  <- c(files,list.files(pattern="*.fst",path = "C:/Users/dratnadiwakara2/Documents/OneDrive - Louisiana State University/Raw Data/HMDA/pre2004/OO_RF/",full.names = TRUE))
files  <- c(files,list.files(pattern="*.fst",path = "C:/Users/dratnadiwakara2/Documents/OneDrive - Louisiana State University/Raw Data/HMDA/OO_NP/",full.names = TRUE))
# files  <- c(files,list.files(pattern="*.fst",path = "C:/Users/dratnadiwakara2/Documents/OneDrive - Louisiana State University/Raw Data/HMDA/OO_RF/",full.names = TRUE))

files <- files[substr(files,100,103) %in% as.character(2000:2017)] #c("2014","2015","2016","2017","2018")

hmda = lapply(files, read_fst, as.data.table = TRUE,
              columns=c("asofdate","respondentid","agencycode","state","countycode","msa","actiontaken","applicantrace1","applicantincome","amountofloan","typeofpurchaser","typeofloan","applicantethnicity"))
hmda <- do.call(rbind , hmda)
# hmda <- hmda[asofd•ate>=2000 & asofdate<2017]

hmda[,lender:=paste0(agencycode,"-",respondentid)]
hmda[,countycode:=paste0(state,countycode)]

hmda[,approved:=ifelse(actiontaken %in% c("1"),1,0)]
hmda[,sold:=ifelse(typeofpurchaser !="0" & actiontaken=="1",1,ifelse(actiontaken=="1",0,NA))]
hmda[,nonwhite:=ifelse(applicantrace1=="5",0,1)]




lender_bank <- read_fst("C:/Users/dratnadiwakara2/Documents/OneDrive - Louisiana State University/Projects/Bank Mergers/data/lender_bank.fst",as.data.table = T)

hmda <- merge(hmda,lender_bank,by="lender",all.x=T)

cbsa_fips <- fread("C:/Users/dratnadiwakara2/Documents/OneDrive - Louisiana State University/Raw Data/Crosswalk Files/cbsa_countyfips.csv")
cbsa_fips[,fips:=ifelse(nchar(fips)==4,paste0("0",fips),paste0(fips))]

hmda <- merge(hmda,cbsa_fips,by.x="countycode",by.y="fips",all.x=T)


hmda <- merge(hmda,cbsa_bnk,by.x=c("bank","cbsa","asofdate"),by.y=c("bank","cbsa","acyr"),all.x=T)

hmda[,msinc13:=ifelse(is.na(msinc13),0.00001,msinc13)]
hmda[,msinc46:=ifelse(is.na(msinc46),0.00001,msinc46)]

hmda[,bank:=ifelse(is.na(bank),lender,bank)]
hmda[,msinc13G:=ifelse(is.na(msinc13G),"0. 0",msinc13G)]
hmda[,msinc46G:=ifelse(is.na(msinc46G),"0. 0",msinc46G)]

hmda[,bank_msa:=paste(bank,cbsa)]
hmda <- hmda[!is.na(cbsa)]

hmda[,applicantincome:=as.numeric(applicantincome)]
hmda[,amountofloan:=as.numeric(amountofloan)]

hmda <- hmda[applicantincome>0 & amountofloan>0]

hmda[,msinc13G:=factor(msinc13G)]
# hmda <- within(hmda, msinc13G <- relevel(msinc13G, ref = 1))
hmda[,msinc46G:=as.factor(msinc46G)]

hmda[,hispanic:=ifelse(applicantethnicity=="1",1,0)]
hmda[,race:=ifelse(hispanic==1,"hispanic",ifelse(applicantrace1=="5","0white",ifelse(applicantrace1=="3","black","other")))]

hmda[,actiontaken:=as.numeric(actiontaken)]
hmda[,denied:=ifelse(actiontaken %in% c(3,7),1,0)]
hmda[,typeofloan:=as.numeric(typeofloan)]

8.1 Descriptive Statistics

vars <- c("amountofloan","applicantincome","approved","sold","nonwhite","asofdate")

stargazer(hmda[,..vars],type="text",summary.stat = c("N","mean","sd","p25","median","p75"))
## 
## ======================================================================
## Statistic           N        Mean    St. Dev. Pctl(25) Median Pctl(75)
## ----------------------------------------------------------------------
## amountofloan    64,052,426  214.553  236.642    110     173     272   
## applicantincome 64,052,426  93.720   115.469     48      72     110   
## approved        64,052,426   0.568    0.495      0       1       1    
## sold            36,381,324   0.802    0.398    1.000   1.000   1.000  
## nonwhite        64,052,426   0.283    0.450      0       0       1    
## asofdate        64,052,426 2,009.619  4.344    2,006   2,009   2,014  
## ----------------------------------------------------------------------

8.2 Regressions

8.2.1 Main Result

r <- list()
r[[1]] <- felm(approved~msinc13+msinc46+log(applicantincome)+log(amountofloan)+factor(race)|bank_msa+asofdate,data=hmda[actiontaken<=3 & typeofloan==1])
r[[2]] <- felm(approved~msinc13+msinc46+log(applicantincome)+log(amountofloan)+factor(race)|bank_msa+asofdate,data=hmda[actiontaken<=3 & typeofloan==2])
r[[3]] <- felm(sold~msinc13+msinc46+log(applicantincome)+log(amountofloan)+factor(race)|bank_msa+asofdate,data=hmda[typeofloan==1])
r[[4]] <- felm(sold~msinc13+msinc46+log(applicantincome)+log(amountofloan)+factor(race)|bank_msa+asofdate,data=hmda[typeofloan==2])

.printtable(r,column.labels = c("Approved-Conventional","Approved-FHA","Securitized-Conventional","Securitized-FHA"),lines = list(c("Fixed Effects","MSA*Bank, Yr","MSA*Bank, Yr","MSA*Bank, Yr","MSA*Bank, Yr")))
## 
## ================================================================================================
##                                                  Dependent variable:                            
##                      ---------------------------------------------------------------------------
##                      Approved-Conventional Approved-FHA Securitized-Conventional Securitized-FHA
##                               (1)              (2)                (3)                  (4)      
## ------------------------------------------------------------------------------------------------
## msinc13                    0.651***         -0.541***           1.504***            -0.575***   
##                             (0.013)          (0.018)            (0.013)              (0.013)    
## msinc46                    1.149***         -0.685***          -0.102***            -1.301***   
##                             (0.021)          (0.042)            (0.021)              (0.030)    
## log(applicantincome)       0.035***          0.070***          -0.077***            0.004***    
##                            (0.0001)          (0.0003)           (0.0001)            (0.0002)    
## log(amountofloan)          -0.002***         0.004***           0.047***            0.005***    
##                            (0.0001)          (0.0004)           (0.0001)            (0.0003)    
## factor(race)black          -0.100***        -0.075***          -0.035***            -0.009***   
##                            (0.0003)          (0.0004)           (0.0003)            (0.0003)    
## factor(race)hispanic       -0.053***        -0.039***          -0.021***            -0.003***   
##                            (0.0002)          (0.0004)           (0.0002)            (0.0003)    
## factor(race)other          -0.053***        -0.054***          -0.010***            -0.004***   
##                            (0.0002)          (0.0004)           (0.0002)            (0.0003)    
## ------------------------------------------------------------------------------------------------
## Fixed Effects            MSA*Bank, Yr      MSA*Bank, Yr       MSA*Bank, Yr        MSA*Bank, Yr  
## Observations              33,570,940        8,964,925          26,331,998           7,320,170   
## Adjusted R2                  0.161            0.109              0.413                0.207     
## ================================================================================================
## Note:                                                                *p<0.1; **p<0.05; ***p<0.01
## 

8.2.2 Loan approval by Income and Race

Dependent Var: Approved

r <- list()
r[[1]] <- felm(approved~msinc13*log(applicantincome)+msinc46*log(applicantincome)+log(amountofloan)+factor(race)|bank_msa+asofdate,data=hmda[typeofloan==1 & actiontaken<=3])
r[[2]] <- felm(approved~msinc13*log(applicantincome)+msinc46*log(applicantincome)+log(amountofloan)+factor(race)|bank_msa+asofdate,data=hmda[typeofloan==2 & actiontaken<=3])
r[[3]] <- felm(approved~msinc13*factor(race)+msinc46*factor(race)+log(applicantincome)+log(amountofloan)|bank_msa+asofdate,data=hmda[typeofloan==1 & actiontaken<=3])
r[[4]] <- felm(approved~msinc13*factor(race)+msinc46*factor(race)+log(applicantincome)+log(amountofloan)|bank_msa+asofdate,data=hmda[typeofloan==2 & actiontaken<=3])


.printtable(r,column.labels = c("Conventional","FHA","Conventional","FHA","Conventional","FHA"),lines = list(c("Fixed Effects","MSA*Bank, Yr","MSA*Bank, Yr","MSA*Bank, Yr","MSA*Bank, Yr","MSA*Bank, Yr","MSA*Bank, Yr")))
## 
## ================================================================================
##                                              Dependent variable:                
##                              ---------------------------------------------------
##                              Conventional     FHA      Conventional     FHA     
##                                  (1)          (2)          (3)          (4)     
## --------------------------------------------------------------------------------
## msinc13                        0.568***    -2.097***     0.588***    -0.325***  
##                                (0.066)      (0.094)      (0.016)      (0.022)   
## log(applicantincome)           0.035***     0.069***     0.035***     0.070***  
##                                (0.0001)     (0.0003)     (0.0001)     (0.0003)  
## msinc46                       -2.400***    -3.770***     1.238***    -0.404***  
##                                (0.116)      (0.202)      (0.024)      (0.047)   
## log(amountofloan)             -0.002***     0.003***    -0.002***     0.004***  
##                                (0.0001)     (0.0004)     (0.0001)     (0.0004)  
## msinc13:factor(race)black                                 0.063      -0.549***  
##                                                          (0.048)      (0.041)   
## msinc13:factor(race)hispanic                            -0.400***    -0.645***  
##                                                          (0.037)      (0.035)   
## msinc13:factor(race)other                                0.303***    -0.095***  
##                                                          (0.024)      (0.034)   
## factor(race)black:msinc46                               -1.369***    -0.588***  
##                                                          (0.088)      (0.081)   
## factor(race)hispanic:msinc46                            -1.798***    -0.886***  
##                                                          (0.081)      (0.088)   
## factor(race)other:msinc46                                0.286***    -0.567***  
##                                                          (0.049)      (0.082)   
## factor(race)black             -0.100***    -0.075***    -0.099***    -0.074***  
##                                (0.0003)     (0.0004)     (0.0003)     (0.0004)  
## factor(race)hispanic          -0.053***    -0.039***    -0.052***    -0.038***  
##                                (0.0002)     (0.0004)     (0.0002)     (0.0004)  
## factor(race)other             -0.053***    -0.054***    -0.053***    -0.054***  
##                                (0.0002)     (0.0004)     (0.0002)     (0.0004)  
## msinc13:log(applicantincome)    0.016       0.386***                            
##                                (0.014)      (0.023)                             
## log(applicantincome):msinc46   0.785***     0.772***                            
##                                (0.025)      (0.050)                             
## --------------------------------------------------------------------------------
## Fixed Effects                MSA*Bank, Yr MSA*Bank, Yr MSA*Bank, Yr MSA*Bank, Yr
## Observations                  33,570,940   8,964,925    33,570,940   8,964,925  
## Adjusted R2                     0.161        0.109        0.161        0.109    
## ================================================================================
## Note:                                                *p<0.1; **p<0.05; ***p<0.01
##