1 HMDA Sample

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

cbsa_bnk[,msinc13Q:=ifelse(msinc13<=0.0001,"Q0",
                           ifelse(msinc13<0.0027235,"Q1",
                                  ifelse(msinc13<0.0112596,"Q2",
                                         ifelse(msinc13<0.0366354,"Q3","Q4"))))]

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[,msinc46Q:=ifelse(msinc46<=0.0001,"Q0",
                           ifelse(msinc46<0.0027235,"Q1",
                                  ifelse(msinc46<0.0112596,"Q2",
                                         ifelse(msinc46<0.0366354,"Q3","Q4"))))]

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 or more", "3. 5pct or more"))))]
# 
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 - or more", "3. 5pct - or more"))))]

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

cbsa_share_partrend <- read_fst("C:/Users/dratnadiwakara2/Documents/OneDrive - Louisiana State University/Projects/Bank Mergers/data/cbsa_share_partrend.fst",as.data.table = T)
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 <- hmda[actiontaken != "6"]
hmda[,lender:=paste0(agencycode,"-",respondentid)]
hmda[,countycode:=paste0(state,countycode)]

hmda[,approved:=ifelse(actiontaken %in% c("1"),1,0)]
hmda[,rejected:=ifelse(actiontaken %in% c("3"),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[,black:=ifelse(applicantrace1=="3",1,0)]

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

hmda[,medianincome:=median(applicantincome,na.rm=T),by=asofdate]
hmda[,lowincome:=ifelse(applicantincome<medianincome,1,0)]

hmda[,racecat:=ifelse(hispanic==1,"hispanic",
                      ifelse(applicantrace1=="5","0white",
                             ifelse(applicantrace1=="3","black",
                                    ifelse(applicantrace1 %in% c("2","4"),"asian/other","na"))))]

hmda[, hispanic_black:= ifelse(hispanic==1 | applicantrace1=="3",1,0)]

hmda[,racecat2:=ifelse(hispanic==1,"hispanic",
                      ifelse(applicantrace1=="5","0ther",
                             ifelse(applicantrace1=="3","black",
                                    ifelse(applicantrace1 %in% c("2","4"),"0ther","0ther"))))]

hmda[,msa_yr:=paste(asofdate,cbsa)]

hmda[,bank_yr:=paste(bank,asofdate)]

hmda[,suc_share:=ifelse(is.na(suc_share),0,suc_share)]
conflimit <- fread("C:/Users/dratnadiwakara2/Documents/OneDrive - Louisiana State University/Projects/Bank Mergers/data/conforminglimits.csv")
names(conflimit) <- c("asofdate","conflimit")
conflimit[,conflimit:=floor(conflimit/1000)]

hmda <- merge(hmda,conflimit,by="asofdate")
hmda[,jumbo:=ifelse(typeofloan==1 & amountofloan>conflimit,1,ifelse(typeofloan==1,0,NA))]
hmda[,county_year:=paste(countycode,asofdate)]
hmda1 <- hmda[typeofloan %in% 1:2  & actiontaken<=3,c("approved","msinc13","racecat2","msinc46","applicantincome","amountofloan","suc_share","county_year","bank","lowincome","msa","typeofloan","countycode","asofdate")]
# hmdanpgse <- hmda[typeofpurchaser %in% c("1","3")]
# write_fst(hmdanpgse,path="C:/Users/dratnadiwakara2/Documents/OneDrive - Louisiana State University/Projects/Bank Mergers/data/hmda_np_gse.fst",compress = 100)
cbsa_bnk <- read_fst("C:/Users/dratnadiwakara2/Documents/OneDrive - Louisiana State University/Projects/Bank Mergers/data/cbsa_bnk_2.fst",as.data.table = T)

cbsa_bnk[,msinc13Q:=ifelse(msinc13<=0.0001,"Q0",
                           ifelse(msinc13<0.0027235,"Q1",
                                  ifelse(msinc13<0.0112596,"Q2",
                                         ifelse(msinc13<0.0366354,"Q3","Q4"))))]

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[,msinc46Q:=ifelse(msinc46<=0.0001,"Q0",
                           ifelse(msinc46<0.0027235,"Q1",
                                  ifelse(msinc46<0.0112596,"Q2",
                                         ifelse(msinc46<0.0366354,"Q3","Q4"))))]

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 or more", "3. 5pct or more"))))]
# 
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 or more", "3. 5pct or more"))))]

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

cbsa_share_partrend <- read_fst("C:/Users/dratnadiwakara2/Documents/OneDrive - Louisiana State University/Projects/Bank Mergers/data/cbsa_share_partrend.fst",as.data.table = T)
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[,black:=ifelse(applicantrace1=="3",1,0)]

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

hmda[,medianincome:=median(applicantincome,na.rm=T),by=asofdate]
hmda[,lowincome:=ifelse(applicantincome<medianincome,1,0)]

hmda[,racecat:=ifelse(hispanic==1,"hispanic",
                      ifelse(applicantrace1=="5","0white",
                             ifelse(applicantrace1=="3","black",
                                    ifelse(applicantrace1 %in% c("2","4"),"asian/other","na"))))]

hmda[,msa_yr:=paste(asofdate,cbsa)]

hmda[,bank_yr:=paste(bank,asofdate)]

hmda[,suc_share:=ifelse(is.na(suc_share),0,suc_share)]
hmda[,county_year:=paste(countycode,asofdate)]


hmda[, hispanic_black:= ifelse(hispanic==1 | applicantrace1=="3",1,0)]

hmda[,racecat2:=ifelse(hispanic==1,"hispanic",
                      ifelse(applicantrace1=="5","0ther",
                             ifelse(applicantrace1=="3","black",
                                    ifelse(applicantrace1 %in% c("2","4"),"0ther","0ther"))))]
conflimit <- fread("C:/Users/dratnadiwakara2/Documents/OneDrive - Louisiana State University/Projects/Bank Mergers/data/conforminglimits.csv")
names(conflimit) <- c("asofdate","conflimit")
conflimit[,conflimit:=floor(conflimit/1000)]

hmda <- merge(hmda,conflimit,by="asofdate")
hmda[,jumbo:=ifelse(typeofloan==1 & amountofloan>conflimit,1,ifelse(typeofloan==1,0,NA))]
hmda2 <- hmda[typeofloan %in% 1:2 & actiontaken<=3,c("approved","msinc13","racecat2","msinc46","applicantincome","amountofloan","suc_share","county_year","bank","lowincome","msa","typeofloan","countycode","asofdate")]
hmda2[,refinance:=1]
hmda1[,refinance:=0]
# hmda1[,rejected:=list(NULL)]

hmda <- rbind(hmda1,hmda2)

rm(hmda1)
rm(hmda2)

hmda[,msinc13_black:=ifelse(racecat2=="black",msinc13,0)]
hmda[,msinc13_hispanic:=ifelse(racecat2=="hispanic",msinc13,0)]
hmda[,msinc46_black:=ifelse(racecat2=="black",msinc46,0)]
hmda[,msinc46_hispanic:=ifelse(racecat2=="hispanic",msinc46,0)]
hmda[,hispanic:=ifelse(racecat2=="hispanic",1,0)]
hmda[,black:=ifelse(racecat2=="black",1,0)]
hmda[,bank_county:=paste(bank,countycode)]
gc()
##              used    (Mb)  gc trigger    (Mb)    max used    (Mb)
## Ncells    2927614   156.4     5438765   290.5     3830625   204.6
## Vcells 2292954881 17493.9 10011532867 76382.0 12514416083 95477.5
r <- list()
r[[1]] <- felm(approved~msinc13+msinc46+log(applicantincome)+log(amountofloan)+factor(racecat2)+suc_share+refinance|bank_county+asofdate|0|msa,data=hmda[ typeofloan==1])
r[[2]] <- felm(approved~msinc13+msinc46+log(applicantincome)+log(amountofloan)+factor(racecat2)+suc_share+refinance|bank_county+asofdate|0|msa,data=hmda[ typeofloan==2])
r[[3]] <- felm(approved~msinc13*lowincome+msinc46*lowincome+log(amountofloan)+factor(racecat2)+suc_share+refinance|bank_county+asofdate|0|msa,data=hmda[typeofloan==1 ])
r[[4]] <- felm(approved~msinc13*lowincome+msinc46*lowincome+log(amountofloan)+factor(racecat2)+suc_share+refinance|bank_county+asofdate|0|msa,data=hmda[typeofloan==2])
r[[5]] <- felm(approved~msinc13*factor(racecat2)+msinc46*factor(racecat2)+log(applicantincome)+log(amountofloan)+suc_share+refinance|bank_county+asofdate|0|msa,data=hmda[typeofloan==1 ])
r[[6]] <- felm(approved~msinc13*factor(racecat2)+msinc46*factor(racecat2)+log(applicantincome)+log(amountofloan)+suc_share+refinance|bank_county+asofdate|0|msa,data=hmda[typeofloan==2])



covlabs <- c("MSInc1-3","Low income","MSInc4-6","log(Income '000)","log(Loan amount '000)","Black","Hispanic","Acquirer share","Refinance","MSInc1-3*Low income","MSInc4-6*Low income","MSInc1-3*Black", "MSInc1-3*Hispanic","MSInc4-6*Black", "MSInc4-6*Hispanic")

stargazer(r,no.space = T,align = T,omit.stat=c("ser","f", "rsq"),style = "qje",omit.table.layout = "n", dep.var.labels.include = FALSE,type="text",covariate.labels = covlabs,
          column.labels=c("Conventional","FHA","Conventional","FHA","Conventional","FHA"),
          add.lines = list(c("Year*County", rep("Y",6)),c("Bank", rep("Y",6)))
          )
## 
## =============================================================================================
##                       Conventional    FHA     Conventional    FHA     Conventional    FHA    
##                           (1)         (2)         (3)         (4)         (5)         (6)    
## ---------------------------------------------------------------------------------------------
## MSInc1-3                0.821***   -0.743***    0.875***   -0.505***    0.907***   -0.649*** 
##                         (0.078)     (0.050)     (0.094)     (0.055)     (0.081)     (0.048)  
## Low income                                     -0.048***   -0.038***                         
##                                                 (0.001)     (0.002)                          
## MSInc4-6                1.838***   -0.999***    2.179***   -0.676***    1.993***   -0.904*** 
##                         (0.121)     (0.151)     (0.142)     (0.179)     (0.122)     (0.151)  
## log(Income '000)        0.054***    0.078***                            0.054***    0.078*** 
##                         (0.001)     (0.002)                             (0.001)     (0.002)  
## log(Loan amount '000)  -0.012***   -0.007***    -0.002**    0.031***   -0.012***   -0.007*** 
##                         (0.001)     (0.002)     (0.001)     (0.002)     (0.001)     (0.002)  
## Black                  -0.076***   -0.062***   -0.079***   -0.065***   -0.074***   -0.061*** 
##                         (0.003)     (0.002)     (0.003)     (0.002)     (0.003)     (0.002)  
## Hispanic               -0.047***   -0.028***   -0.050***   -0.034***   -0.045***   -0.027*** 
##                         (0.004)     (0.002)     (0.003)     (0.002)     (0.003)     (0.002)  
## Acquirer share          -0.040**    0.157***    -0.042**    0.159***    -0.042**    0.156*** 
##                         (0.017)     (0.018)     (0.017)     (0.018)     (0.017)     (0.018)  
## Refinance              -0.066***   -0.161***   -0.066***   -0.155***   -0.066***   -0.161*** 
##                         (0.004)     (0.003)     (0.004)     (0.003)     (0.004)     (0.003)  
## MSInc1-3*Low income                            -0.155***   -0.370***                         
##                                                 (0.048)     (0.053)                          
## MSInc4-6*Low income                            -0.751***   -0.448***                         
##                                                 (0.108)     (0.097)                          
## MSInc1-3*Black                                                         -0.765***   -0.340*** 
##                                                                         (0.083)     (0.075)  
## MSInc1-3*Hispanic                                                      -0.656***   -0.301*** 
##                                                                         (0.107)     (0.075)  
## MSInc4-6*Black                                                         -1.444***   -0.401*** 
##                                                                         (0.119)     (0.123)  
## MSInc4-6*Hispanic                                                      -1.685***     -0.291  
##                                                                         (0.241)     (0.177)  
## Year*County                Y           Y           Y           Y           Y           Y     
## Bank                       Y           Y           Y           Y           Y           Y     
## N                      93,205,979  12,946,772  93,205,979  12,946,772  93,205,979  12,946,772
## Adjusted R2              0.227       0.231       0.225       0.228       0.227       0.231   
## =============================================================================================