Analytical house prices indicators

Data - OECD


Info

Data on housing

source dataset .html .RData

bdf

RPP

2024-06-30 2024-06-30

bis

LONG_PP

2024-06-19 2024-05-10

bis

SELECTED_PP

2024-06-19 2024-05-10

ecb

RPP

2024-06-30 2024-06-30

eurostat

ei_hppi_q

2024-06-23 2024-06-30

eurostat

hbs_str_t223

2024-06-20 2024-06-30

eurostat

prc_hicp_midx

2024-06-24 2024-06-30

eurostat

prc_hpi_q

2024-06-24 2024-07-01

fred

housing

2024-06-30 2024-06-30

insee

IPLA-IPLNA-2015

2024-06-24 2024-06-24

oecd

housing

2024-06-30 2020-01-18

oecd

SNA_TABLE5

2024-07-01 2023-10-19

LAST_COMPILE

LAST_COMPILE
2024-07-01

Last

obsTime Nobs
2023-Q3 41

IND

Code
HOUSE_PRICES %>%
  left_join(HOUSE_PRICES_var$IND,  by = "IND") %>%
  group_by(IND, Ind) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  {if (is_html_output()) print_table(.) else .}
IND Ind Nobs
RPI Rent prices, s.a. 9572
HPI Nominal house price indices, s.a. 8665
RHP Real house price indices, s.a. 8665
HPI_RPI Price to rent ratio 7827
HPI_YDH Price to income ratio 7260
HPI_RPI_AVG Standardised price-rent ratio 6237
HPI_YDH_AVG Standardised price-income ratio 5998

COU

Code
HOUSE_PRICES %>%
  left_join(HOUSE_PRICES_var$COU,  by = "COU") %>%
  group_by(COU, Cou) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  mutate(Flag = gsub(" ", "-", str_to_lower(Cou)),
         Flag = paste0('<img src="../../icon/flag/vsmall/', Flag, '.png" alt="Flag">')) %>%
  select(Flag, everything()) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F, escape = F) else .}

UNIT

Code
HOUSE_PRICES %>%
  left_join(HOUSE_PRICES_var$UNIT,  by = "UNIT") %>%
  group_by(UNIT, Unit) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}

TIME_FORMAT

Code
HOUSE_PRICES %>%
  left_join(HOUSE_PRICES_var$TIME_FORMAT,  by = "TIME_FORMAT") %>%
  group_by(TIME_FORMAT, Time_format) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  {if (is_html_output()) print_table(.) else .}
TIME_FORMAT Time_format Nobs
P1Y Annual 49647
P3M Quarterly 4577

Rent Prices - RPI

Number of Observations

Code
HOUSE_PRICES %>%
  filter(IND == "RPI",
         TIME_FORMAT == "P1Y",
         UNIT == "IDX",
         substr(obsTime, 6, 6) != "Q") %>%
  left_join(HOUSE_PRICES_var$COU,  by = "COU") %>%
  group_by(COU, Cou) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  mutate(Flag = gsub(" ", "-", str_to_lower(Cou)),
         Flag = paste0('<img src="../../icon/flag/vsmall/', Flag, '.png" alt="Flag">')) %>%
  select(Flag, everything()) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F, escape = F) else .}

United States, Japan, Canada

Code
HOUSE_PRICES %>%
  filter(IND == "RPI",
         COU %in% c("USA", "JPN", "CAN"),
         TIME_FORMAT == "P1Y",
         substr(obsTime, 6, 6) != "Q") %>%
  left_join(HOUSE_PRICES_var$COU,  by = "COU") %>%
  rename(Location = Cou) %>%
  left_join(colors, by = c("Location" = "country")) %>%
  year_to_date() %>%
  ggplot(.) + theme_minimal() + xlab("") + ylab("Rent Prices") +
  geom_line(aes(x = date, y = obsValue, color = color)) + 
  scale_x_date(breaks = seq(1900, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_log10(breaks = seq(0, 600, 10),
                     labels = dollar_format(a = 1, prefix = "")) +
  scale_color_identity() + add_3flags

France, Spain, Italy

Code
HOUSE_PRICES %>%
  filter(IND == "RPI",
         COU %in% c("FRA", "ITA", "ESP"),
         TIME_FORMAT == "P1Y",
         substr(obsTime, 6, 6) != "Q") %>%
  left_join(HOUSE_PRICES_var$COU,  by = "COU") %>%
  rename(Location = Cou) %>%
  left_join(colors, by = c("Location" = "country")) %>%
  year_to_date() %>%
  ggplot(.) + theme_minimal() + xlab("") + ylab("Rent Prices") +
  geom_line(aes(x = date, y = obsValue, color = color)) + 
  scale_x_date(breaks = seq(1900, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_log10(breaks = seq(0, 600, 10),
                     labels = dollar_format(a = 1, prefix = "")) +
  scale_color_identity() + add_3flags

Nominal house price indices, s.a. - HPI

United States, Japan, Canada

Code
HOUSE_PRICES %>%
  filter(IND == "HPI",
         COU %in% c("USA", "JPN", "CAN"),
         TIME_FORMAT == "P1Y",
         substr(obsTime, 6, 6) != "Q") %>%
  left_join(HOUSE_PRICES_var$COU,  by = "COU") %>%
  rename(Location = Cou) %>%
  left_join(colors, by = c("Location" = "country")) %>%
  year_to_date() %>%
  ggplot(.) + theme_minimal() + xlab("") + ylab("Nominal house price indices") +
  geom_line(aes(x = date, y = obsValue, color = color)) + 
  scale_x_date(breaks = seq(1900, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_log10(breaks = seq(0, 600, 10),
                     labels = dollar_format(a = 1, prefix = "")) +
  scale_color_identity() + add_3flags

France, Spain, Italy

Code
HOUSE_PRICES %>%
  filter(IND == "HPI",
         COU %in% c("FRA", "ITA", "ESP"),
         TIME_FORMAT == "P1Y",
         substr(obsTime, 6, 6) != "Q") %>%
  left_join(HOUSE_PRICES_var$COU,  by = "COU") %>%
  rename(Location = Cou) %>%
  left_join(colors, by = c("Location" = "country")) %>%
  year_to_date() %>%
  ggplot(.) + theme_minimal() + xlab("") + ylab("Nominal house price indices") +
  geom_line(aes(x = date, y = obsValue, color = color)) + 
  scale_x_date(breaks = seq(1900, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_log10(breaks = seq(0, 600, 10),
                     labels = dollar_format(a = 1, prefix = "")) +
  scale_color_identity() + add_3flags

Real house price indices, s.a. - RHP

United States, Japan, Canada

Code
HOUSE_PRICES %>%
  filter(IND == "RHP",
         COU %in% c("USA", "JPN", "CAN"),
         TIME_FORMAT == "P1Y",
         substr(obsTime, 6, 6) != "Q") %>%
  left_join(HOUSE_PRICES_var$COU,  by = "COU") %>%
  rename(Location = Cou) %>%
  left_join(colors, by = c("Location" = "country")) %>%
  year_to_date() %>%
  ggplot(.) + theme_minimal() + xlab("") + ylab("Real house price indices") +
  geom_line(aes(x = date, y = obsValue, color = color)) + 
  scale_x_date(breaks = seq(1900, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_log10(breaks = seq(0, 600, 10),
                     labels = dollar_format(a = 1, prefix = "")) +
  scale_color_identity() + add_3flags

France, Spain, Italy

Code
HOUSE_PRICES %>%
  filter(IND == "RHP",
         COU %in% c("FRA", "ITA", "ESP"),
         TIME_FORMAT == "P1Y",
         substr(obsTime, 6, 6) != "Q") %>%
  left_join(HOUSE_PRICES_var$COU,  by = "COU") %>%
  rename(Location = Cou) %>%
  left_join(colors, by = c("Location" = "country")) %>%
  year_to_date() %>%
  ggplot(.) + theme_minimal() + xlab("") + ylab("Real house price indices") +
  geom_line(aes(x = date, y = obsValue, color = color)) + 
  scale_x_date(breaks = seq(1900, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_log10(breaks = seq(0, 600, 10),
                     labels = dollar_format(a = 1, prefix = "")) +
  scale_color_identity() + add_3flags

Price to rent ratio - HPI_RPI

United States, Japan, Canada

Code
HOUSE_PRICES %>%
  filter(IND == "HPI_RPI",
         COU %in% c("USA", "JPN", "CAN"),
         TIME_FORMAT == "P1Y",
         substr(obsTime, 6, 6) != "Q") %>%
  left_join(HOUSE_PRICES_var$COU,  by = "COU") %>%
  rename(Location = Cou) %>%
  left_join(colors, by = c("Location" = "country")) %>%
  year_to_date() %>%
  ggplot(.) + theme_minimal() + xlab("") + ylab("Price to rent ratio") +
  geom_line(aes(x = date, y = obsValue, color = color)) + 
  scale_x_date(breaks = seq(1900, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_log10(breaks = seq(0, 600, 10),
                     labels = dollar_format(a = 1, prefix = "")) +
  scale_color_identity() + add_3flags

France, Spain, Italy

Code
HOUSE_PRICES %>%
  filter(IND == "HPI_RPI",
         COU %in% c("FRA", "ITA", "ESP"),
         TIME_FORMAT == "P1Y",
         substr(obsTime, 6, 6) != "Q") %>%
  left_join(HOUSE_PRICES_var$COU,  by = "COU") %>%
  rename(Location = Cou) %>%
  left_join(colors, by = c("Location" = "country")) %>%
  year_to_date() %>%
  ggplot(.) + theme_minimal() + xlab("") + ylab("Price to rent ratio") +
  geom_line(aes(x = date, y = obsValue, color = color)) + 
  scale_x_date(breaks = seq(1900, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_log10(breaks = seq(0, 600, 10),
                     labels = dollar_format(a = 1, prefix = "")) +
  scale_color_identity() + add_3flags

France, Spain, Italy, United States, Sweden,

All

Code
HOUSE_PRICES %>%
  filter(IND == "HPI_RPI",
         COU %in% c("DEU", "FRA", "SWE", "JPN", "ESP", "ITA", "USA", "CHE"),
         TIME_FORMAT == "P1Y",
         substr(obsTime, 6, 6) != "Q") %>%
  left_join(HOUSE_PRICES_var$COU,  by = "COU") %>%
  rename(Location = Cou) %>%
  left_join(colors, by = c("Location" = "country")) %>%
  year_to_date() %>%
  ggplot(.) + theme_minimal() + xlab("") + ylab("Price to rent ratio") +
  geom_line(aes(x = date, y = obsValue, color = color)) + 
  scale_x_date(breaks = seq(1900, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_log10(breaks = seq(0, 600, 10),
                     labels = dollar_format(a = 1, prefix = "")) +
  scale_color_identity() + add_8flags +
  theme(legend.position = c(0.8, 0.2),
        legend.title = element_blank())

1998

Code
HOUSE_PRICES %>%
  filter(IND == "HPI_RPI",
         COU %in% c("DEU", "FRA", "SWE", "JPN", "ESP", "ITA", "USA", "CHE"),
         TIME_FORMAT == "P1Y",
         substr(obsTime, 6, 6) != "Q") %>%
  left_join(HOUSE_PRICES_var$COU,  by = "COU") %>%
  rename(Location = Cou) %>%
  left_join(colors, by = c("Location" = "country")) %>%
  year_to_date() %>%
  filter(date >= as.Date("1998-01-01")) %>%
  group_by(Location) %>%
  mutate(obsValue = 100*obsValue/obsValue[date == as.Date("1998-01-01")]) %>%
  ggplot(.) + theme_minimal() + xlab("") + ylab("Price to rent ratio (1998 = 100)") +
  geom_line(aes(x = date, y = obsValue, color = color)) + 
  scale_x_date(breaks = seq(1900, 2022, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_log10(breaks = seq(0, 600, 10),
                     labels = dollar_format(a = 1, prefix = "")) +
  scale_color_identity() + add_8flags +
  theme(legend.position = c(0.8, 0.2),
        legend.title = element_blank())

Price to income ratio - HPI_YDH

United States, Japan, Canada

Code
HOUSE_PRICES %>%
  filter(IND == "HPI_YDH",
         COU %in% c("USA", "JPN", "CAN"),
         TIME_FORMAT == "P1Y",
         substr(obsTime, 6, 6) != "Q") %>%
  left_join(HOUSE_PRICES_var$COU,  by = "COU") %>%
  rename(Location = Cou) %>%
  left_join(colors, by = c("Location" = "country")) %>%
  year_to_date() %>%
  ggplot(.) + theme_minimal() + xlab("") + ylab("Price to income ratio") +
  geom_line(aes(x = date, y = obsValue, color = color)) + 
  scale_x_date(breaks = seq(1900, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_log10(breaks = seq(0, 600, 10),
                     labels = dollar_format(a = 1, prefix = "")) +
  scale_color_identity() + add_3flags

France, Spain, Italy

Code
HOUSE_PRICES %>%
  filter(IND == "HPI_YDH",
         COU %in% c("FRA", "ITA", "ESP"),
         TIME_FORMAT == "P1Y",
         substr(obsTime, 6, 6) != "Q") %>%
  left_join(HOUSE_PRICES_var$COU,  by = "COU") %>%
  rename(Location = Cou) %>%
  left_join(colors, by = c("Location" = "country")) %>%
  year_to_date() %>%
  ggplot(.) + theme_minimal() + xlab("") + ylab("Price to income ratio") +
  geom_line(aes(x = date, y = obsValue, color = color)) + 
  scale_x_date(breaks = seq(1900, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_log10(breaks = seq(0, 600, 10),
                     labels = dollar_format(a = 1, prefix = "")) +
  scale_color_identity() + add_3flags

Standardised price-rent ratio - HPI_RPI_AVG

United States, Japan, Canada

Code
HOUSE_PRICES %>%
  filter(IND == "HPI_RPI_AVG",
         COU %in% c("USA", "JPN", "CAN"),
         TIME_FORMAT == "P1Y",
         substr(obsTime, 6, 6) != "Q") %>%
  left_join(HOUSE_PRICES_var$COU,  by = "COU") %>%
  rename(Location = Cou) %>%
  left_join(colors, by = c("Location" = "country")) %>%
  year_to_date() %>%
  ggplot(.) + theme_minimal() + xlab("") + ylab("Standardised price-rent ratio") +
  geom_line(aes(x = date, y = obsValue, color = color)) + 
  scale_x_date(breaks = seq(1900, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_log10(breaks = seq(0, 600, 10),
                     labels = dollar_format(a = 1, prefix = "")) +
  scale_color_identity() + add_3flags

France, Spain, Italy

Code
HOUSE_PRICES %>%
  filter(IND == "HPI_RPI_AVG",
         COU %in% c("FRA", "ITA", "ESP"),
         TIME_FORMAT == "P1Y",
         substr(obsTime, 6, 6) != "Q") %>%
  left_join(HOUSE_PRICES_var$COU,  by = "COU") %>%
  rename(Location = Cou) %>%
  left_join(colors, by = c("Location" = "country")) %>%
  year_to_date() %>%
  ggplot(.) + theme_minimal() + xlab("") + ylab("Standardised price-rent ratio") +
  geom_line(aes(x = date, y = obsValue, color = color)) + 
  scale_x_date(breaks = seq(1900, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_log10(breaks = seq(0, 600, 10),
                     labels = dollar_format(a = 1, prefix = "")) +
  scale_color_identity() + add_3flags

Standardised price-income ratio - HPI_YDH_AVG

United States, Japan, Canada

Code
HOUSE_PRICES %>%
  filter(IND == "HPI_YDH_AVG",
         COU %in% c("USA", "JPN", "CAN"),
         TIME_FORMAT == "P1Y",
         substr(obsTime, 6, 6) != "Q") %>%
  left_join(HOUSE_PRICES_var$COU,  by = "COU") %>%
  rename(Location = Cou) %>%
  left_join(colors, by = c("Location" = "country")) %>%
  year_to_date() %>%
  ggplot(.) + theme_minimal() + xlab("") + ylab("Standardised price-income ratio") +
  geom_line(aes(x = date, y = obsValue, color = color)) + 
  scale_x_date(breaks = seq(1900, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_log10(breaks = seq(0, 600, 10),
                     labels = dollar_format(a = 1, prefix = "")) +
  scale_color_identity() + add_3flags

France, Spain, Italy

Code
HOUSE_PRICES %>%
  filter(IND == "HPI_YDH_AVG",
         COU %in% c("FRA", "ITA", "ESP"),
         TIME_FORMAT == "P1Y",
         substr(obsTime, 6, 6) != "Q") %>%
  left_join(HOUSE_PRICES_var$COU,  by = "COU") %>%
  rename(Location = Cou) %>%
  left_join(colors, by = c("Location" = "country")) %>%
  year_to_date() %>%
  ggplot(.) + theme_minimal() + xlab("") + ylab("Standardised price-income ratio") +
  geom_line(aes(x = date, y = obsValue, color = color)) + 
  scale_x_date(breaks = seq(1900, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_log10(breaks = seq(0, 600, 10),
                     labels = dollar_format(a = 1, prefix = "")) +
  scale_color_identity() + add_3flags