Warning in readChar(con, 5L, useBytes = TRUE): impossible d'ouvrir le fichier
compressé '/Users/geerolf/iCloud/website/data/ecb/OBS_VALUE.RData', cause
probable : 'No such file or directory'
MFI Interest Rate Statistics
Data - ECB
Info
Last observation: Monthly: 2026-06 (N = 7,253)
First observation: Monthly: 1980-01 (N = 12)
Last data update: 13 aoû 2026, 05:12. Last compile: 13 aoû 2026, 08:30
Structure
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-08-13 |
Last
Code
MIR |>
group_by(TIME_PERIOD) |>
summarise(Nobs = n()) |>
arrange(desc(TIME_PERIOD)) |>
head(2) |>
print_table_conditional()| TIME_PERIOD | Nobs |
|---|---|
| 2026-06 | 7253 |
| 2026-05 | 7235 |
BS_ITEM
Javascript
Code
MIR |>
group_by(BS_ITEM, Bs_item) |>
summarise(Nobs = n()) |>
arrange(-Nobs) |>
print_table_conditional_10()Flat
Code
MIR |>
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 | 443615 |
| A2AC | Loans other than revolving loans and overdrafts, convenience and extended credit card debt with collateral and/or guarantees | 290245 |
| L22 | Deposits with agreed maturity | 253388 |
| A2D | Other lending excluding revolving loans and overdrafts, convenience and extended credit card debt | 110194 |
| A20 | Loans | 103058 |
| A2C | Lending for house purchase excluding revolving loans and overdrafts, convenience and extended credit card debt | 98393 |
| A2B | Loans for consumption excluding revolving loans and overdrafts, convenience and extended credit card debt | 79874 |
| A22 | Lending for house purchase | 44576 |
| A2CC | Lending for house purchase excluding revolving loans and overdrafts, convenience and extended credit card debt with collateral and/or guarantees | 44452 |
| A25 | Credit for consumption and other lending | 44064 |
| A2BC | Loans for consumption excluding revolving loans and overdrafts, convenience and extended credit card debt with collateral and/or guarantees | 35164 |
| L21 | Overnight deposits | 27786 |
| L23 | Deposits redeemable at notice | 26181 |
| A2Z | Revolving loans and overdrafts, convenience and extended credit card debt | 25127 |
| L24 | Repurchase agreements | 23864 |
| A2Z1 | Revolving loans and overdrafts | 14496 |
| A2Z3 | Extended credit | 13784 |
| 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)) | 10419 |
| A2I | Loans (defined for cost of borrowing purposes, sum of A2A and A2Z (both related to non-financial corporations)) | 5212 |
BS_COUNT_SECTOR
Code
MIR |>
mutate(BS_COUNT_SECTOR = paste0(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) | 922406 |
| 2250 | Households and non-profit institutions serving households (S.14 and S.15) | 621950 |
| 2230 | Non-Financial corporations and Households (S.11 and S.14 and S.15) | 109063 |
| 2253 | Households of which sole proprietors and unincorporated partnerships (SP/UP) | 40473 |
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 |>
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 |>
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)) |>
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)) |>
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)) |>
print_table_conditional()| AMOUNT_CAT | Amount_cat | BS_COUNT_SECTOR | Bs_count_sector | IR_BUS_COV | Ir_bus_cov | OBS_VALUE |
|---|---|---|---|---|---|---|
| 0 | Up to and including EUR 1 million | 2240 | Non-Financial corporations (S.11) | N | New business | 1.31 |
| 1 | Over EUR 1 million | 2240 | Non-Financial corporations (S.11) | N | New business | 1.39 |
| 2 | Up to and including EUR 0.25 million | 2240 | Non-Financial corporations (S.11) | N | New business | 1.44 |
| 3 | Over EUR 0.25 million and up to EUR 1 million | 2240 | Non-Financial corporations (S.11) | N | New business | 1.14 |
| A | Total | 2240 | Non-Financial corporations (S.11) | N | New business | 1.36 |
| A | Total | 2240 | Non-Financial corporations (S.11) | P | Pure new loans | 1.35 |
| A | Total | 2240 | Non-Financial corporations (S.11) | R | Renegotiation | 1.42 |
| A | Total | 2250 | Households and non-profit institutions serving households (S.14 and S.15) | P | Pure new loans | 1.63 |
| A | Total | 2250 | Households and non-profit institutions serving households (S.14 and S.15) | R | Renegotiation | 1.65 |
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") |>
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() |>
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)) |>
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 | Amount_cat | BS_COUNT_SECTOR | Bs_count_sector | IR_BUS_COV | Ir_bus_cov | OBS_VALUE | OBS_STATUS | Obs_status | TITLE |
|---|---|---|---|---|---|---|---|---|---|---|
| MIR.M.U2.B.A2A.A.R.0.2240.EUR.N | 0 | Up to and including EUR 1 million | 2240 | Non-Financial corporations (S.11) | N | New business | 1.79 | A | Normal value | 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 | Over EUR 1 million | 2240 | Non-Financial corporations (S.11) | N | New business | 1.33 | A | Normal value | Bank interest rates - loans to corporations of over EUR 1M (new business) |
| MIR.M.U2.B.A2A.A.R.2.2240.EUR.N | 2 | Up to and including EUR 0.25 million | 2240 | Non-Financial corporations (S.11) | N | New business | 2.00 | A | Normal value | 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 | Over EUR 0.25 million and up to EUR 1 million | 2240 | Non-Financial corporations (S.11) | N | New business | 1.48 | A | Normal value | 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 | Total | 2240 | Non-Financial corporations (S.11) | N | New business | 1.47 | A | Normal value | Bank interest rates - loans to corporations (new business) |
| MIR.M.U2.B.A2A.A.R.A.2240.EUR.P | A | Total | 2240 | Non-Financial corporations (S.11) | P | Pure new loans | 1.43 | A | Normal value | Bank interest rates - loans to corporations (pure new loans) |
| MIR.M.U2.B.A2A.A.R.A.2240.EUR.R | A | Total | 2240 | Non-Financial corporations (S.11) | R | Renegotiation | 1.64 | E | Estimated value | Bank interest rates - loans to corporations (renegotiations) |
| MIR.M.U2.B.A2A.A.R.A.2250.EUR.P | A | Total | 2250 | Households and non-profit institutions serving households (S.14 and S.15) | P | Pure new loans | 2.14 | A | Normal value | 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, 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.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 | Amount_cat | BS_COUNT_SECTOR | Bs_count_sector | IR_BUS_COV | Ir_bus_cov | OBS_VALUE | TITLE |
|---|---|---|---|---|---|---|---|---|
| MIR.M.DE.B.A2A.A.R.0.2240.EUR.N | 0 | Up to and including EUR 1 million | 2240 | Non-Financial corporations (S.11) | N | New business | 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 | Over EUR 1 million | 2240 | Non-Financial corporations (S.11) | N | New business | 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 | Up to and including EUR 0.25 million | 2240 | Non-Financial corporations (S.11) | N | New business | 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 | Over EUR 0.25 million and up to EUR 1 million | 2240 | Non-Financial corporations (S.11) | N | New business | 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 | Total | 2240 | Non-Financial corporations (S.11) | N | New business | 1.52 | Bank interest rates - loans to corporations (new business) |
| MIR.M.DE.B.A2A.A.R.A.2240.EUR.P | A | Total | 2240 | Non-Financial corporations (S.11) | P | Pure new loans | 1.50 | Bank interest rates - loans to corporations (pure new loans) |
| MIR.M.DE.B.A2A.A.R.A.2240.EUR.R | A | Total | 2240 | Non-Financial corporations (S.11) | R | Renegotiation | 1.55 | Bank interest rates - loans to corporations (renegotiations) |
| MIR.M.DE.B.A2A.A.R.A.2250.EUR.P | A | Total | 2250 | Households and non-profit institutions serving households (S.14 and S.15) | P | Pure new loans | 2.11 | Bank interest rates - loans to households (pure new loans) |
| MIR.M.DE.B.A2A.A.R.A.2250.EUR.R | A | Total | 2250 | Households and non-profit institutions serving households (S.14 and S.15) | R | Renegotiation | 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, 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.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") |>
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") |>
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") |>
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") |>
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")) |>
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") |>
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") |>
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") |>
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") |>
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") |>
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") |>
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") |>
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") |>
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") |>
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") |>
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") |>
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") |>
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 | 2026-08-11 | 2026-08-10 |
| ecb | MIR | MFI Interest Rate Statistics | 2026-08-12 | 2026-08-11 |
| bdf | FM | Marché financier, taux | 2026-08-11 | 2026-08-10 |
| bdf | MIR1 | Taux d'intérêt - France | 2026-08-11 | 2026-08-10 |
| bis | CBPOL_D | Policy Rates, Daily | 2026-08-11 | 2026-08-01 |
| bis | CBPOL_M | Policy Rates, Monthly | 2026-08-11 | 2026-07-25 |
| ecb | FM | Financial market data | 2026-08-12 | 2026-08-11 |
| eurostat | ei_mfir_m | Interest rates - monthly data | 2026-08-11 | 2026-08-11 |
| eurostat | irt_lt_mcby_d | EMU convergence criterion series - daily data | 2026-08-11 | 2026-08-02 |
| eurostat | irt_st_m | Money market interest rates - monthly data | 2026-08-11 | 2026-08-11 |
| fred | r | Interest Rates | 2026-08-11 | 2026-08-11 |
| oecd | MEI | Main Economic Indicators | 2026-08-11 | 2026-08-02 |
| oecd | MEI_FIN | Monthly Monetary and Financial Statistics (MEI) | 2026-08-11 | 2026-08-02 |
| wdi | FR.INR.DPST | Deposit interest rate (%) | 2026-08-11 | 2026-08-11 |
| wdi | FR.INR.LEND | Lending interest rate (%) | 2026-08-11 | 2026-08-11 |
| wdi | FR.INR.RINR | Real interest rate (%) | 2026-08-11 | 2026-08-11 |
Data on monetary policy
| source | dataset | Title | .html | .rData |
|---|---|---|---|---|
| bdf | MIR | Taux d'intérêt - Zone euro | 2026-08-11 | 2026-08-10 |
| ecb | MIR | MFI Interest Rate Statistics | 2026-08-12 | 2026-08-11 |
| bdf | FM | Marché financier, taux | 2026-08-11 | 2026-08-10 |
| bdf | MIR1 | Taux d'intérêt - France | 2026-08-11 | 2026-08-10 |
| bis | CBPOL | Policy Rates, Daily | 2026-08-11 | 2026-07-25 |
| ecb | BSI | Balance Sheet Items | 2026-08-12 | 2026-08-11 |
| ecb | BSI_PUB | Balance Sheet Items - Published series | 2026-08-12 | 2026-08-11 |
| ecb | FM | Financial market data | 2026-08-12 | 2026-08-11 |
| ecb | ILM | Internal Liquidity Management | 2026-08-12 | 2026-08-11 |
| ecb | ILM_PUB | Internal Liquidity Management - Published series | 2026-08-12 | 2026-08-11 |
| ecb | RAI | Risk Assessment Indicators | 2026-08-12 | 2026-08-11 |
| ecb | SUP | Supervisory Banking Statistics | 2026-08-12 | 2026-08-12 |
| ecb | YC | Financial market data - yield curve | 2026-08-12 | 2026-08-12 |
| ecb | YC_PUB | Financial market data - yield curve - Published series | 2026-08-12 | 2026-08-12 |
| ecb | liq_daily | Daily Liquidity | 2026-08-12 | 2026-08-12 |
| eurostat | ei_mfir_m | Interest rates - monthly data | 2026-08-11 | 2026-08-11 |
| eurostat | irt_st_m | Money market interest rates - monthly data | 2026-08-11 | 2026-08-11 |
| fred | r | Interest Rates | 2026-08-11 | 2026-08-11 |
| oecd | MEI | Main Economic Indicators | 2026-08-11 | 2026-08-02 |
| oecd | MEI_FIN | Monthly Monetary and Financial Statistics (MEI) | 2026-08-11 | 2026-08-02 |