MFI Interest Rate Statistics
Data - ECB
Info
Info
Monetary financial institutions in the euro area are legally obliged to report data to their National Central Banks, which in turn report to the ECB.
LAST_COMPILE
LAST_COMPILE |
---|
2025-06-06 |
Last
Code
%>%
MIR group_by(TIME_PERIOD) %>%
summarise(Nobs = n()) %>%
arrange(desc(TIME_PERIOD)) %>%
head(2) %>%
print_table_conditional()
TIME_PERIOD | Nobs |
---|---|
2025-04 | 7210 |
2025-03 | 7203 |
BS_ITEM
Javascript
Code
%>%
MIR left_join(BS_ITEM , by = "BS_ITEM") %>%
group_by(BS_ITEM, Bs_item) %>%
summarise(Nobs = n()) %>%
arrange(-Nobs) %>%
print_table_conditional_10()
Flat
Code
%>%
MIR left_join(BS_ITEM , by = "BS_ITEM") %>%
group_by(BS_ITEM, Bs_item) %>%
summarise(Nobs = n()) %>%
arrange(-Nobs) %>%
print_table_conditional()
BS_ITEM | Bs_item | Nobs |
---|---|---|
A2A | Loans other than revolving loans and overdrafts, convenience and extended credit card debt | 409101 |
A2AC | Loans other than revolving loans and overdrafts, convenience and extended credit card debt with collateral and/or guarantees | 269413 |
L22 | Deposits with agreed maturity | 235445 |
A2D | Other lending excluding revolving loans and overdrafts, convenience and extended credit card debt | 101137 |
A20 | Loans | 93424 |
A2C | Lending for house purchase excluding revolving loans and overdrafts, convenience and extended credit card debt | 90701 |
A2B | Loans for consumption excluding revolving loans and overdrafts, convenience and extended credit card debt | 73270 |
A2CC | Lending for house purchase excluding revolving loans and overdrafts, convenience and extended credit card debt with collateral and/or guarantees | 41517 |
A22 | Lending for house purchase | 41398 |
A25 | Credit for consumption and other lending | 41038 |
A2BC | Loans for consumption excluding revolving loans and overdrafts, convenience and extended credit card debt with collateral and/or guarantees | 32900 |
L21 | Overnight deposits | 25960 |
L23 | Deposits redeemable at notice | 24235 |
A2Z | Revolving loans and overdrafts, convenience and extended credit card debt | 23507 |
L24 | Repurchase agreements | 22009 |
A2Z1 | Revolving loans and overdrafts | 13266 |
A2Z3 | Extended credit | 12610 |
A2J | Loans to households for house purchase and to non-financial corporations (defined for cost of borrowing purposes, sum of A2C (households), A2A and A2Z (both related to non-financial corporations)) | 9819 |
A2I | Loans (defined for cost of borrowing purposes, sum of A2A and A2Z (both related to non-financial corporations)) | 4912 |
MATURITY_NOT_IRATE
Code
%>%
MIR left_join(MATURITY_NOT_IRATE, by = "MATURITY_NOT_IRATE") %>%
group_by(MATURITY_NOT_IRATE, Maturity_not_irate) %>%
summarise(Nobs = n()) %>%
arrange(-Nobs) %>%
print_table_conditional()
MATURITY_NOT_IRATE | Maturity_not_irate | Nobs |
---|---|---|
A | Total | 406009 |
F | Up to 1 year | 180834 |
K | Over 1 year | 142239 |
I | Over 1 and up to 5 years | 109945 |
J | Over 5 years | 91300 |
P | Over 10 years | 73094 |
O | Over 5 and up to 10 years | 72437 |
D | Up to 3 months | 68577 |
H | Over 2 years | 61345 |
Y | Period of initial rate fixation below 1 year and original maturity over 1 year | 57532 |
Q | Over 3 months and up to 1 year | 56895 |
S | Over 3 and up to 5 years | 54424 |
R | Over 1 and up to 3 years | 54060 |
L | Up to two years | 47534 |
G | Over 1 and up to 2 years | 29629 |
AM | Total calculated by weighting the volumes with a moving average (defined for cost of borrowing purposes) | 9820 |
E | Over 3 months | 8264 |
KF | Original maturity over 1 year and remaining maturity up to 1 year | 8070 |
HL | Original maturity over 2 years and remaining maturity up to 2 years | 8069 |
HHL | Original maturity over 2 years, remaining maturity over 2 years and interest rate reset within the next 24 months | 7883 |
KKF | Original maturity over 1 year, remaining maturity over 1 year and interest rate reset within the next 12 months | 7883 |
KM | Over 1 year calculated by weighting the volumes with a moving average (defined for cost of borrowing purposes) | 4911 |
FM | Up to 1 year calculated by weighting the volumes with a moving average (defined for cost of borrowing purposes) | 4908 |
DATA_TYPE_MIR
Code
%>%
MIR left_join(DATA_TYPE_MIR, by = "DATA_TYPE_MIR") %>%
group_by(DATA_TYPE_MIR, Data_type_mir) %>%
summarise(Nobs = n()) %>%
arrange(-Nobs) %>%
print_table_conditional()
DATA_TYPE_MIR | Data_type_mir | Nobs |
---|---|---|
R | Annualised agreed rate (AAR) / Narrowly defined effective rate (NDER) | 1032643 |
B | Business volume (outstanding amount / new business) | 220829 |
I | Interest rate component of euro area month-to-month level change (Bennet binary index on interest rates) | 49454 |
J | Weight component of euro area month-to-month level change (Bennet binary index on weights) | 49454 |
M | Index on interest rates (Bennet chain index) | 49454 |
N | Index on weights (Bennet chain index) | 49454 |
O | Accumulated changes on interest rates | 49454 |
V | Coefficient of variation | 49454 |
C | Annual percentage rate of charge (APRC) | 15466 |
AMOUNT_CAT
Code
%>%
MIR left_join(AMOUNT_CAT, by = "AMOUNT_CAT") %>%
group_by(AMOUNT_CAT, Amount_cat) %>%
summarise(Nobs = n()) %>%
arrange(-Nobs) %>%
print_table_conditional()
AMOUNT_CAT | Amount_cat | Nobs |
---|---|---|
A | Total | 1046767 |
1 | Over EUR 1 million | 175026 |
2 | Up to and including EUR 0.25 million | 143058 |
3 | Over EUR 0.25 million and up to EUR 1 million | 141552 |
0 | Up to and including EUR 1 million | 59259 |
BS_COUNT_SECTOR
Code
%>%
MIR mutate(BS_COUNT_SECTOR = paste0(BS_COUNT_SECTOR)) %>%
left_join(BS_COUNT_SECTOR , by = "BS_COUNT_SECTOR") %>%
group_by(BS_COUNT_SECTOR, Bs_count_sector) %>%
summarise(Nobs = n()) %>%
arrange(-Nobs) %>%
print_table_conditional()
BS_COUNT_SECTOR | Bs_count_sector | Nobs |
---|---|---|
2240 | Non-Financial corporations (S.11) | 853373 |
2250 | Households and non-profit institutions serving households (S.14 and S.15) | 573568 |
2230 | Non-Financial corporations and Households (S.11 and S.14 and S.15) | 101277 |
2253 | Households of which sole proprietors and unincorporated partnerships (SP/UP) | 37444 |
CURRENCY_TRANS
Code
%>%
MIR left_join(CURRENCY_TRANS , by = "CURRENCY_TRANS") %>%
group_by(CURRENCY_TRANS, Currency_trans) %>%
summarise(Nobs = n()) %>%
arrange(-Nobs) %>%
print_table_conditional()
CURRENCY_TRANS | Currency_trans | Nobs |
---|---|---|
EUR | Euro | 1274018 |
CZK | Czech koruna | 41733 |
HUF | Hungarian forint | 41061 |
RON | Romanian leu | 40522 |
SEK | Swedish krona | 39865 |
DKK | Danish krone | 36558 |
PLN | Polish zloty | 31138 |
BGN | Bulgarian lev | 23683 |
HRK | Croatian kuna | 19618 |
LVL | Latvian lats | 5400 |
LTL | Lithuanian litas | 4581 |
EEK | Estonian kroon | 3131 |
SKK | Slovak koruna | 2700 |
SIT | Slovenian tolar | 1404 |
MTL | Maltese lira | 250 |
IR_BUS_COV
Code
%>%
MIR left_join(IR_BUS_COV, by = "IR_BUS_COV") %>%
group_by(IR_BUS_COV, Ir_bus_cov) %>%
summarise(Nobs = n()) %>%
arrange(-Nobs) %>%
print_table_conditional()
IR_BUS_COV | Ir_bus_cov | Nobs |
---|---|---|
N | New business | 1251631 |
O | Outstanding amount | 254039 |
R | Renegotiation | 33113 |
P | Pure new loans | 26879 |
COLLECTION
Code
%>%
MIR left_join(COLLECTION , by = "COLLECTION") %>%
group_by(COLLECTION, Collection) %>%
summarise(Nobs = n()) %>%
arrange(-Nobs) %>%
print_table_conditional()
COLLECTION | Collection | Nobs |
---|---|---|
A | Average of observations through period | 1337887 |
S | Summed through period | 220829 |
E | End of period | 6946 |
SOURCE_AGENCY
Code
%>%
MIR left_join(SOURCE_AGENCY, by = "SOURCE_AGENCY") %>%
group_by(SOURCE_AGENCY, Source_agency) %>%
summarise(Nobs = n()) %>%
arrange(-Nobs) %>%
print_table_conditional()
SOURCE_AGENCY | Source_agency | Nobs |
---|---|---|
4F0 | European Central Bank (ECB) | 389065 |
HR2 | Croatian National Bank | 54669 |
SI2 | Bank of Slovenia | 51452 |
SK2 | National Bank of Slovakia | 50637 |
LV2 | Bank of Latvia | 50269 |
DE2 | Deutsche Bundesbank (Germany) | 48675 |
LT2 | Bank of Lithuania | 48573 |
IT2 | Banca d` Italia (Italy) | 48432 |
LU2 | Banque centrale du Luxembourg | 48414 |
ES2 | Banco de Espana (Spain) | 48333 |
AT2 | Oesterreichische Nationalbank (Austria) | 48275 |
GR2 | Bank of Greece (Greece) | 47587 |
FR2 | Banque de France (France) | 47397 |
EE2 | Bank of Estonia | 46188 |
MT2 | Central Bank of Malta | 46075 |
FI2 | Bank of Finland (Finland) | 45749 |
NL2 | De Nederlandsche Bank (Netherlands) | 43391 |
BE2 | Banque Nationale de Belgique (Belgium) | 42422 |
CZ2 | Czech National Bank | 41733 |
PT2 | Banco de Portugal (Portugal) | 41477 |
HU2 | National Bank of Hungary | 41061 |
RO2 | National Bank of Romania | 40742 |
SE2 | Sveriges Riksbank (Sweden) | 39865 |
DK2 | Danmarks Nationalbank (Denmark) | 36558 |
CY2 | Central Bank of Cyprus | 32175 |
PL2 | Bank of Poland | 31342 |
IE2 | Central Bank of Ireland (Ireland) | 31203 |
BG2 | Bulgarian National Bank | 23903 |
REF_AREA
Code
%>%
MIR left_join(REF_AREA , by = "REF_AREA") %>%
group_by(REF_AREA, Ref_area) %>%
summarise(Nobs = n()) %>%
arrange(-Nobs) %>%
print_table_conditional()
REF_AREA | Ref_area | Nobs |
---|---|---|
U2 | Euro area (Member States and Institutions of the Euro Area) changing composition | 389065 |
HR | Croatia | 54669 |
SI | Slovenia | 51452 |
SK | Slovakia | 50637 |
LV | Latvia | 50269 |
DE | Germany | 48675 |
LT | Lithuania | 48573 |
IT | Italy | 48432 |
LU | Luxembourg | 48414 |
ES | Spain | 48333 |
AT | Austria | 48275 |
GR | Greece | 47587 |
FR | France | 47397 |
EE | Estonia | 46188 |
MT | Malta | 46075 |
FI | Finland | 45749 |
NL | Netherlands | 43391 |
BE | Belgium | 42422 |
CZ | Czech Republic | 41733 |
PT | Portugal | 41477 |
HU | Hungary | 41061 |
RO | Romania | 40742 |
SE | Sweden | 39865 |
DK | Denmark | 36558 |
CY | Cyprus | 32175 |
PL | Poland | 31342 |
IE | Ireland | 31203 |
BG | Bulgaria | 23903 |
TIME_PERIOD
Code
%>%
MIR group_by(TIME_PERIOD) %>%
summarise(Nobs = n()) %>%
arrange(desc(TIME_PERIOD)) %>%
print_table_conditional()
Structure
BS_ITEM, MATURITY_ORIG, AMOUNT_CAT
Code
%>%
MIR left_join(BS_ITEM, by = "BS_ITEM") %>%
left_join(MATURITY_NOT_IRATE, by = "MATURITY_NOT_IRATE") %>%
left_join(AMOUNT_CAT, by = "AMOUNT_CAT") %>%
group_by(BS_ITEM, Bs_item, MATURITY_NOT_IRATE, Maturity_not_irate, AMOUNT_CAT, Amount_cat) %>%
summarise(Nobs = n()) %>%
arrange(-Nobs) %>%
print_table_conditional()
BS_ITEM, MATURITY_ORIG
Code
%>%
MIR left_join(BS_ITEM, by = "BS_ITEM") %>%
left_join(MATURITY_NOT_IRATE, by = "MATURITY_NOT_IRATE") %>%
group_by(BS_ITEM, Bs_item, MATURITY_NOT_IRATE, Maturity_not_irate) %>%
summarise(Nobs = n()) %>%
arrange(-Nobs) %>%
print_table_conditional()
Composite interest rates - corporations, households
Code
%>%
MIR filter(KEY %in% c("MIR.M.U2.B.A2I.AM.R.A.2240.EUR.N",
"MIR.M.U2.B.A2C.AM.R.A.2250.EUR.N")) %>%
%>%
month_to_date ggplot(.) +
geom_line(aes(x = date, y = OBS_VALUE / 100, color = TITLE)) +
theme_minimal() + xlab("") + ylab("Interest Rates (%)") +
scale_x_date(breaks = seq(1960, 2100, 2) %>% paste0("-01-01") %>% as.Date,
labels = date_format("%Y")) +
scale_y_continuous(breaks = 0.01*seq(-10, 50, 1),
labels = percent_format(accuracy = 1)) +
theme(legend.position = c(0.65, 0.9),
legend.title = element_blank())
France
Table - All
Code
%>%
MIR filter(REF_AREA == "FR",
# A2A: Loans oth. than revolving loans and overdrafts, convenience and ext. CC debt
# A: Total
== "2021-04") %>%
TIME_PERIOD %>%
month_to_date select_if(~n_distinct(.) > 1) %>%
select(-TITLE_COMPL, -TITLE, -KEY) %>%
mutate(BS_COUNT_SECTOR = paste0(BS_COUNT_SECTOR)) %>%
left_join(BS_COUNT_SECTOR, by = "BS_COUNT_SECTOR") %>%
left_join(AMOUNT_CAT, by = "AMOUNT_CAT") %>%
left_join(IR_BUS_COV, by = "IR_BUS_COV") %>%
left_join(MATURITY_NOT_IRATE, by = "MATURITY_NOT_IRATE") %>%
left_join(BS_ITEM , by = "BS_ITEM") %>%
arrange(OBS_VALUE) %>%
select(OBS_VALUE, Bs_count_sector, Bs_item, Amount_cat, Ir_bus_cov, Maturity_not_irate, everything()) %>%
print_table_conditional()
Table - MATURITY_NOT_IRATE == “A”, DATA_TYPE_MIR == “R”
Code
%>%
MIR filter(REF_AREA == "FR",
# A2A: Loans oth. than revolving loans and overdrafts, convenience and ext. CC debt
# A: Total
== "A",
MATURITY_NOT_IRATE # R: Rate
== "R",
DATA_TYPE_MIR == "2021-04") %>%
TIME_PERIOD %>%
month_to_date select_if(~n_distinct(.) > 1) %>%
select(-TITLE_COMPL, -TITLE, -KEY) %>%
mutate(BS_COUNT_SECTOR = paste0(BS_COUNT_SECTOR)) %>%
left_join(BS_COUNT_SECTOR, by = "BS_COUNT_SECTOR") %>%
left_join(AMOUNT_CAT, by = "AMOUNT_CAT") %>%
left_join(IR_BUS_COV, by = "IR_BUS_COV") %>%
left_join(BS_ITEM , by = "BS_ITEM") %>%
print_table_conditional()
Loans oth. than revolving loans and overdrafts - A2A
Table
Code
%>%
MIR filter(REF_AREA == "FR",
# A2A: Loans oth. than revolving loans and overdrafts, convenience and ext. CC debt
== "A2A",
BS_ITEM # A: Total
== "A",
MATURITY_NOT_IRATE # R: Rate
== "R",
DATA_TYPE_MIR == "2021-04") %>%
TIME_PERIOD %>%
month_to_date select_if(~n_distinct(.) > 1) %>%
select(-TITLE_COMPL, -TITLE, -KEY) %>%
mutate(BS_COUNT_SECTOR = paste0(BS_COUNT_SECTOR)) %>%
left_join(BS_COUNT_SECTOR, by = "BS_COUNT_SECTOR") %>%
left_join(AMOUNT_CAT, by = "AMOUNT_CAT") %>%
left_join(IR_BUS_COV, by = "IR_BUS_COV") %>%
print_table_conditional()
AMOUNT_CAT | BS_COUNT_SECTOR | IR_BUS_COV | OBS_VALUE | Bs_count_sector | Amount_cat | Ir_bus_cov |
---|---|---|---|---|---|---|
0 | 2240 | N | 1.31 | Non-Financial corporations (S.11) | Up to and including EUR 1 million | New business |
1 | 2240 | N | 1.39 | Non-Financial corporations (S.11) | Over EUR 1 million | New business |
2 | 2240 | N | 1.44 | Non-Financial corporations (S.11) | Up to and including EUR 0.25 million | New business |
3 | 2240 | N | 1.14 | Non-Financial corporations (S.11) | Over EUR 0.25 million and up to EUR 1 million | New business |
A | 2240 | N | 1.36 | Non-Financial corporations (S.11) | Total | New business |
A | 2240 | P | 1.35 | Non-Financial corporations (S.11) | Total | Pure new loans |
A | 2240 | R | 1.42 | Non-Financial corporations (S.11) | Total | Renegotiation |
A | 2250 | P | 1.63 | Households and non-profit institutions serving households (S.14 and S.15) | Total | Pure new loans |
A | 2250 | R | 1.65 | Households and non-profit institutions serving households (S.14 and S.15) | Total | Renegotiation |
Graph
All
Code
%>%
MIR filter(REF_AREA == "FR",
# A2A: Loans oth. than revolving loans and overdrafts, convenience and ext. CC debt
== "A2A",
BS_ITEM # A: Total
== "A",
MATURITY_NOT_IRATE # R: Rate
== "R") %>%
DATA_TYPE_MIR left_join(AMOUNT_CAT, by = "AMOUNT_CAT") %>%
%>%
month_to_date ggplot(.) +
geom_line(aes(x = date, y = OBS_VALUE / 100, color = TITLE)) +
theme_minimal() + xlab("") + ylab("France Interest Rates (%)") +
scale_x_date(breaks = seq(1960, 2100, 2) %>% paste0("-01-01") %>% as.Date,
labels = date_format("%Y")) +
scale_y_continuous(breaks = 0.01*seq(-10, 50, 1),
labels = percent_format(accuracy = 1)) +
theme(legend.position = c(0.65, 0.8),
legend.title = element_blank(),
legend.text = element_text(size = 8),
legend.key.size = unit(0.9, 'lines'))
IR_BUS_COV == “N”
Code
%>%
MIR filter(REF_AREA == "FR",
# A2A: Loans oth. than revolving loans and overdrafts, convenience and ext. CC debt
== "A2A",
BS_ITEM == "N",
IR_BUS_COV # A: Total
== "A",
MATURITY_NOT_IRATE # R: Rate
== "R") %>%
DATA_TYPE_MIR %>%
month_to_date left_join(AMOUNT_CAT, by = "AMOUNT_CAT") %>%
ggplot(.) +
geom_line(aes(x = date, y = OBS_VALUE / 100, color = TITLE)) +
theme_minimal() + xlab("") + ylab("France Interest Rates (%)") +
scale_x_date(breaks = seq(1960, 2100, 2) %>% paste0("-01-01") %>% as.Date,
labels = date_format("%Y")) +
scale_y_continuous(breaks = 0.01*seq(-10, 50, 1),
labels = percent_format(accuracy = 1),
limits = c(0.005, 0.08)) +
theme(legend.position = c(0.5, 0.9),
legend.title = element_blank(),
legend.text = element_text(size = 8),
legend.key.size = unit(0.9, 'lines'))
A2AC - Loans other than revolving loans and overdrafts, convenience and extended credit card debt with collateral and/or guarantees
A20 - Loans
Graph
Code
%>%
MIR filter(REF_AREA == "FR",
# A20: Loans
== "A20",
BS_ITEM # A: Total
== "A",
MATURITY_NOT_IRATE # R: Rate
== "R") %>%
DATA_TYPE_MIR %>%
month_to_date mutate(BS_COUNT_SECTOR = paste0(BS_COUNT_SECTOR)) %>%
left_join(BS_COUNT_SECTOR, by = "BS_COUNT_SECTOR") %>%
ggplot(.) +
geom_line(aes(x = date, y = OBS_VALUE / 100, color = Bs_count_sector)) +
theme_minimal() + xlab("") + ylab("France Interest Rates (%)") +
scale_x_date(breaks = seq(1960, 2100, 2) %>% paste0("-01-01") %>% as.Date,
labels = date_format("%Y")) +
scale_y_continuous(breaks = 0.01*seq(-10, 50, 0.5),
labels = percent_format(accuracy = .1)) +
theme(legend.position = c(0.6, 0.9),
legend.title = element_blank())
Europe
Loans oth. than revolving loans and overdrafts
Table
Code
%>%
MIR filter(REF_AREA == "U2",
# A2A: Loans oth. than revolving loans and overdrafts, convenience and ext. CC debt
== "A2A",
BS_ITEM # A: Total
== "A",
MATURITY_NOT_IRATE # R: Rate
== "R",
DATA_TYPE_MIR == "2021-04") %>%
TIME_PERIOD %>%
month_to_date select_if(~n_distinct(.) > 1) %>%
select(-TITLE_COMPL) %>%
print_table_conditional()
KEY | AMOUNT_CAT | BS_COUNT_SECTOR | IR_BUS_COV | OBS_VALUE | OBS_STATUS | TITLE |
---|---|---|---|---|---|---|
MIR.M.U2.B.A2A.A.R.0.2240.EUR.N | 0 | 2240 | N | 1.79 | A | Bank interest rates - loans to corporations of up to EUR 1M (new business) - euro area |
MIR.M.U2.B.A2A.A.R.1.2240.EUR.N | 1 | 2240 | N | 1.33 | A | Bank interest rates - loans to corporations of over EUR 1M (new business) - euro area |
MIR.M.U2.B.A2A.A.R.2.2240.EUR.N | 2 | 2240 | N | 2.00 | A | Bank interest rates - loans to corporations of up to EUR 0.25M (new business) - euro area |
MIR.M.U2.B.A2A.A.R.3.2240.EUR.N | 3 | 2240 | N | 1.48 | A | Bank interest rates - loans to corporations of over EUR .25M & up to EUR 1M (new business) - euro area |
MIR.M.U2.B.A2A.A.R.A.2240.EUR.N | A | 2240 | N | 1.47 | A | Bank interest rates - loans to corporations (new business) - euro area |
MIR.M.U2.B.A2A.A.R.A.2240.EUR.P | A | 2240 | P | 1.43 | A | Bank interest rates - loans to corporations (pure new loans) - euro area |
MIR.M.U2.B.A2A.A.R.A.2240.EUR.R | A | 2240 | R | 1.64 | E | Bank interest rates - loans to corporations (renegotiations) - euro area |
MIR.M.U2.B.A2A.A.R.A.2250.EUR.P | A | 2250 | P | 2.14 | A | Bank interest rates - loans to households (pure new loans) - euro area |
Graph
All
Code
%>%
MIR filter(REF_AREA == "U2",
# A2A: Loans oth. than revolving loans and overdrafts, convenience and ext. CC debt
== "A2A",
BS_ITEM # A: Total
== "A",
MATURITY_NOT_IRATE # R: Rate
== "R") %>%
DATA_TYPE_MIR mutate(TITLE = gsub("Bank interest rates - loans to", "", TITLE),
TITLE = gsub("- Germany", "", TITLE)) %>%
%>%
month_to_date ggplot(.) +
geom_line(aes(x = date, y = OBS_VALUE / 100, color = TITLE)) +
theme_minimal() + xlab("") + ylab("Euro Area Interest Rates (%)") +
scale_x_date(breaks = seq(1960, 2100, 2) %>% paste0("-01-01") %>% as.Date,
labels = date_format("%Y")) +
scale_y_continuous(breaks = 0.01*seq(-10, 50, 1),
labels = percent_format(accuracy = 1)) +
theme(legend.position = c(0.65, 0.8),
legend.title = element_blank(),
legend.text = element_text(size = 8),
legend.key.size = unit(0.9, 'lines'))
2010-
Code
%>%
MIR filter(REF_AREA == "U2",
# A2A: Loans oth. than revolving loans and overdrafts, convenience and ext. CC debt
== "A2A",
BS_ITEM # A: Total
== "A",
MATURITY_NOT_IRATE # R: Rate
== "R") %>%
DATA_TYPE_MIR mutate(TITLE = gsub("Bank interest rates - loans to", "", TITLE),
TITLE = gsub("- Germany", "", TITLE)) %>%
%>%
month_to_date filter(date >= as.Date("2010-01-01")) %>%
ggplot(.) +
geom_line(aes(x = date, y = OBS_VALUE / 100, color = TITLE)) +
theme_minimal() + xlab("") + ylab("Germany Interest Rates (%)") +
scale_x_date(breaks = seq(1960, 2100, 1) %>% paste0("-01-01") %>% as.Date,
labels = date_format("%Y")) +
scale_y_continuous(breaks = 0.01*seq(-10, 50, 1),
labels = percent_format(accuracy = 1)) +
theme(legend.position = c(0.65, 0.72),
legend.title = element_blank(),
legend.text = element_text(size = 8),
legend.key.size = unit(0.9, 'lines'))
2015-
Code
%>%
MIR filter(REF_AREA == "U2",
# A2A: Loans oth. than revolving loans and overdrafts, convenience and ext. CC debt
== "A2A",
BS_ITEM # A: Total
== "A",
MATURITY_NOT_IRATE # R: Rate
== "R") %>%
DATA_TYPE_MIR mutate(TITLE = gsub("Bank interest rates - loans to", "", TITLE),
TITLE = gsub("- Germany", "", TITLE)) %>%
%>%
month_to_date filter(date >= as.Date("2015-01-01")) %>%
ggplot(.) +
geom_line(aes(x = date, y = OBS_VALUE / 100, color = TITLE)) +
theme_minimal() + xlab("") + ylab("Germany Interest Rates (%)") +
scale_x_date(breaks = seq(1960, 2026, 1) %>% paste0("-01-01") %>% as.Date,
labels = date_format("%Y")) +
scale_y_continuous(breaks = 0.01*seq(-10, 50, .5),
labels = percent_format(accuracy = .1)) +
theme(legend.position = c(0.65, 0.8),
legend.title = element_blank(),
legend.text = element_text(size = 8),
legend.key.size = unit(0.9, 'lines'))
Germany
Loans oth. than revolving loans and overdrafts
Table
Code
%>%
MIR filter(REF_AREA == "DE",
# A2A: Loans oth. than revolving loans and overdrafts, convenience and ext. CC debt
== "A2A",
BS_ITEM # A: Total
== "A",
MATURITY_NOT_IRATE # R: Rate
== "R",
DATA_TYPE_MIR == "2021-04") %>%
TIME_PERIOD %>%
month_to_date select_if(~n_distinct(.) > 1) %>%
select(-TITLE_COMPL) %>%
print_table_conditional()
KEY | AMOUNT_CAT | BS_COUNT_SECTOR | IR_BUS_COV | OBS_VALUE | TITLE |
---|---|---|---|---|---|
MIR.M.DE.B.A2A.A.R.0.2240.EUR.N | 0 | 2240 | N | 1.90 | Bank interest rates - loans to corporations of up to EUR 1M (new business) - Germany |
MIR.M.DE.B.A2A.A.R.1.2240.EUR.N | 1 | 2240 | N | 1.41 | Bank interest rates - loans to corporations of over EUR 1M (new business) - Germany |
MIR.M.DE.B.A2A.A.R.2.2240.EUR.N | 2 | 2240 | N | 2.05 | Bank interest rates - loans to corporations of up to EUR 0.25M (new business) - Germany |
MIR.M.DE.B.A2A.A.R.3.2240.EUR.N | 3 | 2240 | N | 1.65 | Bank interest rates - loans to corporations of over EUR .25M & up to EUR 1M (new business) - Germany |
MIR.M.DE.B.A2A.A.R.A.2240.EUR.N | A | 2240 | N | 1.52 | Bank interest rates - loans to corporations (new business) - Germany |
MIR.M.DE.B.A2A.A.R.A.2240.EUR.P | A | 2240 | P | 1.50 | Bank interest rates - loans to corporations (pure new loans) - Germany |
MIR.M.DE.B.A2A.A.R.A.2240.EUR.R | A | 2240 | R | 1.55 | Bank interest rates - loans to corporations (renegotiations) - Germany |
MIR.M.DE.B.A2A.A.R.A.2250.EUR.P | A | 2250 | P | 2.11 | Bank interest rates - loans to households (pure new loans) - Germany |
MIR.M.DE.B.A2A.A.R.A.2250.EUR.R | A | 2250 | R | 2.44 | Bank interest rates - loans to households (renegotiations) - Germany |
Graph
All
Code
%>%
MIR filter(REF_AREA == "DE",
# A2A: Loans oth. than revolving loans and overdrafts, convenience and ext. CC debt
== "A2A",
BS_ITEM # A: Total
== "A",
MATURITY_NOT_IRATE # R: Rate
== "R") %>%
DATA_TYPE_MIR mutate(TITLE = gsub("Bank interest rates - loans to", "", TITLE),
TITLE = gsub("- Germany", "", TITLE)) %>%
%>%
month_to_date ggplot(.) +
geom_line(aes(x = date, y = OBS_VALUE / 100, color = TITLE)) +
theme_minimal() + xlab("") + ylab("Germany Interest Rates (%)") +
scale_x_date(breaks = seq(1960, 2100, 2) %>% paste0("-01-01") %>% as.Date,
labels = date_format("%Y")) +
scale_y_continuous(breaks = 0.01*seq(-10, 50, 1),
labels = percent_format(accuracy = 1)) +
theme(legend.position = c(0.65, 0.8),
legend.title = element_blank(),
legend.text = element_text(size = 8),
legend.key.size = unit(0.9, 'lines'))
2010-
Code
%>%
MIR filter(REF_AREA == "DE",
# A2A: Loans oth. than revolving loans and overdrafts, convenience and ext. CC debt
== "A2A",
BS_ITEM # A: Total
== "A",
MATURITY_NOT_IRATE # R: Rate
== "R") %>%
DATA_TYPE_MIR mutate(TITLE = gsub("Bank interest rates - loans to", "", TITLE),
TITLE = gsub("- Germany", "", TITLE)) %>%
%>%
month_to_date filter(date >= as.Date("2010-01-01")) %>%
ggplot(.) +
geom_line(aes(x = date, y = OBS_VALUE / 100, color = TITLE)) +
theme_minimal() + xlab("") + ylab("Germany Interest Rates (%)") +
scale_x_date(breaks = seq(1960, 2100, 1) %>% paste0("-01-01") %>% as.Date,
labels = date_format("%Y")) +
scale_y_continuous(breaks = 0.01*seq(-10, 50, 1),
labels = percent_format(accuracy = 1)) +
theme(legend.position = c(0.65, 0.8),
legend.title = element_blank(),
legend.text = element_text(size = 8),
legend.key.size = unit(0.9, 'lines'))
2015-
Code
%>%
MIR filter(REF_AREA == "DE",
# A2A: Loans oth. than revolving loans and overdrafts, convenience and ext. CC debt
== "A2A",
BS_ITEM # A: Total
== "A",
MATURITY_NOT_IRATE # R: Rate
== "R") %>%
DATA_TYPE_MIR mutate(TITLE = gsub("Bank interest rates - loans to", "", TITLE),
TITLE = gsub("- Germany", "", TITLE)) %>%
%>%
month_to_date filter(date >= as.Date("2015-01-01")) %>%
ggplot(.) +
geom_line(aes(x = date, y = OBS_VALUE / 100, color = TITLE)) +
theme_minimal() + xlab("") + ylab("Germany Interest Rates (%)") +
scale_x_date(breaks = seq(1960, 2026, 1) %>% paste0("-01-01") %>% as.Date,
labels = date_format("%Y")) +
scale_y_continuous(breaks = 0.01*seq(-10, 50, .5),
labels = percent_format(accuracy = .1)) +
theme(legend.position = c(0.65, 0.8),
legend.title = element_blank(),
legend.text = element_text(size = 8),
legend.key.size = unit(0.9, 'lines'))
France
2015-
Code
%>%
MIR filter(REF_AREA %in% c("FR"),
# A2C: Lending for house purchase excluding revolving loans and overdrafts, convenience and extended credit card debt
%in% c("A2C", "A20"),
BS_ITEM # A: Total
== "A",
MATURITY_NOT_IRATE # R: Rate
== "R",
DATA_TYPE_MIR == "2250") %>%
BS_COUNT_SECTOR left_join(BS_ITEM, by = "BS_ITEM") %>%
left_join(IR_BUS_COV, by = "IR_BUS_COV") %>%
%>%
month_to_date filter(date >= as.Date("2015-01-01")) %>%
mutate(OBS_VALUE = OBS_VALUE/100) %>%
ggplot(.) + theme_minimal() + xlab("") + ylab("Lending for house purchase excluding revolving (%)") +
geom_line(aes(x = date, y = OBS_VALUE, color = paste0(BS_ITEM, " - ", Bs_item, "\n", Ir_bus_cov))) +
scale_x_date(breaks = seq(1960, 2100, 1) %>% paste0("-01-01") %>% as.Date,
labels = date_format("%Y")) +
scale_y_continuous(breaks = 0.01*seq(-10, 50, .5),
labels = percent_format(accuracy = .1)) +
theme(legend.position = c(0.5, 0.85),
legend.title = element_blank())
France, Germany, Italy
A2C / A20
All
Code
%>%
MIR filter(REF_AREA %in% c("FR", "DE", "IT"),
# A2C: Lending for house purchase excluding revolving loans and overdrafts, convenience and extended credit card debt
%in% c("A2C", "A20"),
BS_ITEM # A: Total
== "A",
MATURITY_NOT_IRATE # R: Rate
== "R",
DATA_TYPE_MIR == "2250") %>%
BS_COUNT_SECTOR left_join(REF_AREA, by = "REF_AREA") %>%
left_join(BS_ITEM, by = "BS_ITEM") %>%
%>%
month_to_date arrange(desc(date)) %>%
left_join(colors, by = c("Ref_area" = "country")) %>%
mutate(OBS_VALUE = OBS_VALUE/100) %>%
ggplot(.) + theme_minimal() + xlab("") + ylab("Lending for house purchase excluding revolving (%)") +
geom_line(aes(x = date, y = OBS_VALUE, color = color, linetype = paste0(Bs_item, IR_BUS_COV))) +
add_flags(6) + scale_color_identity() +
scale_x_date(breaks = seq(1960, 2100, 2) %>% paste0("-01-01") %>% as.Date,
labels = date_format("%Y")) +
scale_y_continuous(breaks = 0.01*seq(-10, 50, 1),
labels = percent_format(accuracy = 1)) +
theme(legend.position = c(0.8, 0.2),
legend.title = element_blank())
2010
Code
%>%
MIR filter(REF_AREA %in% c("FR", "DE", "IT"),
# A2C: Lending for house purchase excluding revolving loans and overdrafts, convenience and extended credit card debt
%in% c("A2C", "A20"),
BS_ITEM # A: Total
== "A",
MATURITY_NOT_IRATE # R: Rate
== "R",
DATA_TYPE_MIR == "2250") %>%
BS_COUNT_SECTOR left_join(REF_AREA, by = "REF_AREA") %>%
left_join(BS_ITEM, by = "BS_ITEM") %>%
left_join(IR_BUS_COV, by = "IR_BUS_COV") %>%
%>%
month_to_date filter(date >= as.Date("2010-01-01")) %>%
left_join(colors, by = c("Ref_area" = "country")) %>%
mutate(OBS_VALUE = OBS_VALUE/100) %>%
ggplot(.) + theme_minimal() + xlab("") + ylab("Lending for house purchase excluding revolving (%)") +
geom_line(aes(x = date, y = OBS_VALUE, color = color, linetype = paste0(BS_ITEM, " - ", Ir_bus_cov))) +
add_flags(6) + scale_color_identity() +
scale_x_date(breaks = seq(1960, 2100, 1) %>% paste0("-01-01") %>% as.Date,
labels = date_format("%Y")) +
scale_y_continuous(breaks = 0.01*seq(-10, 50, .5),
labels = percent_format(accuracy = .1)) +
theme(legend.position = c(0.2, 0.2),
legend.title = element_blank())
2015-
All
Code
%>%
MIR filter(REF_AREA %in% c("FR", "DE", "IT"),
# A2C: Lending for house purchase excluding revolving loans and overdrafts, convenience and extended credit card debt
%in% c("A2C", "A20"),
BS_ITEM # A: Total
== "A",
MATURITY_NOT_IRATE # R: Rate
== "R",
DATA_TYPE_MIR == "2250") %>%
BS_COUNT_SECTOR left_join(REF_AREA, by = "REF_AREA") %>%
left_join(BS_ITEM, by = "BS_ITEM") %>%
left_join(IR_BUS_COV, by = "IR_BUS_COV") %>%
%>%
month_to_date filter(date >= as.Date("2015-01-01")) %>%
left_join(colors, by = c("Ref_area" = "country")) %>%
mutate(OBS_VALUE = OBS_VALUE/100) %>%
ggplot(.) + theme_minimal() + xlab("") + ylab("Lending for house purchase excluding revolving (%)") +
geom_line(aes(x = date, y = OBS_VALUE, color = color, linetype = paste0(BS_ITEM, " - ", Ir_bus_cov))) +
add_flags(6) + scale_color_identity() +
scale_x_date(breaks = seq(1960, 2100, 1) %>% paste0("-01-01") %>% as.Date,
labels = date_format("%Y")) +
scale_y_continuous(breaks = 0.01*seq(-10, 50, .5),
labels = percent_format(accuracy = .1)) +
theme(legend.position = c(0.5, 0.85),
legend.title = element_blank())
Pure new loans
Code
%>%
MIR filter(REF_AREA %in% c("FR", "DE", "IT"),
# A2C: Lending for house purchase excluding revolving loans and overdrafts, convenience and extended credit card debt
%in% c("A2C", "A20"),
BS_ITEM # A: Total
== "A",
MATURITY_NOT_IRATE # R: Rate
== "R",
DATA_TYPE_MIR == "2250",
BS_COUNT_SECTOR %in% c("N", "O")) %>%
IR_BUS_COV left_join(REF_AREA, by = "REF_AREA") %>%
left_join(BS_ITEM, by = "BS_ITEM") %>%
left_join(IR_BUS_COV, by = "IR_BUS_COV") %>%
%>%
month_to_date filter(date >= as.Date("2015-01-01")) %>%
arrange(date) %>%
left_join(colors, by = c("Ref_area" = "country")) %>%
mutate(OBS_VALUE = OBS_VALUE/100) %>%
ggplot(.) + theme_minimal() + xlab("") + ylab("Loans to Households (%)") +
geom_line(aes(x = date, y = OBS_VALUE, color = color, linetype = paste0(BS_ITEM, " - ", Ir_bus_cov))) +
add_flags(6) + scale_color_identity() +
scale_x_date(breaks = seq(1960, 2100, 1) %>% paste0("-01-01") %>% as.Date,
labels = date_format("%Y")) +
scale_y_continuous(breaks = 0.01*seq(-10, 50, .5),
labels = percent_format(accuracy = .1)) +
theme(legend.position = c(0.5, 0.85),
legend.title = element_blank())
A20 - Loans
Loans to Corporations (2240 = Corporations)
Code
%>%
MIR filter(REF_AREA %in% c("FR", "DE", "IT"),
# A20 - Loans
== "A20",
BS_ITEM # A: Total
== "A",
MATURITY_NOT_IRATE # R: Rate
== "R",
DATA_TYPE_MIR == "2240") %>%
BS_COUNT_SECTOR left_join(REF_AREA, by = "REF_AREA") %>%
%>%
month_to_date select_if(~n_distinct(.) > 1) %>%
left_join(colors, by = c("Ref_area" = "country")) %>%
mutate(OBS_VALUE = OBS_VALUE/100) %>%
ggplot(.) + theme_minimal() + xlab("") + ylab("Loans to corporations (%)") +
geom_line(aes(x = date, y = OBS_VALUE, color = color)) +
add_flags(3) + scale_color_identity() +
scale_x_date(breaks = seq(1960, 2100, 2) %>% paste0("-01-01") %>% as.Date,
labels = date_format("%Y")) +
scale_y_continuous(breaks = 0.01*seq(-10, 50, 1),
labels = percent_format(accuracy = 1))
Loans to Households (2250)
Code
%>%
MIR filter(REF_AREA %in% c("FR", "DE", "IT"),
# A2C: Lending for house purchase excluding revolving loans and overdrafts, convenience and extended credit card debt
== "A20",
BS_ITEM # A: Total
== "A",
MATURITY_NOT_IRATE # R: Rate
== "R",
DATA_TYPE_MIR == "2250") %>%
BS_COUNT_SECTOR left_join(REF_AREA, by = "REF_AREA") %>%
%>%
month_to_date select_if(~n_distinct(.) > 1) %>%
left_join(colors, by = c("Ref_area" = "country")) %>%
mutate(OBS_VALUE = OBS_VALUE/100) %>%
ggplot(.) + theme_minimal() + xlab("") + ylab("Loans to households (%)") +
geom_line(aes(x = date, y = OBS_VALUE, color = color)) +
add_flags(3) + scale_color_identity() +
scale_x_date(breaks = seq(1960, 2100, 2) %>% paste0("-01-01") %>% as.Date,
labels = date_format("%Y")) +
scale_y_continuous(breaks = 0.01*seq(-10, 50, 1),
labels = percent_format(accuracy = 1))
A2C - Lending for house purchase excluding revolving
All
Code
%>%
MIR filter(REF_AREA %in% c("FR", "DE", "IT"),
# A2C: Lending for house purchase excluding revolving loans and overdrafts, convenience and extended credit card debt
== "A2C",
BS_ITEM # A: Total
== "A",
MATURITY_NOT_IRATE # R: Rate
== "R",
DATA_TYPE_MIR # N: New business
== "N") %>%
IR_BUS_COV left_join(REF_AREA, by = "REF_AREA") %>%
%>%
month_to_date arrange(date) %>%
left_join(colors, by = c("Ref_area" = "country")) %>%
mutate(OBS_VALUE = OBS_VALUE/100) %>%
ggplot(.) + theme_minimal() + xlab("") + ylab("Lending for house purchase excluding revolving (%)") +
geom_line(aes(x = date, y = OBS_VALUE, color = color)) +
add_flags(3) + scale_color_identity() +
scale_x_date(breaks = seq(1960, 2100, 2) %>% paste0("-01-01") %>% as.Date,
labels = date_format("%Y")) +
scale_y_continuous(breaks = 0.01*seq(-10, 50, 1),
labels = percent_format(accuracy = 1))
2010
Code
%>%
MIR filter(REF_AREA %in% c("FR", "DE", "IT"),
# A2A: Loans oth. than revolving loans and overdrafts, convenience and ext. CC debt
== "A2C",
BS_ITEM # A: Total
== "A",
MATURITY_NOT_IRATE # R: Rate
== "R",
DATA_TYPE_MIR # N: New business
== "N") %>%
IR_BUS_COV left_join(REF_AREA, by = "REF_AREA") %>%
%>%
month_to_date filter(date >= as.Date("2010-01-01")) %>%
left_join(colors, by = c("Ref_area" = "country")) %>%
mutate(OBS_VALUE = OBS_VALUE/100) %>%
ggplot(.) + theme_minimal() + xlab("") + ylab("Lending for house purchase excluding revolving (%)") +
geom_line(aes(x = date, y = OBS_VALUE, color = color)) +
add_flags(3) + scale_color_identity() +
scale_x_date(breaks = seq(1960, 2100, 1) %>% paste0("-01-01") %>% as.Date,
labels = date_format("%Y")) +
scale_y_continuous(breaks = 0.01*seq(-10, 50, .5),
labels = percent_format(accuracy = .1))
A22 - Lending for house purchase
Table
Code
%>%
MIR filter(BS_ITEM == "A22",
# A: Total
== "A",
MATURITY_NOT_IRATE # R: Rate
== "R") %>%
DATA_TYPE_MIR left_join(REF_AREA, by = "REF_AREA") %>%
group_by(REF_AREA, Ref_area) %>%
filter(TIME_PERIOD == max(TIME_PERIOD) | TIME_PERIOD == "2022-01") %>%
select(REF_AREA, Ref_area, TIME_PERIOD, OBS_VALUE) %>%
spread(TIME_PERIOD, OBS_VALUE) %>%
%>%
ungroup mutate(change = .[[4]] - .[[3]]) %>%
arrange(-change) %>%
print_table_conditional
REF_AREA | Ref_area | 2022-01 | 2025-03 | 2025-04 | change |
---|---|---|---|---|---|
PL | Poland | 3.74 | 7.55 | NA | 3.81 |
AT | Austria | 1.37 | NA | 2.81 | NA |
BE | Belgium | 1.73 | NA | 2.32 | NA |
BG | Bulgaria | 2.98 | NA | 2.75 | NA |
CY | Cyprus | 2.03 | NA | 3.93 | NA |
CZ | Czech Republic | NA | NA | NA | NA |
DE | Germany | 1.73 | NA | 2.13 | NA |
DK | Denmark | 1.64 | NA | 3.46 | NA |
EE | Estonia | 2.01 | NA | 4.41 | NA |
ES | Spain | 1.10 | NA | 3.07 | NA |
FI | Finland | 0.79 | NA | 3.21 | NA |
FR | France | 1.43 | NA | 1.86 | NA |
GR | Greece | NA | NA | NA | NA |
HR | Croatia | 3.09 | NA | 3.10 | NA |
HU | Hungary | 4.63 | NA | 5.91 | NA |
IE | Ireland | 2.47 | NA | 3.48 | NA |
IT | Italy | 1.59 | NA | 2.75 | NA |
LT | Lithuania | 1.94 | NA | 4.42 | NA |
LU | Luxembourg | 1.56 | NA | 2.66 | NA |
LV | Latvia | 2.30 | NA | 4.67 | NA |
MT | Malta | 2.80 | NA | 2.46 | NA |
NL | Netherlands | 2.32 | NA | 2.68 | NA |
PT | Portugal | 0.83 | NA | 3.58 | NA |
RO | Romania | 4.66 | NA | NA | NA |
SE | Sweden | 1.51 | NA | 3.09 | NA |
SI | Slovenia | 2.02 | NA | 3.16 | NA |
SK | Slovakia | 1.30 | NA | 2.95 | NA |
U2 | Euro area (Member States and Institutions of the Euro Area) changing composition | 1.61 | NA | 2.41 | NA |
Estonia, Lithuania, Portugal, Latvia
Code
%>%
MIR filter(REF_AREA %in% c("EE", "LT", "LV", "PT"),
# A22: Lending for house purchase
== "A22",
BS_ITEM # A: Total
== "A",
MATURITY_NOT_IRATE # R: Rate
== "R") %>%
DATA_TYPE_MIR left_join(REF_AREA, by = "REF_AREA") %>%
%>%
month_to_date filter(date >= as.Date("2018-01-01")) %>%
arrange(date) %>%
left_join(colors, by = c("Ref_area" = "country")) %>%
mutate(OBS_VALUE = OBS_VALUE/100,
color = ifelse(REF_AREA == "FR", color2, color)) %>%
ggplot(.) + theme_minimal() + xlab("") + ylab("Lending for house purchase, Old loans (%)") +
geom_line(aes(x = date, y = OBS_VALUE, color = color)) +
add_flags(4) + scale_color_identity() +
scale_x_date(breaks = seq(1960, 2100, 1) %>% paste0("-01-01") %>% as.Date,
labels = date_format("%Y")) +
scale_y_continuous(breaks = 0.01*seq(-10, 50, .5),
labels = percent_format(accuracy = .1))
France, Europe, Belgium, Germany, Netherlands
Code
%>%
MIR filter(REF_AREA %in% c("FR", "BE", "DE", "NL"),
# A22: Lending for house purchase
== "A22",
BS_ITEM # A: Total
== "A",
MATURITY_NOT_IRATE # R: Rate
== "R") %>%
DATA_TYPE_MIR left_join(REF_AREA, by = "REF_AREA") %>%
mutate(Ref_area = ifelse(REF_AREA == "U2", "Europe", Ref_area)) %>%
%>%
month_to_date filter(date >= as.Date("2018-01-01")) %>%
arrange(date) %>%
left_join(colors, by = c("Ref_area" = "country")) %>%
mutate(OBS_VALUE = OBS_VALUE/100) %>%
ggplot(.) + theme_minimal() + xlab("") + ylab("Lending for house purchase, Old loans (%)") +
geom_line(aes(x = date, y = OBS_VALUE, color = color)) +
add_flags(4) + scale_color_identity() +
scale_x_date(breaks = seq(1960, 2100, 1) %>% paste0("-01-01") %>% as.Date,
labels = date_format("%Y")) +
scale_y_continuous(breaks = 0.01*seq(-10, 50, .2),
labels = percent_format(accuracy = .1))
France, Germany, Italy, Spain, Netherlands
All
Code
%>%
MIR filter(REF_AREA %in% c("FR", "DE", "IT", "ES", "NL"),
# A22: Lending for house purchase
== "A22",
BS_ITEM # A: Total
== "A",
MATURITY_NOT_IRATE # R: Rate
== "R") %>%
DATA_TYPE_MIR left_join(REF_AREA, by = "REF_AREA") %>%
%>%
month_to_date arrange(date) %>%
left_join(colors, by = c("Ref_area" = "country")) %>%
mutate(OBS_VALUE = OBS_VALUE/100,
color = ifelse(REF_AREA == "FR", color2, color)) %>%
ggplot(.) + theme_minimal() + xlab("") + ylab("Lending for house purchase, Old loans (%)") +
geom_line(aes(x = date, y = OBS_VALUE, color = color)) +
add_flags(5) + scale_color_identity() +
scale_x_date(breaks = seq(1960, 2100, 2) %>% paste0("-01-01") %>% as.Date,
labels = date_format("%Y")) +
scale_y_continuous(breaks = 0.01*seq(-10, 50, 1),
labels = percent_format(accuracy = 1))
2018-
Code
%>%
MIR filter(REF_AREA %in% c("FR", "DE", "IT", "ES", "NL"),
# A22: Lending for house purchase
== "A22",
BS_ITEM # A: Total
== "A",
MATURITY_NOT_IRATE # R: Rate
== "R") %>%
DATA_TYPE_MIR left_join(REF_AREA, by = "REF_AREA") %>%
%>%
month_to_date filter(date >= as.Date("2018-01-01")) %>%
arrange(date) %>%
left_join(colors, by = c("Ref_area" = "country")) %>%
mutate(OBS_VALUE = OBS_VALUE/100,
color = ifelse(REF_AREA == "FR", color2, color)) %>%
ggplot(.) + theme_minimal() + xlab("") + ylab("Lending for house purchase, Old loans (%)") +
geom_line(aes(x = date, y = OBS_VALUE, color = color)) +
add_flags(5) + scale_color_identity() +
scale_x_date(breaks = seq(1960, 2100, 1) %>% paste0("-01-01") %>% as.Date,
labels = date_format("%Y")) +
scale_y_continuous(breaks = 0.01*seq(-10, 50, .5),
labels = percent_format(accuracy = .1))
Estonia, Lithuania, Portugal, Finland, Spain
Code
%>%
MIR filter(REF_AREA %in% c("EE", "LT", "LV", "PT", "FI", "ES"),
# A22: Lending for house purchase
== "A22",
BS_ITEM # A: Total
== "A",
MATURITY_NOT_IRATE # R: Rate
== "R") %>%
DATA_TYPE_MIR left_join(REF_AREA, by = "REF_AREA") %>%
%>%
month_to_date filter(date >= as.Date("2018-01-01")) %>%
arrange(date) %>%
left_join(colors, by = c("Ref_area" = "country")) %>%
mutate(OBS_VALUE = OBS_VALUE/100,
color = ifelse(REF_AREA == "FR", color2, color)) %>%
ggplot(.) + theme_minimal() + xlab("") + ylab("Lending for house purchase, Old loans (%)") +
geom_line(aes(x = date, y = OBS_VALUE, color = color)) +
add_flags(6) + scale_color_identity() +
scale_x_date(breaks = seq(1960, 2100, 1) %>% paste0("-01-01") %>% as.Date,
labels = date_format("%Y")) +
scale_y_continuous(breaks = 0.01*seq(-10, 50, .5),
labels = percent_format(accuracy = .1))
France, Europe, Belgium, Germany, Netherlands
Code
%>%
MIR filter(REF_AREA %in% c("FR", "U2", "BE", "DE", "NL"),
# A22: Lending for house purchase
== "A22",
BS_ITEM # A: Total
== "A",
MATURITY_NOT_IRATE # R: Rate
== "R") %>%
DATA_TYPE_MIR left_join(REF_AREA, by = "REF_AREA") %>%
mutate(Ref_area = ifelse(REF_AREA == "U2", "Europe", Ref_area)) %>%
%>%
month_to_date filter(date >= as.Date("2018-01-01")) %>%
arrange(date) %>%
left_join(colors, by = c("Ref_area" = "country")) %>%
mutate(OBS_VALUE = OBS_VALUE/100) %>%
ggplot(.) + theme_minimal() + xlab("") + ylab("Lending for house purchase, Old loans (%)") +
geom_line(aes(x = date, y = OBS_VALUE, color = color)) +
add_flags(5) + scale_color_identity() +
scale_x_date(breaks = seq(1960, 2100, 1) %>% paste0("-01-01") %>% as.Date,
labels = date_format("%Y")) +
scale_y_continuous(breaks = 0.01*seq(-10, 50, .2),
labels = percent_format(accuracy = .1))
Credit for consumption and other lending - A25
All
Code
%>%
MIR filter(REF_AREA %in% c("FR", "DE", "IT"),
# A2A: Loans oth. than revolving loans and overdrafts, convenience and ext. CC debt
== "A25",
BS_ITEM # A: Total
== "A",
MATURITY_NOT_IRATE # R: Rate
== "R") %>%
DATA_TYPE_MIR left_join(REF_AREA, by = "REF_AREA") %>%
%>%
month_to_date arrange(date) %>%
left_join(colors, by = c("Ref_area" = "country")) %>%
mutate(OBS_VALUE = OBS_VALUE/100) %>%
ggplot(.) + theme_minimal() + xlab("") + ylab("Credit for consumption and other lending (%)") +
geom_line(aes(x = date, y = OBS_VALUE, color = color)) +
add_flags(3) + scale_color_identity() +
scale_x_date(breaks = seq(1960, 2100, 2) %>% paste0("-01-01") %>% as.Date,
labels = date_format("%Y")) +
scale_y_continuous(breaks = 0.01*seq(-10, 50, 1),
labels = percent_format(accuracy = 1))
2017-
Code
%>%
MIR filter(REF_AREA %in% c("FR", "DE", "IT"),
# A2A: Loans oth. than revolving loans and overdrafts, convenience and ext. CC debt
== "A25",
BS_ITEM # A: Total
== "A",
MATURITY_NOT_IRATE # R: Rate
== "R") %>%
DATA_TYPE_MIR left_join(REF_AREA, by = "REF_AREA") %>%
%>%
month_to_date arrange(date) %>%
left_join(colors, by = c("Ref_area" = "country")) %>%
mutate(OBS_VALUE = OBS_VALUE/100) %>%
filter(date >= as.Date("2017-01-01")) %>%
ggplot(.) + theme_minimal() + xlab("") + ylab("Credit for consumption and other lending (%)") +
geom_line(aes(x = date, y = OBS_VALUE, color = color)) +
add_flags(3) + scale_color_identity() +
scale_x_date(breaks = seq(1960, 2100, 1) %>% paste0("-01-01") %>% as.Date,
labels = date_format("%Y")) +
scale_y_continuous(breaks = 0.01*seq(-10, 50, 1),
labels = percent_format(accuracy = 1))
More info…
Data on interest rates
source | dataset | .html | .RData |
---|---|---|---|
bdf | FM | 2025-05-24 | 2025-05-24 |
bdf | MIR | 2025-03-09 | 2025-01-22 |
bdf | MIR1 | 2025-03-09 | 2025-01-22 |
bis | CBPOL_D | 2025-05-24 | 2024-05-10 |
bis | CBPOL_M | 2025-05-24 | 2024-04-19 |
ecb | FM | 2025-06-06 | 2025-06-06 |
ecb | MIR | 2025-06-06 | 2025-06-05 |
eurostat | ei_mfir_m | 2025-05-24 | 2025-05-24 |
eurostat | irt_lt_mcby_d | 2025-05-24 | 2025-05-24 |
eurostat | irt_st_m | 2025-05-24 | 2025-05-24 |
fred | r | 2025-05-30 | 2025-05-30 |
oecd | MEI | 2024-04-16 | 2025-02-25 |
oecd | MEI_FIN | 2024-09-15 | 2025-02-25 |
wdi | FR.INR.RINR | 2025-05-24 | 2025-05-24 |
Data on monetary policy
source | dataset | .html | .RData |
---|---|---|---|
bdf | FM | 2025-05-24 | 2025-05-24 |
bdf | MIR | 2025-03-09 | 2025-01-22 |
bdf | MIR1 | 2025-03-09 | 2025-01-22 |
bis | CBPOL | 2024-12-29 | 2024-12-29 |
ecb | BSI | 2025-05-21 | 2025-05-28 |
ecb | BSI_PUB | 2025-05-18 | 2025-05-30 |
ecb | FM | 2025-06-06 | 2025-06-06 |
ecb | ILM | 2025-06-05 | 2025-06-05 |
ecb | ILM_PUB | 2025-05-18 | 2024-09-10 |
ecb | liq_daily | 2025-06-06 | 2025-06-06 |
ecb | MIR | 2025-06-06 | 2025-06-05 |
ecb | RAI | 2025-05-18 | 2025-05-30 |
ecb | SUP | 2025-05-18 | 2025-05-18 |
ecb | YC | 2025-05-18 | 2025-05-21 |
ecb | YC_PUB | 2025-05-18 | 2025-05-18 |
eurostat | ei_mfir_m | 2025-05-24 | 2025-05-24 |
eurostat | irt_st_m | 2025-05-24 | 2025-05-24 |
fred | r | 2025-05-30 | 2025-05-30 |
oecd | MEI | 2024-04-16 | 2025-02-25 |
oecd | MEI_FIN | 2024-09-15 | 2025-02-25 |