Décomposition du taux de marge des sociétés non financières

Data - Insee

Info

source dataset .html .RData
insee t_txmargesnf_val 2025-05-18 2025-02-28

Info

Définition

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)

variable

Code
t_txmargesnf_val %>%
  group_by(variable) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  print_table_conditional
variable Nobs
taux_marge 304
variation_taux_marge 303
Cotisations sociales 187
Salaires réels 187
Autres éléments 99
Productivité 99
Ratio du prix de la VA et du prix de la conso 99

date

Code
t_txmargesnf_val %>%
  group_by(date) %>%
  summarise(Nobs = n()) %>%
  arrange(desc(date)) %>%
  print_table_conditional()

2021

Trimestre 1

Code
t_txmargesnf_val %>%
  filter(date == as.Date("2021-01-01")) %>%
  select(-date) %>%
  print_table_conditional()
variable value
taux_marge 35.6914382
variation_taux_marge 1.8800860
Productivité -0.0982806
Salaires réels 0.3354760
Cotisations sociales 0.1007229
Ratio du prix de la VA et du prix de la conso -0.3639148
Autres éléments 1.9060825

Trimestre 2

Code
t_txmargesnf_val %>%
  filter(date == as.Date("2021-04-01")) %>%
  select(-date) %>%
  print_table_conditional()
variable value
taux_marge 34.5675875
variation_taux_marge -1.1238506
Productivité 0.4973534
Salaires réels -0.7402631
Cotisations sociales 0.0695362
Ratio du prix de la VA et du prix de la conso 0.2025686
Autres éléments -1.1530457

Trimestre 3

Code
t_txmargesnf_val %>%
  filter(date == as.Date("2022-04-01")) %>%
  select(-date) %>%
  print_table_conditional()
variable value
taux_marge 30.7236793
variation_taux_marge -0.4442341
Productivité 0.0606035
Salaires réels 0.1640985
Cotisations sociales -0.0013895
Ratio du prix de la VA et du prix de la conso -0.0700408
Autres éléments -0.5975058

Décomposition

2020-

Code
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, 2025, 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, 2025, 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, 2025, 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))

Quelques taux de marge

Par secteur

Code
ig_b("insee", "ENTFRA23", "F9", "table1")

Distribution

Code
ig_b("insee", "ENTFRA23", "F9", "figure3")

Théorème de Schmidt ?

All

Code
ig_d("insee", "t_pib_val", "investissement-taux-marge")

1980-

Code
ig_d("insee", "t_pib_val", "investissement-taux-marge-1980")