Loading research piece
Fetching primary parquet sources and computing exhibits.
Fetching primary parquet sources and computing exhibits.
Two mega-regional trade agreements, two event studies. The Comprehensive and Progressive Agreement for Trans-Pacific Partnership (CPTPP) entered into force on 30 December 2018 for its first six ratifiers; the Regional Comprehensive Economic Partnership (RCEP) entered into force on 1 January 2022 for ten signatories and was phased in for the remainder through 2023. The question we ask here, in the spirit of Baier & Bergstrand (2007, JIE 71:72-95), is narrow but sharp: after treatment, does bilateral trade betweenbloc members grow faster than trade between otherwise-comparable non-member pairs? We index intra-bloc and non-bloc control trade to a pre-treatment base, estimate a pair-level log difference-in-differences with a percentile bootstrap, and then decompose the RCEP effect by HS2 chapter. Figures 1-3 are descriptive gaps. Figures 3a-3b add offline PPML estimates with exporter-year, importer-year and pair fixed effects, plus event-study paths, following Yotov, Piermartini, Monteiro & Larch (2016, WTO/UNCTAD structural-gravity manual). These are structural-gravity trade-creation estimates, not Anderson & van Wincoop (2003,AER 93:170-192) general-equilibrium trade-cost elasticities or welfare counterfactuals.
Treated set: all directed pairs (i,j) with both endpoints in the 15-country RCEP roster (ASEAN-10 + CHN, JPN, KOR, AUS, NZL). Control set: all pairs with neither endpoint in RCEP or CPTPP, so the control is not contaminated by the partly-overlapping CPTPP treatment. Both series are normalised to 2019 = 100, chosen as the last undisputed pre-treatment year before the COVID shock and the RCEP entry-into-force on 1 January 2022.
SELECT year,
SUM(CASE WHEN iso_o IN (RCEP) AND iso_d IN (RCEP) THEN v END) AS intra,
SUM(CASE WHEN iso_o NOT IN (RCEP ∪ CPTPP) AND iso_d NOT IN (RCEP ∪ CPTPP) THEN v END) AS control
FROM bilateral_year b
JOIN countries c_o ON c_o.code = b.exporter_code
JOIN countries c_d ON c_d.code = b.importer_code
WHERE year BETWEEN 2015 AND 2024
GROUP BY year ORDER BY year;Same construction for CPTPP: treated pairs are both-in-the-11 (per DFAT Australia and MFAT New Zealand depositary records for the 8 March 2018 Santiago signing); control is pairs with neither endpoint in CPTPP or RCEP. CPTPP entered into force for the first six ratifiers on 30 December 2018, so we take 2015 as a mid-pre-treatment normalisation year that keeps the index reading clean of the 2014-15 commodity-price collapse at the base. UK accession (15 December 2024) post-dates the post-period and the UK is not folded into the treated set here.
Pair-level log difference-in-differences. For each bloc B we keep only country-pairs with positive trade in both the base and post years, split them into treated (both endpoints in B) and control (neither endpoint in any bloc), and compute δ̂ = [ln X_post − ln X_pre]_treated − [ln X_post − ln X_pre]_control on the sum of pair-level values by group. Standard errors come from a pair-level percentile bootstrap (B = 1000, seed fixed). Cross-pairs where one endpoint is in the bloc and the other outside are dropped so that in-out spillovers don't dilute the control, a standard choice in bloc-effect event studies since Baier & Bergstrand (2007) and Yotov, Piermartini, Monteiro & Larch (2016).
The offline panel covers the top 150 economies by mean GDP over 2011-2024, all 22,350 directed pairs and every year from 2011 through 2024, including observed zero trade. Exporter-year and importer-year fixed effects absorb every country-by-year shock, including the COVID demand collapse and the 2022 commodity-price spike. Pair fixed effects absorb every time-invariant bilateral characteristic, including distance, language, colonial history and the pre-existing level of the relationship. The bloc coefficients are therefore identified from within-pair variation around common country-year paths. A pair-specific time-varying shock remains a threat to identification.
BACI bilateral totals aren't HS-split, so we can't slice the pair-level DiD by product chapter without a different fact table. As a sector-heterogeneity proxy we use the exporter-by-HS6 panel (HS-2017 revision, 2019-2024) and compute, per HS2 chapter, a difference-in-differences in log exports between RCEP members and non-bloc exporters, pre-period 2019-2021 vs post-period 2022-2024. This is not the same object as Figure 3, it is an exporter-side supply effect, not an intra-bloc pair effect, but it flags which HS2 chapters show the biggest bloc-vs-world export-growth gap after the RCEP entry-into-force.
Same exporter-side DiD proxy as Figure 4, applied to the CPTPP-11 against the non-bloc world, with pre-period 2015-2017 and post-period 2019-2024 on the HS-2017 revision. Petri & Plummer (2020, Asian Economic Papers) projected the CPTPP welfare gains to concentrate in agriculture (dairy, meat) and manufactures where Japan and Canada had been high-tariff blockers. The sector ranking below is a first-cut read on whether that concentration is visible ex-post.
Viner's (1950, The Customs Union Issue) distinction between trade creation and trade diversion is the natural welfare read on any regional bloc: creation adds low-cost intra-bloc flows that replace higher-cost domestic production; diversion shifts existing extra-bloc flows toward higher-cost bloc members whose tariffs just fell. We decompose RCEP's 2019→2024 log-growth into four flow classes, intra-RCEP, RCEP imports from outside, RCEP exports to outside, and the non-bloc control, and report each class's gap versus control. Creation = intra-bloc gap (Figure 3 object); diversion = imports-from-outside gap, which should be negative if outside suppliers are being crowded out by bloc partners. Magee (2008, JIE 75:349-362) uses the same ratio-based decomposition on a wider RTA panel.
Figures 1-6 use BACI merchandise trade. CPTPP and RCEP include services schedules and data-flow provisions, so the natural complementary test is whether bloc-member services exports grew faster than non-bloc services exports in the post-treatment window. We use IMF Balance of Payments annual Services, Credit/Revenue (services exports, USD millions) and compute, per bloc, mean country log-growth from pre to post, subtracted from the non-bloc-control mean. This is a country-level exporter-side DiD, not a pair-level intra-bloc estimate. Copeland & Mattoo (2008, WTO Services Handbook) motivate this read; Baldwin & Forslid (2020, NBER WP 26731) frame services as the 'globotics' complement to goods trade.
Figures 1-2 chart intra-bloc trade levelsindexed to a base year. The home-bias literature (Anderson & van Wincoop 2003, AER 93:170-192; Frankel 1997, Regional Trading Blocs in the World Economic System) also uses the intra-bloc trade share as a primary diagnostic: the fraction of bloc-member total trade with the world that stays inside the bloc. A rising share after entry-into-force is a more direct read on 'regionalisation' than a level index, because it nets out bloc-member trade-volume growth that is common to the bloc and the rest of the world. Baldwin (2011, '21st Century Regionalism', CEPR Policy Insight 56) frames mega-RTAs explicitly as instruments to raise this share against a 20th-century WTO benchmark.
The positive Figure 3 log-DiDs are descriptive, not robust causal findings. Once the three-way FE PPML absorbs every exporter-year and importer-year shock plus fixed pair heterogeneity, the headline estimates are -0.086 for RCEP and -0.005 for CPTPP, with both 95% intervals spanning zero. The structural estimates should anchor the causal interpretation because they absorb the COVID demand collapse, the country-level 2022 commodity shock and every time-invariant pair characteristic. They do not absorb pair-specific time-varying shocks, including bilateral trade diversion during the US-China tariff escalation.
ppml_3way_rta robustness specification now controls for other RTAs across 92,154 directed pair-years using WTO RTA-IS. What remains open is important: the control has not yet been added to ppml_eyiy, either event study or ppml_3way_excl_covid; pair-specific time-varying shocks are not absorbed; and RCEP has only three post years through 2024.SELECT year,
SUM(CASE WHEN iso_o IN (CPTPP) AND iso_d IN (CPTPP) THEN v END) AS intra,
SUM(CASE WHEN iso_o NOT IN (RCEP ∪ CPTPP) AND iso_d NOT IN (RCEP ∪ CPTPP) THEN v END) AS control
FROM bilateral_year b
JOIN countries c_o ON c_o.code = b.exporter_code
JOIN countries c_d ON c_d.code = b.importer_code
WHERE year BETWEEN 2011 AND 2024
GROUP BY year ORDER BY year;| 302,149 |
| 660 |
| -0.005 |
| 0.051 |
| [-0.104, 0.095] |
| 0.055 |
| Top 150 economies by 2011-2024 mean GDP, directed pairs, 2011-2024, zeros included |
| Three-way FE + other-RTA control RCEP | PPML, pair-clustered CRV1 | exporter-year + importer-year + pair | 302,149 | 630 | -0.077 | 0.052 | [-0.179, 0.024] | 0.026 | Top 150 economies by 2011-2024 mean GDP, directed pairs, 2011-2024, zeros included; other RTAs in force controlled from WTO RTA-IS |
| Three-way FE + other-RTA control CPTPP | PPML, pair-clustered CRV1 | exporter-year + importer-year + pair | 302,149 | 660 | 0.010 | 0.052 | [-0.092, 0.112] | 0.055 | Top 150 economies by 2011-2024 mean GDP, directed pairs, 2011-2024, zeros included; other RTAs in force controlled from WTO RTA-IS |
| Country-year FE + levels RCEP | PPML, pair-clustered CRV1 | exporter-year + importer-year | 283,638 | 630 | -0.067 | 0.070 | [-0.203, 0.069] | 0.026 | Top 150 GDP universe where ln_dist is observed; excludes MYS, VNM (no distance in the source table), plus DEU, ETH, PAK, YEM; IDN has partial coverage; directed pairs, 2011-2024, zeros included |
| Country-year FE + levels CPTPP | PPML, pair-clustered CRV1 | exporter-year + importer-year | 283,638 | 660 | -0.027 | 0.058 | [-0.141, 0.088] | 0.055 | Top 150 GDP universe where ln_dist is observed; excludes MYS, VNM (no distance in the source table), plus DEU, ETH, PAK, YEM; IDN has partial coverage; directed pairs, 2011-2024, zeros included |
| Three-way FE, excluding COVID years RCEP | PPML, pair-clustered CRV1 | exporter-year + importer-year + pair | 258,469 | 630 | -0.093 | 0.058 | [-0.207, 0.021] | 0.026 | Top 150 economies by 2011-2024 mean GDP, directed pairs, 2011-2019 and 2022-2024 (2020-2021 excluded), zeros included |
| Three-way FE, excluding COVID years CPTPP | PPML, pair-clustered CRV1 | exporter-year + importer-year + pair | 258,469 | 660 | 0.014 | 0.056 | [-0.096, 0.124] | 0.055 | Top 150 economies by 2011-2024 mean GDP, directed pairs, 2011-2019 and 2022-2024 (2020-2021 excluded), zeros included |
other_rta at 0.069 (95% CI [0.017, 0.120]). RCEP barely moves from -0.086 to -0.077, while CPTPP also barely moves, from -0.005 to 0.010, crossing zero but remaining close to zero. Neither headline interval excludes zero. That disagrees with the positive descriptive log-DiDs of 0.026 and 0.055. The three-way FE estimates are the better causal read because they remove all country-year shocks and all fixed pair heterogeneity; Figure 3 remains a transparent descriptive contrast.other_rta control covers 92,154 directed pair-years. Pair fixed effects absorb any RTA status that is constant over the panel, so this control is identified only by the 2,476 directed pairs that switch during the sample. Within RCEP, only 8 of 210 directed intra-bloc pairs switch (2 in 2014, and 6 in 2015), while 6 pairs, CHN–JPN, JPN–KOR and JPN–NZL in both directions, have no other RTA anywhere in the WTO source. Within CPTPP, only 6 of 110 directed intra-bloc pairs switch (2 in 2012, 2 in 2015, and 2 in 2020). The control therefore mostly cleans the comparison group, not the treated groups.SELECT *
FROM read_parquet('data/parquet/research_rcep_cptpp_ppml_fe.parquet')
WHERE spec IN ('ppml_3way', 'ppml_3way_rta', 'ppml_eyiy', 'ppml_3way_excl_covid')
AND term IN ('rcep', 'cptpp');SELECT bloc, year, estimate, std_error, ci_lo, ci_hi
FROM read_parquet('data/parquet/research_rcep_cptpp_ppml_fe.parquet')
WHERE spec IN ('ppml_event_rcep', 'ppml_event_cptpp')
AND year IS NOT NULL
ORDER BY bloc, year;SELECT year,
SUM(CASE WHEN iso_o IN (BLOC) AND iso_d IN (BLOC) THEN v END) /
NULLIF(SUM(CASE WHEN iso_o IN (BLOC) OR iso_d IN (BLOC) THEN v END), 0) AS share
FROM bilateral_year b
JOIN countries c_o ON c_o.code = b.exporter_code
JOIN countries c_d ON c_d.code = b.importer_code
WHERE iso_o <> iso_d AND total_value > 0
GROUP BY year ORDER BY year;