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 |
|---|
| 2026-05-29 |
Last
Code
MIR %>%
group_by(TIME_PERIOD) %>%
summarise(Nobs = n()) %>%
arrange(desc(TIME_PERIOD)) %>%
head(2) %>%
print_table_conditional()| TIME_PERIOD | Nobs |
|---|---|
| 2026-03 | 7248 |
| 2026-02 | 7243 |
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 | 437689 |
| A2AC | Loans other than revolving loans and overdrafts, convenience and extended credit card debt with collateral and/or guarantees | 286201 |
| L22 | Deposits with agreed maturity | 250750 |
| A2D | Other lending excluding revolving loans and overdrafts, convenience and extended credit card debt | 108696 |
| A20 | Loans | 101420 |
| A2C | Lending for house purchase excluding revolving loans and overdrafts, convenience and extended credit card debt | 97154 |
| A2B | Loans for consumption excluding revolving loans and overdrafts, convenience and extended credit card debt | 78866 |
| A22 | Lending for house purchase | 44087 |
| A2CC | Lending for house purchase excluding revolving loans and overdrafts, convenience and extended credit card debt with collateral and/or guarantees | 43814 |
| A25 | Credit for consumption and other lending | 43590 |
| A2BC | Loans for consumption excluding revolving loans and overdrafts, convenience and extended credit card debt with collateral and/or guarantees | 34670 |
| L21 | Overnight deposits | 27501 |
| L23 | Deposits redeemable at notice | 25905 |
| A2Z | Revolving loans and overdrafts, convenience and extended credit card debt | 24881 |
| L24 | Repurchase agreements | 23606 |
| A2Z1 | Revolving loans and overdrafts | 14292 |
| A2Z3 | Extended credit | 13592 |
| 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)) | 10287 |
| A2I | Loans (defined for cost of borrowing purposes, sum of A2A and A2Z (both related to non-financial corporations)) | 5146 |
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 | 437073 |
| F | Up to 1 year | 192222 |
| K | Over 1 year | 151690 |
| I | Over 1 and up to 5 years | 117002 |
| J | Over 5 years | 97173 |
| P | Over 10 years | 77616 |
| O | Over 5 and up to 10 years | 77049 |
| D | Up to 3 months | 73089 |
| H | Over 2 years | 65562 |
| Y | Period of initial rate fixation below 1 year and original maturity over 1 year | 60628 |
| Q | Over 3 months and up to 1 year | 60531 |
| S | Over 3 and up to 5 years | 58006 |
| R | Over 1 and up to 3 years | 57594 |
| L | Up to two years | 50648 |
| G | Over 1 and up to 2 years | 31504 |
| AM | Total calculated by weighting the volumes with a moving average (defined for cost of borrowing purposes) | 10288 |
| KF | Original maturity over 1 year and remaining maturity up to 1 year | 8940 |
| HL | Original maturity over 2 years and remaining maturity up to 2 years | 8939 |
| E | Over 3 months | 8844 |
| HHL | Original maturity over 2 years, remaining maturity over 2 years and interest rate reset within the next 24 months | 8731 |
| KKF | Original maturity over 1 year, remaining maturity over 1 year and interest rate reset within the next 12 months | 8731 |
| KM | Over 1 year calculated by weighting the volumes with a moving average (defined for cost of borrowing purposes) | 5145 |
| FM | Up to 1 year calculated by weighting the volumes with a moving average (defined for cost of borrowing purposes) | 5142 |
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) | 1110754 |
| B | Business volume (outstanding amount / new business) | 235679 |
| I | Interest rate component of euro area month-to-month level change (Bennet binary index on interest rates) | 51566 |
| J | Weight component of euro area month-to-month level change (Bennet binary index on weights) | 51566 |
| M | Index on interest rates (Bennet chain index) | 51566 |
| N | Index on weights (Bennet chain index) | 51566 |
| O | Accumulated changes on interest rates | 51566 |
| V | Coefficient of variation | 51566 |
| C | Annual percentage rate of charge (APRC) | 16318 |
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 | 1119477 |
| 1 | Over EUR 1 million | 186370 |
| 2 | Up to and including EUR 0.25 million | 152274 |
| 3 | Over EUR 0.25 million and up to EUR 1 million | 150697 |
| 0 | Up to and including EUR 1 million | 63329 |
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) | 910325 |
| 2250 | Households and non-profit institutions serving households (S.14 and S.15) | 614058 |
| 2230 | Non-Financial corporations and Households (S.11 and S.14 and S.15) | 107852 |
| 2253 | Households of which sole proprietors and unincorporated partnerships (SP/UP) | 39912 |
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 | 1365141 |
| CZK | Czech koruna | 44230 |
| HUF | Hungarian forint | 43558 |
| RON | Romanian leu | 43019 |
| SEK | Swedish krona | 42142 |
| DKK | Danish krone | 38824 |
| PLN | Polish zloty | 33002 |
| BGN | Bulgarian lev | 25147 |
| 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 | 1332829 |
| O | Outstanding amount | 271940 |
| R | Renegotiation | 36766 |
| P | Pure new loans | 30612 |
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 | 1429522 |
| S | Summed through period | 235679 |
| 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) | 405664 |
| HR2 | Croatian National Bank | 57166 |
| SI2 | Bank of Slovenia | 53949 |
| BG2 | Bulgarian National Bank | 53196 |
| SK2 | National Bank of Slovakia | 53134 |
| LV2 | Bank of Latvia | 52766 |
| DE2 | Deutsche Bundesbank (Germany) | 51172 |
| LT2 | Bank of Lithuania | 51070 |
| IT2 | Banca d` Italia (Italy) | 50929 |
| LU2 | Banque centrale du Luxembourg | 50911 |
| ES2 | Banco de Espana (Spain) | 50830 |
| AT2 | Oesterreichische Nationalbank (Austria) | 50772 |
| GR2 | Bank of Greece (Greece) | 49945 |
| FR2 | Banque de France (France) | 49828 |
| MT2 | Central Bank of Malta | 48572 |
| EE2 | Bank of Estonia | 48434 |
| FI2 | Bank of Finland (Finland) | 48101 |
| NL2 | De Nederlandsche Bank (Netherlands) | 45613 |
| BE2 | Banque Nationale de Belgique (Belgium) | 44838 |
| CZ2 | Czech National Bank | 44230 |
| PT2 | Banco de Portugal (Portugal) | 43623 |
| HU2 | National Bank of Hungary | 43558 |
| RO2 | National Bank of Romania | 43250 |
| SE2 | Sveriges Riksbank (Sweden) | 42142 |
| DK2 | Danmarks Nationalbank (Denmark) | 38824 |
| CY2 | Central Bank of Cyprus | 33697 |
| PL2 | Bank of Poland | 33206 |
| IE2 | Central Bank of Ireland (Ireland) | 32727 |
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 | 405664 |
| HR | Croatia | 57166 |
| SI | Slovenia | 53949 |
| BG | Bulgaria | 53196 |
| SK | Slovakia | 53134 |
| LV | Latvia | 52766 |
| DE | Germany | 51172 |
| LT | Lithuania | 51070 |
| IT | Italy | 50929 |
| LU | Luxembourg | 50911 |
| ES | Spain | 50830 |
| AT | Austria | 50772 |
| GR | Greece | 49945 |
| FR | France | 49828 |
| MT | Malta | 48572 |
| EE | Estonia | 48434 |
| FI | Finland | 48101 |
| NL | Netherlands | 45613 |
| BE | Belgium | 44838 |
| CZ | Czech Republic | 44230 |
| PT | Portugal | 43623 |
| HU | Hungary | 43558 |
| RO | Romania | 43250 |
| SE | Sweden | 42142 |
| DK | Denmark | 38824 |
| CY | Cyprus | 33697 |
| PL | Poland | 33206 |
| IE | Ireland | 32727 |
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
TIME_PERIOD == "2021-04") %>%
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
MATURITY_NOT_IRATE == "A",
# R: Rate
DATA_TYPE_MIR == "R",
TIME_PERIOD == "2021-04") %>%
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
BS_ITEM == "A2A",
# A: Total
MATURITY_NOT_IRATE == "A",
# R: Rate
DATA_TYPE_MIR == "R",
TIME_PERIOD == "2021-04") %>%
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
BS_ITEM == "A2A",
# A: Total
MATURITY_NOT_IRATE == "A",
# R: Rate
DATA_TYPE_MIR == "R") %>%
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
BS_ITEM == "A2A",
IR_BUS_COV == "N",
# A: Total
MATURITY_NOT_IRATE == "A",
# R: Rate
DATA_TYPE_MIR == "R") %>%
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
BS_ITEM == "A20",
# A: Total
MATURITY_NOT_IRATE == "A",
# R: Rate
DATA_TYPE_MIR == "R") %>%
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
BS_ITEM == "A2A",
# A: Total
MATURITY_NOT_IRATE == "A",
# R: Rate
DATA_TYPE_MIR == "R",
TIME_PERIOD == "2021-04") %>%
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) |
| 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) |
| 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) |
| 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) |
| 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) |
| 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) |
| MIR.M.U2.B.A2A.A.R.A.2240.EUR.R | A | 2240 | R | 1.64 | E | Bank interest rates - loans to corporations (renegotiations) |
| 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) |
Graph
All
Code
MIR %>%
filter(REF_AREA == "U2",
# A2A: Loans oth. than revolving loans and overdrafts, convenience and ext. CC debt
BS_ITEM == "A2A",
# A: Total
MATURITY_NOT_IRATE == "A",
# R: Rate
DATA_TYPE_MIR == "R") %>%
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
BS_ITEM == "A2A",
# A: Total
MATURITY_NOT_IRATE == "A",
# R: Rate
DATA_TYPE_MIR == "R") %>%
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
BS_ITEM == "A2A",
# A: Total
MATURITY_NOT_IRATE == "A",
# R: Rate
DATA_TYPE_MIR == "R") %>%
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
BS_ITEM == "A2A",
# A: Total
MATURITY_NOT_IRATE == "A",
# R: Rate
DATA_TYPE_MIR == "R",
TIME_PERIOD == "2021-04") %>%
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) |
| 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) |
| 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) |
| 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) |
| MIR.M.DE.B.A2A.A.R.A.2240.EUR.N | A | 2240 | N | 1.52 | Bank interest rates - loans to corporations (new business) |
| 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) |
| MIR.M.DE.B.A2A.A.R.A.2240.EUR.R | A | 2240 | R | 1.55 | Bank interest rates - loans to corporations (renegotiations) |
| 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) |
| MIR.M.DE.B.A2A.A.R.A.2250.EUR.R | A | 2250 | R | 2.44 | Bank interest rates - loans to households (renegotiations) |
Graph
All
Code
MIR %>%
filter(REF_AREA == "DE",
# A2A: Loans oth. than revolving loans and overdrafts, convenience and ext. CC debt
BS_ITEM == "A2A",
# A: Total
MATURITY_NOT_IRATE == "A",
# R: Rate
DATA_TYPE_MIR == "R") %>%
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
BS_ITEM == "A2A",
# A: Total
MATURITY_NOT_IRATE == "A",
# R: Rate
DATA_TYPE_MIR == "R") %>%
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
BS_ITEM == "A2A",
# A: Total
MATURITY_NOT_IRATE == "A",
# R: Rate
DATA_TYPE_MIR == "R") %>%
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
BS_ITEM %in% c("A2C", "A20"),
# A: Total
MATURITY_NOT_IRATE == "A",
# R: Rate
DATA_TYPE_MIR == "R",
BS_COUNT_SECTOR == "2250") %>%
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
BS_ITEM %in% c("A2C", "A20"),
# A: Total
MATURITY_NOT_IRATE == "A",
# R: Rate
DATA_TYPE_MIR == "R",
BS_COUNT_SECTOR == "2250") %>%
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
BS_ITEM %in% c("A2C", "A20"),
# A: Total
MATURITY_NOT_IRATE == "A",
# R: Rate
DATA_TYPE_MIR == "R",
BS_COUNT_SECTOR == "2250") %>%
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
BS_ITEM %in% c("A2C", "A20"),
# A: Total
MATURITY_NOT_IRATE == "A",
# R: Rate
DATA_TYPE_MIR == "R",
BS_COUNT_SECTOR == "2250") %>%
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
BS_ITEM %in% c("A2C", "A20"),
# A: Total
MATURITY_NOT_IRATE == "A",
# R: Rate
DATA_TYPE_MIR == "R",
BS_COUNT_SECTOR == "2250",
IR_BUS_COV %in% c("N", "O")) %>%
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
BS_ITEM == "A20",
# A: Total
MATURITY_NOT_IRATE == "A",
# R: Rate
DATA_TYPE_MIR == "R",
BS_COUNT_SECTOR == "2240") %>%
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
BS_ITEM == "A20",
# A: Total
MATURITY_NOT_IRATE == "A",
# R: Rate
DATA_TYPE_MIR == "R",
BS_COUNT_SECTOR == "2250") %>%
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
BS_ITEM == "A2C",
# A: Total
MATURITY_NOT_IRATE == "A",
# R: Rate
DATA_TYPE_MIR == "R",
# N: New business
IR_BUS_COV == "N") %>%
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
BS_ITEM == "A2C",
# A: Total
MATURITY_NOT_IRATE == "A",
# R: Rate
DATA_TYPE_MIR == "R",
# N: New business
IR_BUS_COV == "N") %>%
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
Estonia, Lithuania, Portugal, Latvia
Code
MIR %>%
filter(REF_AREA %in% c("EE", "LT", "LV", "PT"),
# A22: Lending for house purchase
BS_ITEM == "A22",
# A: Total
MATURITY_NOT_IRATE == "A",
# R: Rate
DATA_TYPE_MIR == "R") %>%
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
BS_ITEM == "A22",
# A: Total
MATURITY_NOT_IRATE == "A",
# R: Rate
DATA_TYPE_MIR == "R") %>%
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
BS_ITEM == "A22",
# A: Total
MATURITY_NOT_IRATE == "A",
# R: Rate
DATA_TYPE_MIR == "R") %>%
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
BS_ITEM == "A22",
# A: Total
MATURITY_NOT_IRATE == "A",
# R: Rate
DATA_TYPE_MIR == "R") %>%
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
BS_ITEM == "A22",
# A: Total
MATURITY_NOT_IRATE == "A",
# R: Rate
DATA_TYPE_MIR == "R") %>%
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
BS_ITEM == "A22",
# A: Total
MATURITY_NOT_IRATE == "A",
# R: Rate
DATA_TYPE_MIR == "R") %>%
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
BS_ITEM == "A25",
# A: Total
MATURITY_NOT_IRATE == "A",
# R: Rate
DATA_TYPE_MIR == "R") %>%
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
BS_ITEM == "A25",
# A: Total
MATURITY_NOT_IRATE == "A",
# R: Rate
DATA_TYPE_MIR == "R") %>%
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 | Title | .html | .rData |
|---|---|---|---|---|
| bdf | MIR | NA | NA | NA |
| ecb | MIR | MFI Interest Rate Statistics | 2026-05-28 | 2026-05-28 |
| bdf | FM | NA | NA | NA |
| bdf | MIR1 | NA | NA | NA |
| bis | CBPOL_D | Policy Rates, Daily | 2026-04-07 | 2025-08-20 |
| bis | CBPOL_M | Policy Rates, Monthly | 2026-05-28 | 2024-04-19 |
| ecb | FM | Financial market data | 2026-05-25 | 2026-05-25 |
| eurostat | ei_mfir_m | Interest rates - monthly data | 2026-05-24 | 2026-04-26 |
| eurostat | irt_lt_mcby_d | EMU convergence criterion series - daily data | 2026-05-24 | 2025-07-24 |
| eurostat | irt_st_m | Money market interest rates - monthly data | 2026-05-24 | 2026-04-26 |
| fred | r | Interest Rates | 2026-05-24 | 2026-05-28 |
| oecd | MEI | Main Economic Indicators | 2024-04-16 | 2025-07-24 |
| oecd | MEI_FIN | Monthly Monetary and Financial Statistics (MEI) | 2024-09-15 | 2025-07-24 |
| wdi | FR.INR.DPST | Deposit interest rate (%) | 2022-09-27 | 2026-05-28 |
| wdi | FR.INR.LEND | Lending interest rate (%) | 2026-03-24 | 2026-05-28 |
| wdi | FR.INR.RINR | NA | NA | NA |
Data on monetary policy
| source | dataset | Title | .html | .rData |
|---|---|---|---|---|
| bdf | MIR | NA | NA | NA |
| ecb | MIR | MFI Interest Rate Statistics | 2026-05-28 | 2026-05-28 |
| bdf | FM | NA | NA | NA |
| bdf | MIR1 | NA | NA | NA |
| bis | CBPOL | Policy Rates, Daily | 2026-04-08 | 2026-05-28 |
| ecb | BSI | Balance Sheet Items | 2026-05-25 | 2026-05-22 |
| ecb | BSI_PUB | NA | NA | NA |
| ecb | FM | Financial market data | 2026-05-25 | 2026-05-25 |
| ecb | ILM | Internal Liquidity Management | 2026-05-28 | 2026-05-28 |
| ecb | ILM_PUB | NA | NA | NA |
| ecb | RAI | NA | NA | NA |
| ecb | SUP | NA | NA | NA |
| ecb | YC | NA | NA | NA |
| ecb | YC_PUB | NA | NA | NA |
| ecb | liq_daily | Daily Liquidity | 2026-03-25 | 2025-06-06 |
| eurostat | ei_mfir_m | Interest rates - monthly data | 2026-05-24 | 2026-04-26 |
| eurostat | irt_st_m | Money market interest rates - monthly data | 2026-05-24 | 2026-04-26 |
| fred | r | Interest Rates | 2026-05-24 | 2026-05-28 |
| oecd | MEI | Main Economic Indicators | 2024-04-16 | 2025-07-24 |
| oecd | MEI_FIN | Monthly Monetary and Financial Statistics (MEI) | 2024-09-15 | 2025-07-24 |