Salaires dans le secteur privé en 2017 - IP1798

Données - INSEE

Figure 1 : salaires mensuels moyens et répartition des effectifs en EQTP

Salaire mensuel net moyen, en 2017

Code
fig1 |>
  filter(categorie != "Ensemble (hors emplois aidés)") |>
  mutate(categorie = fct_inorder(categorie),
         dimension = fct_inorder(dimension)) |>
  ggplot(aes(x = fct_rev(categorie), y = net_2017, fill = categorie == "Ensemble")) +
  geom_col(width = 0.7) +
  geom_text(aes(label = format(net_2017, big.mark = " ")), hjust = -0.15, size = 3.5) +
  coord_flip(clip = "off") +
  facet_grid(dimension ~ ., scales = "free_y", space = "free_y") +
  scale_fill_manual(values = c("FALSE" = bleu, "TRUE" = rouge), guide = "none") +
  scale_y_continuous(expand = expansion(mult = c(0, 0.12))) +
  theme_minimal(base_size = 12) +
  labs(x = NULL, y = "Euros par mois",
       title = "Salaire mensuel net moyen en EQTP, en 2017") +
  theme(panel.grid.minor = element_blank(),
        panel.grid.major.y = element_blank(),
        strip.text.y = element_text(angle = 0, hjust = 0))

Évolution 2017/2016, en euros constants

Code
fig1 |>
  filter(categorie != "Ensemble (hors emplois aidés)") |>
  mutate(categorie = fct_inorder(categorie),
         dimension = fct_inorder(dimension)) |>
  select(dimension, categorie, Brut = brut_evol_constants, Net = net_evol_constants) |>
  pivot_longer(-c(dimension, categorie), names_to = "indicateur", values_to = "evolution") |>
  mutate(indicateur = factor(indicateur, levels = c("Brut", "Net"))) |>
  ggplot(aes(x = fct_rev(categorie), y = evolution, fill = indicateur)) +
  geom_col(position = position_dodge(width = 0.75), width = 0.7) +
  geom_hline(yintercept = 0, color = "grey40", linewidth = 0.4) +
  coord_flip() +
  facet_grid(dimension ~ ., scales = "free_y", space = "free_y") +
  scale_fill_manual(values = c("Net" = bleu, "Brut" = bleu_clair), name = NULL,
                    breaks = c("Net", "Brut")) +
  theme_minimal(base_size = 12) +
  labs(x = NULL, y = NULL,
       title = "Évolution 2017/2016 des salaires mensuels en EQTP, en euros constants",
       subtitle = "en %") +
  theme(legend.position = "bottom",
        panel.grid.minor = element_blank(),
        panel.grid.major.y = element_blank(),
        strip.text.y = element_text(angle = 0, hjust = 0))

Table

Code
fig1 |>
  select(-dimension) |>
  print_table_conditional()
categorie brut_2016 brut_2017 brut_evol_constants net_2016 net_2017 net_evol_constants part_effectifs_2016 part_effectifs_2017
Cadres 5445 5514 0.2 4055 4103 0.1 19.9 20.4
Professions intermédiaires 3027 3095 1.2 2266 2311 1.0 20.3 20.2
Employés 2165 2198 0.5 1635 1662 0.6 29.4 29.1
Ouvriers 2261 2295 0.4 1715 1742 0.5 30.4 30.4
Hommes 3255 3307 0.5 2451 2488 0.5 58.4 58.5
Femmes 2696 2769 1.6 2016 2069 1.6 41.6 41.5
Construction 2742 2803 1.1 2070 2107 0.7 7.7 7.7
Industrie 3407 3464 0.6 2531 2576 0.7 18.0 17.6
Tertiaire 2959 3023 1.1 2227 2274 1.1 74.2 74.7
Ensemble 3023 3084 1.0 2270 2314 0.9 100.0 100.0
Ensemble (hors emplois aidés) 3056 3118 1.0 2294 2340 0.9 NA NA

Figure 2 : évolution du salaire net moyen en EQTP, en euros constants

Code
fig2 |>
  ggplot(aes(x = annee, y = evol_salaire_net, fill = evol_salaire_net > 0)) +
  geom_col() +
  geom_hline(yintercept = 0, color = "grey40", linewidth = 0.4) +
  geom_hline(aes(yintercept = moyenne_1997_2017), linetype = "dashed", color = rouge, linewidth = 0.8) +
  geom_text(aes(label = evol_salaire_net,
                vjust = if_else(evol_salaire_net >= 0, -0.4, 1.3)), size = 3) +
  scale_fill_manual(values = c("TRUE" = bleu, "FALSE" = rouge), guide = "none") +
  scale_x_continuous(breaks = seq(1997, 2017, 2)) +
  theme_minimal(base_size = 12) +
  labs(x = NULL, y = NULL,
       title = "Évolution annuelle du salaire net moyen en EQTP, en euros constants",
       subtitle = "en % ; ligne pointillée = moyenne annuelle 1997-2017") +
  theme(panel.grid.minor = element_blank(),
        panel.grid.major.x = element_blank())

Figure 3 : distribution des salaires mensuels nets en EQTP, en 2017

Histogramme

Code
fig3 |>
  mutate(centre = coalesce((borne_inf + borne_sup) / 2, borne_inf + 50, borne_sup - 50)) |>
  ggplot(aes(x = centre, y = effectifs_milliers)) +
  geom_col(fill = bleu, width = 90) +
  scale_x_continuous(breaks = seq(1000, 9000, 1000),
                     labels = scales::label_number(big.mark = " ")) +
  theme_minimal(base_size = 12) +
  labs(x = "Salaire mensuel net (en euros)", y = "Milliers d'EQTP",
       title = "Distribution des salaires mensuels nets en EQTP, en 2017",
       subtitle = "Tranches de 100 euros\npremière barre : moins de 1 200 euros ; dernière : plus de 8 700 euros") +
  theme(panel.grid.minor = element_blank(),
        panel.grid.major.x = element_blank())

Centiles (figure complémentaire 4)

Code
fc4 |>
  ggplot(aes(x = centile, y = salaire_net)) +
  geom_line(color = bleu, linewidth = 1.2) +
  scale_x_continuous(breaks = seq(0, 100, 10)) +
  scale_y_log10(breaks = c(1250, 1500, 2000, 3000, 4000, 5000, 7500, 10000),
                labels = scales::label_number(big.mark = " ")) +
  theme_minimal(base_size = 12) +
  labs(x = "Centile", y = "Euros par mois",
       title = "Salaire mensuel net par centile, en 2017",
       subtitle = "Échelle logarithmique") +
  theme(panel.grid.minor = element_blank())

Log-log (Pareto)

Part des salariés dont le salaire mensuel net est supérieur ou égal à \(s\), en fonction de \(s\), les deux axes en échelle logarithmique. Points : bornes inférieures des tranches de la figure 3 ; droite : régression sur les tranches à partir de 3 000 euros.

Code
N_total <- sum(fig3$effectifs_milliers)
pareto <- fig3 |>
  filter(!is.na(borne_inf)) |>
  arrange(borne_inf) |>
  mutate(part_au_dessus = rev(cumsum(rev(effectifs_milliers))) / N_total)

seuil_pareto <- 3000
fit_pareto <- lm(log(part_au_dessus) ~ log(borne_inf), data = filter(pareto, borne_inf >= seuil_pareto))
alpha <- -coef(fit_pareto)[2]

pareto |>
  mutate(ajuste = exp(predict(fit_pareto, newdata = pick(everything()))),
         ajuste = if_else(ajuste <= 1, ajuste, NA_real_)) |>
  ggplot(aes(x = borne_inf, y = part_au_dessus)) +
  geom_point(color = bleu, size = 1.5) +
  geom_line(aes(y = ajuste), color = rouge, linewidth = 0.8, linetype = "dashed", na.rm = TRUE) +
  annotate("text", x = 5000, y = 0.3, color = rouge, hjust = 0, size = 4,
           label = paste0("Pente : -", format(round(alpha, 2), decimal.mark = ","),
                          "\nR² = ", format(sprintf("%.4f", summary(fit_pareto)$r.squared)) |> str_replace("\\.", ","))) +
  scale_x_log10(breaks = c(1200, 1500, 2000, 3000, 4000, 5000, 7000, 8700),
                labels = scales::label_number(big.mark = " ")) +
  scale_y_log10(breaks = c(0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1),
                labels = scales::label_percent(accuracy = 1)) +
  theme_minimal(base_size = 12) +
  labs(x = "Salaire mensuel net s (en euros)", y = "Part des EQTP avec un salaire ≥ s",
       title = "Distribution des salaires mensuels nets en EQTP, en 2017",
       subtitle = "Échelle log-log (Pareto) ; droite ajustée à partir de 3 000 euros") +
  theme(panel.grid.minor = element_blank())

Figure 4 : évolution de la distribution du salaire net en EQTP depuis 1996, en euros constants

Linéaire

Code
plot_fig4 <- fig4 |>
  mutate(indicateur = recode(indicateur, D1 = "1er décile (D1)", Mediane = "Médiane", D9 = "9e décile (D9)")) |>
  ggplot(aes(x = annee, y = value, color = indicateur)) +
  geom_line(linewidth = 1.2) +
  geom_hline(yintercept = 100, color = "grey60", linetype = "dashed") +
  scale_color_manual(values = c("1er décile (D1)" = rouge, "Médiane" = "grey40", "9e décile (D9)" = bleu), name = NULL) +
  scale_x_continuous(breaks = seq(1996, 2018, 2)) +
  scale_y_continuous(breaks = seq(90, 130, 2)) +
  theme_minimal(base_size = 12) +
  labs(x = NULL, y = NULL,
       title = "Déciles des salaires nets en EQTP, en euros constants",
       subtitle = "Indice base 100 en 1996 - Échelle linéaire") +
  theme(legend.position = "bottom",
        panel.grid.minor = element_blank())

plot_fig4

Log

Code
plot_fig4 +
  scale_y_log10(breaks = seq(90, 130, 2)) +
  labs(subtitle = "Indice base 100 en 1996 - Échelle logarithmique")

Figure complémentaire 2 : distribution par sexe des salaires mensuels nets en EQTP, en 2017

Code
fc2 |>
  filter(quantile != "Moyenne") |>
  mutate(quantile = fct_reorder(quantile, ordre),
         sexe = factor(sexe, levels = c("Femmes", "Hommes", "Ensemble"))) |>
  ggplot(aes(x = quantile, y = niveau, color = sexe, group = sexe)) +
  geom_line(linewidth = 1) +
  geom_point(size = 2) +
  scale_color_manual(values = c("Femmes" = rouge, "Hommes" = bleu, "Ensemble" = "grey50"), name = NULL) +
  scale_y_log10(breaks = c(1250, 1500, 2000, 3000, 4000, 6000, 8000, 10000),
                labels = scales::label_number(big.mark = " ")) +
  theme_minimal(base_size = 12) +
  labs(x = NULL, y = "Euros par mois",
       title = "Salaire mensuel net en EQTP par quantile et par sexe, en 2017",
       subtitle = "Échelle logarithmique") +
  theme(legend.position = "bottom",
        axis.text.x = element_text(angle = 45, hjust = 1),
        panel.grid.minor = element_blank())

Code
fc2 |>
  select(-ordre) |>
  print_table_conditional()

Figure complémentaire 1 : salaires horaires moyens selon le sexe et la CS

Code
fc1 |>
  filter(sexe != "Ensemble", categorie != "Ensemble") |>
  mutate(categorie = fct_inorder(categorie)) |>
  ggplot(aes(x = categorie, y = net_2017, fill = sexe)) +
  geom_col(position = position_dodge(width = 0.8), width = 0.75) +
  geom_text(aes(label = net_2017), position = position_dodge(width = 0.8), vjust = -0.4, size = 3.5) +
  scale_fill_manual(values = c("Femmes" = rouge, "Hommes" = bleu), name = NULL) +
  theme_minimal(base_size = 12) +
  labs(x = NULL, y = "Euros par heure",
       title = "Salaire horaire net moyen, en 2017",
       subtitle = "selon le sexe et la catégorie socioprofessionnelle") +
  theme(legend.position = "bottom",
        panel.grid.minor = element_blank(),
        panel.grid.major.x = element_blank())

Code
fc1 |>
  print_table_conditional()
sexe categorie brut_2016 brut_2017 brut_evol_constants net_2016 net_2017 net_evol_constants
Ensemble Ensemble 19.4 19.8 0.7 14.6 14.8 0.7
Ensemble Cadres 35.3 35.6 -0.2 26.3 26.5 -0.3
Ensemble Professions intermédiaires 19.5 19.9 0.8 14.6 14.8 0.6
Ensemble Employés 14.0 14.2 0.2 10.6 10.7 0.4
Ensemble Ouvriers 14.3 14.5 0.4 10.9 11.0 0.5
Hommes Ensemble 20.8 21.0 0.3 15.6 15.8 0.3
Hommes Cadres 37.7 37.9 -0.5 28.1 28.3 -0.5
Hommes Professions intermédiaires 20.5 20.8 0.6 15.4 15.6 0.4
Hommes Employés 14.5 14.6 -0.2 11.0 11.1 -0.1
Hommes Ouvriers 14.6 14.8 0.3 11.1 11.3 0.3
Femmes Ensemble 17.5 17.9 1.3 13.1 13.4 1.3
Femmes Cadres 30.9 31.4 0.4 22.8 23.2 0.5
Femmes Professions intermédiaires 18.3 18.7 1.2 13.6 13.9 0.9
Femmes Employés 13.8 14.0 0.4 10.4 10.5 0.6
Femmes Ouvriers 12.8 13.1 1.0 9.7 10.0 1.3

Figure complémentaire 3 : salaires mensuels moyens selon le sexe et la CS

Code
fc3 |>
  filter(sexe != "Ensemble", categorie != "Ensemble") |>
  mutate(categorie = fct_inorder(categorie)) |>
  ggplot(aes(x = categorie, y = net_2017, fill = sexe)) +
  geom_col(position = position_dodge(width = 0.8), width = 0.75) +
  geom_text(aes(label = format(net_2017, big.mark = " ")),
            position = position_dodge(width = 0.8), vjust = -0.4, size = 3.5) +
  scale_fill_manual(values = c("Femmes" = rouge, "Hommes" = bleu), name = NULL) +
  theme_minimal(base_size = 12) +
  labs(x = NULL, y = "Euros par mois",
       title = "Salaire mensuel net moyen en EQTP, en 2017",
       subtitle = "selon le sexe et la catégorie socioprofessionnelle") +
  theme(legend.position = "bottom",
        panel.grid.minor = element_blank(),
        panel.grid.major.x = element_blank())

Code
fc3 |>
  print_table_conditional()
sexe categorie brut_2016 brut_2017 brut_evol_constants net_2016 net_2017 net_evol_constants part_effectifs_2016 part_effectifs_2017
Ensemble Ensemble 3023 3084 1.0 2270 2314 0.9 100.0 100.0
Ensemble Cadres 5445 5514 0.2 4055 4103 0.1 19.9 20.4
Ensemble Professions intermédiaires 3027 3095 1.2 2266 2311 1.0 20.3 20.2
Ensemble Employés 2165 2198 0.5 1635 1662 0.6 29.4 29.1
Ensemble Ouvriers 2261 2295 0.4 1715 1742 0.5 30.4 30.4
Hommes Ensemble 3255 3307 0.5 2451 2488 0.5 58.4 58.5
Hommes Cadres 5820 5879 0.0 4351 4392 -0.1 22.2 22.5
Hommes Professions intermédiaires 3204 3268 1.0 2406 2450 0.8 19.0 18.8
Hommes Employés 2257 2283 0.1 1713 1734 0.2 15.9 15.8
Hommes Ouvriers 2322 2353 0.3 1761 1785 0.3 42.9 42.9
Femmes Ensemble 2696 2769 1.6 2016 2069 1.6 41.6 41.5
Femmes Cadres 4747 4847 1.0 3506 3574 0.9 16.8 17.4
Femmes Professions intermédiaires 2814 2879 1.6 2096 2145 1.3 22.1 22.2
Femmes Employés 2122 2158 0.6 1599 1628 0.8 48.4 47.7
Femmes Ouvriers 1974 2018 1.2 1498 1536 1.5 12.7 12.8