Coase and Cap-and-Trade: Evidence on the Independence Property from the European Carbon Market

Aleksandar Zaklan (2023) · American Economic Journal: Economic Policy

Published

October 10, 2026

import sys
from pathlib import Path

ROOT = next(
    p for p in [Path.cwd(), *Path.cwd().parents]
    if (p / "scripts/tranche50_report.py").exists()
)
sys.path.insert(0, str(ROOT / "scripts"))
from tranche50_report import report
report("aeraej-38", tranche="tranche100")

Aleksandar Zaklan (2023). American Economic Journal: Economic Policy. Table 3.

Source specification

Source coefficient Template on source sample Source N Template source-sample N
-0.095342 -0.095342 3465 3465

Source-to-template coefficient difference: 5.33e-15, in original outcome units.

Role Column
Outcome ln_emissions
Treatment interact_post_treatment_treated
Unit firm_num
Time year
Cluster firm_num

No additional covariates beyond fixed effects.

Estimates below divide the outcome by its source-sample standard deviation, 2.29786. Static TWFE is the treatment coefficient. Dynamic TWFE, BJS and Sun–Abraham average supported post-treatment cells by observation count. CS-DID additionally reports an equal-event-time average.

Analysis sample and treatment timing

Observations Units Treated Control units Cohorts Clusters
3465 385 304 81 1 385

Adoption is the first observed treated period. Initially treated units and units without an observed minus-one baseline are excluded. Post-adoption untreated rows are excluded for switching policies. The plot shows at most 100 seeded-sample units; estimation uses the full eligible sample. Empty cells remain missing.

y__d: 100 of 385 units shown (seed 20261008). All eligible units enter estimation. Purple: untreated; yellow: treated; white: unobserved.

Estimates

Estimator Estimate (SD) SE 95% lower 95% upper Target Status
Static TWFE -0.041492 0.017602 -0.0761 -0.0068837 Coefficient estimated
Dynamic TWFE -0.023165 0.017656 -0.057881 0.01155 Treated cells estimated
BJS / did2s -0.041492 0.017556 -0.07601 -0.0069736 Treated cells estimated
Sun–Abraham -0.023165 0.017656 -0.057881 0.01155 Treated cells estimated
CS-DID (equal event-time) -0.023165 0.017593 -0.057646 0.011316 Equal post-event times estimated
CS-DID (treated cells) -0.023165 0.017593 -0.057646 0.011316 Treated cells estimated
SDID -0.030647 nan nan nan Treated cells estimated
Matrix completion -0.039988 nan nan nan Treated cells estimated
Horizontal ridge -0.10085 nan nan nan Treated cells estimated
Multisynth (cohort-averaged) -0.023904 nan nan nan Treated cells estimated
Multisynth (individual) 0.022376 nan nan nan Treated cells estimated

Intervals use the configured clusters and the estimator’s available inference. Hollow points have no computed interval; no new refit-bootstrap batch is run.

Event studies

Cohort homogeneity

The imported TestingInEventStudies deviations design tests positive-event-time cohort deviations jointly. This is the homoskedastic nested-model F-test; the estimator confidence intervals above use clustered inference.

**y__d: homogeneity test not identified.** Only one treated cohort remains on the common supported sample.

Fitting settings and checks

Specification Estimator Settings Pooling
y__d CS-DID {“est_method”: “dr”, “control_group”: “notyettreated”, “xformla”: “y ~ 1”, “base_period”: “universal”, “anticipation”: 0, “panel”: true, “allow_unbalanced_panel”: false, “clustervar”: “cluster”, “clusters”: 385, “bstrap”: false, “cband”: false, “aggregate”: “dynamic”, “event_aggregate”: “dynamic”, “balance_e”: null, “post_event_min”: 0, “post_event_max”: 4} {“parameter”: null, “value”: null, “status”: “not_applicable”, “fit_scope”: “Group-time DIDs; no synthetic-control pooling parameter”}
y__d SDID {} {“parameter”: null, “value”: null, “status”: “not_applicable”, “fit_scope”: “Separate adoption-cohort fits”, “within_cohort_target”: “Mean treated outcome history”, “cross_cohort_partial_pooling”: false, “shared_structure”: null, “note”: “Regularization penalties are not partial-pooling parameters.”}
y__d Matrix completion {“lambda_fraction”: 0.25, “max_iterations”: 1000, “tolerance”: 1e-12} {“parameter”: null, “value”: null, “status”: “not_applicable”, “fit_scope”: “Joint untreated-cell fit”, “within_cohort_target”: null, “cross_cohort_partial_pooling”: false, “shared_structure”: “Low-rank matrix and unit/time effects”, “note”: “Regularization penalties are not partial-pooling parameters.”}
y__d Horizontal ridge {“penalty”: 1.0} {“parameter”: null, “value”: null, “status”: “not_applicable”, “fit_scope”: “Separate adoption-cohort fits”, “within_cohort_target”: “Mean treated outcome history”, “cross_cohort_partial_pooling”: false, “shared_structure”: null, “note”: “Regularization penalties are not partial-pooling parameters.”}
y__d Multisynth (cohort-averaged) {“nu”: 1, “nu_selection”: “Package data-derived default”, “lambda”: 0, “fixedeff”: true, “scm”: true, “time_cohort”: true, “n_leads”: 5, “n_lags”: 4, “eps_abs”: 1e-06, “eps_rel”: 1e-06, “V”: “Identity (package default)”, “matrix_assembly”: “Unmodified package default”} {“parameter”: “nu”, “value”: 1, “status”: “used”, “fit_scope”: “Joint optimization of 1 cohort fits”, “cross_cohort_partial_pooling”: true, “note”: “nu=0 weights separate cohort imbalance only; nu=1 weights pooled imbalance only. One shared nu, not a cohort-specific tuning parameter.”}
y__d Multisynth (individual) {“nu”: 0.427701208572024, “nu_selection”: “Package data-derived default”, “lambda”: 0, “fixedeff”: true, “scm”: true, “time_cohort”: false, “n_leads”: 5, “n_lags”: 4, “eps_abs”: 1e-06, “eps_rel”: 1e-06, “V”: “Identity (package default)”, “matrix_assembly”: “Equivalent sparse matrix construction”} {“parameter”: “nu”, “value”: 0.427701208572024, “status”: “used”, “fit_scope”: “Joint optimization of 304 unit fits”, “cross_cohort_partial_pooling”: true, “note”: “nu=0 weights separate cohort imbalance only; nu=1 weights pooled imbalance only. One shared nu, not a cohort-specific tuning parameter.”}
{
  "did2s_vs_direct_imputation_max_post_difference": 2.7755575615628914e-17,
  "package_aggregate_vs_estimable_cell_weights": 0.0
}