Loading replication
Fetching primary parquet sources and recomputing the published exhibits.
Fetching primary parquet sources and recomputing the published exhibits.
Hausmann, Hwang & Rodrik (2007) propose that a country’s export basket carries information about its future growth trajectory beyond what current income alone reveals. Their key construct is EXPY, a weighted average of the income levels of the countries that produce each good in the country’s export basket. Countries whose exports are concentrated in “rich-country goods” grow faster over the next decade. Recomputing EXPY on BACI 1996 and regressing 1996-2016 income growth on log(EXPY1996) plus log(GDPpc1996) gives a coefficient of +0.0186on log(EXPY), comparable in magnitude to the paper’s headline estimate of ~0.05.
Hausmann, Hwang & Rodrik (2007, equation 1) define the income-content of product i as PRODYi = Σc [(xci / Xc) / Σc′(xc′i / Xc′)] × Yc, where the weight on country c is its revealed comparative advantage share in product i, and Ycis GDP per capita. A country’s export sophistication is then EXPYc = Σi (xci / Xc) × PRODYi. HHR run two sets of growth regressions. Their Table 8 is a cross-national regression of 1992-2003 GDPpc growth on log initial EXPY and log initial income, with no country fixed effects: the OLS coefficient on log EXPY ranges 0.056 to 0.060 (IV larger, up to 0.082). Their Table 9 is a panel over 1962-2000 with country and year fixed effects; the within-country fixed-effects coefficient on log EXPY is smaller, about 0.014 to 0.019, while the pooled-OLS panel coefficient is ~0.029. Both survive controls for current income and human capital. Headline claim: a country that exports what rich countries export grows faster, conditional on current income; the compositionof output, not just its level, carries development information. Later critique (notably Lederman & Maloney 2012) questions the causal interpretation, but the cross-sectional fact that richer countries export “richer” products is robust.
We compute EXPY on 1996 BACI HS6 exports using equation (1) exactly. Let sci = xci / Xc be country c’s share of product i in its own basket. PRODYi = Σc sci · Yc / Σc sci is the country-weighted average of GDPpc, with RCA-style weights normalised to sum to one across countries for each product. EXPYc = Σi sci · PRODYi. GDP per capita comes from WDI indicator NY.GDP.PCAP.CD (current US$) for 1996 and 2016. The regression is cross-sectional over the 20-year window, not panel:growthc, 1996→2016 = α + β · ln(EXPYc,1996) + γ · ln(GDPpcc,1996) + εSample: 185 countries with valid EXPY, 1996 GDPpc, and 2016 GDPpc. Point estimates: βEXPY = +0.0186, γlnGDPpc = -0.0144, R² = 0.29. Univariate (without log GDPpc) β is -0.0094, which picks up the EXPY ≈ GDPpc mechanical correlation and flips sign: the HHR result is fundamentally conditional on current income.
HHR’s thesis implies that countries which grew fastest since 2000 should also have upgraded their export basket: EXPY should rise alongside income. We take the top 30 growth accelerators in WDI current-US$ GDPpc 2000-2024, hold PRODY fixed at its 2000 value (so the series measures compositional shift in who-exports-what, not time-varying weights), and compute EXPY each year for each accelerator. The cohort median EXPY rose from $5,851 in 2000 to $7,050 in 2024, a +21% compositional upgrade.
HHR’s cross-section predicts convergence: poor countries with high-EXPY baskets should grow into their baskets, and over time the gap between rich-country EXPY and poor-country EXPY should narrow in relative terms, but not necessarily in levels, because the rich-country frontier itself drifts up. We group countries by 1996 GDPpc into quartiles, fix PRODY at 1996 values (so the series measures pure compositional change, not PRODY drift), and plot median EXPY for the top and bottom quartiles each year 1996-2024. Parallel trends indicate persistent structural gap; converging trends would indicate HHR-style basket upgrading from the bottom. In 1996 the top/bottom-quartile EXPY ratio was 3.99×; by 2024 it was 2.27×, a narrowing of 43% in the compositional gap.
The HHR story is that EXPY carries information beyond income. A direct way to visualise that residual information is to regress ln(EXPY1996) on ln(GDPpc1996) and look at the residual: countries above the line export a more sophisticated basket than their income alone would predict; countries below export a less sophisticated one. The fitted relation is ln(EXPY) = 5.94 + 0.35 · ln(GDPpc), and the residual distribution has standard deviation 0.38 log points. The top-10 punchers (above-weight) and bottom-10 (below-weight) are shown below.
EXPY is a country-level aggregate of PRODY weights. To see what the EXPY scatter is actually picking up, average PRODY across the 5,017 HS6 codes traded in 1996 within each of the 21 HS Sections. The HS Section that ranks first in mean PRODY is the “richest” slice of the product space, the one whose products are mostly exported by rich countries with high RCA. Hausmann, Hwang & Rodrik’s claim that “what you export matters” reduces, at this level, to: countries that have managed to specialise in the top-PRODY sections (machinery, optical/medical, transport equipment, chemicals) carry a higher EXPY than countries specialised in the bottom-PRODY sections (vegetables, raw hides, mineral ores).
source: Hausmann, Hwang, and Rodrik (2007), Journal of Economic Growth, Table 8, p. 17.
| quantity | published value | replicated value | absolute difference |
|---|---|---|---|
| β on log(EXPY), low published estimate | +0.0560 | +0.0186 | +0.0374 |
| β on log(EXPY), high published estimate | +0.0600 | +0.0186 | +0.0414 |
| γ on log(initial GDPpc), low published estimate | -0.0190 | -0.0144 | +0.0046 |
| γ on log(initial GDPpc), high published estimate | -0.0150 | -0.0144 | +0.0006 |
| R² midpoint | 0.3750 | 0.2869 | 0.0881 |
HHR’s panel (Table 9, 1962-2000) reports a smaller pooled-OLS coefficient on log EXPY of ~0.029 and a fixed-effects coefficient of ~0.014 to 0.019; our cross-sectional +0.0186 is closest to their panel OLS estimate.
Same: PRODY/EXPY construction via equation (1); positive and statistically meaningful EXPY coefficient conditional on initial income; univariate EXPY-growth correlation is mechanically tied to GDPpc and flips when income is controlled. Differs: we run a 1996-2016 cross-section comparable to HHR’s Table 8 (1992-2003 cross-section), not their Table 9 panel with country fixed effects (1962-2000); we use current-US$ WDI, not PWT constant-dollar GDP; BACI covers 200+ economies versus HHR’s 43-97-country samples.
Our β on log(EXPY) of +0.0186is roughly half the size of HHR’s directly comparable cross-section (Table 8 OLS, 0.056-0.060), though it is nearly identical to their pooled-OLS panel estimate (Table 9, ~0.029). Four reasons for the gap against the cross-section. First, sample period: HHR’s Table 8 baseline is 1992-2003; we use 1996-2016, which covers the China-shock years, the 2008-09 recession, and the commodity cycle, all of which weaken the EXPY→growth link that was sharpest in the 1990s catch-up era. Second, GDP series: HHR use PPP-adjusted Penn World Table GDP; we use current-US$ WDI. PPP-adjusted levels strip out the terms-of-trade and exchange-rate effects that load on EXPY’s commodity-rich economies; current-dollar WDI does not, so our EXPY-growth relationship is partly absorbed by the price channel. Third, country sample: HHR’s Table 8 cross-section runs on 43-46 countries with reliable GDP data; BACI covers everything, including tiny economies (Marshall Islands, Palau) whose EXPY is noisy and whose 20-year growth is outlier-heavy. Fourth, specification: HHR’s within-country fixed-effects estimates (Table 9, ~0.014 to 0.019) are smaller still than their cross-section, so the spread of HHR’s own estimates (0.014 to 0.082 across estimators) brackets our value.
The qualitative HHR claim, “what you export matters”, survives in this 1996 baseline: the EXPY coefficient is positive, statistically distinct from the univariate correlation, and comparable in order of magnitude to the paper’s estimates. A full panel-FE replication on PPP-adjusted constant-dollar GDP would sharpen the comparison.
@article{hausmann_hwang_rodrik_2007,
author = {Hausmann, Ricardo and Hwang, Jason and Rodrik, Dani},
title = {What You Export Matters},
journal = {Journal of Economic Growth},
volume = {12},
number = {1},
pages = {1--25},
year = {2007},
doi = {10.1007/s10887-006-9009-4}
}PRODY and EXPY computations feed the complexity page at /complexity. Compare to the spectral ECI variant at Hidalgo-Hausmann (2009). Return to the replication gallery.
WITH xcp AS (
SELECT c.iso3, cyp.product_code, cyp.export_value
FROM country_year_product cyp JOIN countries c ON c.code = cyp.country_code
WHERE cyp.year = 1996 AND cyp.export_value > 0
),
ctot AS (SELECT iso3, SUM(export_value) AS total_exp FROM xcp GROUP BY iso3),
rca AS (SELECT x.iso3, x.product_code, x.export_value/ct.total_exp AS cs
FROM xcp x JOIN ctot ct USING(iso3)),
gpc95 AS (SELECT iso3, value AS gdppc FROM wdi_data
WHERE indicator='NY.GDP.PCAP.CD' AND year=1996 AND value>0),
prody AS (SELECT r.product_code, SUM(r.cs*g.gdppc)/ NULLIF(SUM(r.cs), 0) AS prody
FROM rca r JOIN gpc95 g USING(iso3) GROUP BY r.product_code),
expy AS (SELECT r.iso3, SUM(r.cs*p.prody) AS expy
FROM rca r JOIN prody p USING(product_code) GROUP BY r.iso3)
SELECT expy.iso3, expy, gpc95.gdppc AS gdppc95,
(LN(gpc15.gdppc) - LN(gpc95.gdppc))/20 AS ann_growth
FROM expy
JOIN gpc95 USING(iso3)
JOIN gpc15 USING(iso3);
-- then OLS of ann_growth on LN(expy), LN(gdppc95) in-app.WITH growth AS (
SELECT iso3,
(LN(MAX(CASE WHEN year=2024 THEN value END))
- LN(MAX(CASE WHEN year=2000 THEN value END))) / 24 AS g
FROM wdi_data
WHERE indicator='NY.GDP.PCAP.CD' AND year IN (2000, 2024) AND value > 0
GROUP BY iso3 HAVING g IS NOT NULL
ORDER BY g DESC LIMIT 30
),
shares00 AS (SELECT iso3, product_code, export_value/ SUM(export_value) OVER (PARTITION BY iso3) AS cs
FROM country_year_product JOIN countries USING(country_code)
WHERE year=2000 AND export_value > 0),
prody AS (SELECT product_code, SUM(cs * gdppc) / NULLIF(SUM(cs), 0) AS prody
FROM shares00 JOIN (SELECT iso3, value AS gdppc FROM wdi_data
WHERE indicator='NY.GDP.PCAP.CD' AND year=2000) USING(iso3)
GROUP BY product_code)
SELECT iso3, year, SUM(cs * prody) AS expy FROM shares_all
JOIN prody USING(product_code) JOIN growth USING(iso3)
GROUP BY iso3, year ORDER BY iso3, year;WITH gpc95 AS (SELECT iso3, value AS gdppc FROM wdi_data
WHERE indicator='NY.GDP.PCAP.CD' AND year=1996 AND value>0),
q95 AS (SELECT iso3, NTILE(4) OVER (ORDER BY gdppc) AS grp FROM gpc95),
shares AS (SELECT iso3, year, product_code,
export_value/ SUM(export_value) OVER (PARTITION BY iso3, year) AS cs
FROM country_year_product JOIN countries USING(country_code)
WHERE year BETWEEN 1996 AND 2024 AND export_value > 0),
prody AS (SELECT product_code, SUM(cs*gdppc)/ NULLIF(SUM(cs), 0) AS prody
FROM shares JOIN gpc95 USING(iso3)
WHERE shares.year=1996 GROUP BY product_code),
expy AS (SELECT iso3, year, SUM(cs*prody) AS expy
FROM shares JOIN prody USING(product_code)
GROUP BY iso3, year)
SELECT year,
MEDIAN(CASE WHEN grp=4 THEN expy END) AS high_expy,
MEDIAN(CASE WHEN grp=1 THEN expy END) AS low_expy
FROM expy JOIN q95 USING(iso3) GROUP BY year ORDER BY year;-- After fitting ln(EXPY) = a + b·ln(GDPpc_1996) on the 185-country 1996 cross-section:
SELECT iso3,
LN(expy) - (:intercept + :slope * LN(gdppc95)) AS resid
FROM (/* EXPY and gdppc95 CTE from Figure 1 */)
ORDER BY resid DESC;
-- Top 10 (positive residual) and bottom 10 (negative residual) plotted.WITH xcp AS (
SELECT c.iso3, cyp.product_code, cyp.export_value
FROM country_year_product cyp JOIN countries c ON c.code = cyp.country_code
WHERE cyp.year = 1996 AND cyp.export_value > 0
),
ctot AS (SELECT iso3, SUM(export_value) AS total_exp FROM xcp GROUP BY iso3),
rca AS (SELECT x.iso3, x.product_code, x.export_value/ct.total_exp AS cs
FROM xcp x JOIN ctot ct USING(iso3)),
gpc95 AS (SELECT iso3, value AS gdppc FROM wdi_data
WHERE indicator='NY.GDP.PCAP.CD' AND year=1996 AND value>0),
prody AS (SELECT r.product_code, SUM(r.cs*g.gdppc)/ NULLIF(SUM(r.cs), 0) AS prody
FROM rca r JOIN gpc95 g USING(iso3) GROUP BY r.product_code)
SELECT p.section, AVG(pr.prody) AS mean_prody, COUNT(*) AS n_products
FROM prody pr JOIN products p ON p.code = pr.product_code
GROUP BY p.section ORDER BY mean_prody DESC;