La DiD Classique

Module 2 — Le cas 2 groupes × 2 périodes

Master GPE — FERDI IHEDD

2026-03-17

Rappel du Module 1

  • Objectif : estimer l’effet causal d’une politique
  • Problème : on n’observe pas le contrefactuel
  • Solution DiD : utiliser l’évolution temporelle du groupe de contrôle comme approximation du contrefactuel pour le groupe traité

Condition clé (qu’on formalise aujourd’hui) : Sans traitement, les deux groupes auraient suivi des tendances parallèles dans le temps.

Le cadre 2 × 2

Deux groupes :

  • \(g = 1\) : groupe traité (reçoit l’intervention)
  • \(g = 0\) : groupe de contrôle (ne reçoit pas l’intervention)

Deux périodes :

  • \(t = 0\) : période avant le traitement
  • \(t = 1\) : période après le traitement

Le traitement \(D_{it}\) :

  • \(D_{it} = 1\) ssi \(g = 1\) et \(t = 1\)
  • Donc \(D_{it} = 0\) partout ailleurs
Avant (t=0) Après (t=1)
Traité (g=1) Y(1,0) Y(1,1)
Contrôle (g=0) Y(0,0) Y(0,1)

4 cellules, 4 moyennes observées. L’estimateur DiD les combine toutes les quatre.

L’hypothèse de tendances parallèles

Hypothèse fondamentale (Parallel Trends) :

En l’absence de traitement, l’évolution du résultat moyen aurait été identique pour les groupes traité et de contrôle.

\[E[Y_{it}(0) - Y_{it-1}(0) \mid g = 1] = E[Y_{it}(0) - Y_{it-1}(0) \mid g = 0]\]

Ce que l’hypothèse permet :

→ Utiliser la variation observée chez le groupe de contrôle comme estimateur de la tendance contrefactuelle pour le groupe traité.

Avertissement

Cette hypothèse n’est pas testable directement pour la période de traitement. Mais on peut tester les périodes pré-traitement (voir Module 3).

Visualisation : tendances parallèles

L’estimateur DiD — dérivation

Étape 1 : Différence chez les traités \[\Delta_{\text{traité}} = \bar{Y}_{1,1} - \bar{Y}_{1,0}\] = changement réel + tendance temporelle

Étape 2 : Différence chez les contrôles \[\Delta_{\text{contrôle}} = \bar{Y}_{0,1} - \bar{Y}_{0,0}\] = tendance temporelle seule

Étape 3 : DiD = Étape 1 − Étape 2 \[\hat{\tau}^{DiD} = (\bar{Y}_{1,1} - \bar{Y}_{1,0}) - (\bar{Y}_{0,1} - \bar{Y}_{0,0})\]

\[\hat{\tau}^{DiD} = (\bar{Y}_{1,1} - \bar{Y}_{1,0})\] \[- (\bar{Y}_{0,1} - \bar{Y}_{0,0})\]

Interprétation : Effet moyen du traitement sur les traités (ATT) :

\(\hat{\tau}^{DiD} \approx E[Y(1) - Y(0) \mid \text{traité}]\)

Exemple numérique concret

Voir le code R
# Moyennes observées (salaire moyen en milliers de FCFA)
Y_traite_avant   <- 120  # Groupe traité avant le programme
Y_traite_apres   <- 145  # Groupe traité après le programme
Y_controle_avant <- 115  # Groupe contrôle avant
Y_controle_apres <- 125  # Groupe contrôle après

# Estimateur DiD
delta_traite   <- Y_traite_apres   - Y_traite_avant
delta_controle <- Y_controle_apres - Y_controle_avant

did_estime <- delta_traite - delta_controle

cat("Δ traités    :", delta_traite,   "k FCFA\n")
#> Δ traités    : 25 k FCFA
Voir le code R
cat("Δ contrôles  :", delta_controle, "k FCFA\n")
#> Δ contrôles  : 10 k FCFA
Voir le code R
cat("Estimateur DiD:", did_estime,   "k FCFA\n")
#> Estimateur DiD: 15 k FCFA

Note

Sans le groupe de contrôle, on aurait surestimé l’effet : +25 au lieu de +15.

DiD en régression linéaire

Modèle de régression DiD :

\[Y_{it} = \alpha + \beta \underbrace{D_i}_{\text{groupe traité}} + \gamma \underbrace{Post_t}_{\text{après}} + \delta \underbrace{(D_i \times Post_t)}_{\text{interaction}} + \varepsilon_{it}\]

Interprétation des coefficients :

  • \(\alpha\) : niveau de base (contrôle, avant)
  • \(\beta\) : différence initiale traité−contrôle
  • \(\gamma\) : tendance temporelle commune
  • \(\delta\) : estimateur DiD = ATT

Avantage de la régression :

  • Permet d’ajouter des covariables \(X_{it}\)
  • Calcule automatiquement les erreurs-types
  • Extensible au panel (modules suivants)

Application R — Simulation de données

Programme de subvention agricole dans un pays en développement :

Voir le code R
library(tidyverse)

set.seed(2024)
n_villages <- 200  # 100 traités, 100 contrôles

# Créer les données panel (2 périodes)
data_2x2 <- tibble(
  village_id  = rep(1:n_villages, 2),
  annee       = rep(c(2018, 2020), each = n_villages),
  traite      = rep(c(rep(1, n_villages / 2), rep(0, n_villages / 2)), 2)
) |>
  mutate(
    apres       = if_else(annee == 2020, 1, 0),
    traitement  = traite * apres,
    # Vrai effet du programme : +300 kg/ha
    rendement   = 2000 + 200 * traite + 150 * apres + 300 * traitement +
                  rnorm(2 * n_villages, mean = 0, sd = 150)
  )

head(data_2x2, 4)
#> # A tibble: 4 × 6
#>   village_id annee traite apres traitement rendement
#>        <int> <dbl>  <dbl> <dbl>      <dbl>     <dbl>
#> 1          1  2018      1     0          0     2347.
#> 2          2  2018      1     0          0     2270.
#> 3          3  2018      1     0          0     2184.
#> 4          4  2018      1     0          0     2168.

Calcul manuel de l’estimateur DiD

Voir le code R
# Moyennes par cellule (2x2)
moyennes <- data_2x2 |>
  group_by(traite, apres) |>
  summarise(rendement_moyen = mean(rendement), .groups = "drop")

print(moyennes)
#> # A tibble: 4 × 3
#>   traite apres rendement_moyen
#>    <dbl> <dbl>           <dbl>
#> 1      0     0           2020.
#> 2      0     1           2158.
#> 3      1     0           2187.
#> 4      1     1           2662.
Voir le code R
# Estimateur DiD
Y_11 <- moyennes |> filter(traite == 1, apres == 1) |> pull(rendement_moyen)
Y_10 <- moyennes |> filter(traite == 1, apres == 0) |> pull(rendement_moyen)
Y_01 <- moyennes |> filter(traite == 0, apres == 1) |> pull(rendement_moyen)
Y_00 <- moyennes |> filter(traite == 0, apres == 0) |> pull(rendement_moyen)

did_manuel <- (Y_11 - Y_10) - (Y_01 - Y_00)
cat("\nEstimateur DiD (manuel) :", round(did_manuel, 1), "kg/ha\n")
#> 
#> Estimateur DiD (manuel) : 336.6 kg/ha

Estimation par régression

Voir le code R
# Modèle DiD en régression
modele_did <- lm(rendement ~ traite + apres + traite:apres, data = data_2x2)
summary(modele_did)
#> 
#> Call:
#> lm(formula = rendement ~ traite + apres + traite:apres, data = data_2x2)
#> 
#> Residuals:
#>     Min      1Q  Median      3Q     Max 
#> -478.40 -102.30    0.85   95.48  431.57 
#> 
#> Coefficients:
#>              Estimate Std. Error t value Pr(>|t|)    
#> (Intercept)   2019.81      14.74 137.016  < 2e-16 ***
#> traite         167.45      20.85   8.032 1.11e-14 ***
#> apres          138.20      20.85   6.629 1.11e-10 ***
#> traite:apres   336.57      29.48  11.416  < 2e-16 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Residual standard error: 147.4 on 396 degrees of freedom
#> Multiple R-squared:  0.7319, Adjusted R-squared:  0.7299 
#> F-statistic: 360.4 on 3 and 396 DF,  p-value: < 2.2e-16

Interprétation des résultats

Terme Estimateur Écart-type Statistique_t p-value
(Intercept) 2019.81 14.74 137.02 0
traite 167.45 20.85 8.03 0
apres 138.20 20.85 6.63 0
traite:apres 336.57 29.48 11.42 0
  • (Intercept) ≈ 2000 : rendement moyen du groupe contrôle avant (ligne de base)
  • traite ≈ 200 : les villages traités avaient un rendement légèrement supérieur avant le programme
  • apres ≈ 150 : la tendance temporelle commune (hausse pour tous)
  • traite:apres ≈ 300 : l’effet estimé du programme = notre ATT

Visualisation de la DiD

Limites du cadre 2 × 2

  1. Seulement 2 périodes → pas de test de pré-tendances possible

  2. Traitement simultané → que faire quand les unités sont traitées à des moments différents ?

  3. Effets constants → le modèle suppose que l’effet est le même pour tous et dans le temps

  4. Pas de contrôle de covariables → des différences dans les caractéristiques pourraient menacer la validité de l’hypothèse de tendances parallèles

  5. Erreurs standards groupées → les individus d’un même groupe ne sont pas indépendants (Bertrand et al., 2004)

→ Ces limites motivent les modules suivants : TWFE (Module 3) et les méthodes modernes (Modules 4 et 5).

Résumé du Module 2

À retenir :

  1. La DiD 2×2 compare les changements entre groupes et périodes
  2. L’hypothèse clé est celle des tendances parallèles (non testable directement)
  3. L’estimateur DiD est la double différence : \((\bar{Y}_{1,1}-\bar{Y}_{1,0})-(\bar{Y}_{0,1}-\bar{Y}_{0,0})\)
  4. En régression : c’est le coefficient d’interaction \(\delta\) dans \(Y = \alpha + \beta D + \gamma Post + \delta(D \times Post)\)
  5. L’estimateur identifie l’ATT sous l’hypothèse de tendances parallèles

Prochain module : Extension au panel avec effets fixes bidirectionnels (TWFE)