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-12-19 |
Last
Code
MIR %>%
group_by(TIME_PERIOD) %>%
summarise(Nobs = n()) %>%
arrange(desc(TIME_PERIOD)) %>%
head(2) %>%
print_table_conditional()| TIME_PERIOD | Nobs |
|---|---|
| 2025-06 | 7204 |
| 2025-05 | 7213 |
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 | 413075 |
| A2AC | Loans other than revolving loans and overdrafts, convenience and extended credit card debt with collateral and/or guarantees | 272071 |
| L22 | Deposits with agreed maturity | 237187 |
| A2D | Other lending excluding revolving loans and overdrafts, convenience and extended credit card debt | 102125 |
| A20 | Loans | 94512 |
| A2C | Lending for house purchase excluding revolving loans and overdrafts, convenience and extended credit card debt | 91533 |
| A2B | Loans for consumption excluding revolving loans and overdrafts, convenience and extended credit card debt | 73946 |
| A2CC | Lending for house purchase excluding revolving loans and overdrafts, convenience and extended credit card debt with collateral and/or guarantees | 41933 |
| A22 | Lending for house purchase | 41723 |
| A25 | Credit for consumption and other lending | 41350 |
| A2BC | Loans for consumption excluding revolving loans and overdrafts, convenience and extended credit card debt with collateral and/or guarantees | 33218 |
| L21 | Overnight deposits | 26148 |
| L23 | Deposits redeemable at notice | 24417 |
| A2Z | Revolving loans and overdrafts, convenience and extended credit card debt | 23675 |
| L24 | Repurchase agreements | 22177 |
| A2Z1 | Revolving loans and overdrafts | 13402 |
| A2Z3 | Extended credit | 12738 |
| 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)) | 9903 |
| A2I | Loans (defined for cost of borrowing purposes, sum of A2A and A2Z (both related to non-financial corporations)) | 4954 |
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 | 409990 |
| F | Up to 1 year | 182317 |
| K | Over 1 year | 143416 |
| I | Over 1 and up to 5 years | 110846 |
| J | Over 5 years | 92024 |
| P | Over 10 years | 73789 |
| O | Over 5 and up to 10 years | 73142 |
| D | Up to 3 months | 69252 |
| H | Over 2 years | 61870 |
| Y | Period of initial rate fixation below 1 year and original maturity over 1 year | 58087 |
| Q | Over 3 months and up to 1 year | 57461 |
| S | Over 3 and up to 5 years | 54987 |
| R | Over 1 and up to 3 years | 54617 |
| L | Up to two years | 47882 |
| G | Over 1 and up to 2 years | 29847 |
| AM | Total calculated by weighting the volumes with a moving average (defined for cost of borrowing purposes) | 9904 |
| E | Over 3 months | 8328 |
| KF | Original maturity over 1 year and remaining maturity up to 1 year | 8202 |
| HL | Original maturity over 2 years and remaining maturity up to 2 years | 8201 |
| HHL | Original maturity over 2 years, remaining maturity over 2 years and interest rate reset within the next 24 months | 8011 |
| KKF | Original maturity over 1 year, remaining maturity over 1 year and interest rate reset within the next 12 months | 8011 |
| KM | Over 1 year calculated by weighting the volumes with a moving average (defined for cost of borrowing purposes) | 4953 |
| FM | Up to 1 year calculated by weighting the volumes with a moving average (defined for cost of borrowing purposes) | 4950 |
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) | 1042438 |
| B | Business volume (outstanding amount / new business) | 223041 |
| I | Interest rate component of euro area month-to-month level change (Bennet binary index on interest rates) | 49838 |
| J | Weight component of euro area month-to-month level change (Bennet binary index on weights) | 49838 |
| M | Index on interest rates (Bennet chain index) | 49838 |
| N | Index on weights (Bennet chain index) | 49838 |
| O | Accumulated changes on interest rates | 49838 |
| V | Coefficient of variation | 49838 |
| C | Annual percentage rate of charge (APRC) | 15580 |
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 | 1056199 |
| 1 | Over EUR 1 million | 176671 |
| 2 | Up to and including EUR 0.25 million | 144496 |
| 3 | Over EUR 0.25 million and up to EUR 1 million | 142979 |
| 0 | Up to and including EUR 1 million | 59742 |
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) | 861415 |
| 2250 | Households and non-profit institutions serving households (S.14 and S.15) | 578795 |
| 2230 | Non-Financial corporations and Households (S.11 and S.14 and S.15) | 102062 |
| 2253 | Households of which sole proprietors and unincorporated partnerships (SP/UP) | 37815 |
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 | 1285556 |
| CZK | Czech koruna | 42187 |
| HUF | Hungarian forint | 41515 |
| RON | Romanian leu | 40976 |
| SEK | Swedish krona | 40279 |
| DKK | Danish krone | 36970 |
| PLN | Polish zloty | 31471 |
| BGN | Bulgarian lev | 24049 |
| 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 | 1262673 |
| O | Outstanding amount | 256359 |
| R | Renegotiation | 33641 |
| P | Pure new loans | 27414 |
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 | 1350100 |
| S | Summed through period | 223041 |
| 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) | 392083 |
| HR2 | Croatian National Bank | 55123 |
| SI2 | Bank of Slovenia | 51906 |
| SK2 | National Bank of Slovakia | 51091 |
| LV2 | Bank of Latvia | 50723 |
| DE2 | Deutsche Bundesbank (Germany) | 49129 |
| LT2 | Bank of Lithuania | 49027 |
| IT2 | Banca d` Italia (Italy) | 48886 |
| LU2 | Banque centrale du Luxembourg | 48868 |
| ES2 | Banco de Espana (Spain) | 48787 |
| AT2 | Oesterreichische Nationalbank (Austria) | 48729 |
| GR2 | Bank of Greece (Greece) | 48018 |
| FR2 | Banque de France (France) | 47839 |
| EE2 | Bank of Estonia | 46604 |
| MT2 | Central Bank of Malta | 46529 |
| FI2 | Bank of Finland (Finland) | 46196 |
| NL2 | De Nederlandsche Bank (Netherlands) | 43795 |
| BE2 | Banque Nationale de Belgique (Belgium) | 42858 |
| CZ2 | Czech National Bank | 42187 |
| PT2 | Banco de Portugal (Portugal) | 41867 |
| HU2 | National Bank of Hungary | 41515 |
| RO2 | National Bank of Romania | 41198 |
| SE2 | Sveriges Riksbank (Sweden) | 40279 |
| DK2 | Danmarks Nationalbank (Denmark) | 36970 |
| CY2 | Central Bank of Cyprus | 32452 |
| PL2 | Bank of Poland | 31675 |
| IE2 | Central Bank of Ireland (Ireland) | 31482 |
| BG2 | Bulgarian National Bank | 24271 |
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 | 392083 |
| HR | Croatia | 55123 |
| SI | Slovenia | 51906 |
| SK | Slovakia | 51091 |
| LV | Latvia | 50723 |
| DE | Germany | 49129 |
| LT | Lithuania | 49027 |
| IT | Italy | 48886 |
| LU | Luxembourg | 48868 |
| ES | Spain | 48787 |
| AT | Austria | 48729 |
| GR | Greece | 48018 |
| FR | France | 47839 |
| EE | Estonia | 46604 |
| MT | Malta | 46529 |
| FI | Finland | 46196 |
| NL | Netherlands | 43795 |
| BE | Belgium | 42858 |
| CZ | Czech Republic | 42187 |
| PT | Portugal | 41867 |
| HU | Hungary | 41515 |
| RO | Romania | 41198 |
| SE | Sweden | 40279 |
| DK | Denmark | 36970 |
| CY | Cyprus | 32452 |
| PL | Poland | 31675 |
| IE | Ireland | 31482 |
| BG | Bulgaria | 24271 |
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) - 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
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) - 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
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
Table
Code
MIR %>%
filter(BS_ITEM == "A22",
# A: Total
MATURITY_NOT_IRATE == "A",
# R: Rate
DATA_TYPE_MIR == "R") %>%
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-06 | change |
|---|---|---|---|---|
| PL | Poland | 3.74 | 7.38 | 3.64 |
| PT | Portugal | 0.83 | 3.39 | 2.56 |
| FI | Finland | 0.79 | 2.99 | 2.20 |
| LT | Lithuania | 1.94 | 4.11 | 2.17 |
| EE | Estonia | 2.01 | 4.17 | 2.16 |
| LV | Latvia | 2.30 | 4.43 | 2.13 |
| ES | Spain | 1.10 | 2.96 | 1.86 |
| DK | Denmark | 1.64 | 3.48 | 1.84 |
| CY | Cyprus | 2.03 | 3.75 | 1.72 |
| SK | Slovakia | 1.30 | 3.00 | 1.70 |
| SE | Sweden | 1.51 | 3.05 | 1.54 |
| HU | Hungary | 4.63 | 6.12 | 1.49 |
| AT | Austria | 1.37 | 2.80 | 1.43 |
| IT | Italy | 1.59 | 2.71 | 1.12 |
| SI | Slovenia | 2.02 | 3.12 | 1.10 |
| LU | Luxembourg | 1.56 | 2.65 | 1.09 |
| IE | Ireland | 2.47 | 3.46 | 0.99 |
| U2 | Euro area (Member States and Institutions of the Euro Area) changing composition | 1.61 | 2.40 | 0.79 |
| BE | Belgium | 1.73 | 2.34 | 0.61 |
| FR | France | 1.43 | 1.89 | 0.46 |
| DE | Germany | 1.73 | 2.15 | 0.42 |
| NL | Netherlands | 2.32 | 2.69 | 0.37 |
| HR | Croatia | 3.09 | 3.06 | -0.03 |
| BG | Bulgaria | 2.98 | 2.74 | -0.24 |
| MT | Malta | 2.80 | 2.54 | -0.26 |
| CZ | Czech Republic | NA | 3.70 | NA |
| GR | Greece | NA | NA | NA |
| RO | Romania | 4.66 | NA | NA |
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 | Taux d'intérêt - Zone euro | 2025-12-13 | 2025-08-04 |
| ecb | MIR | MFI Interest Rate Statistics | 2025-12-13 | 2025-08-29 |
| bdf | FM | Marché financier, taux | 2025-12-13 | 2025-12-13 |
| bdf | MIR1 | Taux d'intérêt - France | 2025-12-13 | 2025-08-04 |
| bis | CBPOL_D | Policy Rates, Daily | 2025-10-11 | 2025-08-20 |
| bis | CBPOL_M | Policy Rates, Monthly | 2025-10-11 | 2024-04-19 |
| ecb | FM | Financial market data | 2025-12-13 | 2025-08-29 |
| eurostat | ei_mfir_m | Interest rates - monthly data | 2025-12-13 | 2025-12-13 |
| eurostat | irt_lt_mcby_d | EMU convergence criterion series - daily data | 2025-12-13 | 2025-07-24 |
| eurostat | irt_st_m | Money market interest rates - monthly data | 2025-12-13 | 2025-12-13 |
| fred | r | Interest Rates | 2025-12-13 | 2025-12-13 |
| 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 | 2025-12-13 |
| wdi | FR.INR.LEND | Lending interest rate (%) | 2025-12-13 | 2025-12-13 |
| wdi | FR.INR.RINR | Real interest rate (%) | 2025-05-24 | 2025-12-13 |
Data on monetary policy
| source | dataset | Title | .html | .rData |
|---|---|---|---|---|
| bdf | MIR | Taux d'intérêt - Zone euro | 2025-12-13 | 2025-08-04 |
| ecb | MIR | MFI Interest Rate Statistics | 2025-12-13 | 2025-08-29 |
| bdf | FM | Marché financier, taux | 2025-12-13 | 2025-12-13 |
| bdf | MIR1 | Taux d'intérêt - France | 2025-12-13 | 2025-08-04 |
| bis | CBPOL | Policy Rates, Daily | 2025-10-11 | 2025-10-11 |
| ecb | BSI | Balance Sheet Items | 2025-12-13 | 2025-08-29 |
| ecb | BSI_PUB | Balance Sheet Items - Published series | 2025-12-13 | 2025-08-29 |
| ecb | FM | Financial market data | 2025-12-13 | 2025-08-29 |
| ecb | ILM | Internal Liquidity Management | 2025-12-13 | 2025-08-29 |
| ecb | ILM_PUB | Internal Liquidity Management - Published series | 2025-08-29 | 2024-09-10 |
| ecb | RAI | Risk Assessment Indicators | 2025-12-13 | 2025-08-29 |
| ecb | SUP | Supervisory Banking Statistics | 2025-12-13 | 2025-08-29 |
| ecb | YC | Financial market data - yield curve | 2025-12-13 | 2025-08-29 |
| ecb | YC_PUB | Financial market data - yield curve - Published series | 2025-12-13 | 2025-08-29 |
| ecb | liq_daily | Daily Liquidity | 2025-12-13 | 2025-06-06 |
| eurostat | ei_mfir_m | Interest rates - monthly data | 2025-12-13 | 2025-12-13 |
| eurostat | irt_st_m | Money market interest rates - monthly data | 2025-12-13 | 2025-12-13 |
| fred | r | Interest Rates | 2025-12-13 | 2025-12-13 |
| 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 |