#!/usr/bin/env python3 """Figure ch43 — inférence de randomisation exacte pour le DiD du cas 4 (DONNÉES SYNTHÉTIQUES) : distribution des 17 296 estimateurs placebo obtenus en affectant le « traitement » à chacune des combinaisons de 3 immeubles parmi 48, estimateur observé et vérité ; (a) estimateur 2 × 2 naïf, (b) estimateur par strate de RMR. Sortie : assets/figures/ch43/ch43-fig-placebos.pdf""" import sys, pathlib ROOT = pathlib.Path(__file__).resolve().parents[3] sys.path.insert(0, str(ROOT / "analysis/python")); sys.path.insert(0, str(ROOT / "analysis/python/cases")) import numpy as np, matplotlib.pyplot as plt from traite.style import setup, palette, savefig, LARGEUR import ch43_risques as cas def main(): setup() pan = cas.panel_choc(); dd = cas.did_cas4(pan) fig, axes = plt.subplots(1, 2, figsize=(LARGEUR, 2.9), sharey=True) for ax, dist, obs, p, titre in [(axes[0], dd["placebo_dist"], dd["estimateur_2x2"], dd["p_ri"], "(a) DiD 2 × 2 naïf"), (axes[1], dd["placebo_dist_strate"], dd["estimateur_strate"], dd["p_ri_strate"], "(b) DiD par strate de RMR")]: ax.hist(dist, bins=60, color=palette.cat[0], alpha=0.75, linewidth=0, density=True) ax.axvline(obs, color=palette.cat[1], linewidth=1.6); ax.axvline(-obs, color=palette.cat[1], linewidth=1.0, linestyle=":") ax.axvline(cas.CHOC_PERMANENT, color=palette.ink, linewidth=1.0, linestyle="--") ax.text(obs + 0.004, ax.get_ylim()[1] * 0.92, f"observé {obs:.3f}\np = {p:.3f}", ha="left", fontsize=7.5, color=palette.ink) ax.text(cas.CHOC_PERMANENT + 0.004, ax.get_ylim()[1] * 0.60, f"vérité {cas.CHOC_PERMANENT:.2f}", fontsize=7.5, color=palette.ink) ax.set_xlabel("Estimateur placebo (ln RNE)"); ax.set_title(titre, loc="left") axes[0].set_ylabel("Densité") fig.tight_layout() savefig(fig, "ch43/ch43-fig-placebos.pdf") if __name__ == "__main__": main()