Introduction

What is the relationship between rare element prices and global demand, and how has this changed over time?

Rare earth elements are a group of 17 metals that are crucial to modern technology. These metals are often referred to as the “seeds of technology” because they allow devices to be smaller, stronger and more efficient. They are used in our day to day lives, from the microchips in our phones, to the color in our TVs and monitors. Though they are one of the most commonly used elements, they are extremely hard to extract and separate from surrounding elements making the extraction processes costly and energy-intensive. Understanding the relationship between the prices of these elements and global demand is important because it reveals how supply constrains and other factors may influence these commodities.

The data set that I am using in this research is titled Rare Earths Historical Statistics (Data Series 140) taken from the USGS National Minerals Information Center (https://www.usgs.gov/centers/national-minerals-information-center/rare-earths-statistics-and-information). The key variables that will be used in this analysis are: year, production, imports, exports, apparent consumption, and unit value. The year references the time period of observation. Production looks at the world production volumes. Imports and exports represent the international trade flows during the certain year. Apparent consumption looks at the global demand for the elements. Unit value looks at the nominal and real price per metric ton of consumption, it is represented in prices.

library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.1     ✔ stringr   1.5.2
## ✔ ggplot2   4.0.0     ✔ tibble    3.3.0
## ✔ lubridate 1.9.4     ✔ tidyr     1.3.1
## ✔ purrr     1.1.0     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(readxl)

setwd("C:/Users/nika/Downloads/R/csv")

rare_earths <- read_excel("RareElement.xlsx")
## New names:
## • `` -> `...2`
## • `` -> `...3`
## • `` -> `...4`
## • `` -> `...5`
## • `` -> `...6`
## • `` -> `...7`
## • `` -> `...8`
colnames(rare_earths) <- c("Year", "Production", "Imports", "Exports","Apparent_Consumption", "Unit_Value_Current", "Unit_Value_1998", "World_Production")

Data Analysis

To address the research question, I will perform an exploratory data analysis (EDA) on the rare earth data set to understand its structure and distribution. Using the EDA, I will be able to visualize the data set in such a way that it will be easy to compare and understand the trend over the years between world demand of rare elements, and their prices. I created three different plots: table of the summary statistics, a line graph of the trend over time, and a scatter plot of the relationship between demand and price. The summary statistics provide aggregated statistics that reveal long term patterns between prices and demand. The function of the line graph is to depict the change over the entire time period, which helps answer the last part of my research question, how has the values changed over time. This line graph shows the temporal trends between the variables which would be hard to depict in a single correlation coefficient. The scatter plot helps look at the relationship between the difference in pricing and demand and allows me to determine the relationship part of my research question.

clean_data <- rare_earths |>
  mutate(
    Year = as.numeric(Year),
    Production = as.numeric(Production),
    Imports = as.numeric(Imports),
    Exports = as.numeric(Exports),
    Apparent_Consumption = as.numeric(Apparent_Consumption),
    Unit_Value_Current = as.numeric(Unit_Value_Current),
    Unit_Value_1998 = as.numeric(Unit_Value_1998),
    World_Production = as.numeric(World_Production)
  ) |>
  filter(!is.na(Year)) |>
  filter(!is.na(Unit_Value_Current)) |>
  filter(!is.na(Apparent_Consumption))
## Warning: There were 8 warnings in `mutate()`.
## The first warning was:
## ℹ In argument: `Year = as.numeric(Year)`.
## Caused by warning:
## ! NAs introduced by coercion
## ℹ Run `dplyr::last_dplyr_warnings()` to see the 7 remaining warnings.
summary_stats <- clean_data |>
  mutate(Decade = (Year %/% 10) * 10) |>
  group_by(Decade) |>
  summarise(
    Mean_Price = mean(Unit_Value_Current, na.rm = TRUE),
    Max_Price = max(Unit_Value_Current, na.rm = TRUE),
    Min_Price = min(Unit_Value_Current, na.rm = TRUE),
    Mean_Consumption = mean(Apparent_Consumption, na.rm = TRUE),
    Mean_Production = mean(Production, na.rm = TRUE)
  )

print(summary_stats)
## # A tibble: 11 × 6
##    Decade Mean_Price Max_Price Min_Price Mean_Consumption Mean_Production
##     <dbl>      <dbl>     <dbl>     <dbl>            <dbl>           <dbl>
##  1   1920       687.      2450       219             20.1           0.499
##  2   1930      5361.     11700         3            153.          NaN    
##  3   1940     10425      14700      7240             80.5          20    
##  4   1950      4870       8630      1670           1778           686.   
##  5   1960       682.      3540        82           4729          5935.   
##  6   1970      2647.      4580       412          13434         14103    
##  7   1980      3040       6780      1870          17490         16070    
##  8   1990      8475      10100      6400          19830         17600    
##  9   2000      7316.     13600      3890           7893           500    
## 10   2010     17482.     51200      6080           7973.         6867.   
## 11   2020      5130       5130      5130           6700         39000
analysis_data <- clean_data |>
  mutate(
    Price_Consumption_Ratio = Unit_Value_Current / Apparent_Consumption,
    Production_Consumption_Ratio = Production / Apparent_Consumption
  )

ggplot(analysis_data, aes(x = Year)) +
   geom_line(aes(y = Unit_Value_Current, color = "Price ($/t)"), linewidth = 1) +
  geom_line(aes(y = Apparent_Consumption, color = "Consumption"), linewidth = 1) +
  labs(
    title = "Rare Earth Element Prices and Consumption Over Time",
    x = "Year",
    y = "Value",
    color = "Variable"
  ) +
  theme_minimal() +
  theme(legend.position = "bottom")

ggplot(analysis_data, aes(x = Apparent_Consumption, y = Unit_Value_Current, color = Year)) +
  geom_point(linewidth = 3, alpha = 0.6) +
  geom_smooth(method = "lm", se = FALSE, color = "black", linetype = "dashed") +
  scale_color_gradient(low = "blue", high = "red") +
  labs(
    title = "Relationship Between Rare Earth Prices and Global Demand",
    x = "Apparent Consumption (Demand in metric tons)",
    y = "Unit Value ($/metric ton)",
    color = "Year"
  ) +
  theme_minimal()
## Warning in geom_point(linewidth = 3, alpha = 0.6): Ignoring unknown parameters:
## `linewidth`
## `geom_smooth()` using formula = 'y ~ x'

Conclusion

Through my analysis of rare earth element prices and global demand, several important trends have emerged. From the line graph, we can see that as prices decrease, the global consumption of the elements is increasing. This is a trend that can be explained by the economic concept of supply and demand: when prices decrease, consumption demand increase. One of the most significant price alterations occurred around 2010, where we can see a significant increase in pricing and a fall in the consumption level. This sudden change can be directly explained by the restrictions that China employed on exports in 2010 which caused the price of these elements to spike. From the scatter plot, we can see that there is a negative correlation between apparent consumption and unit prices. This suggests that higher prices are associated with lower consumption levels. Lastly, from the decade by decade analysis seen in the summary statistics, we see that the mean prices for rare earth elements have generally increased over time with the highest average prices occurring around the 2010-2020 time period. Consumption has also shown a consistent upward trend over the decades. This reflects technological advancement and growing industries that drive overall consumption upward despite price increases.

These findings are directly relevant to my research question as they demonstrate that as the prices of rare elements increase, global demand decreases. This relationship has been consistent over time even though the long term trends show an increase in both consumption and prices. This shows that industries continue to demand these elements despite increases in cost because they are essential for modern technology. These findings have important implications for industries that depend on rare elements such as, electronic manufacturers, automotive industries, the military defense industry, and many other as this indicates future demand growth which would mean significant price pressures on such companies.

While this analysis provides valuable insights to the relationship between price and demand for rare earth elements, there are many factors that can be implemented in future research. First, incorporating other variables such as geopolitical events, technological innovation rates, and more would provide a deeper understanding of the price-demand dynamic. Furthermore, looking into the different specific rare earth elements would allow a more in depth analysis of the price-demand relationship based on unique applications and trade relationships.

References

U.S. Geological Survey. (2024). Rare Earths - Historical Statistics (Data Series 140). National Minerals Information Center. Retrieved from https://www.usgs.gov/centers/national-minerals-information-center/rare-earths-statistics-and-information