Impact des données de caisse sur les indices des regroupements conjoncturels (2019) - impact_donnees_caisse_regroupements_2019

Données - INSEE

Depuis 2020, l’Insee intègre dans le calcul de l’IPC des données de caisse (DDC) de la grande distribution pour une partie des produits. Ce classeur compare, pour l’année 2019, les indices de prix publiés sans données de caisse (méthode antérieure) et avec (nouvelle méthode), par regroupement conjoncturel (alimentation, produits manufacturés, énergie, services…), pour l’ensemble des ménages, les ménages urbains dont le chef est ouvrier ou employé, les ménages du premier quintile de niveau de vie et l’IPCH. Les indices sont en base 100 = décembre 2018 ; les évolutions sont arrondies à 0,1 point.

Indice d’ensemble : sans et avec données de caisse

Code
ens |>
  filter(mesure == "Indice (base 100 = décembre 2018)") |>
  mutate(serie = lab_ddc(avec_ddc)) |>
  ggplot(aes(x = date, y = valeur, color = serie)) +
  geom_hline(yintercept = 100, color = "grey60") +
  geom_line(linewidth = 1.2) + geom_point(size = 2) +
  scale_color_manual(values = cols_ddc, name = NULL) +
  scale_x_date(date_breaks = "1 month", date_labels = "%b") +
  theme_ddc() +
  labs(x = NULL, y = "Base 100 = décembre 2018", title = "IPC d'ensemble en 2019 : peu de différence entre les deux méthodes")

Code
ens |>
  filter(mesure == "Indice (base 100 = décembre 2018)") |>
  select(date, avec_ddc, valeur) |>
  pivot_wider(names_from = avec_ddc, values_from = valeur, names_prefix = "avec_") |>
  mutate(ecart = avec_TRUE - avec_FALSE) |>
  ggplot(aes(x = date, y = ecart)) +
  geom_hline(yintercept = 0, color = "grey50") +
  geom_col(aes(fill = ecart > 0), show.legend = FALSE) +
  scale_fill_manual(values = c(`TRUE` = rose, `FALSE` = bleu)) +
  scale_x_date(date_breaks = "1 month", date_labels = "%b") +
  theme_ddc() +
  labs(x = NULL, y = "Points d'indice", title = "Écart d'indice d'ensemble (avec - sans données de caisse)")

Glissement annuel de l’ensemble

Code
ens |>
  filter(mesure == "Glissement annuel (%)") |>
  mutate(serie = lab_ddc(avec_ddc)) |>
  ggplot(aes(x = date, y = valeur, color = serie)) +
  geom_line(linewidth = 1.2) + geom_point(size = 2) +
  scale_color_manual(values = cols_ddc, name = NULL) +
  scale_x_date(date_breaks = "1 month", date_labels = "%b") +
  theme_ddc() +
  labs(x = NULL, y = "%", title = "Glissement annuel de l'IPC d'ensemble en 2019")

Évolution annuelle 2019 par regroupement

Code
an |>
  filter(str_detect(groupe, "^a\\)"), regroupement != "Ensemble") |>
  mutate(regroupement = fct_reorder(regroupement, ponderation)) |>
  ggplot(aes(y = regroupement)) +
  geom_segment(aes(x = sans_ddc, xend = avec_ddc, yend = regroupement), color = "grey60", linewidth = 1) +
  geom_point(aes(x = sans_ddc, color = "Sans données de caisse"), size = 3) +
  geom_point(aes(x = avec_ddc, color = "Avec données de caisse"), size = 3) +
  scale_color_manual(values = cols_ddc, name = NULL) +
  theme_ddc() +
  labs(x = "Évolution annuelle 2019 (%)", y = NULL, title = "Évolution des prix 2019 par regroupement, sans et avec données de caisse",
       subtitle = "regroupements triés par pondération")

Code
e <- an |> filter(str_detect(groupe, "^a\\)")) |>
  mutate(regroupement = fct_reorder(regroupement, ecart))
nz <- sum(e$ecart != 0)
e |>
  ggplot(aes(x = ecart, y = regroupement, fill = ecart < 0)) +
  geom_vline(xintercept = 0, color = "grey50") +
  geom_col(show.legend = FALSE) +
  scale_fill_manual(values = c(`TRUE` = bleu, `FALSE` = rose)) +
  theme_ddc() +
  labs(x = "Point de pourcentage (avec - sans)", y = NULL, title = "Écart d'évolution annuelle 2019 : avec moins sans données de caisse",
       subtitle = sprintf("%d regroupements sur %d ont un écart non nul (arrondi à 0,1 point)", nz, nrow(e)))

Écart de glissement annuel mois par mois

Code
reg |>
  filter(mesure == "Glissement annuel (%)", str_detect(groupe, "^a\\)")) |>
  select(regroupement, ponderation, date, avec_ddc, valeur) |>
  pivot_wider(names_from = avec_ddc, values_from = valeur, names_prefix = "avec_") |>
  mutate(ecart = avec_TRUE - avec_FALSE, regroupement = fct_reorder(regroupement, ponderation)) |>
  ggplot(aes(x = date, y = regroupement, fill = ecart)) +
  geom_tile(color = "white") +
  geom_text(aes(label = sprintf("%.1f", ecart)), size = 2.6) +
  scale_fill_gradient2(low = bleu, mid = "white", high = rose, midpoint = 0, name = "Écart (pts)") +
  scale_x_date(date_breaks = "1 month", date_labels = "%b", expand = c(0, 0)) +
  theme_ddc() + theme(legend.position = "right") +
  labs(x = NULL, y = NULL, title = "Écart de glissement annuel (avec - sans données de caisse)")

Selon le type de ménage

Code
an |>
  filter(str_detect(regroupement, "^Ensemble hors tabac$|^IPCH$|^Ensemble$")) |>
  mutate(menage = case_when(str_detect(groupe, "^a\\)") & regroupement == "Ensemble hors tabac" ~ "Ensemble des ménages (hors tabac)",
                            str_detect(groupe, "^b\\)") ~ "Ménages urbains, chef ouvrier ou employé (hors tabac)",
                            str_detect(groupe, "^c\\)") ~ "Ménages du 1er quintile (hors tabac)",
                            regroupement == "IPCH" ~ "IPCH", TRUE ~ "Ensemble des ménages")) |>
  select(menage, sans_ddc, avec_ddc) |>
  pivot_longer(-menage, names_to = "serie", values_to = "evolution") |>
  mutate(serie = if_else(serie == "avec_ddc", "Avec données de caisse", "Sans données de caisse")) |>
  ggplot(aes(x = evolution, y = menage, fill = serie)) +
  geom_col(position = "dodge") +
  geom_text(aes(label = sprintf("%.1f", evolution)), position = position_dodge(width = 0.9), hjust = -0.2, size = 3) +
  scale_fill_manual(values = cols_ddc, name = NULL) +
  scale_x_continuous(expand = expansion(mult = c(0, 0.1))) +
  theme_ddc() +
  labs(x = "Évolution annuelle 2019 (%)", y = NULL, title = "Évolution des prix 2019 selon la catégorie de ménages")

Données

Code
an |> print_table_conditional()
regroupement ponderation groupe sans_ddc avec_ddc ecart
Ensemble 10000 a) Ensemble des ménages 1.1 1.1 0.0
Alimentation 1619 a) Ensemble des ménages 2.5 2.3 -0.2
Produits frais 244 a) Ensemble des ménages 4.3 4.3 0.0
Autre alimentation 1375 a) Ensemble des ménages 2.1 2.0 -0.1
Tabac 191 a) Ensemble des ménages 10.6 10.6 0.0
Produits manufacturés 2556 a) Ensemble des ménages -0.6 -0.7 -0.1
Habillement et chaussures 400 a) Ensemble des ménages -0.3 -0.3 0.0
Produits de santé 416 a) Ensemble des ménages -2.8 -2.8 0.0
Autres produits manufacturés 1740 a) Ensemble des ménages -0.1 -0.2 -0.1
Énergie 804 a) Ensemble des ménages 1.9 1.9 0.0
dont Produits pétroliers 425 a) Ensemble des ménages 0.6 0.6 0.0
Services 4830 a) Ensemble des ménages 1.0 1.0 0.0
Loyers, eau et enlèvement des ordures ménagères 746 a) Ensemble des ménages 0.4 0.4 0.0
Services de santé 604 a) Ensemble des ménages -0.1 -0.1 0.0
Transports 285 a) Ensemble des ménages 0.7 0.7 0.0
Communications 219 a) Ensemble des ménages -1.1 -1.1 0.0
Autres services 2976 a) Ensemble des ménages 1.6 1.6 0.0
Ensemble hors loyers et hors tabac 9208 a) Ensemble des ménages 1.0 0.9 -0.1
Ensemble hors tabac 9809 a) Ensemble des ménages 0.9 0.9 0.0
Ensemble hors tabac 9707 b) Ménages urbains dont le chef est ouvrier ou employé 0.9 0.8 -0.1
Ensemble hors tabac 9700 c) Ménages du 1er quintile de la distribution des niveaux de vie 0.9 0.8 -0.1
IPCH 10000 IPCH 1.3 1.3 0.0
Code
reg |> filter(mesure == "Glissement annuel (%)") |>
  mutate(avec_ddc = lab_ddc(avec_ddc), date = format(date, "%Y-%m")) |>
  select(groupe, regroupement, ponderation, avec_ddc, date, valeur) |>
  print_table_conditional()