| 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) |
Module 2 — Le cas 2 groupes × 2 périodes
2026-03-17
Condition clé (qu’on formalise aujourd’hui) : Sans traitement, les deux groupes auraient suivi des tendances parallèles dans le temps.
Deux groupes :
Deux périodes :
Le traitement \(D_{it}\) :
| 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.
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).
É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é}]\)
# 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
#> Δ contrôles : 10 k FCFA
#> Estimateur DiD: 15 k FCFA
Note
Sans le groupe de contrôle, on aurait surestimé l’effet : +25 au lieu de +15.
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 :
Avantage de la régression :
Programme de subvention agricole dans un pays en développement :
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.
#> # 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.
# 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
#>
#> 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
| 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 programmeapres ≈ 150 : la tendance temporelle commune (hausse pour tous)traite:apres ≈ 300 : l’effet estimé du programme = notre ATT ✓Seulement 2 périodes → pas de test de pré-tendances possible
Traitement simultané → que faire quand les unités sont traitées à des moments différents ?
Effets constants → le modèle suppose que l’effet est le même pour tous et dans le temps
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
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).
À retenir :
Prochain module : Extension au panel avec effets fixes bidirectionnels (TWFE)
Master GPE FERDI IHEDD | Évaluation d’Impact | Module 2