Did tariff exposure bend national emission trajectories? A pre-trends cautionary tale from the US-China trade war
Data files
Jul 28, 2026 version files 231.79 KB
-
README.md
41.48 KB
-
TariffExposure.zip
190.31 KB
Abstract
The 2018 US–China trade war was the sharpest escalation of trade barriers among major economies in decades, yet its consequences for carbon emissions remain little studied. We ask whether tariff exposure altered the national CO2 emission trajectories of affected countries, using propensity score matching across 171 countries over 2015–2019 (162 on common support), with treatment defined on trade-weighted tariff quartiles. A conventional matched comparison appears to show high-exposure countries — predominantly rapidly industrializing economies — growing emissions 4.5 percentage points faster than controls (p = 0.007), a gap stable across alternative algorithm labels and sample exclusions. This apparent robustness is illusory. The properly weighted matched ATT — the intended estimand — is never statistically distinguishable from zero (0.28 pp before a pre-trend control, 0.32 pp after). The significant 4.5 pp figure is instead an unweighted two-sample comparison, the wrong estimator for a matched design, and does not correct itself: it stays 4.4 pp (p < 0.01) even with the pre-trend covariate in the match. A placebo over 2015–2016, before any tariff, finds them already growing 2.4 pp faster than controls (p = 0.009). We find no detectable effect on national trajectories beyond pre-existing dynamics, but the design’s limits are real: the confidence interval is wide (we can exclude effects above roughly 6 pp, not moderate ones), the window is short, and national aggregates miss the cross-border reallocation channel. The transferable lesson is methodological: baseline covariate balance offers no protection against selection on growth dynamics, and placebo and pre-trend diagnostics are part of identification, not optional refinements.
Dryad DOI: https://doi.org/10.5061/dryad.qrfj6q5zf
This deposit accompanies a study of whether the 2018–2019 US–China trade war
changed national CO₂ emission trajectories. Using propensity score matching on
171 countries over 2015–2019 (162 on common support), high- versus
low-tariff-exposure countries, it reports a null causal finding: an apparent
4.5 percentage-point emissions-growth gap is an artifact of an unweighted
two-sample comparison; the properly weighted matched average treatment effect on
the treated (ATT) is ≈ 0 throughout (0.28 pp) and does not move when a pre-trend
covariate is added. High-exposure countries were already on steeper emission paths
before the trade war. The paper is a methods-caution note about matching under
differential pre-trends; the null is the contribution.
⚠️ Read first: this is a download-then-run package (and why)
This deposit (TariffExposure.zip) contains only material the authors created themselves — analysis code, documentation, and computed output (result logs, result CSVs, the table workbook). It does not redistribute the third-party source data, and it does not contain the assembled analysis panel or the figures.
The reason is licensing. The underlying data come from three providers whose terms
do not permit redistribution under Dryad's required CC0 waiver:
- CO₂ emissions — EDGAR (EC Joint Research Centre). The fossil-CO₂ series is
IEA-EDGAR CO₂, licensed CC BY-NC-ND 4.0 (attribution, non-commercial, no
derivatives). Redistributing a transformed version is not permitted. - GDP, GDP per capita, population — World Bank World Development Indicators
(WDI). Licensed CC BY 4.0 — redistribution is allowed only with
attribution preserved, which CC0 (which waives attribution) cannot honour. - Tariffs and trade values — WITS / UN Comtrade / WTO IDB. UN Comtrade data
are "internal use only" and may not be re-disseminated without written permission
of the UN Statistics Division; WTO IDB requires prior WTO Secretariat approval.
Because we cannot truthfully waive rights we do not hold, we do not deposit any
file that embeds these values. Instead, Section 3 below tells you exactly how to
download each source and rebuild the analysis panel, after which the code in this
deposit reproduces every number in the paper. This is standard practice in
empirical economics when source licences forbid redistribution.
The code in this deposit is additionally published on Zenodo under CC BY 4.0
(https://zenodo.org/records/21550912).
1. File catalogue — every file and file group
All paths are relative to the deposit root. Software needed is noted per group.
Documentation (root)
| File | Format | What it is |
|---|---|---|
README.md |
Markdown / plain text | This file: study summary, data dictionary, source-download instructions, licensing. |
run_all.sh |
Bash script | Single-entry wrapper that chains the three runtimes (Stata → R → Python) once the analysis panel has been rebuilt (Section 3). |
countrylist.csv |
CSV | The 171-country analysis roster: internal country_id, country name, and ISO 3166-1 alpha-3 code. Public identifiers only — not redistributed source data. Pins the exact sample (Section 3) and decodes the cid column of output/loo_results.csv. |
do-files/ — Stata analysis code (Stata 15 or newer)
| File | What it does |
|---|---|
00_master.do |
Master orchestrator. Sets paths, installs the user commands, and runs steps 1–6, writing one log per step to output/. |
PROPENSITY SCORE MATCHING ANALYSIS.do |
Step 1. Data build + baseline propensity-score matching → Tables 1–2, the headline unweighted 4.5 pp, the weighted ATT 0.28 pp, balance and common support. |
TIER 1 ROBUSTNESS CHECKS FOR PROPENSITY SCORE MATCHING.do |
Step 2. Alternative matching algorithms; year-specific effects; China/India exclusions → Tables 3–5. |
TIER 2 ROBUSTNESS CHECKS FOR PROPENSITY SCORE MATCHING_SUCCESSFUL TESTS.do |
Step 3. Doubly-robust / IPW; placebo (2015–2016); pre-trend-augmented matching → Tables 6–8, plus three do-file-only numbers. |
CORRECTED PARALLEL TRENDS TEST_FAILED TESTS.do |
Step 4. Event-study difference-in-differences that fails parallel trends (this is what motivates matching) → F(6,170)=3.87; writes output/eventstudy_bV.xlsx. |
Generate_All_Tables.do |
Step 5. Omnibus that re-derives Tables 1–9 in one pass, each block ending in an /* EXTRACT … */ comment giving the exact values copied into tables/Tables.xlsx. |
perm_loo.do |
Step 6. Permutation inference (2000 draws, seed 20260714, re-matching each draw) and leave-one-out over the 44 treated countries → the CSVs in output/. |
On apparent duplication among the do-files. The analysis
do-files are deliberately self-contained: each one re-establishes the matched
sample before its own estimation, so any file can be run on its own. As a result
the samepsmatch2 …/ttest …blocks recur acrossPROPENSITY…,TIER 1,
TIER 2, andGenerate_All_Tables.do— this is intentional reproducibility, not
redundant copies.Generate_All_Tables.dois the single omnibus that regenerates
every table. Two provenance-only scripts that earlier package versions carried
(a superseded all-in-one omnibus and an abandoned percentile-cutoff design) have
been removed; nothing reported depends on them.
scripts/ — R and Python code
| File | Runtime | What it does |
|---|---|---|
honestdid_Q4_sensitivity.R |
R 4.3.3 | Rambachan–Roth HonestDiD (relative-magnitudes) sensitivity on the set-aside Q4 DiD. Reads output/eventstudy_bV.xlsx, writes output/honestdid_rm.csv. |
make_figures.py |
Python 3 | Renders main-text Figures 1–3 (PDF/EPS/TIFF) from the rebuilt panel and the matched sample. |
make_appendix_figures.py |
Python 3 | Renders Appendix Figures B.1–B.2 (permutation distributions) from the perm/LOO CSVs. |
summarize_perm_loo.py |
Python 3 | Summarises perm_results.csv / loo_results.csv into the permutation p-values and leave-one-out ranges. |
output/ — computed results (author-created; regenerated by a run)
| File | Format | What it is |
|---|---|---|
00_master_summary.log … 05_generate_all_tables.log (7 logs) |
Plain text | Stata run logs, one per step. They contain aggregate statistical results and command echoes only — no raw source microdata. |
actuals.csv |
CSV | The two actual weighted and unweighted point estimates, loo_w and loo_u, and the support count (reference points for the permutation). |
perm_results.csv |
CSV | 2000 permutation draws: weighted and unweighted estimate per draw. |
loo_results.csv |
CSV | 44 leave-one-out runs, one per treated country. |
honestdid_rm.csv |
CSV | HonestDiD robust confidence intervals at M̄ ∈ {0, 0.5, 1, 1.5, 2} plus the original CI. |
eventstudy_bV.xlsx |
Excel | Event-study coefficient vector and its variance–covariance matrix (input to the HonestDiD step). |
tables/
| File | Format | What it is |
|---|---|---|
Tables.xlsx |
Excel | The nine reported tables (sheets Table 1–Table 9), holding the values extracted by Generate_All_Tables.do. |
File-naming conventions. Stata logs are NN_step.log in pipeline order. Result
CSVs are lower-case. The table workbook groups one table per sheet.
2. What is NOT in this deposit (and where to get it)
The following were removed for the licensing reasons in the notice above:
- The source workbook and the assembled analysis panel and all derived
Stata datasets (they embed EDGAR CO₂, WDI, and UN Comtrade values). Rebuild the
panel per Section 3; the do-files then recreate every derived dataset. - The figures (Figures 1–3 and Appendix B.1–B.2). They appear in the published
article and its supplement, which the journal distributes under its own licence;
make_figures.py/make_appendix_figures.pyregenerate them from the rebuilt
panel.
3. Obtaining the source data and rebuilding the analysis panel
Download the following, assemble a country-year panel for 171 countries, 2015–2019,
and save it as data-files/DataSetup_14112025 -MATCHING.dta (the file every
do-file starts from). The panel's analysis variables and their construction are
defined in Section 4; the do-files build all further derived variables from it.
Which countries. The sample is every country with complete CO₂, GDP, GDP-per-capita, population, and tariff-exposure data over 2015–2019 — 171 countries, of
which 162 fall on common support. The exact roster (country name, ISO-3 code, and
the internal country_id) is provided in countrylist.csv so you can reproduce the
precise sample and decode output/loo_results.csv; these are public identifiers, not
redistributed source data.
3a. CO₂ emissions (the outcome) — EDGAR
- Provider: EDGAR (Emissions Database for Global Atmospheric Research), European
Commission Joint Research Centre — 2022 release. - Series: national annual total fossil CO₂ emissions (metric tons), all
countries, 2015–2019. - Access: https://edgar.jrc.ec.europa.eu/ (report/2022). Download the
country-level CO₂ time series and take calendar years 2015–2019. - Licence: the fossil-CO₂ series is IEA-EDGAR CO₂, CC BY-NC-ND 4.0. Cite the
EDGAR release (Crippa et al.) as the provider directs.
3b. GDP, GDP per capita, population (matching covariates) — World Bank WDI
- Provider: World Bank, World Development Indicators.
- Indicators / access (https://data.worldbank.org, or the WDI API):
- GDP (current US$) —
NY.GDP.MKTP.CD - GDP per capita (current US$) —
NY.GDP.PCAP.CD - Population, total —
SP.POP.TOTL
- GDP (current US$) —
- Coverage: all countries, 2015–2019 (2016 values are the pre-matching
baseline). - Licence: CC BY 4.0 (attribution required). Check the metadata of any
third-party-sourced indicator before reuse.
3c. US tariffs and trade values (treatment assignment) — WITS / UN Comtrade
The treatment is built across fourteen pollution-intensive HS-2 chapters:
72 iron & steel, 73 articles of iron/steel, 28 inorganic chemicals,
29 organic chemicals, 38 miscellaneous chemical products, 12 oil seeds,
15 fats & oils, 27 mineral fuels, 87 vehicles, 89 ships, 61 knitted
apparel, 62 non-knitted apparel, 63 other textile articles, 86 railway
equipment.
- US tariff rates by partner country and HS-2 chapter, 2018–2021 —
WITS (World Integrated Trade Solution), drawing on UNCTAD TRAINS / WTO IDB.
https://wits.worldbank.org/ (reporter = United States). Use the
effectively-applied (AHS) rate — the preference-inclusive rate each country
actually faces — not the MFN rate: the AHS rate reflects preferential-agreement
duties (e.g. near-zero for USMCA partners) and captures the 2018–2019 Section 301
trade-war duties, both of which the MFN schedule omits. The 2018–2019 lines define
treatment. - US import values (the weights) by partner country and HS-2 chapter —
UN Comtrade. https://comtradeplus.un.org/ (reporter = USA, flow = Import,
annual, the fourteen HS-2 chapters above). - Licences: WITS carries the providers' terms; UN Comtrade is internal-use
only and may not be redistributed without written UN Statistics Division
permission; WTO IDB requires prior WTO Secretariat approval and 6-digit HS
aggregation limits. Obtain these yourself under those terms — this is why they are
not deposited here.
3d. Construct the treatment
For each country-year, the trade-weighted average US tariff rate is
Σ(tariff rate × US import value) ÷ Σ(US import value) across the fourteen HS-2
chapters (variable avg_tariff_rate, in %). Average it over 2018–2019 per
country (avg_tariff_rate_mean), split into quartiles (quartile_group), and set
high_exposure = 1 for the top quartile (> p75, ≈ 6.02%), else 0. 44 countries
are treated; 42 of them fall on common support.
Do not use a median cut. An early version of the source workbook described
treatment as a binary split at the median tariff (≈ 2.04%). That description is
superseded — the analysis uses the top-quartile rule above. Use the
quartile definition.
4. Variable dictionary
Missing values throughout the Stata datasets are Stata system-missing (.).
Units are stated for every numeric variable; interpretation keys are given for every
categorical variable.
4a. Analysis panel (DataSetup_14112025 -MATCHING.dta, 171 countries × 2015–2019)
The panel a replicator rebuilds in Section 3. Variables actually used by the
reported analysis are marked [used]; the do-files construct any further derived
variables from these.
Identifiers and time
| Variable | Definition | Units / key |
|---|---|---|
country_id [used] |
Numeric country identifier (group(country)). |
integer 1…171 |
country [used] |
Country name. | string |
iso3 |
ISO 3166-1 alpha-3 country code. | 3-letter string |
ISOCode |
Numeric ISO country code. | integer |
year [used] |
Calendar year. | 2015–2019 |
PrePost |
Label for pre- vs post-trade-war year. | string ("Pre" / "Post") |
Source-derived level variables (rebuilt from Section 3 sources)
| Variable | Definition | Units | Source |
|---|---|---|---|
co2_emissions [used] |
Total national CO₂ emissions. | metric tons | EDGAR |
co2_emissions_t |
CO₂ emissions, transport/maritime sector. | metric tons | EDGAR |
gdp [used] |
Gross domestic product. | current US$ | WDI (NY.GDP.MKTP.CD) |
gdp_per_capita [used] |
GDP per capita. | current US$ | WDI (NY.GDP.PCAP.CD) |
population [used] |
Total population. | persons | WDI (SP.POP.TOTL) |
energy_consumption |
Energy use per capita. | kWh | WDI |
TV |
Trade value (imports + exports). | US$ million | UN Comtrade / WITS |
avg_tariff_rate [used] |
Trade-weighted average US tariff rate across the 14 HS-2 chapters (Section 3d). | % | WITS + UN Comtrade |
Emission_IntensitytonsperUSD |
CO₂ emissions per unit trade value. | tons CO₂ per US$ million | EDGAR + trade |
carbon_intensity |
Carbon intensity of trade sectors (CO₂ per unit sectoral output). | Mt CO₂eq per US$ | EDGAR + Comtrade |
Agriculture_Carbon_Intensity_Mt_, Buildings_Carbon_Intensity_Mt_CO, Fuel_Exploitation_Carbon_Intensi, Industrial_Combustion_Carbon_Int |
Sector-group carbon intensity (agriculture / buildings / fuel exploitation / industrial combustion). | Mt CO₂eq per US$ | EDGAR + Comtrade |
Air_Quality_IndexPM25emissi |
Air pollution (PM2.5). | Gg PM2.5 | EDGAR |
Renewable_Energy_Share |
Renewables share of the energy mix. | % | WDI / IEA |
SDG13_Compliancecompositescor |
SDG 13 (climate action) composite progress score, classified into ordinal categories. | composite 0–1, and category. KEY: higher value = weaker SDG13 progress; categories "High / Moderate / Low Progress" by quantile thresholds. | Our World in Data |
Sectoral_Exposure |
Exports from the pollution-intensive HS-2 chapters ÷ total exports. | share (0–1) | UN Comtrade |
Environmental_Regulation_Index |
Environmental-policy / regulation proxy (EPI-type). | index | Yale EPI / WB governance |
avg_seadistance, W_avg_distance, tdistance, total_distance |
Trade shipping-distance measures (average, weighted-average, summed). | km (or km·US$ for tdistance) |
derived |
Log transforms (natural logs of the labelled base variable; _alt = log(x+1))
ln_co2 [used], ln_co2_t, ln_gdp [used], ln_gdp_pc [used],
ln_pop [used], ln_energy, ln_carbon_intensity, ln_renew_energy,
ln_sea_dis, ln_total_distance, ln_W_avg_distance, ln_co2_alt, ln_trade_alt,
and ln_trade = natural log of trade value TV (log of US$ million; the source
label's empty unit "()" is US$ million).
Constructed treatment / exposure variables (built by the do-files)
| Variable | Definition | Units / key |
|---|---|---|
avg_tariff_rate_mean [used] |
Country mean of avg_tariff_rate over 2018–2019. |
% |
quartile_group [used] |
Quartile of avg_tariff_rate_mean. |
1 = lowest exposure … 4 = highest |
quartile_1–quartile_4 |
Indicator for membership in exposure quartile k. | 0/1 |
high_exposure [used] |
Treatment: 1 if in the top exposure quartile (Section 3d), else 0. | 0/1 |
has_treatment |
1 if the country has a defined tariff-treatment assignment. | 0/1 |
tariff_exposure |
Continuous average tariff-exposure rate (alias of the mean rate). | % |
post, Post_Trade_War |
Post-treatment indicator (year ≥ 2018). | 0/1 |
high_exposure_post |
high_exposure × post (DiD interaction). |
0/1 |
avg_t_pctl_group, q2_post, q3_post, q4_post, tariff_post, TariffExposurePost |
Quartile- and tariff-based DiD interaction terms. | 0/1 or interaction (TariffExposurePost is entirely empty — an unfilled interaction placeholder) |
Trade_War_Exposure_ |
Binary trade-war exposure flag (workbook original). | 0/1 |
BRICS and interaction variables
| Variable | Definition | Units / key |
|---|---|---|
brics [used in Table 9] |
1 if the country is a BRICS member (Brazil, Russia, India, China, South Africa). | 0/1 |
brics_post, high_exp_post_brics, high_exp_post_nonbrics, q{2,3,4}_post_brics, q{2,3,4}_post_nonbrics, tariff_post_brics, tariff_post_nonbrics, quartile_{2,3,4}_brics, high_exposure_brics, tariff_brics |
Interactions of exposure/quartile/post with the BRICS flag, used in BRICS-split specifications. | 0/1 or interaction |
Pre-trend, event-study and DiD-period constructed variables
| Variable | Definition | Units / key |
|---|---|---|
pre_period, intervention_period, post_period |
Period indicators for the difference-in-differences specification (pre-trade-war / onset / post; 2018 = onset). Used only in the falsification DiD, not the reported PSM estimates. | 0/1 |
rel_year |
Event time relative to 2017 (year − 2017). |
−2 … +2 |
year_dm |
Year centred (year minus its panel mean). | years |
q{2,3,4}_trend |
Exposure-quartile × linear time trend (Year − 2017). |
interaction |
q{2,3,4}_event_m2 / _m1 / _1 / _2 [used, event study] |
Event-study dummies: exposure quartile (2/3/4) × relative-year indicator, where m2 = 2 years before onset, m1 = 1 year before, 1 = 1 year after, 2 = 2 years after; base year 2017. |
0/1 |
year_1–year_5 |
Calendar-year dummies (2015, 2016, 2017, 2018, 2019). | 0/1 |
n_years_co2, max_years_co2 |
Count / maximum of non-missing CO₂ years per country (panel-completeness checks). | integer |
pct_change |
Percentage change in CO₂ emissions across the window (non-log outcome variant). | % |
_est_event_study_final, _est_event_study_with_controls, _est_event_study_trends_controls, _est_event_study_with_trends |
Stata esample() flags marking the estimation sample of each stored event-study model. |
0/1 |
time_id |
Numeric year identifier (group(year)). |
integer |
Outcome variable. The reported outcome is
ln_co2_change= ln CO₂(2019) −
ln CO₂(2016) — the 2016→2019 change in log CO₂ emissions. It is constructed by
the do-files fromln_co2; it is not a stored column of the rebuilt panel.
Trade-agreement participation (0/1 indicators):
RCEP_Participation, Belt_and_Road_Participation, CPTPP_Participation,
Trade_Agreement_Participation, and Avg_Shipping_Distance_km (trade-weighted
average shipping distance, km; largely missing).
The 171 per-country tariff columns.
Trade_War_Exposure_Average_<Country>_Tariff_Imposed_per_Country(%) — one column
per country giving that country's average US tariff rate (%). These are intermediate
inputs to avg_tariff_rate; only avg_tariff_rate is used downstream. Nine of
these columns carry a cryptic two-letter variable name instead of the country name
(the country is in the column label**)** — decode key:
| Column name | Country |
|---|---|
AP |
Austria |
BV |
Congo, Rep. |
CD |
Czechoslovakia (historical; entirely empty) |
CH |
Dominican Republic |
DG |
Guinea-Bissau |
ER |
Mauritius |
FI |
Nigeria |
HL |
United Kingdom |
HM |
United States |
Entirely-missing columns (all 855 rows missing — present for completeness, carry
no data): TariffExposurePost, and the per-country tariff columns for Barbados,
Czechoslovakia (CD), Djibouti, Equatorial Guinea, Eritrea, Fm Sudan, Libya,
Mayotte, Syrian Arab Republic, and Turkmenistan.
Propensity-score write-back columns (added to the matched sample by psmatch2
in step 1; consumed by make_figures.py):
| Variable | Definition | Units / key |
|---|---|---|
_pscore |
Estimated propensity score (probability of high exposure). | 0–1 |
_treated |
Treatment indicator as seen by psmatch2. |
0/1 |
_support |
On common support (1) or off (0). 162 of 164 scored countries are on support. | 0/1 |
_weight |
Matching weight (number of times a unit is used as a match). | ≥ 0 |
4b. output/actuals.csv
| Column | Definition | Units |
|---|---|---|
att_w_actual |
Actual weighted matched ATT (the reference point for the permutation). | proportion (0.00283 = 0.28 pp) |
att_u_actual |
Actual unweighted two-sample difference. | proportion (0.04544 = 4.54 pp) |
n_support |
Number of countries on common support. | integer (162) |
4c. output/perm_results.csv (2000 rows, one per permutation draw)
| Column | Definition | Units |
|---|---|---|
perm_w |
Weighted ATT for the draw (treatment labels randomly reassigned, sample re-matched). | proportion |
perm_u |
Unweighted two-sample difference for the draw. | proportion |
ok |
1 if the draw's match converged, else 0. | 0/1 |
4d. output/loo_results.csv (44 rows, one per treated country)
| Column | Definition | Units |
|---|---|---|
cid |
country_id of the treated country left out (decode to a country name via countrylist.csv). |
integer |
loo_w |
Weighted ATT with that country omitted. | proportion |
loo_u |
Unweighted difference with that country omitted. | proportion |
nsup |
Countries on common support in that leave-one-out run. | integer |
4e. output/honestdid_rm.csv (6 rows)
| Column | Definition | Units |
|---|---|---|
Mbar |
Relative-magnitudes sensitivity parameter M̄ (NA for the original CI). |
dimensionless |
lb_pp |
Robust confidence-interval lower bound. | percentage points |
ub_pp |
Robust confidence-interval upper bound. | percentage points |
method |
"Original" or "DeltaRM" (relative-magnitudes bound). |
label |
4f. output/eventstudy_bV.xlsx
One sheet holding the event-study coefficient vector for the event-time ×
exposure-quartile terms (q{2,3,4}_event_{m2,m1,1,2}) and their
variance–covariance matrix. Coefficients are on log CO₂ (so ≈ proportional
emission effects). This file is the intermediate hand-off that the HonestDiD step
(scripts/honestdid_Q4_sensitivity.R) reads.
4g. tables/Tables.xlsx (sheets Table 1–Table 9)
| Sheet | Content |
|---|---|
| Table 1 | Propensity-score matching balance diagnostics. |
| Table 2 | Main treatment effect (unmatched, weighted ATT, two-sample t-test, regression-adjusted). |
| Table 3 | Robustness to alternative matching algorithms. |
| Table 4 | Year-specific effects (2018 vs 2019). |
| Table 5 | Excluding China / India. |
| Table 6 | Estimation methods (OLS / doubly-robust / IPW). |
| Table 7 | Placebo (2015–2016). |
| Table 8 | Controlling for pre-trends. |
| Table 9 | BRICS × exposure-quartile cross-tabulation. |
5. Abbreviations
- ATT average treatment effect on the treated
- PSM propensity score matching
- DiD difference-in-differences
- IPW inverse-probability weighting
- RM relative magnitudes (HonestDiD bound)
- LOO leave-one-out
- HonestDiD Rambachan–Roth robust-inference method for DiD/event studies
- EDGAR Emissions Database for Global Atmospheric Research
- WDI World Development Indicators (World Bank)
- WITS World Integrated Trade Solution (World Bank)
- TRAINS Trade Analysis Information System (UNCTAD)
- IDB Integrated Data Base (WTO)
- HS-2 Harmonized System 2-digit chapter
- BRICS Brazil, Russia, India, China, South Africa
- SDG13 Sustainable Development Goal 13 (climate action)
- pp percentage points
- ATET/ATT average treatment effect on the treated
6. Known issues (documentation only; no reported number is affected)
tables/Tables.xlsx, sheet "Table 9": the side annotation maps South Africa
tocountry_id 173; the correct id is172(173is South Korea). The BRICS
quartile counts on the sheet are correct — only that annotation is wrong.TIER 2 … .doretains an older code comment describing a "4.5 → 0.3 collapse"
reading that the analysis later superseded (the estimator-artifact framing in the
paper is the corrected reading). The comment does not affect any computed value.
7. Reproduction (after Section 3)
Rebuild data-files/DataSetup_14112025 -MATCHING.dta, place it under data-files/,
then from the deposit root:
./run_all.sh
which runs Stata (steps 1–6) → R (step 7, HonestDiD) → Python (step 8, figures and
summary), in that order (the R output feeds the Python appendix figures). Required
Stata user commands (psmatch2, reghdfe, outreg2, estout) auto-install on
first run; R needs HonestDiD 0.2.8 with CVXR 1.0-11; Python needs pandas,
numpy, statsmodels, matplotlib. run_all.sh names the exact commands and
environment.
8. Licensing
- This deposit — all files it contains (Stata/R/Python code, this
documentation, and the computed result logs, result CSVs, and table workbook) are
original works of the authors, released under CC0 1.0 Universal (public-domain
dedication), as Dryad requires. No third-party source data are redistributed here. - The code is additionally published on Zenodo under CC BY 4.0 (https://zenodo.org/records/21550912).
- Source data must be obtained from the original providers under their own
terms, which do not permit CC0 redistribution:- EDGAR (EC/JRC) — https://edgar.jrc.ec.europa.eu/ — fossil-CO₂ series CC BY-NC-ND 4.0.
- World Bank WDI — https://data.worldbank.org/ — CC BY 4.0.
- WITS / UN Comtrade / WTO IDB — https://wits.worldbank.org/ ,
https://comtradeplus.un.org/ — provider terms; UN Comtrade is internal-use-only
(no redistribution without UN Statistics Division permission).
9. Citation
We request that users cite the associated article and this Dryad dataset
(https://doi.org/10.5061/dryad.qrfj6q5zf). Author list, affiliations, and ORCID
appear on the article; during peer review this deposit was anonymized.
