Le taux de marge rapporte l’excédent brut d’exploitation (EBE, B2) à la valeur ajoutée brute en valeur (B1). \[TM = EBE/VA = B2/B1\]
Partant de l’égalité comptable :
$$B2 = B1-D1-D29+D39$$
On peut donc décomposer le taux de marge comme : \[TM = 1 - D1/B1 -(D29-D39)/B1\]
Le terme D1/B1 peut se récrire de la façon suivante : \[D1/B1 = D1/D11 * D11/(Emploi salarié) * Emploi salarié/B1 \]
On a : \[
D1/D11 = (1+D12/D11) = (1+ \text{taux de cotisation employeur apparent})
\]
\[D11/(Emploi salarié) = Salaire moyen par tête nominal = Salaire par tête réel * Prix de la consommation finale
\]\[
Emploi salarié/B1 = Emploi salarié / (valeur ajoutée brute en volume * prix de la valeur ajoutée brute) = 1 / (productivité apparente du travail * prix de la valeur ajoutée brute)
\]
Donc on peut réécrire le terme D1/B1 :
\[
D1/B1 = (1+ taux de cotisation apparent) * Salaire par tête réel * (1/ Productivité du travail) * Prix de la consommation finale/Prix de la valeur ajoutée brute
\]
Ce qui permet au total de décomposer les variations du taux de marge qui dépendent :
- positivement des gains de productivité apparente du travail
- négativement des hausses de salaires par tête réels
- négativement des hausses de cotisations sociales
- positivement des hausses du ratio rapportant le prix de la valeur ajoutée brute à celui de la consommation finale - d’autres éléments de moindre importance (comprenant les impôts nets des subventions et le taux de cotisations sociales apparent)
t_txmargesnf_val |>filter(variable %in%c("variation_taux_marge","Ratio du prix de la VA et du prix de la conso","Salaires réels", "Productivité")) |>filter(date >=as.Date("2021-01-01")) |>ggplot() +geom_line(aes(x = date, y = value /100, color = variable)) +xlab("") +ylab("Evolution (%)") +theme_minimal() +theme(legend.title =element_blank(),legend.position =c(0.4, 0.92)) +scale_x_date(breaks ="3 months",labels =date_format("%Y %b")) +scale_y_continuous(breaks =0.01*seq(-40, 40, 1),labels = scales::percent_format(accuracy =1))
Taux de marge des sociétés non financières
Tous
Code
t_txmargesnf_val |>filter(variable =="taux_marge") |>ggplot() +geom_line(aes(x = date, y = value /100)) +xlab("") +ylab("Taux de marge des sociétés non financières (%)") +theme_minimal() +scale_x_date(breaks =seq(1945, 2100, 5) |>paste0("-01-01") |>as.Date(),labels =date_format("%Y")) +scale_y_continuous(breaks =0.01*seq(-2, 40, 1),labels = scales::percent_format(accuracy =1)) +geom_hline(yintercept =0.349, color ="red", linetype ="dashed")
1990-
Code
t_txmargesnf_val |>filter(variable =="taux_marge", date >=as.Date("1990-01-01")) |>ggplot() +geom_line(aes(x = date, y = value /100)) +xlab("") +ylab("Taux de marge des sociétés non financières (%)") +theme_minimal() +scale_x_date(breaks =seq(1870, 2100, 5) |>paste0("-01-01") |>as.Date(),labels =date_format("%Y")) +scale_y_continuous(breaks =0.01*seq(-2, 40, 1),labels = scales::percent_format(accuracy =1)) +geom_hline(yintercept =0.349, color ="red", linetype ="dashed")
2006-
Code
t_txmargesnf_val |>filter(variable =="taux_marge", date >=as.Date("2006-01-01")) |>ggplot() +geom_line(aes(x = date, y = value /100)) +xlab("") +ylab("Taux de marge des sociétés non financières (%)") +theme_minimal() +scale_x_date(breaks =seq(1870, 2100, 2) |>paste0("-01-01") |>as.Date(),labels =date_format("%Y")) +scale_y_continuous(breaks =0.01*seq(-2, 40, 1),labels = scales::percent_format(accuracy =1)) +geom_hline(yintercept =0.349, color ="red", linetype ="dashed")
Décomposition du taux de marge des sociétés non financières
Code
t_txmargesnf_val |>filter(variable =="taux_marge") |>mutate(version ="Estimation INSEE, 28 Juillet 2021") |>bind_rows(t_txmargesnf_val_May28 |>filter(variable =="taux_marge") |>mutate(version ="Estimation INSEE, 28 Mai 2021")) |>ggplot() +geom_line(aes(x = date, y = value /100, color = version)) +xlab("") +ylab("Taux de marge des sociétés non financières (%)") +theme_minimal() +scale_x_date(breaks =seq(1870, 2100, 5) |>paste0("-01-01") |>as.Date(),labels =date_format("%Y")) +theme(legend.title =element_blank(),legend.position =c(0.3, 0.9)) +scale_y_continuous(breaks =0.01*seq(-2, 40, 1),labels = scales::percent_format(accuracy =1))