rm(list=ls())
library(RPostgres)
library(data.table)
library(getPass)
library(lfe)
library(stargazer)
library(ggplot2)
library(fst)
library(stringr)
library(stringi)
library(lubridate)
library(FinCal)

source("C:/Users/dratnadiwakara2/Documents/OneDrive - Louisiana State University/functions.R")

1 HMDA 2018-2019

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

panel = lapply(files, read_fst, as.data.table = TRUE) 
panel <- do.call(rbind , panel)
setorder(panel,-asofdate)

panel <- panel[!duplicated(panel[,c("respondentid")])]
panel <- panel[,c("respondentid","rssd")]


fintech <- c(3914377,3870099,3881554,4437716,3958157,3870679,5134115) 
bank <- c(3284070,480228,339858,112837,476810,3378018,277053,193247,598534,3202962,255574,723112,3072606,2712969,
          4114567,146672,739560,258771,413208,852218, 1583845,2489805,212465,617677,694904,817824,238791,233031,
          911973,443205,817477,619877,451965)
mtg <- c(3876998,4327938,4320416,4437873,3955754,3876112,3870606,3871751,3844465,4186573,3955923,3871519,3955651,
         3861163,3954355,3247123,3966116,1569885,4325019,4438209,3842407,3955491,4186591,3873456,3897500,3877575,
         2888798,3332935,3875179,5023545,3875692,1072246,583295,3870651,3913099)
files <- NULL
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% c("2018","2019")] #c("2014","2015","2016","2017","2018")

hmda = lapply(files, read_fst, as.data.table = TRUE,
              columns=c("asofdate","respondentid","agencycode","state","actiontaken","censustract","applicantrace1","applicantincome","purposeofloan","amountofloan","interest_rate","ratespread","loan_term","property_value","debt_to_income_ratio","applicant_age","denialreason1","denialreason2","conforming_loan_limit","combined_loan_to_value_ratio","typeofloan","typeofpurchaser","co_applicant_race_1"))
hmda <- do.call(rbind , hmda)

hmda[,approved:=ifelse(actiontaken %in% c(1,2),1,0)]
hmda[,nonwhite:=ifelse(applicantrace1==5,0,1)]
hmda[,tract_yr:=paste(censustract,asofdate)]

hmda[,interest_rate:=as.numeric(interest_rate)]
hmda[,loan_term:=as.numeric(loan_term)]


hmda[,newpurchase:=ifelse(purposeofloan==1,1,0)]


hmda[,joint:=ifelse(co_applicant_race_1 %in% c(7,8),0,1)]

setkey(hmda,censustract)
gc()
##             used   (Mb) gc trigger   (Mb)  max used   (Mb)
## Ncells   2627582  140.4    4239488  226.5   2654031  141.8
## Vcells 558594814 4261.8  916802734 6994.7 914966723 6980.7
hmda[,combined_loan_to_value_ratio:=as.numeric(combined_loan_to_value_ratio)]

hmda[,applicant_age:=ifelse(applicant_age %in% c("<25"),20,
                            ifelse(applicant_age %in% c("25-34"),30,
                                   ifelse(applicant_age %in% c("35-44"),40,
                                          ifelse(applicant_age %in% c("45-54"),50,
                                                 ifelse(applicant_age %in% c("55-64"),60,
                                                        ifelse(applicant_age %in% c("65-74"),70,
                                                               ifelse(applicant_age %in% c(">74"),80,NA)))))))]


hmda[,dti:=ifelse(debt_to_income_ratio %in% c("<20%"),0.15,
                            ifelse(debt_to_income_ratio %in% c("20%-<30%"),0.25,
                                   ifelse(debt_to_income_ratio %in% c("30%-<36%"),0.33,
                                          ifelse(debt_to_income_ratio %in% c("50%-60%"),0.55,
                                                 ifelse(debt_to_income_ratio %in% c(">60%"),0.65,
                                                        ifelse(debt_to_income_ratio %in% c("Exempt"),NA,debt_to_income_ratio))))))]
hmda[,dti:=as.numeric(dti)]
hmda[,dti:=ifelse(dti>1,dti/100,dti)]

hmda[,joint:=ifelse(co_applicant_race_1 %in% c(7,8),0,1)]

hmda[,race:=ifelse(applicantrace1=="5","white",ifelse(applicantrace1=="3","black","0ther"))]

hmda[,dtigt43:=ifelse(debt_to_income_ratio %in% as.character(44:49),1,ifelse(debt_to_income_ratio %in% as.character(37:43),0,NA))]

hmda[,denied:=ifelse(actiontaken %in% c(3,7,5),1,0)]
hmda <- hmda[amountofloan>0 & applicantincome>0]


hmda[,loantoincome:=amountofloan/applicantincome]

hmda <- merge(hmda,panel,by="respondentid")

hmda[,lendertype:=ifelse(rssd %in% fintech,"fintech",
                         ifelse(rssd %in% bank,"bank",
                                ifelse(rssd %in% mtg,"mtgco","other")))]
                                
hmda[,bank:=ifelse(lendertype=="bank",1,0)]

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

1.1 Denial Rate Discontinuity at DTI 43, Conforming Loans

regsample <- hmda[lendertype %in% c("bank","mtgco","fintech") & !is.na(dtigt43) & purposeofloan %in% c(1) & actiontaken<=3 & conforming_loan_limit=="C" & dti!=0.43 & typeofloan==1]


rdsum <- NULL
for(lt in c("bank","mtgco","fintech")) {
  rds <- regsample[lendertype==lt,.(denied=mean(denied)),by=.(dti,lendertype)]
  rds[,dtigt43:=ifelse(dti>0.43,1,0)]
  r <- lm(denied~dti+dtigt43,data=rds)
  rds[,preddenied:=predict(r,newdata = rds)]
  rds[,meandenied:=mean(denied)]
  rds[,preddenied:= preddenied-meandenied]
  rds[,denied:= denied-meandenied]
  rdsum <- rbind(rdsum,rds)
}



ggplot()+geom_point(data=rdsum,aes(x=dti,y=denied))+
  geom_line(data=rdsum[dtigt43==0],aes(x=dti,y=preddenied),color="royalblue")+
  geom_line(data=rdsum[dtigt43==1],aes(x=dti,y=preddenied),color="darkgreen")+
  geom_vline(xintercept = .43)+facet_wrap(~lendertype)

r <- list()

r[[1]] <- felm(denied~dti+dtigt43+log(amountofloan)+log(applicantincome)+factor(race)+applicant_age|county_yr|0|countycode,data=regsample[lendertype=="bank"])
r[[2]] <- felm(denied~dti+dtigt43+log(amountofloan)+log(applicantincome)+factor(race)+applicant_age|county_yr|0|countycode,data=regsample[lendertype=="mtgco"])
r[[3]] <- felm(denied~dti+dtigt43+log(amountofloan)+log(applicantincome)+factor(race)+applicant_age|county_yr|0|countycode,data=regsample[lendertype=="fintech"])

.printtable(r)
## 
## ===================================================
##                           Dependent variable:      
##                      ------------------------------
##                         (1)        (2)       (3)   
## ---------------------------------------------------
## dti                   0.253***    0.022    0.083** 
##                       (0.035)    (0.016)   (0.038) 
## dtigt43               0.017***    0.001     0.003  
##                       (0.003)    (0.001)   (0.003) 
## log(amountofloan)    -0.086***  -0.003*** -0.017***
##                       (0.004)    (0.001)   (0.001) 
## log(applicantincome)  0.033***  -0.006*** -0.011***
##                       (0.002)    (0.001)   (0.002) 
## factor(race)black     0.027***  0.030***  0.015*** 
##                       (0.003)    (0.002)   (0.004) 
## factor(race)white    -0.026***  -0.005*** -0.034***
##                       (0.002)    (0.001)   (0.002) 
## applicant_age        -0.0002*** 0.0002*** 0.0005***
##                       (0.0001)  (0.00003) (0.0001) 
## ---------------------------------------------------
##                                                    
## Observations          271,344    440,477   169,869 
## Adjusted R2            0.040      0.011     0.032  
## ===================================================
## Note:                   *p<0.1; **p<0.05; ***p<0.01
## 

1.2 Denial Rate Discontinuity at DTI 43, Non-conforming Loans

regsample <- hmda[lendertype %in% c("bank","mtgco","fintech") & !is.na(dtigt43) & purposeofloan %in% c(1) & actiontaken<=3 & conforming_loan_limit!="C" & dti!=0.43 & typeofloan==1]


rdsum <- NULL
for(lt in c("bank","mtgco","fintech")) {
  rds <- regsample[lendertype==lt,.(denied=mean(denied)),by=.(dti,lendertype)]
  rds[,dtigt43:=ifelse(dti>0.43,1,0)]
  r <- lm(denied~dti+dtigt43,data=rds)
  rds[,preddenied:=predict(r,newdata = rds)]
  rds[,preddenied:=predict(r,newdata = rds)]
  rds[,meandenied:=mean(denied)]
  rds[,preddenied:= preddenied-meandenied]
  rds[,denied:= denied-meandenied]
  rdsum <- rbind(rdsum,rds)
}



ggplot()+geom_point(data=rdsum,aes(x=dti,y=denied))+
  geom_line(data=rdsum[dtigt43==0],aes(x=dti,y=preddenied),color="royalblue")+
  geom_line(data=rdsum[dtigt43==1],aes(x=dti,y=preddenied),color="darkgreen")+
  geom_vline(xintercept = .43)+facet_wrap(~lendertype)

r <- list()

r[[1]] <- felm(denied~dti+dtigt43+log(amountofloan)+log(applicantincome)+factor(race)+applicant_age|county_yr|0|countycode,data=regsample[lendertype=="bank"])
r[[2]] <- felm(denied~dti+dtigt43+log(amountofloan)+log(applicantincome)+factor(race)+applicant_age|county_yr|0|countycode,data=regsample[lendertype=="mtgco"])
r[[3]] <- felm(denied~dti+dtigt43+log(amountofloan)+log(applicantincome)+factor(race)+applicant_age|county_yr|0|countycode,data=regsample[lendertype=="fintech"])

.printtable(r)
## 
## ==================================================
##                           Dependent variable:     
##                      -----------------------------
##                         (1)       (2)       (3)   
## --------------------------------------------------
## dti                  0.410***   -0.195*   -0.071  
##                       (0.060)   (0.115)   (0.215) 
## dtigt43              0.085***  0.116***  0.083*** 
##                       (0.007)   (0.009)   (0.019) 
## log(amountofloan)    -0.020*** 0.149***  0.172*** 
##                       (0.006)   (0.013)   (0.027) 
## log(applicantincome)  -0.001   -0.039*** -0.024** 
##                       (0.003)   (0.006)   (0.011) 
## factor(race)black      0.017    0.035**    0.030  
##                       (0.011)   (0.014)   (0.027) 
## factor(race)white    -0.009***  -0.002   -0.039***
##                       (0.003)   (0.006)   (0.007) 
## applicant_age        -0.0002*   -0.0001  0.001*** 
##                      (0.0001)  (0.0002)  (0.0003) 
## --------------------------------------------------
##                                                   
## Observations          62,836    23,259     9,322  
## Adjusted R2            0.045     0.072     0.090  
## ==================================================
## Note:                  *p<0.1; **p<0.05; ***p<0.01
## 

1.3 Bank Market Share by pct 40 to 43

regsample <- hmda[actiontaken==1 & purposeofloan==1 & typeofloan==1]
regsample[,dtilt43:=ifelse(dti<=0.43,1,0)]
regsample[,dti4043:=ifelse(debt_to_income_ratio %in% as.character(40:43),1,0)]


dticount <- regsample[dtilt43==1,.(nodtilt43=.N),by=countycode]
dticount <- dticount[nodtilt43>=5 & !is.na(countycode)]


temp <- regsample[dti4043==1,.(nodti4043=.N),by=countycode]
temp <- temp[!is.na(countycode)]

dticount <- merge(dticount,temp,by="countycode",all.x=T)
dticount[is.na(dticount)] <- 0
dticount[,nodti4043:=nodti4043/nodtilt43]

# write_fst(dticount,"C:/Users/dratnadiwakara2/Documents/OneDrive - Louisiana State University/Projects/Exploring/dticount_hmda_1819_cnty.fst",compress = 100)

dticount <- regsample[dtilt43==1,.(nodtilt43=.N),by=censustract]
dticount <- dticount[nodtilt43>=5 & !is.na(censustract)]

temp <- regsample[dti4043==1,.(nodti4043=.N),by=censustract]
temp <- temp[!is.na(censustract)]

dticount <- merge(dticount,temp,by="censustract",all.x=T)
dticount[is.na(dticount)] <- 0
dticount[,nodti4043:=nodti4043/nodtilt43]

# write_fst(dticount,"C:/Users/dratnadiwakara2/Documents/OneDrive - Louisiana State University/Projects/Exploring/dticount_hmda_1819.fst",compress = 100)
rm(temp)

regsample <- hmda[actiontaken==1 & lendertype %in% c("bank","mtgco","fintech"),.N,by=.(censustract,lendertype)]
regsample <- regsample[!is.na(censustract) ]
regsample <- dcast(regsample,censustract~lendertype)
regsample[is.na(regsample)] <- 0

regsample[,bankshare:=bank/(bank+mtgco+fintech)]

regsample <- merge(regsample,dticount,by="censustract")
regsample[,nodti4043:=floor(nodti4043*10)*10]
regsample[,nodti4043:=ifelse(nodti4043>=50,50,ifelse(nodti4043<=10,10,nodti4043))]
regsample[,cluster:=1]

r <- list()

r[[1]] <- felm(log(0.001+bankshare)~factor(nodti4043),data=regsample)


regsample <- hmda[actiontaken==1 & purposeofloan==1 & lendertype %in% c("bank","mtgco","fintech"),.N,by=.(censustract,lendertype)]
regsample <- regsample[!is.na(censustract) ]
regsample <- dcast(regsample,censustract~lendertype)
regsample[is.na(regsample)] <- 0

regsample[,bankshare:=bank/(bank+mtgco+fintech)]

regsample <- merge(regsample,dticount,by="censustract")
regsample[,nodti4043:=floor(nodti4043*10)*10]
regsample[,nodti4043:=ifelse(nodti4043>=50,50,ifelse(nodti4043<=10,10,nodti4043))]
regsample[,cluster:=1]

r[[2]] <- felm(log(0.001+bankshare)~factor(nodti4043),data=regsample)


regsample <- hmda[actiontaken==1 & purposeofloan==31 & lendertype %in% c("bank","mtgco","fintech"),.N,by=.(censustract,lendertype)]
regsample <- regsample[!is.na(censustract) ]
regsample <- dcast(regsample,censustract~lendertype)
regsample[is.na(regsample)] <- 0

regsample[,bankshare:=bank/(bank+mtgco+fintech)]

regsample <- merge(regsample,dticount,by="censustract")
regsample[,nodti4043:=floor(nodti4043*10)*10]
regsample[,nodti4043:=ifelse(nodti4043>=50,50,ifelse(nodti4043<=10,10,nodti4043))]
regsample[,cluster:=1]

r[[3]] <- felm(log(0.001+bankshare)~factor(nodti4043),data=regsample)


regsample <- hmda[actiontaken==1 & purposeofloan==32 & lendertype %in% c("bank","mtgco","fintech"),.N,by=.(censustract,lendertype)]
regsample <- regsample[!is.na(censustract) ]
regsample <- dcast(regsample,censustract~lendertype)
regsample[is.na(regsample)] <- 0

regsample[,bankshare:=bank/(bank+mtgco+fintech)]

regsample <- merge(regsample,dticount,by="censustract")
regsample[,nodti4043:=floor(nodti4043*10)*10]
regsample[,nodti4043:=ifelse(nodti4043>=50,50,ifelse(nodti4043<=10,10,nodti4043))]
regsample[,cluster:=1]

r[[4]] <- felm(log(0.001+bankshare)~factor(nodti4043),data=regsample)


# .coef_plot_4reg_line(r[[1]],"All",r[[2]],"Home purchase",r[[3]],"Refinancing",r[[4]],"Cash-out refinancing","factor(nodti4043)",10)
.printtable(r,column.labels = c("All","New Purchase","Refinancing","Cash out RF"))
## 
## ==================================================================
##                                  Dependent variable:              
##                     ----------------------------------------------
##                        All    New Purchase Refinancing Cash out RF
##                        (1)        (2)          (3)         (4)    
## ------------------------------------------------------------------
## factor(nodti4043)20 -0.042***  -0.031***    0.111***    0.320***  
##                      (0.008)    (0.010)      (0.019)     (0.018)  
## factor(nodti4043)30 -0.130***  -0.183***     -0.011     0.269***  
##                      (0.011)    (0.015)      (0.027)     (0.025)  
## factor(nodti4043)40 -0.202***  -0.360***    -0.153***   0.167***  
##                      (0.018)    (0.025)      (0.046)     (0.043)  
## factor(nodti4043)50 -0.219***  -0.538***    -0.367***     0.086   
##                      (0.024)    (0.033)      (0.063)     (0.059)  
## Constant            -1.270***  -1.388***    -1.838***   -2.205*** 
##                      (0.005)    (0.007)      (0.013)     (0.012)  
## ------------------------------------------------------------------
##                                                                   
## Observations         65,892      65,799      62,566      64,162   
## Adjusted R2           0.004      0.008        0.002       0.005   
## ==================================================================
## Note:                                  *p<0.1; **p<0.05; ***p<0.01
## 

1.4 DTI and LTI Correlation

regsample <- hmda[lendertype %in% c("bigbank","bigmtg","fintech") & !is.na(dtigt43) & purposeofloan %in% c(1) & actiontaken<=3 & conforming_loan_limit=="C" & typeofloan==1]
regsample[,loantoincome:=amountofloan/applicantincome]

lti <- regsample[,.(lti=mean(loantoincome,na.rm=T)),by=dti]

ggplot(lti,aes(x=dti,y=lti))+geom_point()

2 HMDA DATA 2005 - 2019

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

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

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

panel[,rssd:=ifelse(reportername=="SoFi Mortgage, LLC",5134115,rssd)]

panel <- panel[,c("hmda_id","asofdate","rssd","agencycode")]
names(panel) <- c("hmda_id","asofdate","rssd","agencycode2")

panel <- panel[!duplicated(panel)]
setkey(panel,hmda_id,asofdate)
fintechhmdaid <- unique(panel[rssd %in% fintech]$hmda_id)
bigbankhmdaid <- unique(panel[rssd %in% bank]$hmda_id)
mtghmdaid <- unique(panel[rssd %in% mtg]$hmda_id)
# 
# files <- NULL
# 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(2004:2019)] #c("2014","2015","2016","2017","2018")
# 
# hmdar = lapply(files, read_fst, as.data.table = TRUE, 
#               columns=c("asofdate","respondentid","actiontaken","censustract","typeofloan","amountofloan","applicantincome","typeofpurchaser","agencycode","applicantrace1","purposeofloan")) #
# 
# hmdar <- do.call(rbind , hmdar)
# 
# hmdar[,amountofloan:=as.numeric(amountofloan)]
# hmdar[,applicantincome:=as.numeric(applicantincome)]
# hmdar[,typeofloan:=as.numeric(typeofloan)]
# hmdar <- hmdar[amountofloan>10 & applicantincome>10 & typeofloan==1]
# 
# 
# hmdar[,purposeofloan:=as.numeric(purposeofloan)]
# hmdar[,newpurchase:=ifelse(purposeofloan==1,1,0)]
# hmdar[,typeofpurchaser:=as.numeric(typeofpurchaser)]
# hmdar[,actiontaken:=as.numeric(actiontaken)]
# hmdar[,sold:=ifelse(typeofpurchaser==0,0,1)]
# hmdar[,denied:=ifelse(actiontaken %in% c(3,7),1,0)]
# hmdar[,tract_yr:=paste(censustract,asofdate)]
# hmdar[,countycode:=substr(censustract,1,5)]
# hmdar[,county_yr:=paste(countycode,asofdate)]
# hmdar[,lti:=amountofloan/applicantincome]
# hmdar[,ltifactor:=floor(lti)]
# hmdar[,ltifactor:=ifelse(ltifactor>4,4,ltifactor)]
# hmdar[,race:=ifelse(applicantrace1=="5","white",ifelse(applicantrace1=="3","black","0ther"))]
# hmdar[,postgsepatch:=ifelse(asofdate>=2014,1,0)]
# 
# hmdar[,hmda_id:=ifelse(asofdate<=2017,paste(agencycode,respondentid,sep="-"),respondentid)]
# setkey(hmdar,hmda_id,asofdate)
# hmdar <- merge(hmdar,panel,by=c("hmda_id","asofdate"))
# 
# hmdar[,fintech:=ifelse(hmda_id %in% fintechhmdaid,1,ifelse(hmda_id %in% bigbankhmdaid,0,NA))]
# hmdar[,lendertype:=ifelse(hmda_id %in% fintechhmdaid,"fintech",ifelse(hmda_id %in% bigbankhmdaid,"bank",ifelse(hmda_id %in% mtghmdaid,"mtgco",NA)))]
# hmdar[,bank:=ifelse(lendertype=="bank",1, ifelse(!is.na(lendertype),0,NA))]
# 
# hmdarrssd <- hmdar[,c("hmda_id","rssd")]
# hmdarrssd <- hmdarrssd[rssd>0]
# hmdarrssd <- hmdarrssd[!duplicated(hmdarrssd)]
# names(hmdarrssd) <- c("hmda_id","rssd2")
# hmdarrssd <- hmdarrssd[!duplicated(hmdarrssd[,c("hmda_id")])]
# 
# 
# hmdar <- merge(hmdar,hmdarrssd,by="hmda_id",all.x=T)
# 
# setkey(hmdar,censustract)
# 
# tractzip<-fread("C:/Users/dratnadiwakara2/Documents/OneDrive - Louisiana State University/Raw Data/Crosswalk Files/TRACT_ZIP_032016.csv")
# tractzip[,TRACT:=as.character(TRACT)]
# tractzip[,TRACT:=str_pad(TRACT, width=11, side="left", pad="0")]
# setorder(tractzip,TRACT,-RES_RATIO)
# tractzip <- tractzip[!duplicated(tractzip$TRACT),c("TRACT","ZIP")]
# 
# hmdar <- merge(hmdar,tractzip,by.x="censustract",by.y="TRACT",all.x=T)
# hmdar[,zip3digit:=floor(ZIP/100)*100]
# 
# bunchingfreddie <- fread("C:/Users/dratnadiwakara2/Documents/OneDrive - Louisiana State University/Projects/Exploring/freddie_bunchingfrac.csv")
# bunchingfreddie[,V1:=NULL]
# 
# hmdar <- merge(hmdar,bunchingfreddie,by.x="zip3digit",by.y="zip_code")
# 
# bunchingfannie <- fread("C:/Users/dratnadiwakara2/Documents/OneDrive - Louisiana State University/Projects/Exploring/fannie_bunchingfrac.csv")
# bunchingfannie[,V1:=NULL]
# names(bunchingfannie) <- c("zip_code","dtigt43fannie")
# 
# hmdar <- merge(hmdar,bunchingfannie,by.x="zip3digit",by.y="zip_code",all.x=T)
# 
# write_fst(hmdar,"C:/Users/dratnadiwakara2/Documents/OneDrive - Louisiana State University/Projects/Exploring/hmdar_gsepatch.fst",compress = 100)

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

bunchingfreddie <- fread("C:/Users/dratnadiwakara2/Documents/OneDrive - Louisiana State University/Projects/Exploring/freddie_bunchingfrac.csv")
bunchingfreddie[,V1:=NULL]

hmdar <- merge(hmdar,dticount,by="censustract",all.x=T)

2.1 Denial DiD

r <- list()
r[[1]] <- felm(denied~ dtigt43*postgsepatch*factor(lendertype)+factor(race)+log(applicantincome)|county_yr+hmda_id|0|countycode,data=hmdar[purposeofloan==1 & actiontaken <=3  & asofdate %in% c(2005:2019)])
r[[2]] <- felm(denied~ nodti4043*postgsepatch*factor(lendertype)+factor(race)+log(applicantincome)|county_yr+hmda_id|0|countycode,data=hmdar[purposeofloan==1 & actiontaken <=3  & asofdate %in% c(2005:2019)])
r[[3]] <- felm(denied~ I(lti>3.2)*postgsepatch*factor(lendertype)+factor(race)+log(applicantincome)|county_yr+hmda_id|0|countycode,data=hmdar[purposeofloan==1 & actiontaken <=3  & asofdate %in% c(2005:2019)])
r[[4]] <- felm(denied~ dtigt43*postgsepatch*factor(lendertype)+factor(race)+log(applicantincome)|county_yr+hmda_id|0|countycode,data=hmdar[purposeofloan!=1 & actiontaken <=3 & asofdate %in% c(2005:2019)])
r[[5]] <- felm(denied~ nodti4043*postgsepatch*factor(lendertype)+factor(race)+log(applicantincome)|county_yr+hmda_id|0|countycode,data=hmdar[purposeofloan!=1 & actiontaken <=3 & asofdate %in% c(2005:2019)])
r[[6]] <- felm(denied~ I(lti>3.2)*postgsepatch*factor(lendertype)+factor(race)+log(applicantincome)|county_yr+hmda_id|0|countycode,data=hmdar[purposeofloan!=1 & actiontaken <=3 & asofdate %in% c(2005:2019)])

.printtable(r)
## 
## ========================================================================================================================
##                                                                               Dependent variable:                       
##                                                         ----------------------------------------------------------------
##                                                            (1)        (2)       (3)        (4)        (5)        (6)    
## ------------------------------------------------------------------------------------------------------------------------
## dtigt43                                                  0.040***                        0.027***                       
##                                                          (0.005)                         (0.007)                        
## nodti4043                                                          0.115***                         0.090***            
##                                                                     (0.009)                         (0.011)             
## I(lti > 3.2)                                                                  0.028***                         0.084*** 
##                                                                               (0.003)                          (0.003)  
## postgsepatch                                                                                                            
##                                                          (0.000)    (0.000)   (0.000)    (0.000)    (0.000)    (0.000)  
## factor(lendertype)fintech                                                                                               
##                                                          (0.000)    (0.000)   (0.000)    (0.000)    (0.000)    (0.000)  
## factor(lendertype)mtgco                                                                                                 
##                                                          (0.000)    (0.000)   (0.000)    (0.000)    (0.000)    (0.000)  
## factor(race)black                                        0.061***  0.057***   0.062***   0.070***   0.065***   0.074*** 
##                                                          (0.003)    (0.003)   (0.003)    (0.003)    (0.003)    (0.003)  
## factor(race)white                                       -0.022***  -0.022*** -0.022***  -0.040***  -0.039***  -0.039*** 
##                                                          (0.002)    (0.002)   (0.002)    (0.002)    (0.002)    (0.002)  
## log(applicantincome)                                    -0.045***  -0.044*** -0.040***  -0.062***  -0.062***  -0.042*** 
##                                                          (0.001)    (0.001)   (0.001)    (0.001)    (0.001)    (0.001)  
## dtigt43:postgsepatch                                     0.130***                        0.366***                       
##                                                          (0.036)                         (0.043)                        
## dtigt43:factor(lendertype)fintech                         0.012                         -0.097***                       
##                                                          (0.015)                         (0.012)                        
## dtigt43:factor(lendertype)mtgco                         -0.026***                         -0.010                        
##                                                          (0.009)                         (0.007)                        
## nodti4043:postgsepatch                                              -0.009                          0.063***            
##                                                                     (0.007)                         (0.008)             
## nodti4043:factor(lendertype)fintech                                -0.069***                       -0.114***            
##                                                                     (0.024)                         (0.014)             
## nodti4043:factor(lendertype)mtgco                                  -0.050***                        -0.036*             
##                                                                     (0.019)                         (0.020)             
## I(lti > 3.2)TRUE:postgsepatch                                                  -0.002                          0.038*** 
##                                                                               (0.002)                          (0.003)  
## I(lti > 3.2)TRUE:factor(lendertype)fintech                                    -0.012*                         -0.027*** 
##                                                                               (0.006)                          (0.003)  
## I(lti > 3.2)TRUE:factor(lendertype)mtgco                                     -0.022***                        -0.031*** 
##                                                                               (0.003)                          (0.003)  
## postgsepatch:factor(lendertype)fintech                   0.119***  0.097***   0.100***   0.125***   0.066***   0.068*** 
##                                                          (0.010)    (0.006)   (0.004)    (0.008)    (0.003)    (0.002)  
## postgsepatch:factor(lendertype)mtgco                     0.054***  0.025***   0.009***   0.160***   0.057***   0.038*** 
##                                                          (0.012)    (0.004)   (0.002)    (0.009)    (0.005)    (0.002)  
## dtigt43:postgsepatch:factor(lendertype)fintech          -0.093***                       -0.257***                       
##                                                          (0.035)                         (0.028)                        
## dtigt43:postgsepatch:factor(lendertype)mtgco            -0.173***                       -0.510***                       
##                                                          (0.043)                         (0.032)                        
## nodti4043:postgsepatch:factor(lendertype)fintech                    -0.024                         -0.035***            
##                                                                     (0.021)                         (0.013)             
## nodti4043:postgsepatch:factor(lendertype)mtgco                     -0.068***                       -0.146***            
##                                                                     (0.012)                         (0.017)             
## I(lti > 3.2)TRUE:postgsepatch:factor(lendertype)fintech                       -0.013**                        -0.042*** 
##                                                                               (0.006)                          (0.003)  
## I(lti > 3.2)TRUE:postgsepatch:factor(lendertype)mtgco                         -0.004**                        -0.046*** 
##                                                                               (0.002)                          (0.003)  
## ------------------------------------------------------------------------------------------------------------------------
##                                                                                                                         
## Observations                                            11,422,014 9,501,172 11,422,014 23,265,790 19,628,793 23,265,790
## Adjusted R2                                               0.060      0.060     0.061      0.117      0.123      0.122   
## ========================================================================================================================
## Note:                                                                                        *p<0.1; **p<0.05; ***p<0.01
## 

2.2 Denial DiD Plots

2.2.1 Freddie Measure

r <- list()


r[[1]] <- felm(denied~ bank*dtigt43*factor(asofdate)+factor(race)+log(applicantincome)+log(amountofloan)+newpurchase|county_yr+hmda_id|0|countycode,data=hmdar[actiontaken<=3  & asofdate %in% c(2005:2019) ])
r[[2]] <- felm(denied~ bank*nodti4043*factor(asofdate)+factor(race)+log(applicantincome)+log(amountofloan)+newpurchase|county_yr+hmda_id|0|countycode,data=hmdar[actiontaken <=3  & asofdate %in% c(2005:2019) ])
r[[3]] <- felm(denied~ bank*I(lti>3.2)*factor(asofdate)+factor(race)+log(applicantincome)+log(amountofloan)+newpurchase|county_yr+hmda_id|0|countycode,data=hmdar[actiontaken<=3  & asofdate %in% c(2005:2019) ])

.coef_plot_1reg_line(r[[1]],"bank:dtigt43:factor(asofdate)",2005)

2.2.2 HMDA 18-19 Measure

.coef_plot_1reg_line(r[[2]],"bank:nodti4043:factor(asofdate)",2005)

2.2.3 By LTI

.coef_plot_1reg_line(r[[3]],"bank:I(lti > 3.2)TRUE:factor(asofdate)",2005)

2.3 Market Share Plots

2.3.1 Freddie Measure

noloansbylender <- hmdar[ !is.na(bank) & asofdate>=2005 & actiontaken %in% c(1) ,.N,by=.(zip3digit,asofdate,rssd2)]

noloansbylender[,shadow:=ifelse(rssd2 %in% bank,0,1)]

noloansbylender <- merge(noloansbylender,bunchingfreddie,by.x="zip3digit",by.y="zip_code")
noloansbylender[,tract_yr:=paste(zip3digit,asofdate)]

r <- list()
r[[1]] <- felm(log(0.001+N)~shadow*dtigt43*factor(asofdate)|rssd2+tract_yr|0|zip3digit,data=noloansbylender[asofdate != 201])

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

noloansbylender <- hmdar[!is.na(bank) & asofdate>=2005 & actiontaken %in% c(1) ,.N,by=.(countycode,asofdate,rssd2)]

noloansbylender[,shadow:=ifelse(rssd2 %in% bank,0,1)]

noloansbylender <- merge(noloansbylender,dticount,by="countycode")
noloansbylender[,county_yr:=paste(countycode,asofdate)]


r[[2]] <- felm(log(0.001+N)~shadow*nodti4043*factor(asofdate)|rssd2+county_yr|0|countycode,data=noloansbylender[asofdate != 201])


temp <- hmdar[asofdate %in% 2006:2009 &  actiontaken==1]
temp[,ltigt3:=ifelse(lti>3.2,1,0)]
tractlti <- temp[nchar(censustract)==11,.(ltimean=mean(lti,na.rm=T),ltigt3=mean(ltigt3,na.rm=T)),by=countycode]

noloansbylender <- hmdar[nchar(censustract)==11  & !is.na(bank) & asofdate>=2005 & actiontaken %in% c(1) ,.N,by=.(countycode,asofdate,rssd2)]

noloansbylender[,shadow:=ifelse(rssd2 %in% bank,0,1)]

noloansbylender <- merge(noloansbylender,tractlti,by="countycode")
noloansbylender[,county_yr:=paste(countycode,asofdate)]
noloansbylender[,ltigt3ind:=ifelse(ltigt3>0.25,1,0)]

r[[3]] <- felm(log(0.001+N)~shadow*ltigt3ind*factor(asofdate)|rssd2+county_yr|0|countycode,data=noloansbylender)



.coef_plot_1reg_line(r[[1]],"shadow:dtigt43:factor(asofdate)",2005)

2.3.2 HMDA 18-19 Measure

.coef_plot_1reg_line(r[[2]],"shadow:nodti4043:factor(asofdate)",2005)

2.3.3 By LTI

.coef_plot_1reg_line(r[[3]],"shadow:ltigt3ind:factor(asofdate)",2005)