Salaires mensuels nets moyens

Data - INSEE

Info

  • En 2019, le salaire net moyen dans le secteur privé a progressé de 1,2 % en euros constants. pdf / xlsx / html

Figure 3 - histogramme

Tous les centiles

Code
ip1863_fig3 %>%
  mutate(salaires_min = 1100 + 100*seq(0, 76, 1),
         salaires_min = ifelse(salaires_min == 1100, 0, salaires_min),
         salaires_max = 1200 + 100*seq(0, 76, 1),
         salaires_max = ifelse(salaires_max == 8800, Inf, salaires_max)) %>%
  mutate(effectifs_cum = 1 - cumsum(effectifs)/sum(effectifs)) %>%
  ggplot(.) + theme_minimal() + xlab("Wage") + ylab("Countercumulative Distribution Function") + 
  geom_point(aes(x = salaires_max, y = effectifs_cum)) +
  scale_x_log10(breaks = c(1000, 1500, 2000, 3000, 4000, 6000, 8000),
                labels = dollar_format(prefix = "", accuracy = 1, suffix = " €")) + 
  scale_y_log10(breaks = c(seq(0.01, 0.05, 0.01), 0.1, 0.2, 0.4, 1))

80 au 99ème centile

Regression

Code
fit1 <- ip1863_fig3 %>%
  mutate(salaires_min = 1100 + 100*seq(0, 76, 1),
         salaires_min = ifelse(salaires_min == 1100, 0, salaires_min),
         salaires_max = 1200 + 100*seq(0, 76, 1),
         salaires_max = ifelse(salaires_max == 8800, Inf, salaires_max)) %>%
  mutate(effectifs_cum = 1 - cumsum(effectifs)/sum(effectifs)) %>%
  filter(effectifs_cum <= 0.2) %>%
  filter(is.finite(salaires_max)) %>%
  lm(log(effectifs_cum) ~ log(salaires_max), data = .)

summ(fit1)
Observations 58
Dependent variable log(effectifs_cum)
Type OLS linear regression
F(1,56) 1238345.44
1.00
Adj. R² 1.00
Est. S.E. t val. p
(Intercept) 19.75 0.02 952.40 0.00
log(salaires_max) -2.67 0.00 -1112.81 0.00
Standard errors: OLS

Graph

Code
ip1863_fig3 %>%
  mutate(salaires_min = 1100 + 100*seq(0, 76, 1),
         salaires_min = ifelse(salaires_min == 1100, 0, salaires_min),
         salaires_max = 1200 + 100*seq(0, 76, 1),
         salaires_max = ifelse(salaires_max == 8800, Inf, salaires_max)) %>%
  mutate(effectifs_cum = 1 - cumsum(effectifs)/sum(effectifs)) %>%
  filter(effectifs_cum <= 0.2) %>%
  ggplot(.) + theme_minimal() + xlab("Wage") + ylab("Countercumulative Distribution Function") + 
  geom_point(aes(x = salaires_max, y = effectifs_cum)) +
  scale_x_log10(breaks = c(1000, 1500, 2000, 3000, 4000, 5000, 6000, 7000, 8000),
                labels = dollar_format(prefix = "", accuracy = 1, suffix = " €")) + 
  scale_y_log10(breaks = c(seq(0.01, 0.05, 0.01), 0.1, 0.2, 0.4, 1)) +
  geom_function(aes(colour = paste0("Pente (coeff Pareto): ", round(fit1$coefficients[2],3))), fun = function(x) exp(fit1$coefficients[1] + fit1$coefficients[2]*log(x))) +
  theme(legend.position = c(0.8, 0.9),
        legend.title = element_blank())

90 au 99ème centile

Regression

Code
fit1 <- ip1863_fig3 %>%
  mutate(salaires_min = 1100 + 100*seq(0, 76, 1),
         salaires_min = ifelse(salaires_min == 1100, 0, salaires_min),
         salaires_max = 1200 + 100*seq(0, 76, 1),
         salaires_max = ifelse(salaires_max == 8800, Inf, salaires_max)) %>%
  mutate(effectifs_cum = 1 - cumsum(effectifs)/sum(effectifs)) %>%
  filter(effectifs_cum <= 0.1) %>%
  filter(is.finite(salaires_max)) %>%
  lm(log(effectifs_cum) ~ log(salaires_max), data = .)

summ(fit1)
Observations 49
Dependent variable log(effectifs_cum)
Type OLS linear regression
F(1,47) 3330251.79
1.00
Adj. R² 1.00
Est. S.E. t val. p
(Intercept) 19.86 0.01 1547.21 0.00
log(salaires_max) -2.69 0.00 -1824.90 0.00
Standard errors: OLS

Graph

Code
ip1863_fig3 %>%
  mutate(salaires_min = 1100 + 100*seq(0, 76, 1),
         salaires_min = ifelse(salaires_min == 1100, 0, salaires_min),
         salaires_max = 1200 + 100*seq(0, 76, 1),
         salaires_max = ifelse(salaires_max == 8800, Inf, salaires_max)) %>%
  mutate(effectifs_cum = 1 - cumsum(effectifs)/sum(effectifs)) %>%
  filter(effectifs_cum <= 0.1) %>%
  ggplot(.) + theme_minimal() + xlab("Wage") + ylab("Countercumulative Distribution Function") + 
  geom_point(aes(x = salaires_max, y = effectifs_cum)) +
  scale_x_log10(breaks = c(1000, 1500, 2000, 3000, 4000, 5000, 6000, 7000, 8000),
                labels = dollar_format(prefix = "", accuracy = 1, suffix = " €")) + 
  scale_y_log10(breaks = seq(0.01, 0.1, 0.01)) +
  geom_function(aes(colour = paste0("Pente (coeff Pareto): ", round(fit1$coefficients[2],3))), fun = function(x) exp(fit1$coefficients[1] + fit1$coefficients[2]*log(x))) +
  theme(legend.position = c(0.8, 0.9),
        legend.title = element_blank())

Salaires distribution - ip1863

Tous les centiles

Code
ip1863 %>%
  ggplot(.) + theme_minimal() + xlab("Wage") + ylab("Countercumulative Distribution Function") + 
  geom_point(aes(x = salaire, y = countercumulative)) +
  scale_x_log10(breaks = c(1000, 1500, 2000, 3000, 4000, 6000, 8000),
                labels = dollar_format(prefix = "", accuracy = 1, suffix = " €")) + 
  scale_y_log10(breaks = c(seq(0.01, 0.05, 0.01), 0.1, 0.2, 0.4, 1))

80 au 99ème centile

Regression

Code
fit1 <- ip1863 %>%
  filter(countercumulative <= 0.2) %>%
  lm(log(countercumulative) ~ log(salaire), data = .)

summ(fit1)
Observations 20
Dependent variable log(countercumulative)
Type OLS linear regression
F(1,18) 158231.39
1.00
Adj. R² 1.00
Est. S.E. t val. p
(Intercept) 19.58 0.06 352.69 0.00
log(salaire) -2.65 0.01 -397.78 0.00
Standard errors: OLS

Graph

Code
ip1863 %>%
  filter(countercumulative <= 0.2) %>%
  ggplot(.) + theme_minimal() + xlab("Wage") + ylab("Countercumulative Distribution Function") + 
  geom_point(aes(x = salaire, y = countercumulative)) +
  scale_x_log10(breaks = c(1000, 1500, 2000, 3000, 4000, 6000, 8000),
                labels = dollar_format(prefix = "", accuracy = 1, suffix = " €")) + 
  scale_y_log10(breaks = c(seq(0.01, 0.05, 0.01), 0.1, 0.2, 0.4, 1)) +
  geom_function(aes(colour = paste0("Pente (coeff Pareto): ", round(fit1$coefficients[2],3))), fun = function(x) exp(fit1$coefficients[1] + fit1$coefficients[2]*log(x))) +
  theme(legend.position = c(0.8, 0.9),
        legend.title = element_blank())

Evolution des salaires: 1996-2019

Tous

Code
ip1863_fig5 %>%
  year_to_date2() %>%
  group_by(variable) %>%
  mutate(value = 100*value/value[date == as.Date("1996-01-01")]) %>%
  ggplot() + ylab("Salaire net en EQTP depuis 1996, en € constants") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = value, color = variable)) +
  
  scale_x_date(breaks = seq(1920, 2025, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.15, 0.85),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(10, 300, 2),
                     labels = dollar_format(accuracy = 1, prefix = ""))

2008-

Code
ip1863_fig5 %>%
  year_to_date2() %>%
  filter(date >= as.Date("2008-01-01")) %>%
  group_by(variable) %>%
  mutate(value = 100*value/value[date == as.Date("2008-01-01")]) %>%
  ggplot() + ylab("Salaire net en EQTP depuis 2008, en € constants") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = value, color = variable)) +
  
  scale_x_date(breaks = seq(1920, 2025, 1) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.15, 0.85),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(10, 300, 1),
                     labels = dollar_format(accuracy = 1, prefix = ""))