Impact des données de caisse sur les indices détaillés (2019) - impact_donnees_caisse_detailles_2019

Données - INSEE

Version détaillée de la comparaison des indices de prix à la consommation 2019 sans et avec données de caisse (DDC) : 411 postes de la nomenclature COICOP pour les indices mensuels (division, groupe, classe, sous-classe), 771 pour l’évolution annuelle. Les évolutions sont arrondies à 0,1 point, ce qui limite la précision des écarts. Les 360 postes les plus fins sont utilisés pour les distributions ci-dessous.

Écarts d’évolution annuelle 2019 entre les deux méthodes

Code
feuilles |>
  ggplot(aes(x = ecart)) +
  geom_histogram(binwidth = 0.1, fill = bleu) +
  geom_vline(xintercept = 0, color = rose, linewidth = 0.8) +
  scale_y_continuous(trans = "pseudo_log", breaks = c(0, 1, 10, 100, 300)) +
  theme_ddc() +
  labs(x = "Écart d'évolution annuelle 2019 (avec - sans DDC, points de %)", y = "Postes (échelle pseudo-log)",
       title = "Pour la plupart des postes, les deux méthodes donnent la même évolution",
       subtitle = sprintf("%.0f %% des %d postes fins ont un écart nul ; |écart| maximal : %.1f point", 100 * mean(feuilles$ecart == 0, na.rm = TRUE), nrow(feuilles), max(abs(feuilles$ecart), na.rm = TRUE)))

Code
ex <- bind_rows(feuilles |> slice_max(ecart, n = 12, with_ties = FALSE), feuilles |> slice_min(ecart, n = 12, with_ties = FALSE)) |>
  distinct(code, .keep_all = TRUE) |>
  mutate(lab = paste0(str_trunc(libelle, 38), " (", code, ", pond. ", ponderation, ")"))
ex |>
  ggplot(aes(x = ecart, y = fct_reorder(lab, ecart), fill = ecart > 0)) +
  geom_vline(xintercept = 0, color = "grey50") +
  geom_col(show.legend = FALSE) +
  scale_fill_manual(values = c(`TRUE` = rose, `FALSE` = bleu)) +
  theme_ddc() +
  labs(x = "Écart (points de %)", y = NULL, title = "Postes fins où les deux méthodes divergent le plus",
       subtitle = "pondération en dix-millièmes de l'indice d'ensemble")

Code
feuilles |>
  filter(ponderation >= 5) |>
  ggplot(aes(x = sans_ddc, y = avec_ddc)) +
  geom_abline(slope = 1, intercept = 0, color = "grey50") +
  geom_point(aes(size = ponderation), color = bleu, alpha = 0.55) +
  geom_text_repel(data = ~ filter(.x, abs(ecart) >= 1), aes(label = str_trunc(libelle, 30)), size = 3, segment.size = 0.2) +
  scale_size_area(max_size = 6, name = "Pondération") +
  theme_ddc() +
  labs(x = "Évolution annuelle 2019 sans DDC (%)", y = "Évolution annuelle 2019 avec DDC (%)",
       title = "Évolution des prix 2019 par poste fin : méthode avec et sans données de caisse",
       subtitle = "postes de pondération au moins égale à 5 (sur 10 000)")

Contribution à l’écart d’ensemble, par division

Code
feuilles |>
  mutate(division = substr(code, 1, 2)) |>
  group_by(division) |>
  summarise(contrib = sum(ponderation * ecart, na.rm = TRUE) / 10000, .groups = "drop") |>
  left_join(select(div, division = code, libelle), by = "division") |>
  mutate(lab = paste0(division, " ", str_trunc(str_to_sentence(libelle), 42))) |>
  ggplot(aes(x = contrib, y = fct_reorder(lab, contrib), fill = contrib > 0)) +
  geom_vline(xintercept = 0, color = "grey50") +
  geom_col(show.legend = FALSE) +
  scale_fill_manual(values = c(`TRUE` = rose, `FALSE` = bleu)) +
  theme_ddc() +
  labs(x = "Contribution approximative (pondération × écart, points de %)", y = NULL,
       title = "Contribution des divisions à l'écart entre les deux méthodes",
       subtitle = "approximation : somme pondérée des écarts arrondis des postes fins")

Indices mensuels des divisions

Code
dv <- det |>
  filter(mesure == "Glissement annuel (%)", code %in% c("00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12")) |>
  mutate(serie = if_else(avec_ddc, "Avec données de caisse", "Sans données de caisse"),
         lab = paste0(code, " ", str_trunc(str_to_sentence(libelle), 30)))
dv |>
  ggplot(aes(x = date, y = valeur, color = serie)) +
  geom_line(linewidth = 0.9) +
  facet_wrap(~ lab, scales = "free_y", ncol = 3) +
  scale_color_manual(values = cols_ddc, name = NULL) +
  scale_x_date(date_breaks = "3 months", date_labels = "%b") +
  theme_ddc(base_size = 10) +
  labs(x = NULL, y = "%", title = "Glissement annuel 2019 par division COICOP, sans et avec données de caisse")

Données

Code
an |> arrange(desc(abs(ecart))) |> print_table_conditional()