Indice pour la révision d’un loyer d’habitation

Data - INSEE

Info

source dataset .html .RData
insee IPC-2015 2024-11-09 2024-11-09
insee IRL 2024-11-05 2024-11-09

Données sur l’inflation en France

source dataset .html .RData
insee bdf2017 2024-11-09 2023-11-21
insee ILC-ILAT-ICC 2024-11-09 2024-11-09
insee INDICES_LOYERS 2024-11-09 2024-11-09
insee IPC-1970-1980 2024-11-09 2024-11-09
insee IPC-1990 2024-11-09 2024-11-09
insee IPC-2015 2024-11-09 2024-11-09
insee IPC-PM-2015 2024-11-09 2024-11-09
insee IPCH-2015 2024-11-09 2024-11-09
insee IPGD-2015 2024-08-22 2024-10-26
insee IPLA-IPLNA-2015 2024-11-09 2024-11-09
insee IPPI-2015 2024-11-09 2024-11-09
insee IRL 2024-11-05 2024-11-09
insee SERIES_LOYERS 2024-11-05 2024-11-09
insee T_CONSO_EFF_FONCTION 2024-11-05 2024-07-18

Données sur l’immobilier

source dataset .html .RData
acpr as151 2024-06-19 2024-04-05
bdf BSI1 2024-07-26 2024-06-14
bdf CPP 2024-07-26 2024-07-01
bdf FM 2024-07-26 2024-10-16
bdf immobilier 2024-07-26 2024-06-18
bdf MIR 2024-07-26 2024-07-01
bdf MIR1 2024-10-16 2024-10-16
bdf RPP 2024-07-26 2024-07-01
cgedd nombre-vente-maison-appartement-ancien 2024-09-26 2024-09-26
insee CONSTRUCTION-LOGEMENTS 2024-11-09 2024-11-09
insee ENQ-CONJ-ART-BAT 2024-11-09 2024-11-09
insee ENQ-CONJ-IND-BAT 2024-11-09 2024-11-09
insee ENQ-CONJ-PROMO-IMMO 2024-11-09 2024-11-09
insee ENQ-CONJ-TP 2024-11-09 2024-11-09
insee ILC-ILAT-ICC 2024-11-09 2024-11-09
insee INDICES_LOYERS 2024-11-09 2024-11-09
insee IPLA-IPLNA-2015 2024-11-09 2024-11-09
insee IRL 2024-11-05 2024-11-09
insee PARC-LOGEMENTS 2024-11-05 2023-12-03
insee SERIES_LOYERS 2024-11-05 2024-11-09
insee t_dpe_val 2024-11-05 2024-09-02
notaires arrdt 2024-06-30 2024-09-09
notaires dep 2024-06-30 2024-09-08

LAST_UPDATE

Code
IRL %>%
  group_by(LAST_UPDATE) %>%
  summarise(Nobs = n()) %>%
  arrange(desc(LAST_UPDATE)) %>%
  print_table_conditional()
LAST_UPDATE Nobs
2024-10-15 252
2008-02-04 62

Last

Code
IRL %>%
  group_by(TIME_PERIOD) %>%
  summarise(Nobs = n()) %>%
  arrange(desc(TIME_PERIOD)) %>%
  head(1) %>%
  print_table_conditional()
TIME_PERIOD Nobs
2024-Q3 6

Liens

  • INSEE - La méthodologie de l’IRL. pdf

  • INSEE - méthodologie IRL base 1998. pdf

  • Indice de référence des loyers (IRL). html

  • Dernier indice IRL connu. html

  • Tableau sur le site de l’INSEE. html

Code
i_g("bib/insee/IR95_IRL_1T22/pour-en-savoir-plus.png")

TITLE_FR

Code
`IRL` %>%
  group_by(IDBANK, TITLE_FR) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  {if (is_html_output()) print_table(.) else .}
IDBANK TITLE_FR Nobs
001515333 Indice de référence des loyers (IRL) 88
001515334 Indice de référence des loyers (IRL) - Variation annuelle 88
000882470 Indice de référence des loyers 2005 (IRL 2005) - Série arrêtée 31
000882473 Indice de référence des loyers 2005 (IRL 2005) - Variation annuelle - Série arrêtée 31
010760507 Indice de référence des loyers dans la collectivité de Corse 19
010760508 Indice de référence des loyers dans la collectivité de Corse - Variation annuelle 19
010760509 Indice de référence des loyers dans les collectivités régies par l’article 73 de la Constitution (régions et départements d’outre-mer) 19
010760510 Indice de référence des loyers dans les collectivités régies par l’article 73 de la Constitution (régions et départements d’outre-mer) - Variation annuelle 19

BASIND

Code
`IRL` %>%
  left_join(BASIND, by = "BASIND") %>%
  group_by(BASIND, Basind) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  {if (is_html_output()) print_table(.) else .}
BASIND Basind Nobs
SO Sans objet 157
1998-T4 4ème trimestre de 1998 126
2004-T2 2ème trimestre de 2004 31

NATURE

Code
`IRL` %>%
  left_join(NATURE, by = "NATURE") %>%
  group_by(NATURE, Nature) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  print_table_conditional()
NATURE Nature Nobs
INDICE Indice 157
VARIATIONS_A Variations annuelles 157

TIME_PERIOD

Code
`IRL` %>%
  group_by(TIME_PERIOD) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  arrange(desc(TIME_PERIOD)) %>%
  print_table_conditional()

Indice

Linear

Code
IRL %>%
  filter(NATURE == "INDICE") %>%
  quarter_to_date %>%
  ggplot(.) + theme_minimal() + ylab("") + xlab("") +
  geom_line(aes(x = date, y = OBS_VALUE, color = TITLE_FR)) +
  theme(legend.title = element_blank(),
        legend.position = c(0.4, 0.92)) +
  scale_x_date(breaks = seq(1950, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = seq(0, 200, 5))

Linear - 4 quarters rolling

Code
IRL %>%
  filter(NATURE == "INDICE") %>%
  quarter_to_date %>%
  group_by(TITLE_FR) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = OBS_VALUE/lag(OBS_VALUE, 4)-1) %>%
  ggplot(.) + theme_minimal() + ylab("") + xlab("") +
  geom_line(aes(x = date, y = OBS_VALUE, color = TITLE_FR)) +
  theme(legend.title = element_blank(),
        legend.position = c(0.65, 0.95)) +
  
  scale_x_date(breaks = seq(1950, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-100, 300, 0.5),
                     labels = percent_format(accuracy = .1, prefix = ""))

Log

Code
IRL %>%
  filter(NATURE == "INDICE") %>%
  quarter_to_date %>%
  ggplot(.) + theme_minimal() + ylab("") + xlab("") +
  geom_line(aes(x = date, y = OBS_VALUE, color = TITLE_FR)) +
  theme(legend.title = element_blank(),
        legend.position = c(0.38, 0.92)) +
  
  scale_x_date(breaks = seq(1950, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_log10(breaks = seq(0, 200, 5))

Variation annuelle

Tous

Code
IRL %>%
  filter(NATURE == "VARIATIONS_A") %>%
  quarter_to_date %>%
  ggplot(.) + theme_minimal() + ylab("") + xlab("") +
  geom_line(aes(x = date, y = OBS_VALUE/100, color = TITLE_FR)) +
  theme(legend.title = element_blank(),
        legend.position = c(0.5, 0.92)) +
  
  scale_x_date(breaks = seq(1950, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-200, 200, .5),
                     labels = percent_format(acc = .1),
                     limits = 0.01*c(-0.2, 4))

2008-

Code
table1 <- IRL %>%
  filter(NATURE == "VARIATIONS_A") %>%
  quarter_to_date %>%
  filter(date >= as.Date("2008-01-01")) %>%
  select(date, OBS_VALUE, IDBANK, TITLE_FR)

table1 %>%
  ggplot(.) + theme_minimal() + ylab("") + xlab("") +
  geom_line(aes(x = date, y = OBS_VALUE/100, color = TITLE_FR)) +
  theme(legend.title = element_blank(),
        legend.position = c(0.5, 0.92)) +
  
  scale_x_date(breaks = seq(1950, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-200, 200, .5),
                     labels = percent_format(acc = .1),
                     limits = 0.01*c(-0.2, 4))

Table

Code
table1 %>%
  print_table_conditional()

Répliquer IRL à partir de l’Ensemble hors loyer hors tabac

Prévisions INSEE

Estimation

Code
i_g("bib/insee/PdC_09-05-22/table5.png")

IRL Juillet

Code
`IPC-2015` %>%
  filter(PRIX_CONSO %in% c("4600"),
         COICOP2016 %in% c("00", "SO"),
         MENAGES_IPC == "ENSEMBLE",
         NATURE == "INDICE",
         REF_AREA == "FE",
         FREQ == "M") %>%
  select(TIME_PERIOD, OBS_VALUE) %>%
  arrange(desc(TIME_PERIOD))
# # A tibble: 321 × 2
#    TIME_PERIOD OBS_VALUE
#    <chr>           <dbl>
#  1 2024-09          119.
#  2 2024-08          121.
#  3 2024-07          120.
#  4 2024-06          120 
#  5 2024-05          120.
#  6 2024-04          120.
#  7 2024-03          119.
#  8 2024-02          119.
#  9 2024-01          118 
# 10 2023-12          118.
# # ℹ 311 more rows

Ensemble

Trimestriel

All

Code
`IPC-2015` %>%
  filter(PRIX_CONSO %in% c("4600"),
         COICOP2016 %in% c("SO"),
         MENAGES_IPC == "ENSEMBLE",
         NATURE == "INDICE",
         REF_AREA == "FE",
         FREQ == "M") %>%
  month_to_date %>%
  arrange(date) %>%
  transmute(date,
            `Inflation Indice des loyers (IRL): Variation sur 12 mois de la moyenne sur 12 mois de l'IPC hors loyers, hors tabac` = zoo::rollmean(OBS_VALUE, 12, fill = NA, align = "right"),
            `Inflation IPC hors loyers, hors tabac: Variation sur 12 mois de l'IPC hors loyers, hors tabac` = OBS_VALUE) %>%
  filter(month(date) %in% c(12, 3, 6, 9)) %>%
  gather(variable, value, -date) %>%
  group_by(variable) %>%
  mutate(value_d12 = value/lag(value, 4) - 1) %>%
  ggplot() + ylab("Indice des loyers (simulé)") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = value_d12, color = variable)) +
  scale_color_manual(values = c("blue", "red")) +
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.5, 0.9),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = 0.01*seq(-100, 300, 0.5),
                     labels = percent_format(accuracy = .1, prefix = ""))

2006-

Code
`IPC-2015` %>%
  filter(PRIX_CONSO %in% c("4600"),
         COICOP2016 %in% c("00", "SO"),
         MENAGES_IPC == "ENSEMBLE",
         NATURE == "INDICE",
         REF_AREA == "FE",
         FREQ == "M") %>%
  month_to_date %>%
  filter(date >= as.Date("2006-01-01")) %>%
  arrange(date) %>%
  transmute(date,
            `Inflation Indice des loyers (IRL):\nVariation sur 12 mois de la moyenne sur 12 mois de l'IPC hors loyers, hors tabac` = zoo::rollmean(OBS_VALUE, 12, fill = NA, align = "right"),
            `Inflation Indice des Prix à la Consommation (IPC-) hors loyers, hors tabac: \nVariation sur 12 mois de l'IPC hors loyers, hors tabac` = OBS_VALUE) %>%
  filter(month(date) %in% c(12, 3, 6, 9)) %>%
  gather(variable, value, -date) %>%
  group_by(variable) %>%
  mutate(value_d12 = value/lag(value, 4) - 1) %>%
  na.omit %>%
  filter(date >= as.Date("2008-01-01")) %>%
  ggplot() + ylab("Indice des loyers (simulé)") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = value_d12, color = variable)) +
  scale_color_manual(values = c("blue", "red")) +
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.45, 0.9),
        legend.title = element_blank(),
        legend.key.size= unit(1.0, 'cm')) +
  scale_y_continuous(breaks = 0.01*seq(-100, 300, 0.5),
                     labels = percent_format(accuracy = .1, prefix = ""))

2008-

Code
table2 <- `IPC-2015` %>%
  filter(PRIX_CONSO %in% c("4600"),
         COICOP2016 %in% c("00", "SO"),
         MENAGES_IPC == "ENSEMBLE",
         NATURE == "INDICE",
         REF_AREA == "FE",
         FREQ == "M") %>%
  month_to_date %>%
  filter(date >= as.Date("2006-01-01")) %>%
  arrange(date) %>%
  transmute(date,
            `Inflation Indice des loyers (IRL):\nVariation sur 12 mois de la moyenne sur 12 mois de l'IPC hors loyers, hors tabac` = zoo::rollmean(OBS_VALUE, 12, fill = NA, align = "right"),
            `Inflation Indice des Prix à la Consommation (IPC-) hors loyers, hors tabac: \nVariation sur 12 mois de l'IPC hors loyers, hors tabac` = OBS_VALUE) %>%
  filter(month(date) %in% c(12, 3, 6, 9)) %>%
  gather(variable, value, -date) %>%
  group_by(variable) %>%
  mutate(value_d12 = value/lag(value, 4) - 1) %>%
  na.omit %>%
  filter(date >= as.Date("2008-01-01"))
  

table2 %>%
  ggplot() + ylab("Indice des loyers (simulé)") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = value_d12, color = variable)) +
  scale_color_manual(values = c("blue", "red")) +
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.45, 0.9),
        legend.title = element_blank(),
        legend.key.size= unit(1.0, 'cm')) +
  scale_y_continuous(breaks = 0.01*seq(-100, 300, 0.5),
                     labels = percent_format(accuracy = .1, prefix = ""))

Mensuel

Code
`IPC-2015` %>%
  filter(PRIX_CONSO %in% c("4600"),
         COICOP2016 %in% c("00", "SO"),
         MENAGES_IPC == "ENSEMBLE",
         NATURE == "INDICE",
         REF_AREA == "FE",
         FREQ == "M") %>%
  month_to_date %>%
  arrange(date) %>%
  transmute(date,
            `Inflation Indice des loyers (IRL): Variation sur 12 mois de la moyenne sur 12 mois de l'IPC hors loyers, hors tabac` = zoo::rollmean(OBS_VALUE, 12, fill = NA, align = "right"),
            `Inflation IPC hors loyers, hors tabac: Variation sur 12 mois de l'IPC hors loyers, hors tabac` = OBS_VALUE) %>%
  gather(variable, value, -date) %>%
  group_by(variable) %>%
  mutate(value_d12 = value/lag(value, 12) - 1) %>%
  ggplot() + ylab("Indice des loyers (simulé)") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = value_d12, color = variable)) +
  scale_color_manual(values = c("blue", "red")) +
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.5, 0.9),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = 0.01*seq(-100, 300, 0.5),
                     labels = percent_format(accuracy = .1, prefix = ""))

Glissement annuel, Trimestriel

Tous

Code
`IPC-2015` %>%
  filter(PRIX_CONSO %in% c("4600", "SO"),
         COICOP2016 %in% c("00", "SO"),
         MENAGES_IPC == "ENSEMBLE",
         NATURE == "INDICE",
         REF_AREA == "FE",
         FREQ == "M") %>%
  select_if(~ n_distinct(.) > 1) %>%
  month_to_date %>%
  arrange(date) %>%
  left_join(PRIX_CONSO, by = "PRIX_CONSO") %>%
  left_join(COICOP2016, by = "COICOP2016") %>%
  group_by(Prix_conso) %>%
  filter(month(date) %in% c(12, 3, 6, 9)) %>%
  mutate(OBS_VALUE = OBS_VALUE/lag(OBS_VALUE, 4)-1,
         Prix_conso = ifelse(PRIX_CONSO == "SO", "Ensemble", Prix_conso)) %>%
  na.omit %>%
  ggplot() + ylab("Inflation sur un an (IPC, IPCH)") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Prix_conso)) +
  
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.35, 0.9),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = 0.01*seq(-100, 300, 0.5),
                     labels = percent_format(accuracy = .1, prefix = ""))

1998-

Code
`IPC-2015` %>%
  filter(PRIX_CONSO %in% c("4600", "SO"),
         COICOP2016 %in% c("00", "SO"),
         MENAGES_IPC == "ENSEMBLE",
         NATURE == "INDICE",
         REF_AREA == "FE",
         FREQ == "M") %>%
  select_if(~ n_distinct(.) > 1) %>%
  month_to_date %>%
  arrange(date) %>%
  left_join(PRIX_CONSO, by = "PRIX_CONSO") %>%
  group_by(Prix_conso) %>%
  filter(month(date) %in% c(12, 3, 6, 9)) %>%
  mutate(OBS_VALUE = OBS_VALUE/lag(OBS_VALUE, 4)-1,
         Prix_conso = ifelse(PRIX_CONSO == "SO", "Ensemble", Prix_conso)) %>%
  filter(date >= as.Date("1998-01-01")) %>%
  na.omit %>%
  ggplot() + ylab("Glissement annuel") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Prix_conso)) +
  
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.2, 0.9),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = 0.01*seq(-100, 300, 0.5),
                     labels = percent_format(accuracy = .1, prefix = ""))

2018-

Code
`IPC-2015` %>%
  filter(PRIX_CONSO %in% c("4600", "SO"),
         COICOP2016 %in% c("00", "SO"),
         MENAGES_IPC == "ENSEMBLE",
         NATURE == "INDICE",
         REF_AREA == "FE",
         FREQ == "M") %>%
  select_if(~ n_distinct(.) > 1) %>%
  month_to_date %>%
  arrange(date) %>%
  left_join(PRIX_CONSO, by = "PRIX_CONSO") %>%
  group_by(Prix_conso) %>%
  filter(month(date) %in% c(12, 3, 6, 9)) %>%
  mutate(OBS_VALUE = OBS_VALUE/lag(OBS_VALUE, 4)-1,
         Prix_conso = ifelse(PRIX_CONSO == "SO", "Ensemble", Prix_conso)) %>%
  filter(date >= as.Date("2018-01-01")) %>%
  na.omit %>%
  ggplot() + ylab("Glissement annuel") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Prix_conso)) +
  
  scale_x_date(breaks = seq(1920, 2100, 1) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.35, 0.9),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = 0.01*seq(-100, 300, 0.5),
                     labels = percent_format(accuracy = .1, prefix = ""))

Evolution entre deux périodes de la moyenne sur 12 mois de l’indice des prix à la consommation

Il se déduit de l’indice du même trimestre de l’année précédente en lui appliquant l’évolution entre ces deux périodes de la moyenne sur douze mois consécutifs de l’indice des prix à la consommation hors tabac et hors loyers (IPC).

All

Code
`IPC-2015` %>%
  filter(PRIX_CONSO %in% c("4600", "SO"),
         COICOP2016 %in% c("00", "SO"),
         MENAGES_IPC == "ENSEMBLE",
         NATURE == "INDICE",
         REF_AREA == "FE",
         FREQ == "M") %>%
  select_if(~ n_distinct(.) > 1) %>%
  month_to_date %>%
  arrange(date) %>%
  left_join(PRIX_CONSO, by = "PRIX_CONSO") %>%
  group_by(Prix_conso) %>%
  filter(date >= as.Date("2000-01-01")) %>%
  mutate(OBS_VALUE_mean = zoo::rollmean(OBS_VALUE, 12, fill = NA, align = "right"),
         Prix_conso = ifelse(PRIX_CONSO == "SO", "Ensemble", Prix_conso)) %>%
  filter(month(date) %in% c(12, 3, 6, 9)) %>%
  mutate(OBS_VALUE_mean_d1 = OBS_VALUE_mean/lag(OBS_VALUE_mean, 4)-1,
         OBS_VALUE_d1 = OBS_VALUE/lag(OBS_VALUE, 4)-1) %>%
  na.omit %>%
  ggplot() + ylab("Indice des loyers (simulé)") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE_d1, color = Prix_conso)) +
  
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.8, 0.9),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = 0.01*seq(-100, 300, 0.5),
                     labels = percent_format(accuracy = .1, prefix = ""))

2017-

Code
`IPC-2015` %>%
  filter(PRIX_CONSO %in% c("4600", "SO"),
         COICOP2016 %in% c("00", "SO"),
         MENAGES_IPC == "ENSEMBLE",
         NATURE == "INDICE",
         REF_AREA == "FE",
         FREQ == "M") %>%
  select_if(~ n_distinct(.) > 1) %>%
  month_to_date %>%
  arrange(date) %>%
  left_join(PRIX_CONSO, by = "PRIX_CONSO") %>%
  group_by(Prix_conso) %>%
  filter(date >= as.Date("2000-01-01")) %>%
  mutate(OBS_VALUE_mean = zoo::rollmean(OBS_VALUE, 12, fill = NA, align = "right"),
         Prix_conso = ifelse(PRIX_CONSO == "SO", "Ensemble", Prix_conso)) %>%
  filter(month(date) %in% c(12, 3, 6, 9)) %>%
  mutate(OBS_VALUE_mean_d1 = OBS_VALUE_mean/lag(OBS_VALUE_mean, 4)-1,
         OBS_VALUE_d1 = OBS_VALUE/lag(OBS_VALUE, 4)-1) %>%
  na.omit %>%
  filter(date >= as.Date("2017-01-01")) %>%
  ggplot() + ylab("Indice des loyers (simulé)") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE_d1, color = Prix_conso)) +
  
  scale_x_date(breaks = seq(1920, 2100, 1) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.3, 0.9),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = 0.01*seq(-100, 300, 0.5),
                     labels = percent_format(accuracy = .1, prefix = ""))

Ensemble

All

Code
`IPC-2015` %>%
  filter(PRIX_CONSO %in% c("4600", "SO"),
         COICOP2016 %in% c("00", "SO"),
         MENAGES_IPC == "ENSEMBLE",
         NATURE == "INDICE",
         REF_AREA == "FE",
         FREQ == "M") %>%
  select_if(~ n_distinct(.) > 1) %>%
  month_to_date %>%
  arrange(date) %>%
  left_join(PRIX_CONSO, by = "PRIX_CONSO") %>%
  group_by(Prix_conso) %>%
  filter(date >= as.Date("2000-01-01")) %>%
  mutate(OBS_VALUE_mean = zoo::rollmean(OBS_VALUE, 12, fill = NA, align = "right"),
         Prix_conso = ifelse(PRIX_CONSO == "SO", "Ensemble", Prix_conso)) %>%
  filter(month(date) %in% c(12, 3, 6, 9)) %>%
  transmute(date, 
            OBS_VALUE_mean_d1 = OBS_VALUE_mean/lag(OBS_VALUE_mean, 4)-1,
            OBS_VALUE_d1 = OBS_VALUE/lag(OBS_VALUE, 4)-1,
            Prix_conso) %>%
  na.omit %>%
  gather(variable, value, -date, -Prix_conso) %>%
  mutate(variable = case_when(variable == "OBS_VALUE_mean_d1" ~ "Inflation de l'IRL (Indice de Référence des Loyers) - Moyenne 12 mois",
                              variable == "OBS_VALUE_d1" ~ "Inflation de l'IPC (Indice des Prix à la Consommation) - Instantanée")) %>%
  ggplot() + ylab("Indice des loyers (simulé)") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = value, color = Prix_conso, linetype = variable)) +
  
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.4, 0.8),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = 0.01*seq(-100, 300, 0.5),
                     labels = percent_format(accuracy = .1, prefix = ""))

2017-

Code
`IPC-2015` %>%
  filter(PRIX_CONSO %in% c("4600", "SO"),
         COICOP2016 %in% c("00", "SO"),
         MENAGES_IPC == "ENSEMBLE",
         NATURE == "INDICE",
         REF_AREA == "FE",
         FREQ == "M") %>%
  select_if(~ n_distinct(.) > 1) %>%
  month_to_date %>%
  arrange(date) %>%
  left_join(PRIX_CONSO, by = "PRIX_CONSO") %>%
  group_by(Prix_conso) %>%
  filter(date >= as.Date("2000-01-01")) %>%
  mutate(OBS_VALUE_mean = zoo::rollmean(OBS_VALUE, 12, fill = NA, align = "right"),
         Prix_conso = ifelse(PRIX_CONSO == "SO", "Ensemble", Prix_conso)) %>%
  filter(month(date) %in% c(12, 3, 6, 9)) %>%
  transmute(date, 
            OBS_VALUE_mean_d1 = OBS_VALUE_mean/lag(OBS_VALUE_mean, 4)-1,
            OBS_VALUE_d1 = OBS_VALUE/lag(OBS_VALUE, 4)-1,
            Prix_conso) %>%
  na.omit %>%
  filter(date >= as.Date("2017-01-01")) %>%
  gather(variable, value, -date, -Prix_conso) %>%
  mutate(variable = case_when(variable == "OBS_VALUE_mean_d1" ~ "Inflation de l'IRL (Indice de Référence des Loyers) - Moyenne 12 mois",
                              variable == "OBS_VALUE_d1" ~ "Inflation de l'IPC (Indice des Prix à la Consommation) - Instantanée")) %>%
  ggplot() + ylab("Indice des loyers (simulé)") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = value, color = Prix_conso, linetype = variable)) +
  
  scale_x_date(breaks = seq(1920, 2100, 1) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.4, 0.8),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = 0.01*seq(-100, 300, 0.5),
                     labels = percent_format(accuracy = .1, prefix = ""))