Peter Zeihan devoted a chapter in his book, The End of the World is Just the Beginning, to what would happen in a deglobalized world to the supply of strategic minerals and how that would degrade science, progress and the modern lifestyle to varying degrees around the globe.
Here we take a stripped down version of that analysis to see where important minerals come from in the world, and what would happen to the USA’s supply in the event of global war or political crisis.
Out of the 50 minerals identified in 2022 by the U.S. Geological Survey as being of strategic importance, we identified the top three producing countries from the Royal Society of Chemistry for 46 of them. To compare these 27 top-mineral producing countries we have taken the log of their relative share of the key minerals.
Look at the world based on mineral richness and we see concentrations in China and Russia.
Now we try to nuance mineral richness against both political alliances and political stability.
If there were a war between the USA and it’s deemed competitors, Russia and China, then the pool of countries’ markets the USA would have access to would shrink, at least the markets from the alliance of competitors. Possibly if the USA were seen as the unfair aggressor, the USA could lose access to both the competitors and neutral countries’s markets.
Note this is a gross simplification. We’re only considering the top 3 producing countries as opposed all producers. We’re also not considering reserves held and how large those reserves are.
To blend the mineral richness map and the alliances, we’ve made the higher saturation of alliance color correspond to a greater number of strategic minerals produced in that country.
In the event of a hypothetical global crisis where all low politically stable countries were off-line how would the rest of the world fare?
In the event of a catastrophic global crisis where only the high politically stable countries were on-line how would they fare as a new, smaller global economy?
I have a friend who measured the ecological impact of mining activities in Guinea. When the military captured the president in a coup he assumed the project was off but mining operations continued as normal, independent of the coup. The new government maintained their stake and terms in the multinational firm’s activities. It may be that low political stability might not hamper mining production and export.
Again, to blend the mineral richness map and political stability information, we’ve made the higher saturation of political stability color correspond to a greater number of strategic minerals produced in that country.
In the event of major events that would disrupt the current global order, we recognize that all trade, let alone mineral availability, is at risk.
An iPhone assembly requires specialized parts and resources spread across a series of countries and continents. Any disruption to the global economy may be bigger than we calculate because it would take time to retool countries and economies to function again and even then it may not be possible to make an iphone, or fighter jet, by even the USA, without the rest of the world, without incredible burden and drag on the rest of the economy.
Here we look at the count of the types of minerals of each top
mineral-producing country grouped by alliance. Note there may be overlap
in the counts between countries and we include USA and Allies to the USA
as one category, Allies
.
Here we look at the count of the types of minerals of each top mineral-producing country grouped by political stability. Note there may be overlap in the counts between countries.
Here we show what percentage of the strategic minerals the global economy would have access to depending on hypothetical war that would limit the USA’s access to the top mineral producing countries, depending on whether the neutral companies would trade with the USA or not.
Access_to | Minerals_Available |
---|---|
USA Alone | 7% |
USA & Allies | 48% |
USA & Allies & Neutral | 100% |
No War/Crisis | 100% |
Here we show what percentage of the strategic minerals the global economy would have access to depending on hypothetical events that would limit access to the top mineral producing countries.
Note the USA is one of the medium political stability countries.
Access_to | Minerals_Available |
---|---|
USA Alone | 7% |
High Stability Only | 26% |
High and Medium Stability | 100% |
No Restriction | 100% |
Take one of the strategic elements: Terbium, a rare earth element, and you’ll find it’s used in permanent magnets for electrical vehicles, wind turbines. It’s used in nuclear medicine and improving the safety of medical x-rays. It’s magnetic properties are used in loudspeakers and headphones. Lasers, sensors, sound bugs, actuators and solid state data storage.
Conversely we’re not taking into consideration substitutability. For example, if you need a wire you can use gold or copper. (Note neither are on the list of strategic minerals. Copper must be marvelously abundant and what do we need gold for?). We’re not accounting for the varying impact of the loss of a particular mineral.
While we’ve represented some elements of the supply risk of different strategic minerals here, the complexity involved in calculating the economic impact and loss to modern living by the disruption of strategic minerals vastly exceeds the scope of this analysis.
We used the following libraries:
tidyverse
as a cohesive ecosystem of data tools
readr
to read data into R
maps
and mapproj
to make maps
viridis
to access effective color scales
scales
to rescale the mineral score to stay in the more
vibrant range of the fade scale
knitr
to make tables
The list of critical minerals came from: https://www.usgs.gov/news/national-news-release/us-geological-survey-releases-2022-list-critical-minerals
The top three producing countries for each mineral were obtained from: https://www.rsc.org/periodic-table/
The World Bank governance indicators were downloaded from: https://www.worldbank.org/en/publication/worldwide-governance-indicators
Data preparation involved identifying the 50 strategic minerals from the 2022 U.S. Geological Survey and using the Royal Society of Chemistry’s website to look up each corresponding element by atomic number to identify the top three producing countries of the element. Four of them had no countries of production and so were excluded from this analysis.
We had to identify whether the resulting 27 top mineral-producing countries were Allies, Competitors or Neutral towards the USA based on common understanding. Originally we were going to use the UN vote condemning Russian aggression and while it may be a good proxy for current international alliances it had competitor countries in the neutral category (like China) and neutral companies in the allied category (like the Democratic Republic of Congo), so for our purposes we went with the common understanding of geopolitical alliances.
To categorize top mineral-producing countries by political stability we took the World Bank’s ‘Political Stability and Absence of Violence/Terrorism’ World Governance Indicator for each country and looked for jumps in the indicator to put cut-offs between the three categories. To judge whether we put the cut-offs in the right place we also used Fitch’s ratings of sovereign debt to assess if we had made the right cut off.
I could have standardized and explained the mineral richness better.
I could have done more data manipulation in R, possibly by scraping the data from websites directly instead of manually collating the data from the Royal Society of Chemistry.
I have a partially produced Shiny
app which would allow
you to pick a mineral and see where it is mined, or pick a country and
see which minerals are produced there; however it needs more work. A
more advanced implementation would be to select different scenarios and
display which minerals are no longer accessible to the remaining global
economy, or which basket of minerals are required for different
artifacts of modern life like an toaster, fighter jet, or iPhone.
# Load Libraries
library(tidyverse)
library(readr)
library(maps)
library(mapproj)
library(viridis)
library(scales)
library(knitr)
# Load Data
minerals <- read_csv("D608 Story 7 - Minerals.csv")
countries <- read_csv("D608 Story 7 - Countries.csv")
countries <- countries %>%
rename(region = Country)
# Calculate Mineral Score
countries = left_join(countries, count(minerals, `Country1`), by=c("region"="Country1"))
countries = left_join(countries, count(minerals, `Country2`), by=c("region"="Country2"))
countries = left_join(countries, count(minerals, `Country3`), by=c("region"="Country3"))
countries$mineralscoreraw <- sum(countries$n.x*3, countries$n.y*2, countries$n*1, na.rm=TRUE)
countries = rowwise(countries) %>%
mutate(mineralscoreraw = sum(n.x, n.y, n, na.rm=TRUE)) %>%
ungroup()
countries$mineralscore <- log(countries$mineralscoreraw/max(countries$mineralscoreraw)*100)
# Create Map
world <- map_data("world")
world <- world %>%
filter(world$region != 'Antarctica')
# Populate Map with alliance, stability and mineral data
world[,c("AllianceUSA","PolStability","mineralscore")] <- countries[match(world$region, countries$region),c("AllianceUSA","PolStability","mineralscore")]
# Mineral map
ggplot(data=world, aes(group=group, x=long, y=lat)) +
geom_polygon(aes(fill = mineralscore)) +
scale_fill_viridis("Richness low to high", option='plasma') +
coord_fixed(1.25) +
ggtitle("Relative Mineral Richness of the Top-Producing Countries") +
labs(fill=NULL) +
theme_void() +
theme(legend.position="bottom") +
theme(plot.title = element_text(size=16))
# Alliance map
world <- mutate(world, AllianceUSA=replace_na(AllianceUSA, "Mineral Poor")) %>%
mutate(AllianceUSA=factor(AllianceUSA,levels=c("USA","Ally","Neutral","Competitor","Mineral Poor")))
ggplot(data=world, aes(group=group, x=long, y=lat)) +
geom_polygon(aes(fill=AllianceUSA), alpha=rescale(world$mineralscore, to = c(0.4, 1))) +
scale_fill_manual(values = c("sienna1", "seagreen3", "deepskyblue", "darkorchid1", rgb(0.68,0.68,0.68,.75))) +
coord_fixed(1.25) +
ggtitle("Alliances to USA Accounting for Mineral Richness") +
guides(fill = guide_legend(override.aes = list(alpha = .75))) +
labs(subtitle=" Color intensity corresponds to mineral richness") +
labs(fill=NULL) +
theme_void() +
theme(legend.position="bottom") +
theme(plot.title = element_text(size=16))
# Stability map
world <- mutate(world, PolStability=replace_na(PolStability, "Mineral Poor")) %>%
mutate(PolStability=factor(PolStability,levels=c("High","Medium","Low","Mineral Poor")))
ggplot(data=world, aes(group=group, x=long, y=lat)) +
geom_polygon(aes(fill=PolStability), alpha=rescale(world$mineralscore, to = c(0.4, 1))) +
scale_fill_manual(values = c("#619CFF", "#00BA38", "#F8766D", rgb(0.68,0.68,0.68,.75))) +
coord_fixed(1.25) +
ggtitle("Political Stability Accounting for Mineral Richness") +
labs(subtitle=" Color intensity corresponds to mineral richness") +
labs(fill=NULL) +
guides(fill = guide_legend(override.aes = list(alpha = .75))) +
theme_void() +
theme(legend.position="bottom") +
theme(plot.title = element_text(size=16))
# Mineral count grouped by Alliance
aggregate <- read_csv("D608 Story 7 - Aggregate.csv")
aggregate <- filter(aggregate, AllianceUSA %in% c("Ally", "Neutral", "Competitor"))
aggregate <- filter(aggregate, !Country %in% c("Neutral","Competitor"))
aggregate <- mutate(aggregate, AllianceUSA=factor(AllianceUSA,levels=c("Competitor","Neutral","Ally"),labels=c("Competitor","Neutral","Allies")))
aggregate <- arrange(aggregate, AllianceUSA, desc(Country))
aggregate <- mutate(aggregate, Country=factor(Country, levels=aggregate$Country))
# Plot of mineral count grouped by Alliance
ggplot(data=aggregate, mapping=aes(x=factor(Country), y=MineralScoreRaw, color=AllianceUSA, fill=AllianceUSA)) +
geom_bar(stat="identity", alpha=0.5) +
coord_flip() +
scale_fill_manual(values = c("sienna1", "seagreen3", "deepskyblue", "darkorchid1")) +
ggtitle("Types of Minerals Count by Alliance") +
labs(fill=NULL, color=NULL) +
guides(fill = guide_legend(reverse=TRUE)) +
guides(color = guide_legend(reverse=TRUE)) +
theme_minimal() +
theme(plot.title = element_text(size=16),
axis.title.x = element_blank(),
axis.title.y = element_blank())
# Mineral count grouped by Stability
aggregate <- read_csv("D608 Story 7 - Aggregate.csv")
aggregate <- filter(aggregate, AllianceUSA %in% c("Ally", "Neutral", "Competitor"))
aggregate <- filter(aggregate, !Country %in% c("Neutral","Competitor"))
aggregate <- mutate(aggregate, PolStability=factor(PolStability,levels=c("Low","Medium","High")))
aggregate <- arrange(aggregate, PolStability, desc(Country))
aggregate <- mutate(aggregate, Country=factor(Country, levels=aggregate$Country))
# Plot of mineral count grouped by Stability
ggplot(data=aggregate, mapping=aes(x=factor(Country), y=MineralScoreRaw, color=PolStability, fill=PolStability)) +
geom_bar(stat="identity", alpha=0.5) +
coord_flip() +
scale_fill_manual(values = c("#619CFF", "#00BA38", "#F8766D")) +
scale_color_manual(values = c("#619CFF", "#00BA38", "#F8766D")) +
ggtitle("Types of Minerals Count by Political Stability") +
labs(fill=NULL, color=NULL) +
guides(fill = guide_legend(reverse=TRUE)) +
guides(color = guide_legend(reverse=TRUE)) +
theme_minimal() +
theme(plot.title = element_text(size=16),
axis.title.x = element_blank(),
axis.title.y = element_blank())
# War scenarios
table1 = data.frame(
'Access_to' = c('USA Alone','USA & Allies','USA & Allies & Neutral','No War/Crisis'),
'Minerals_Available' = c('7%','48%','100%','100%'))
kable(table1)
# Political stability scenarios
table2 = data.frame(
'Access_to' = c('USA Alone','High Stability Only','High and Medium Stability','No Restriction'),
'Minerals_Available' = c('7%','26%','100%','100%'))
kable(table2)