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)]
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
##
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
##
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
##
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()

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)
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
##
Denial DiD Plots
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)

HMDA 18-19 Measure
.coef_plot_1reg_line(r[[2]],"bank:nodti4043:factor(asofdate)",2005)

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

Market Share Plots
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)

HMDA 18-19 Measure
.coef_plot_1reg_line(r[[2]],"shadow:nodti4043:factor(asofdate)",2005)

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