Does growth cut inequality, or just move it around? Kuznets predicted an inverted-U
In 1955 Simon Kuznets argued that inequality rises as countries industrialize, then falls as growth diffuses — an inverted-U in income.
With satellite-lights data on 180 countries, does the inverted-U still hold — or is there a third act?
Pooled across 180 countries, the cloud bends twice — an N, not a single hump
Regional Gini vs log GDP per capita, 880 country-period points. Linear (gray) misses the curvature; the quadratic inverted-U (teal) misses the high-income upturn; the cubic N-shape (orange) tracks the cloud.
Where we’re going
The panel: 180 countries × 5 periods, a Gini built from nighttime lights
Why a cubic polynomial — and why pooled OLS can’t be trusted
Two-way fixed effects: comparing each country to itself
Turning points, then the determinants beyond income
The Investigation
Act II
The lab: 180 countries × 5 periods, 880 rows, a lights-based regional Gini
Outcome — a population-weighted regional Gini per country-period, \(0\) (equal regions) to \(1\) (all income in one region), built from satellite nighttime lights
Regressor — log GDP per capita, spanning \(\$190\) to \(\$117{,}000\)
Structure — an unbalanced panel, 168 countries in period 1 growing to 180 by period 5
Periods are 5-year averages from 1990–1994 through 2010–2013; mean Gini \(= 0.064\), SD \(= 0.033\).
To bend twice, the model needs a cubic in log income
\(\beta_2\) lets the curve bend once (an inverted-U if negative); \(\beta_3\) lets it bend a second time (an N if positive). A linear term alone forces monotonicity.
Pooled OLS sees the N-shape, but only barely — every term is near-insignificant
Specification
\(\beta_1\)
\(\beta_2\)
\(\beta_3\)
\(R^2\)
Linear
\(-0.011\)
—
—
\(0.164\)
Quadratic
\(0.015\)
\(-0.002\)
—
\(0.170\)
Cubic
\(0.241\)
\(-0.028\)
\(0.001\)
\(0.176\)
Cubic terms are only marginally significant (\(p \approx 0.07\)–\(0.09\)), and \(R^2\) barely moves across the ladder.
Each country walks its own path — the pooled curve is a mirage
Twenty country trajectories over time (faint) with six highlighted: Liberia, Kenya, Rep. Congo, Algeria, Bahamas, Qatar. Within-country paths look nothing like the pooled cubic.
Fixed effects compare a country to itself: wipe the lens twice
What’s left is the within estimator: how each country’s inequality moves as it develops, net of fixed traits and global shocks.
Two-way FE in PyFixest is a one-line formula
import pyfixest as pf# 'gini ~ <polynomial> | id + year' — the pipe absorbs country + year FEfe_cubic = pf.feols("gini ~ log_GDPpc + log_GDPpc2 + log_GDPpc3 | id + year", data=df3, vcov={"CRV1": "id"}) # country-clustered SEs
With both FE imposed, all three cubic terms turn highly significant
0.293 · −0.032 · 0.001
\(\hat\beta_1,\ \hat\beta_2,\ \hat\beta_3\) — cubic two-way FE, every term \(p < 0.001\); within-\(R^2 = 0.142\)
The honest fit is the within-R², and it climbs from 0.009 to 0.142 from linear to cubic
Two-way FE model
\(\hat\beta_1\)
\(p\)
within-\(R^2\)
Linear
\(-0.003\)
\(0.265\)
\(0.009\)
Cubic
\(0.293\)
\(<0.001\)
\(0.142\)
A researcher who fit only the linear FE model would conclude development has no effect — a false negative born of forcing a straight line through an N.
Fixed effects don’t just sharpen the N — they tighten it
Cubic polynomial coefficients, pooled OLS vs two-way FE, with 95% CIs. FE estimates are larger in magnitude and visibly more precise.
The Resolution
Act III
The fitted curve bends twice — peaking at $2,287, troughing at $77,205
Fitted N-shaped curve from the cubic two-way FE model. Orange regions rise, the blue middle falls; turning points annotated on a dual log/USD axis.
Three development phases, one association — not a causal effect
Below $2,287 — early development concentrates activity; inequality rises
$2,287 to $77,205 — most of the world; lagging regions catch up, inequality falls
Above $77,205 — knowledge-economy agglomeration re-concentrates; inequality rises again
Fixed effects strip time-invariant confounders, but the relationship is descriptive: read it as conditional association, not a policy lever.
Beyond income, ethnic inequality is the strongest driver — by far
0.071
ethnic-Gini coefficient (\(p < 0.001\)) · 3.9× the next-largest positive effect · vs a mean regional Gini of 0.064
Ranked side by side: ethnicity towers, land and schooling pull the other way
Determinant coefficients ranked by magnitude. Orange = raises inequality, blue = lowers it; faded bars are insignificant (\(p \geq 0.10\)). Ethnic Gini dwarfs the rest.
The N survives every control set — its sign pattern never breaks
Linear, quadratic, and cubic coefficients across all six specifications with 95% CIs. The (+, −, +) sign pattern holds throughout; magnitudes attenuate under ethnicity.
Does machine-assembled FE make this causal? No
Objection. You absorbed 180 country effects and 5 period effects — surely that identifies the development effect on inequality?
Response. No. Two-way FE removes only time-invariant country confounders and global shocks. Time-varying confounders — and reverse causality from inequality to growth — remain. The estimand is a within-country association, conditional on the polynomial and the FE; not an ATE.
Force a straight line through an N and you’ll conclude growth does nothing — fit the cubic, fix the effects.