- Below is the code to produce the results for Australian banks as reported in the paper.
- These confidential bank-level data were provided to the RBA under data sharing arrangements with APRA.
- These data are extracted from the RBA’s SAFFI/FIDO system and read in as a .xlsx file.
- This code was written in Stata/MP 16.0
- Code was written by Callan Windsor (windsorc@rba.gov.au)
. * ssc install estout, replace
. * ssc install winsor2, replace
. drop if period > date("20200720","YMD")
(133 observations deleted)
. egen bankid = group(institution_code)
. egen timeid = group(period)
. xtset bankid timeid
panel variable: bankid (unbalanced)
time variable: timeid, 1 to 68, but with gaps
delta: 1 unit
. gen year = year(period)
. encode Bank_type, generate(size)
- As per the instructions from the IBRN team
. foreach i in ROA_qtr Non_interest_income Bad_debt_charge Net_interest_income Deposit_share_of_liabilities Equity_to_asse
> ts Securities_to_assets Liquidity_ratio ST_borrowing_share Cost_to_income_ratio {
2. quietly summarize `i', detail
3. quietly generate `i'_out = inrange(`i', `r(p1)', `r(p99)')
4. keep if `i'_out == 1
5. }
(513 observations deleted)
(220 observations deleted)
(216 observations deleted)
(211 observations deleted)
(206 observations deleted)
(203 observations deleted)
(2,336 observations deleted)
(152 observations deleted)
(85 observations deleted)
(148 observations deleted)
. winsor2 Non_interest_income Bad_debt_charge Net_interest_income Deposit_share_of_liabilities Equity_to_assets Securities
> _to_assets Liquidity_ratio ST_borrowing_share, replace
. drop if observations < 12
(81 observations deleted)
. xtdes, patterns(10)
bankid: 1, 2, ..., 285 n = 187
timeid: 2, 3, ..., 68 T = 67
Delta(timeid) = 1 unit
Span(timeid) = 67 periods
(bankid*timeid uniquely identifies each observation)
Distribution of T_i: min 5% 25% 50% 75% 95% max
1 4 18 41 63 67 67
Freq. Percent Cum. | Pattern
---------------------------+---------------------------------------------------------------------
22 11.76 11.76 | 1111111111111111111111111111111111111111111111111111111111111111111
4 2.14 13.90 | 111111111111111111111111...........................................
4 2.14 16.04 | 11111111111111111111111111111111111111111......................1111
3 1.60 17.65 | 1111111111111111111................................................
3 1.60 19.25 | 11111111111111111111111111111111111111111..........................
2 1.07 20.32 | ...............................................................1111
2 1.07 21.39 | ..............................11111111111......................1111
2 1.07 22.46 | .......................111111111111111111......................1111
2 1.07 23.53 | .....................11111111111111111111..........................
2 1.07 24.60 | ...............11111111111111111111111111......................1111
141 75.40 100.00 | (other patterns)
---------------------------+---------------------------------------------------------------------
187 100.00 | XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
. g IR_low = interest_rate*low_rates
. replace IR_low = . if IR_low == 0
(5,343 real changes made, 5,343 to missing)
. g YC_low = slope*low_rates
(113 missing values generated)
. replace YC_low = . if IR_low == 0
(0 real changes made)
.
. mat stats = J(16,6, .)
. mat rown stats = NIM ROA Non-II BDD IR YC IR-low YC-low Dep Equ Liq Sec Cost GDP CPI HP
. mat coln stats = min p25 p50 mean p75 max
.
. local i = 1
.
. foreach x in Net_interest_income ROA_qtr Non_interest_income Bad_debt_charge interest_rate slope IR_low YC_low Deposit_s
> hare_of_liabilities Equity_to_assets Liquidity_ratio Securities_to_assets Cost_to_income_ratio GDP_YE CPI_YE House_price
> _YE {
2.
. qui tabstat `x', stat(min) save
3. mat stats [`i',1] = r(StatTotal)
4. qui tabstat `x', stat(p25) save
5. mat stats [`i',2] = r(StatTotal)
6. qui tabstat `x', stat(p50) save
7. mat stats [`i',3] = r(StatTotal)
8. qui tabstat `x', stat(mean) save
9. mat stats [`i',4] = r(StatTotal)
10. qui tabstat `x', stat(p75) save
11. mat stats [`i',5] = r(StatTotal)
12. qui tabstat `x', stat(max) save
13. mat stats [`i',6] = r(StatTotal)
14.
. local i = `i'+1
15. }
.
. matlist stats
| min p25 p50 mean p75 max
-------------+------------------------------------------------------------------
NIM | .3190388 1.958902 2.473907 2.579747 3.178381 5.496604
ROA | -2.904024 .3186813 .5378653 .5934071 .8097187 4.209332
Non-II | -.2385239 .4630523 .7975479 .9931841 1.310853 4.193133
BDD | -.204739 0 .0403925 .0873728 .1173284 .8826021
IR | .1366667 1.953333 3.716667 3.761155 5.37 7.35
YC | -1.025795 -.1446032 .4765128 .4546386 1.013607 2.372897
IR-low | .1366667 1.26 1.5 1.358441 1.503333 1.953333
YC-low | 0 0 0 .2119411 .235 1.279032
Dep | 27.04726 88.76015 96.33673 89.57199 98.11797 99.28164
Equ | .1458985 6.27523 7.605585 7.833354 9.45254 16.93229
Liq | .9260615 9.017147 14.19326 15.34408 18.8272 54.5832
Sec | 0 2.01814 10.29481 10.43601 14.48731 42.01105
Cost | 10.48387 63.16951 74.8996 71.65001 84.98034 128.3853
GDP | -6.356901 2.124595 2.677995 2.711409 3.244051 4.940627
CPI | -.3478261 1.829826 2.309913 2.400369 2.989691 4.988662
HP | -7.537486 -.6639602 4.928636 4.352084 8.840688 20.03611
. * Variables
. gen major = 0
. replace major = 1 if Bank_type == "Major_bank"
(261 real changes made)
. g irmajor = interest_rate*major
. g irlow = interest_rate*low
. g irmajorlow = interest_rate*major*low_rates
. g slopemajor = slope*major
(113 missing values generated)
. g slopelow = slope*low
(113 missing values generated)
. g slopemajorlow = slope*major*low_rates
(113 missing values generated)
.
. g irlowforlong = interest_rate*below_200
. g slopelowforlong = slope*below_200
(113 missing values generated)
. g irlowforlongmajor = interest_rate*below_200*major
. g slopelowforlongmajor = slope*below_200*major
(113 missing values generated)
.
. * Interest rate variables interacted with low and large bank dummy variables
. global IR_vars ///
> interest_rate slope irmajor slopemajor irlow slopelow irmajorlow slopemajorlow i.major i.low_rates i.major#i.low_rates
>
.
. * Interest rate variables interacted with lower-for-longer variable and large bank dummy variable
. global IR_vars_lower4longer ///
> interest_rate slope irmajor slopemajor irlowforlong slopelowforlong irlowforlongmajor slopelowforlongmajor i.major i.low
> _rates i.major#i.low_rates below_200 c.below_200#i.major
.
. * Lagged bank-level controls
. global controls_lag ///
> L.Deposit_share_of_liabilities L.Equity_to_assets L.Liquidity_ratio
.
. * Macroeconomic control variables
. global macro CPI_YE GDP_YE House_price_YE
. gsort bankid timeid
. eststo clear
. eststo: qui xtreg Net_interest_income L.Net_interest_income $IR_vars $controls_lag $macro, fe ro
(est1 stored)
. est sto NIM
. eststo: qui xtreg ROA_qtr L.ROA_qtr $IR_vars $controls_lag $macro, fe ro
(est2 stored)
. est sto ROA
. eststo: qui xtreg Non_interest_income L.Non_interest_income $IR_vars $controls_lag $macro, fe ro
(est3 stored)
. est sto NII
. eststo: qui xtreg Bad_debt_charge L.Bad_debt_charge $IR_vars $controls_lag $macro, fe ro
(est4 stored)
. est sto LLP
. esttab NIM ROA NII LLP, mtitle("NIM" "ROA" "NII" "LLP") varwidth(50) onecell nogap not r2 star (* 0.10 ** 0.05 *** 0.01)
> cells(b(fmt(3) star)) order(interest_rate slope irmajor slopemajor irlow slopelow irmajorlow slopemajorlow L.Deposit_sh
> are_of_liabilities L.Liquidity_ratio L.Equity_to_assets GDP_YE CPI_YE House_price_YE L.Net_interest_income) drop(0.major
> 1.major 0.low_rates 1.low_rates 0.major#0.low_rates 0.major#1.low_rates 1.major#0.low_rates 1.major#1.low_rates) replac
> e
------------------------------------------------------------------------------------------------------------------
(1) (2) (3) (4)
NIM ROA NII LLP
b b b b
------------------------------------------------------------------------------------------------------------------
interest_rate 0.070*** 0.063*** 0.102*** 0.015***
slope 0.054*** 0.046*** 0.059*** 0.007*
irmajor -0.056*** -0.067*** -0.037** 0.023***
irmajorlow 0.021 0.002 0.074*** -0.050*
slopemajor -0.026** -0.110*** -0.048** 0.078***
slopemajorlow -0.012 0.265** 0.160** -0.155***
irlow -0.024 0.008 -0.050** -0.039***
slopelow -0.040*** -0.021 -0.061*** 0.008
L.Deposit_share_of_liabilities 0.002** 0.001 -0.002 0.000
L.Liquidity_ratio -0.003** -0.001 0.001 -0.000
L.Equity_to_assets 0.030*** 0.012* 0.029*** 0.005*
GDP_YE 0.013*** 0.014*** 0.004 -0.008***
CPI_YE -0.013*** -0.004 -0.048*** -0.012***
House_price_YE 0.006*** 0.003*** -0.001 -0.000
L.Net_interest_income 0.732***
L.ROA_qtr 0.217***
L.Non_interest_income 0.469***
L.Bad_debt_charge 0.173***
_cons -0.052 -0.003 0.167 0.012
------------------------------------------------------------------------------------------------------------------
N 6490 6490 6490 6490
R-sq 0.790 0.164 0.439 0.078
------------------------------------------------------------------------------------------------------------------
. eststo clear
. eststo: qui xtreg Net_interest_income L.Net_interest_income $IR_vars_lower4longer $controls_lag $macro, fe ro
(est1 stored)
. est sto NIM
. eststo: qui xtreg ROA_qtr L.ROA_qtr $IR_vars_lower4longer $controls_lag $macro, fe ro
(est2 stored)
. est sto ROA
. eststo: qui xtreg Non_interest_income L.Non_interest_income $IR_vars_lower4longer $controls_lag $macro, fe ro
(est3 stored)
. est sto NII
. eststo: qui xtreg Bad_debt_charge L.Bad_debt_charge $IR_vars_lower4longer $controls_lag $macro, fe ro
(est4 stored)
. est sto LLM
. esttab NIM ROA NII LLP, mtitle("NIM" "ROA" "NII" "LLP") varwidth(50) onecell nogap not r2 star (* 0.10 ** 0.05 *** 0.01)
> cells(b(fmt(3) star)) order(interest_rate slope irmajor slopemajor irlowforlong slopelowforlong irlowforlongmajor slope
> lowforlongmajor L.Deposit_share_of_liabilities L.Liquidity_ratio L.Equity_to_assets GDP_YE CPI_YE House_price_YE L.Net_i
> nterest_income ) drop(0.major 1.major 0.low_rates 1.low_rates 0.major#0.low_rates 0.major#1.low_rates 1.major#0.low_rate
> s 1.major#1.low_rates below_200 0.major#c.below_200 1.major#c.below_200) replace
------------------------------------------------------------------------------------------------------------------
(1) (2) (3) (4)
NIM ROA NII LLP
b b b b
------------------------------------------------------------------------------------------------------------------
interest_rate 0.070*** 0.063*** 0.102*** 0.015***
slope 0.046*** 0.036*** 0.058*** 0.007*
irmajor -0.056*** -0.067*** -0.034* 0.023***
irmajorlow -0.050*
slopemajor -0.026** -0.109*** -0.041* 0.078***
slopemajorlow -0.155***
irlowforlong 0.006*** 0.009*** -0.001
irlowforlongmajor 0.003 0.002 0.001
slopelowforlong -0.005*** -0.005*** -0.006***
slopelowforlongmajor -0.002 0.020** 0.010
L.Deposit_share_of_liabilities 0.002** 0.001 -0.002 0.000
L.Liquidity_ratio -0.003** -0.001 0.001 -0.000
L.Equity_to_assets 0.029*** 0.011* 0.029*** 0.005*
GDP_YE 0.005 0.003 0.002 -0.008***
CPI_YE -0.019*** -0.011 -0.049*** -0.012***
House_price_YE 0.007*** 0.005*** -0.001 -0.000
L.Net_interest_income 0.733***
L.ROA_qtr 0.218***
L.Non_interest_income 0.469***
L.Bad_debt_charge 0.173***
irlow -0.039***
slopelow 0.008
_cons -0.005 0.056 0.179 0.012
------------------------------------------------------------------------------------------------------------------
N 6490 6490 6490 6490
R-sq 0.791 0.166 0.439 0.078
------------------------------------------------------------------------------------------------------------------