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

Données - INSEE

Info

Last observation: 2026-Q2

First observation: 2000-Q1

Number of observations: 356

Last data update: 24 jul 2026, 03:05. Last compile: 24 jul 2026, 06:20

Structure

Last

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

Indice

Linear

Tous

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.6, 0.7)) +
  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))

2017-

Code
IRL %>%
  filter(NATURE == "INDICE") %>%
  quarter_to_date %>%
  filter(date >= as.Date("2017-01-01")) %>%
  group_by(TITLE_FR) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[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.6, 0.7)) +
  scale_x_date(breaks = seq(1950, 2100, 1) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_log10(breaks = seq(0, 200, 5)) +
  geom_label(data = . %>% filter(date == max(date)),
             aes(x = date, y = OBS_VALUE, color = TITLE_FR, label = round(OBS_VALUE, 1)),
             show.legend = F)

2020-

Code
IRL %>%
  filter(NATURE == "INDICE") %>%
  quarter_to_date %>%
  filter(date >= as.Date("2020-01-01")) %>%
  group_by(TITLE_FR) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[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.6, 0.7)) +
  scale_x_date(breaks = seq(1950, 2100, 1) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_log10(breaks = seq(0, 200, 1)) +
  geom_label(data = . %>% filter(date == max(date)),
             aes(x = date, y = OBS_VALUE, color = TITLE_FR, label = round(OBS_VALUE, 1)),
             show.legend = F)

2017-

Code
IRL %>%
  filter(NATURE == "INDICE",
         IDBANK == "001515333") %>%
  quarter_to_date %>%
  filter(date >= as.Date("2017-01-01")) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot(.) + theme_minimal() + ylab("") + xlab("") +
  geom_line(aes(x = date, y = OBS_VALUE)) +
  theme(legend.title = element_blank(),
        legend.position = c(0.2, 0.7)) +
  scale_x_date(breaks = seq(1950, 2100, 1) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_log10(breaks = seq(0, 200, 2)) +
  geom_label(data = . %>% filter(date == max(date)),
             aes(x = date, y = OBS_VALUE, label = round(OBS_VALUE, 1)),
             show.legend = F)

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: 0 × 2
# # ℹ 2 variables: TIME_PERIOD <chr>, OBS_VALUE <dbl>

En savoir plus

Liens

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

  • Dernier IRL. html

  • 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")

En savoir plus

L’article 9 de la loi no 2008-111 du 8 février 2008 pour le pouvoir d’achat a modifié l’indice de référence des loyers (IRL) créé par l’article 35 de la loi no 2005-841 du 26 juillet 2005. L’IRL est un indice chaîné en glissement annuel. 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). À partir du 1er trimestre 2016, l’IPC est calculé en référence 100 en 2015 mais l’IRL demeure calculé sur une référence 100 au quatrième trimestre 1998.

Le calcul est effectué sur la série non arrondie de l’indice des prix à la consommation hors tabac et hors loyers.

Le niveau et l’évolution de l’indice de référence des loyers sont arrondis à deux décimales.

Pour la fixation des indices de référence des loyers entre le troisième trimestre de l’année 2022 et le premier trimestre de l’année 2024, l’article 12 de la loi no 2022-1158 du 16 août 2022 portant mesures d’urgence pour la protection du pouvoir d’achat, modifié par l’article 2 de la loi no 2023-568 du 7 juillet 2023, dispose que « la variation en glissement annuel de l’indice de référence des loyers ne peut excéder 3,5 %. ».

L’article dispose également que cette variation ne peut excéder 2,5 % pour les départements et régions d’Outre-mer.

Enfin, l’arrêté no R20-2022-10-11-00012 modifié dispose que la variation en glissement annuel de l’indice de référence des loyers dans la collectivité de Corse ne peut excéder 2,0 % pour la fixation des indices de référence des loyers entre le troisième trimestre de l’année 2022 et le premier trimestre de l’année 2024.