Pre-registration
The EU Carbon Border Adjustment Mechanism (CBAM) entered its definitive phase on 1 January 2026 (after a 2023-2025 transitional reporting-only phase), imposing financial liability on EU importers of cement, iron and steel, aluminium, fertilisers, electricity, and hydrogen embedding non-EU carbon costs. The carbon-leakage hypothesis (high-emission imports flow to non-EU producers because of EU ETS price differential) predicts that prior to CBAM (2018-2023), high-carbon-intensity imports had grown faster than low-carbon-intensity imports of the same products, and that CBAM phase-in (2026 onwards) reverses or attenuates this pattern. This hypothesis tests both legs: (a) the pre-CBAM leakage signature in cross- border carbon-intensity-weighted trade flows, and (b) the early post- CBAM-2026 flow re-routing measurable in 2026-2027 customs data.
Falsification criterion — what would disprove this
This hypothesis is considered falsified if:
Pre-CBAM leakage leg not supported if (a) EU ETS price elasticity of carbon-intensity-weighted imports is zero or wrong-signed at p<0.10, OR (b) CBAM-product imports did not grow faster from high-intensity sources than low-intensity sources 2018-2023. Post-CBAM leg not supported if (c) the post-2026 × carbon-intensity-gap interaction is zero on EU imports, OR (d) trade-deflection (third-country to non-EU) is zero (suggesting volume just stops rather than reroutes — not leakage but demand destruction). Mixed verdict permitted: pre-leakage signature without post-CBAM reversal would suggest CBAM is inadequately calibrated.
formal test & threshold
test: cbam_carbon_leakage_pre_post_did threshold: Pre-CBAM: ETS-price elasticity of high-vs-low-intensity import share > 0.10 at p<0.10 AND Post-CBAM 2026: post × carbon-gap β on EU imports < -0.10 at p<0.10 AND Trade-deflection: third-country to non-EU exports rise ≥ 5% in 2026 relative to 2024-2025 baseline for high-gap exporters.
Method
- Template
did_callaway_santanna- Fixed effects
country_product, year_quarter- Clustering
country_product- Sample
- 17 countries · 2018 – 2027
- Evidence type
- causal
Primary specification: differences-in-differences with treatment = CBAM-covered products × post-2023-10 (transitional) and × post-2026-01 (definitive). Continuous treatment intensity = exporter-EU carbon- intensity gap. Outcome: log EU imports value + carbon-intensity- weighted imports. Control: similar-but-non-CBAM HS lines (e.g. semi-finished metal manufactures outside CBAM scope). Pre-CBAM leakage test (2018-2023): regress carbon-intensity-weighted EU imports on EU ETS price; positive elasticity = leakage signature. Post-CBAM test (2026-2027): event study around 2026-01, with carbon- intensity gap as moderator. Higher-gap exporters should see larger EU-import contraction. Trade-deflection test: parallel regression on third-country exports to non-EU destinations; positive shift = re-routing (carbon relocates rather than reduces). Known limitations: (1) 2026-2027 outcome window is short — full identification of post-definitive-phase response needs 2027-2028 data; v1 reports early reading, v1.1 updates. (2) Carbon-intensity data quality during transitional phase is mixed; many exporters used default values rather than actual emissions data, limiting the gap-treatment-intensity precision. (3) Substitution within HS chapters (low-carbon-intensity producers gain EU market share at expense of high-intensity producers) is a within-product reallocation that matters for climate but is sometimes mislabelled "leakage." (4) CBAM-covered products are 6 chapters (initial scope); the broader anti-leakage claim covers products outside scope (chemicals, plastics, glass) where leakage may continue unmeasured.
Data
| Variable | Source | Transform |
|---|---|---|
log_eu_imports_cbam_products_value outcome | un_comtrade:HS72_HS76_HS25_HS31tier 2 | log |
log_eu_imports_cbam_products_volume_tonnes outcome | un_comtrade:HS72_HS76_HS25_HS31_volumetier 2 | log |
cbam_carbon_intensity_weighted_imports outcome | constructed:country-product CO2/tonne intensity (from CBAM transitional-phase declarations 2023-2025; cross-checked against IEA / OEtier 5 | level |
log_extra_eu_imports_share_of_consumption outcome | constructed:extra-EU imports / (EU production + extra-EU imports - EU exports) for each CBAM product. Eurostat prom_dsx (production)tier 5 | log |
log_third_country_exports_to_non_eu_destinations outcome | un_comtrade:HS72_HS76_HS25_HS31tier 2 | log |
cbam_transitional_dummy treatment | constructed:indicator = 1 from 2023-10 (transitional reporting phase begin) onwards; 0 otherwise.tier 5 | indicator |
cbam_definitive_dummy treatment | constructed:indicator = 1 from 2026-01 (definitive phase, financial liability) onwards; 0 otherwise.tier 5 | indicator |
cbam_carbon_intensity_gap_eu treatment | constructed:(exporter-country CO2/tonne for product) − (EU CO2/tonne benchmark for product). Higher gap = higher CBAM cost burden. Ctier 5 | level |
log_eu_ets_price control | eea:eu_ets_verified_emissionstier 2 | log |
log_real_gdp_eu control | world_bank_wdi:NY.GDP.MKTP.KDtier 2 | log |
log_brent_oil control | imf_pcps:POILBREtier 1 | log |
log_natural_gas_ttf control | constructed:TTF spot, monthly. eex fetcher pending or manual-drop.tier 5 | log |
exporter_country_real_exchange_rate_eur control | constructed:bilateral REER vs EUR for major CBAM exporters (CHN, TUR, IND, KOR, RUS). bis or imf source.tier 5 | log |
● ready · ● pending · ● reconstruct-needed
Detailed result card
Result card — cbam_2026_implementation_carbon_leakage_test
Verdict: INCONCLUSIVE_DATA_PENDING — no outcome variable loaded; missing: ['un_comtrade:HS72_HS76_HS25_HS31', 'un_comtrade:HS72_HS76_HS25_HS31_volume', 'constructed: country-product CO2/tonne intensity (from CBAM transitional-phase declarations 2023-2025; cross-checked against IEA / OECD embedded-carbon-trade tables) × tonnes imported. Manual-drop pending under data/manual/derived/.', 'constructed: extra-EU imports / (EU production + extra-EU imports - EU exports) for each CBAM product. Eurostat prom_dsx (production) + comtrade (trade).', 'un_comtrade:HS72_HS76_HS25_HS31']
Pre-registration
- Claim: The EU Carbon Border Adjustment Mechanism (CBAM) entered its definitive phase on 1 January 2026 (after a 2023-2025 transitional reporting-only phase), imposing financial liability on EU importers of cement, iron and steel, aluminium, fertilisers, electricity, and hydrogen embedding non-EU carbon costs. The carbon-leakage hypothesis (high-emission imports flow to non-EU producers because of EU ETS price differential) predicts that prior to CBAM (2018-2023), high-carbon-intensity imports had grown faster than low-carbon-intensity imports of the same products, and that CBAM phase-in (2026 onwards) reverses or attenuates this pattern. This hypothesis tests both legs: (a) the pre-CBAM leakage signature in cross- border carbon-intensity-weighted trade flows, and (b) the early post- CBAM-2026 flow re-routing measurable in 2026-2027 customs data.
- Falsification rule: Pre-CBAM leakage leg not supported if (a) EU ETS price elasticity of carbon-intensity-weighted imports is zero or wrong-signed at p<0.10, OR (b) CBAM-product imports did not grow faster from high-intensity sources than low-intensity sources 2018-2023. Post-CBAM leg not supported if (c) the post-2026 × carbon-intensity-gap interaction is zero on EU imports, OR (d) trade-deflection (third-country to non-EU) is zero (suggesting volume just stops rather than reroutes — not leakage but demand destruction). Mixed verdict permitted: pre-leakage signature without post-CBAM reversal would suggest CBAM is inadequately calibrated.
- Falsification test: cbam_carbon_leakage_pre_post_did
Estimate
- Error: no outcome variable loaded; missing: ['un_comtrade:HS72_HS76_HS25_HS31', 'un_comtrade:HS72_HS76_HS25_HS31_volume', 'constructed: country-product CO2/tonne intensity (from CBAM transitional-phase declarations 2023-2025; cross-checked against IEA / OECD embedded-carbon-trade tables) × tonnes imported. Manual-drop pending under data/manual/derived/.', 'constructed: extra-EU imports / (EU production + extra-EU imports - EU exports) for each CBAM product. Eurostat prom_dsx (production) + comtrade (trade).', 'un_comtrade:HS72_HS76_HS25_HS31']
Variables resolved
constructed: indicator = 1 from 2023-10 (transitional reporting phase begin) onwards; 0 otherwise.→ cbam_transitional_dummy (treatment, publisher=constructed, n=170)constructed: indicator = 1 from 2026-01 (definitive phase, financial liability) onwards; 0 otherwise.→ cbam_definitive_dummy (treatment, publisher=constructed, n=170)world_bank_wdi:NY.GDP.MKTP.KD→ log_real_gdp_eu (controls, publisher=world_bank_wdi, n=14066)imf_pcps:POILBRE→ log_brent_oil (controls, publisher=imf_pcps, n=629)constructed: bilateral REER vs EUR for major CBAM exporters (CHN, TUR, IND, KOR, RUS). bis or imf source.→ exporter_country_real_exchange_rate_eur (controls, publisher=constructed, n=170)
Variables missing data
un_comtrade:HS72_HS76_HS25_HS31(outcome, name=log_eu_imports_cbam_products_value) — vintage not on diskun_comtrade:HS72_HS76_HS25_HS31_volume(outcome, name=log_eu_imports_cbam_products_volume_tonnes) — vintage not on diskconstructed: country-product CO2/tonne intensity (from CBAM transitional-phase declarations 2023-2025; cross-checked against IEA / OECD embedded-carbon-trade tables) × tonnes imported. Manual-drop pending under data/manual/derived/.(outcome, name=cbam_carbon_intensity_weighted_imports) — vintage not on diskconstructed: extra-EU imports / (EU production + extra-EU imports - EU exports) for each CBAM product. Eurostat prom_dsx (production) + comtrade (trade).(outcome, name=log_extra_eu_imports_share_of_consumption) — vintage not on diskun_comtrade:HS72_HS76_HS25_HS31(outcome, name=log_third_country_exports_to_non_eu_destinations) — vintage not on diskconstructed: (exporter-country CO2/tonne for product) − (EU CO2/tonne benchmark for product). Higher gap = higher CBAM cost burden. Continuous treatment intensity.(treatment, name=cbam_carbon_intensity_gap_eu) — vintage not on diskeea:eu_ets_verified_emissions(controls, name=log_eu_ets_price) — vintage not on diskconstructed: TTF spot, monthly. eex fetcher pending or manual-drop.(controls, name=log_natural_gas_ttf) — vintage not on disk
Generated by scripts/run_panel_fe.py at 2026-05-03T07:07:19+00:00
Strongest opposing argument
Every hypothesis ships with its charitable opposing argument. The framework earns credibility by handling objections at their strongest, not weakest.
Notes
Data readiness: - UN Comtrade: ready (un_comtrade fetcher) - Eurostat prom_dsx production + sts_inpr_m: ready - IEA / OECD embedded-carbon-trade tables: manual-drop pending - CBAM transitional declarations: manual-drop pending under data/manual/derived/ - EU ETS price: eea ready - WDI / IMF PCPS / TTF: as elsewhere Run when CBAM declaration manual-drop is populated and 2026Q1-Q2 customs data ships (typically 90-day lag).