Commodities & World Events · 1970–2026
The Five Prices Rarely Move Together
Crude oil, gold, gas, copper and wheat, 1970–2026. You’d expect them to move as one — but no pair correlates above 0.3. Each answers to its own world.
This piece lays the monthly price of five commodities — crude oil, gold, natural gas, copper and wheat — side by side from 1970 to 2026, and pins the world events that were supposed to move them onto the same timeline. It sets out to test the familiar idea of a single “commodity supercycle,” the belief that raw materials rise and fall together on one global tide. They do not: month to month no pair of the five correlates above 0.3, and even the strongest link, between gold and copper, is faint. Sold as one market, the five behave like five separate ones — related only when everything is falling at once, and even then gold walks out.
How it was made
The data
Every price is a monthly average from the World Bank Commodity Price Data (the “Pink Sheet”, 2026 release), in nominal US dollars from 1970 to 2026. Because “crude oil” and “wheat” are not single quantities, crude is the average of the Brent, WTI and Dubai benchmarks and wheat is US Hard Red Winter. The event dates and descriptions — the oil shocks, the Gulf wars, 2008, the pandemic — are a separate hand-built list that links out to Wikipedia.
Built with
- D3
- scrollama
- p5.js
The price chart is drawn in SVG with D3 — its own scales, axes and line paths — and world-event markers sit along the timeline, each opening a sourced note on click. The findings are pinned and revealed one at a time with scrollama, and a p5.js layer drifts behind the hero. The whole series is baked into the JavaScript so it runs from a file with no server.
Problems, and how I solved them
-
The problemAll five prices are in nominal dollars and rose over fifty years, so a shared inflation trend could make them look like they move together when they do not.
The fixCorrelation and volatility are computed on monthly returns — the size of each month’s price change — rather than on price levels, so a common upward drift can’t manufacture a fake relationship. That is why no pair clears 0.3.
-
The problemThere is no single “price of oil” or “price of wheat” — each has competing global benchmarks that disagree.
The fixCrude oil is fixed as the average of the Brent, WTI and Dubai benchmarks and wheat is pinned to US Hard Red Winter, with both choices stated openly on the page.
-
The problemThe piece had to run as a plain file with no server, where the browser forbids fetching a data file at runtime.
The fixThe full monthly series and the entire event list are baked straight into the JavaScript as globals, so the chart draws itself from the file with nothing to load.
-
The problemPlacing an event marker next to a price swing quietly implies the event caused the swing, which is rarely true.
The fixEvery marker is labelled as a coincidence in time, not a cause, and the page states plainly that prices respond to many forces at once.