Critical Materials Atlas
Upstream · a pre-registered test that failed

Grinding-ball imports failed as a yearly mining gauge

Mills grind ore with steel balls that wear away as the rock passes through, so a country that mills more ore should use more balls. If customs data could see that, it would be a public, near-real-time measure of mining activity. We wrote the rules of the test down first and then ran it. In the 10 countries where imports cover at least half of what the mills need, imports did not pass as a year-by-year gauge of ore milled: the estimated response was 0.35 against an expected one-for-one, with a 95% interval from −0.10 to 0.79. That interval takes in zero and most of the range the rules would have accepted, so the test could neither confirm the link nor rule it out.

Result FAIL

Year-to-year growth in forged-ball imports (customs code 7326.11, tonnes, imports minus exports) against growth in ore milled, with country and year effects, 2003–2024. Every threshold below was committed before the test ran.

CheckRule set in advanceResult
Imports follow ore milledresponse between 0.4 and 1.5, p < 0.05response 0.35 (95% interval -0.10 to 0.79), p = 0.11fail
Not driven by one countrydropping any one country keeps it between 0.3 and 1.7ranges 0.19 to 0.42fail
Not cementstill in band with cement output added, and stronger than cementresponse 0.34; cement shows no link (t = 0.16)fail
Placebo: screws and boltsno link to ore milledresponse -0.29, p = 0.26pass
Australia: iron oreiron ore, which is not milled, shows no linkfailed on only 7 years: Australia exported more balls than it imported until 2017fail
In levels, a link shows up. Comparing levels rather than yearly changes, with country and year effects, a country imports more balls in the years it mills more ore (response 1.19, p = 0.003). That is an association that shared trends alone can produce, and the rules said in advance that a relationship visible only in levels does not count, because it says nothing about whether imports follow mining from one year to the next, which is what a gauge has to do. The same rules discount a link that appears only when cast balls (customs code 7325.91, which cement mills also use) are pooled in: pooled, the response is 0.397, p = 0.04, still below the 0.4 floor.

What this does not say

Where imports could be the input

Before any regression, a coverage check: could a country’s net ball imports physically supply its mills? Ball demand is ore milled times a consumption rate taken from 12 mine technical reports (copper 0.33–0.88, gold 0.46–1.01, lead-zinc 0.36–0.74 kg of steel per tonne of ore). Countries milling more than 20 Mt of ore in 2024; imports and demand averaged over 2022–24. A country enters the test if net imports cover at least half of mid-range demand.

Countryore milled 2024ball demand net importscoveragegroup
Brazil128 Mt78 kt122 kt158%imports cover half or more
Ecuador35 Mt24 kt31 kt128%imports cover half or more
Mongolia80 Mt46 kt47 kt101%imports cover half or more
Saudi Arabia27 Mt17 kt15 kt90%imports cover half or more
Kazakhstan217 Mt145 kt124 kt85%imports cover half or more
Bolivia30 Mt30 kt22 kt73%imports cover half or more
Ghana114 Mt72 kt48 kt67%imports cover half or more
Burkina Faso46 Mt33 kt21 kt63%imports cover half or more
Philippines34 Mt24 kt14 kt57%imports cover half or more
Côte d’Ivoire39 Mt28 kt16 kt55%imports cover half or more
Serbia64 Mt33 kt17 kt49%imports cover under half
Tanzania49 Mt33 kt16 kt49%imports cover under half
Mali50 Mt39 kt17 kt42%imports cover under half
Guinea55 Mt43 kt14 kt33%imports cover under half
Zimbabwe32 Mt22 kt7.1 kt32%imports cover under half
Mexico248 Mt177 kt50 kt28%imports cover under half
Türkiye54 Mt36 kt8.1 kt22%imports cover under half
Papua New Guinea56 Mt35 kt7.9 kt22%imports cover under half
Chile1,109 Mt655 kt140 kt21%imports cover under half
Peru649 Mt388 kt73 kt18%imports cover under half
Venezuela23 Mt17 kt2.8 kt16%imports cover under half
Australia396 Mt275 kt43 kt15%imports cover under half
Canada254 Mt172 kt25 kt14%imports cover under half
Colombia44 Mt33 kt4.7 kt14%imports cover under half
Bulgaria23 Mt15 kt2.1 kt14%imports cover under half
Argentina31 Mt23 kt3.0 kt13%imports cover under half
DR Congo649 Mt372 kt39 kt10%imports cover under half
India27 Mt16 kt1.0 kt6%imports cover under a tenth
Sudan49 Mt25 kt1.6 kt6%imports cover under a tenth
Zambia163 Mt93 kt4.9 kt5%imports cover under a tenth
Sweden25 Mt17 kt0.5 kt3%imports cover under a tenth
Uzbekistan118 Mt78 kt1.3 kt1%imports cover under a tenth
Poland79 Mt52 kt0.7 kt1%imports cover under a tenth
Indonesia279 Mt165 kt2.1 kt1%imports cover under a tenth
China762 Mt493 kt0.0 kt0%imports cover under a tenth
Spain26 Mt16 kt0.0 kt0%imports cover under a tenth
Iran74 Mt47 kt0.0 kt0%imports cover under a tenth
Russia457 Mt291 kt0.0 kt0%imports cover under a tenth
United States349 Mt240 kt0.0 kt0%imports cover under a tenth
South Africa82 Mt60 kt0.0 kt0%imports cover under a tenth
Two known weak spots. Brazil’s balls also grind iron ore, which is not counted, so Brazil looks better covered than it is. DR Congo’s ore is rich and much of its copper is leached, not milled, so a fixed global grade overstates the rock it mills.

How it was done, and reviewed

The design was drafted with two independent language models acting as advisors, and the rules, bands and controls were committed to the repository before any result existed: the pre-registration, with a dated log of every change made afterwards. Consumption rates come from primary mine reports, each with page and quotation (sources); cement output from seven editions of the USGS Minerals Yearbook.

Reviewed by two engines, one before and one after publication. This atlas’s studies are reviewed adversarially by two independent language models run separately, each given the rules, the code and every number. When this result was first published (15 Sep 2026), only the first was available. It found three errors; none changed the verdict:

  • A failed control (Australia) had been written up as “not counted” after the result was seen. It is now reported as failed, with the reason it was unusable.
  • The coverage check set net imports to zero after averaging three years instead of before, as the rules said. Corrected: Bulgaria moves up a group; the ten test countries are unchanged.
  • Pass/fail was judged on rounded numbers. It now uses exact values; nothing changes.

The second review (17 Sep 2026) found no error in the code or the verdict, but found that this page said more than the test shows. Corrected:

  • The title and opening said imports “don’t track” mining. The test only failed to validate them as a gauge; the opening now gives both ends of the interval.
  • A levels association was headed “in the long run the link is real”. It is an association, and is now described as one; the pooled cast-ball result is now shown.
  • Noise in imports was said to pull the estimate toward zero. It widens the interval instead; only noise in measured ore milled pulls toward zero.
  • Australia was said never to have been in the test. It was the negative control.
  • In the pre-registration’s result section, two countries fell below 0.3 when one was left out, not three, and the pooled estimate, shown as 0.40, is 0.397, below the 0.4 floor.

Sources. Trade: CEPII BACI HS 2002, V202601 (Etalab Open Licence 2.0), with flows priced outside 0.4–3× the year’s median dropped. Mine production: BGS World Mineral Statistics. Cement: USGS Minerals Yearbook, Cement, table 22. Consumption rates: mine technical reports listed in the sources file. Built by build_grinding_balls.py from out/grinding_balls.json, which holds every figure on this page.