Trump and Biden: Their First Three Years

Author

Udayan Roy

This is a brief comparison of the U.S. economy during the first three years of the Trump and Biden terms. Trump’s fourth year was dominated by a once-in-a-century pandemic, and Biden’s fourth year is ongoing.

library(tidyverse)
library(fredr)

# Downloading and preparing the data

my_q_data_series_id <- c("BOGZ1FL192090005Q", "GDPC1", "A939RX0Q048SBEA", "UNRATE", "CPIAUCSL", "PAYEMS", "LES1252881600Q", "A794RX0Q048SBEA")

params <- list(
  series_id = my_q_data_series_id,
  frequency = c("q","q", "q", "q", "q", "q", "q", "q")
)

my_q_data <- purrr::pmap_dfr(
  .l = params,
  .f = ~ fredr(series_id = .x, frequency = .y)
) |>
  select(1:3) 
  
start_date_obama_I <- as.Date("2009-01-01")
start_date_obama_II <- as.Date("2013-01-01")
start_date_trump <- as.Date("2017-01-01")
start_date_biden <- as.Date("2021-01-01")

my_q_data_2 <- my_q_data |>
  pivot_wider(names_from = series_id, values_from = value)  |>
  mutate(Net_Worth_Adjusted = 100*BOGZ1FL192090005Q/CPIAUCSL) |>
  filter(date >= start_date_obama_I) |>
  mutate(quarter_of_term = case_when(
    (date >= start_date_obama_I) & (date < start_date_obama_II) ~ 1 + floor((date - start_date_obama_I)/90),
    (date >= start_date_obama_II) & (date < start_date_trump) ~ 1 + floor((date - start_date_obama_II)/90),
    (date >= start_date_trump) & (date < start_date_biden) ~ 1 + floor((date - start_date_trump)/90),
    date >= start_date_biden ~ 1 + floor((date - start_date_biden)/90)
  )) |>
  mutate(POTUS = case_when(
    (date >= start_date_obama_I) & (date < start_date_obama_II) ~ "Obama I",
    (date >= start_date_obama_II) & (date < start_date_trump) ~ "Obama II",
    (date >= start_date_trump) & (date < start_date_biden) ~ "Trump",
    date >= start_date_biden ~ "Biden"
  )) |>
  mutate(Real_Net_Worth = 100 + case_when(
    (date >= start_date_obama_I) & (date < start_date_obama_II) ~ 100*(Net_Worth_Adjusted - Net_Worth_Adjusted[date == start_date_obama_I])/Net_Worth_Adjusted[date == start_date_obama_I],
    (date >= start_date_obama_II) & (date < start_date_trump) ~ 100*(Net_Worth_Adjusted - Net_Worth_Adjusted[date == start_date_obama_II])/Net_Worth_Adjusted[date == start_date_obama_II],
    (date >= start_date_trump) & (date < start_date_biden) ~ 100*(Net_Worth_Adjusted - Net_Worth_Adjusted[date == start_date_trump])/Net_Worth_Adjusted[date == start_date_trump],
    date >= start_date_biden ~ 100*(Net_Worth_Adjusted - Net_Worth_Adjusted[date == start_date_biden])/Net_Worth_Adjusted[date == start_date_biden]
  )) |>
  mutate(GDP = 100 + case_when(
    (date >= start_date_obama_I) & (date < start_date_obama_II) ~ 100*(GDPC1 - GDPC1[date == start_date_obama_I])/GDPC1[date == start_date_obama_I],
    (date >= start_date_obama_II) & (date < start_date_trump) ~ 100*(GDPC1 - GDPC1[date == start_date_obama_II])/GDPC1[date == start_date_obama_II],
    (date >= start_date_trump) & (date < start_date_biden) ~ 100*(GDPC1 - GDPC1[date == start_date_trump])/GDPC1[date == start_date_trump],
    date >= start_date_biden ~ 100*(GDPC1 - GDPC1[date == start_date_biden])/GDPC1[date == start_date_biden]
  )) |>
  mutate(GDPPC = 100 + case_when(
    (date >= start_date_obama_I) & (date < start_date_obama_II) ~ 100*(A939RX0Q048SBEA - A939RX0Q048SBEA[date == start_date_obama_I])/A939RX0Q048SBEA[date == start_date_obama_I],
    (date >= start_date_obama_II) & (date < start_date_trump) ~ 100*(A939RX0Q048SBEA - A939RX0Q048SBEA[date == start_date_obama_II])/A939RX0Q048SBEA[date == start_date_obama_II],
    (date >= start_date_trump) & (date < start_date_biden) ~ 100*(A939RX0Q048SBEA - A939RX0Q048SBEA[date == start_date_trump])/A939RX0Q048SBEA[date == start_date_trump],
    date >= start_date_biden ~ 100*(A939RX0Q048SBEA - A939RX0Q048SBEA[date == start_date_biden])/A939RX0Q048SBEA[date == start_date_biden]
  ))  |>
  mutate(CONSPC = 100 + case_when(
    (date >= start_date_obama_I) & (date < start_date_obama_II) ~ 100*(A794RX0Q048SBEA - A794RX0Q048SBEA[date == start_date_obama_I])/A794RX0Q048SBEA[date == start_date_obama_I],
    (date >= start_date_obama_II) & (date < start_date_trump) ~ 100*(A794RX0Q048SBEA - A794RX0Q048SBEA[date == start_date_obama_II])/A794RX0Q048SBEA[date == start_date_obama_II],
    (date >= start_date_trump) & (date < start_date_biden) ~ 100*(A794RX0Q048SBEA - A794RX0Q048SBEA[date == start_date_trump])/A794RX0Q048SBEA[date == start_date_trump],
    date >= start_date_biden ~ 100*(A794RX0Q048SBEA - A794RX0Q048SBEA[date == start_date_biden])/A794RX0Q048SBEA[date == start_date_biden]
  )) |>
  mutate(CPI = 100 + case_when(
    (date >= start_date_obama_I) & (date < start_date_obama_II) ~ 100*(CPIAUCSL - CPIAUCSL[date == start_date_obama_I])/CPIAUCSL[date == start_date_obama_I],
    (date >= start_date_obama_II) & (date < start_date_trump) ~ 100*(CPIAUCSL - CPIAUCSL[date == start_date_obama_II])/CPIAUCSL[date == start_date_obama_II],
    (date >= start_date_trump) & (date < start_date_biden) ~ 100*(CPIAUCSL - CPIAUCSL[date == start_date_trump])/CPIAUCSL[date == start_date_trump],
    date >= start_date_biden ~ 100*(CPIAUCSL - CPIAUCSL[date == start_date_biden])/CPIAUCSL[date == start_date_biden]
  )) |>
  mutate(Jobs = 100 + case_when(
    (date >= start_date_obama_I) & (date < start_date_obama_II) ~ 100*(PAYEMS - PAYEMS[date == start_date_obama_I])/PAYEMS[date == start_date_obama_I],
    (date >= start_date_obama_II) & (date < start_date_trump) ~ 100*(PAYEMS - PAYEMS[date == start_date_obama_II])/PAYEMS[date == start_date_obama_II],
    (date >= start_date_trump) & (date < start_date_biden) ~ 100*(PAYEMS - PAYEMS[date == start_date_trump])/PAYEMS[date == start_date_trump],
    date >= start_date_biden ~ 100*(PAYEMS - PAYEMS[date == start_date_biden])/PAYEMS[date == start_date_biden]
  )) |>
  mutate(Weekly_Wage = 100 + case_when(
    (date >= start_date_obama_I) & (date < start_date_obama_II) ~ 100*(LES1252881600Q - LES1252881600Q[date == start_date_obama_I])/LES1252881600Q[date == start_date_obama_I],
    (date >= start_date_obama_II) & (date < start_date_trump) ~ 100*(LES1252881600Q - LES1252881600Q[date == start_date_obama_II])/LES1252881600Q[date == start_date_obama_II],
    (date >= start_date_trump) & (date < start_date_biden) ~ 100*(LES1252881600Q - LES1252881600Q[date == start_date_trump])/LES1252881600Q[date == start_date_trump],
    date >= start_date_biden ~ 100*(LES1252881600Q - LES1252881600Q[date == start_date_biden])/LES1252881600Q[date == start_date_biden]
  )) |>
  filter(date >= start_date_trump & quarter_of_term <= 12)

Here I am looking at:

Total Net Worth, Inflation-Adjusted

Data: Net Worth and Consumer Price Index. To adjust net worth for inflation, I divided net worth by the CPI and multiplied the result by 100. This yields net worth in constant 1983 dollars, 1983 being the base year of the CPI data.

ggplot(data = my_q_data_2, mapping = aes(x = quarter_of_term, y = Real_Net_Worth, colour = POTUS)) +
  geom_line() +
  labs(
    title = "Comparison of the first three years of the Trump and Biden terms",
    subtitle = "Total Net Worth, Inflation-Adjusted",
    x = "Quarter of Term", y = "Percent",
    color = "President", caption = "Source: https://fred.stlouisfed.org/series/BOGZ1FL192090005Q"
  ) +
  theme_minimal() +
  scale_x_continuous(breaks = 1:12)

The chart shows real net worth in the first 12 quarters of each presidential term as a percentage of its value in the first quarter of the term. In other words, it shows the percentage change during the term.

Comment: This is a huge win for Trump. Trump’s massive corporate tax cut meant much bigger payoffs for shareholders. As the price of a share depends those payoffs, share prices rose sharply. And, remember, I am leaving out Trump’s pandemic year. The depressing effect of the pandemic on asset prices probably hurt asset prices during Biden’s term.

This turns out to be a recurring theme. My decision to focus on the first three years of each term gives a big advantage to Trump and hamstrings Biden. The first three years of Trump were (obviously) unaffected by the pandemic, whereas the U.S. economy struggled to recover from the pandemic during the first three years of Biden.

Gross Domestic Product, Inflation-Adjusted

Data: GDP.

ggplot(data = my_q_data_2, mapping = aes(x = quarter_of_term, y = GDP, colour = POTUS)) +
  geom_line() +
  labs(
    title = "Comparison of the first three years of the Trump and Biden terms",
    subtitle = "Gross Domestic Product, Inflation-Adjusted",
    x = "Quarter of Term", y = "Percent",
    color = "President", caption = "FRED: https://fred.stlouisfed.org/series/GDPC1"
  ) +
  theme_minimal() +
  scale_x_continuous(breaks = 1:12)

Note that the chart shows real GDP in the first 12 quarters of each presidential term as a percentage of its value in the first quarter of the term. In other words, it shows the percentage change during the term.

Comment: This is a win for Biden. The percentage increase in GDP, which is the best measure of the sheer economic vigor of a country, from the start of a term was higher for Biden for every time interval.

Gross Domestic Product, Inflation-Adjusted, Per Capita

Data: GDP Per Capita.

ggplot(data = my_q_data_2, mapping = aes(x = quarter_of_term, y = GDPPC, colour = POTUS)) +
  geom_line() +
  labs(
    title = "Comparison of the first three years of the Trump and Biden terms",
    subtitle = "Gross Domestic Product, Inflation-Adjusted, Per Capita",
    x = "Quarter of Term", y = "Percent",
    color = "President", caption = "FRED: https://fred.stlouisfed.org/series/GDPC1"
  ) +
  theme_minimal() +
  scale_x_continuous(breaks = 1:12)

The chart shows real GDP per capita in the first 12 quarters of each presidential term as a percentage of its value in the first quarter of the term. In other words, it shows the percentage change during the term.

Comment: As in the case of GDP, this is again a win for Biden, who led Trump all the way.

Personal Consumption Expenditures, Inflation-Adjusted, Per Capita

Data: Real Personal Consumption Expenditures Per Capita.

ggplot(data = my_q_data_2, mapping = aes(x = quarter_of_term, y = CONSPC, colour = POTUS)) +
  geom_line() +
  labs(
    title = "Comparison of the first three years of the Trump and Biden terms",
    subtitle = "Personal Consumption Expenditures, Inflation-Adjusted, Per Capita",
    x = "Quarter of Term", y = "Percent",
    color = "President", caption = "FRED: https://fred.stlouisfed.org/series/A794RX0Q048SBEA"
  ) +
  theme_minimal() +
  scale_x_continuous(breaks = 1:12)

The chart shows real personal consumption expenditures per capita in the first 12 quarters of each presidential term as a percentage of its value in the first quarter of the term. In other words, it shows the percentage change during the term.

Comment: This too is again a win for Biden, who led Trump all the way. Critics who criticize Biden for high inflation need to explain why – even after correcting for inflation – people were buying so much stuff.

Unemployment

Data: Unemployment.

ggplot(data = my_q_data_2, mapping = aes(x = quarter_of_term, y = UNRATE, colour = POTUS)) +
  geom_line() +
  labs(
    title = "Comparison of the first three years of the Trump and Biden terms",
    subtitle = "Unemployment Rate",
    x = "Quarter of Term", y = "Percent",
    color = "President", caption = "FRED: https://fred.stlouisfed.org/series/UNRATE"
  ) +
  theme_minimal() +
  scale_x_continuous(breaks = 1:12)

Comment: I call this a tie. As in the case of inflation-adjusted net worth, Trump gets the benefit of a pre-pandemic era and Biden gets punished by the lingering high unemployment of the pandemic period. The unemployment rate “goes up like a rocket and comes down like a feather.”

Prices

Data: Consumer Price Index.

ggplot(data = my_q_data_2, mapping = aes(x = quarter_of_term, y = CPI, colour = POTUS)) +
  geom_line() +
  labs(
    title = "Comparison of the first three years of the Trump and Biden terms",
    subtitle = "Consumer Price Index",
    x = "Quarter of Term", y = "Percent",
    color = "President", caption = "FRED: https://fred.stlouisfed.org/series/CPIAUCSL"
  ) +
  theme_minimal() +
  scale_x_continuous(breaks = 1:12)

The chart shows the overall price level in the first 12 quarters of each presidential term as a percentage of its value in the first quarter of the term. In other words, it shows the percentage change during the term.

Comment: Big defeat for Biden. But blaming Biden for the higher inflation during his term is idiotic.

Virtually every advanced country went through similar inflation at the same time, indicating the effect of a global phenomenon. The simultaneous reopening of the world’s economies after the pandemic overwhelmed the global supply chains. The war in Ukraine disrupted global grain and oil markets.

Large expenditures by governments may have contributed a bit to the inflation, but it would have been moral malpractice for governments to not help people suffering from a once-a-century pandemic. Moreover, in most countries, the inflation faded without any increase in unemployment (the so-called “soft landing”). If the inflation went away without a big decrease in aggregate demand being required, it may be that the inflation was not caused by an increase in aggregate demand in the first place.

Finally, inflation in the U.S. is traditionally the responsibility of the Federal Reserve, the central bank. Their experts – whose main job is that of keeping an eye on inflation – did not see the inflation coming. Consequently, they did not attack inflation in a timely manner.

All in all, Biden gets blamed for the inflation, but by a moronic media and an idiotic public who have no understanding of the issues and have no understanding of the availability of inflation-adjusted data on things like unemployment and GDP.

Jobs Added

Data: Total Nonfarm Payroll.

ggplot(data = my_q_data_2, mapping = aes(x = quarter_of_term, y = Jobs, colour = POTUS)) +
  geom_line() +
    labs(
    title = "Comparison of the first three years of the Trump and Biden terms",
    subtitle = "Total Nonfarm Payroll, as a percentage of the value of a term's initial value",
    x = "Quarter of Term", y = "Percent",
    color = "President", caption = "FRED: https://fred.stlouisfed.org/series/PAYEMS"
  ) +
  theme_minimal() +
  scale_x_continuous(breaks = 1:12)

The chart shows total non-farm employment in the first 12 quarters of each presidential term as a percentage of its value in the first quarter of the term. In other words, it shows the percentage change during the term.

Comment: This is a huge win for Biden. A record number of new jobs were added and the numbers exceeded pre-pandemic projections. As a result, the labor market remained consistently tight.

Wages, Inflation-Adjusted

Data: Median usual weekly real earnings.

ggplot(data = my_q_data_2, mapping = aes(x = quarter_of_term, y = Weekly_Wage, colour = POTUS)) +
  geom_line() +
  labs(
    title = "Comparison of the first three years of the Trump and Biden terms",
    subtitle = "Median usual weekly real earnings of those employed full-time",
    x = "Quarter of Term", y = "Percent",
    color = "President", caption = "Source: https://fred.stlouisfed.org/series/LES1252881600Q"
  ) +
  theme_minimal() +
  scale_x_continuous(breaks = 1:12)

The chart shows inflation-adjusted wages in the first 12 quarters of each presidential term as a percentage of its value in the first quarter of the term. In other words, it shows the percentage change during the term.

Comment: This is a big win for Trump. Inflation-adjusted wages rose faster during the pre-pandemic phase of Trump’s term. However, wages kept growing during Biden’s term, although at a slower pace.

Poverty

Data: Historical Poverty Tables: People and Families - 1959 to 2023 Table 2 and Table 3. Extracted data in CSV file.

Overall Poverty

poverty <- read_csv("poverty_rates.csv") |>
  filter(Year >= 2017)|>
  mutate(year_of_term = case_when(
    Year < 2021 ~ 1 + Year - 2017,
    Year >= 2021 ~ 1 + Year - 2021
  )) |>
  mutate(POTUS = case_when(
    Year < 2021 ~ "Trump",
    Year >= 2021 ~ "Biden"
  )) |>
  filter(year_of_term < 4)

ggplot(data = poverty, mapping = aes(x = year_of_term, y = Poverty, color = POTUS)) +
  geom_line() +
  labs(
    title = "Comparison of the first three years of the Trump and Biden terms",
    subtitle = "Percent in Poverty",
    x = "Year of Term", y = "Percent",
    color = "President", caption = "Source: https://www.census.gov/data/tables/time-series/demo/income-poverty/historical-poverty-people.html"
  ) +
  theme_minimal() +
  scale_x_continuous(breaks = 1:3)

Comment: This is a win for Biden, though Trump did better in his third year, before the pandemic.

Child Poverty

ggplot(data = poverty, mapping = aes(x = year_of_term, y = Child_Poverty, color = POTUS)) +
  geom_line() +
  labs(
    title = "Comparison of the first three years of the Trump and Biden terms",
    subtitle = "Percent in Poverty, Children",
    x = "Year of Term", y = "Percent",
    color = "President", caption = "Source: https://www.census.gov/data/tables/time-series/demo/income-poverty/historical-poverty-people.html"
  ) +
  theme_minimal() +
  scale_x_continuous(breaks = 1:3)

Comment: This is a win for Biden, though Trump did better in his third year, before the pandemic.

Although I have used the Official Poverty Rate, I prefer the Supplemental Poverty Rate. I will update to that variable if I can find the data.

Conclusion

In most cases – that is for most variables – the U.S. economy did better under Biden than under Trump. Inflation-adjusted wages and inflation-adjusted net worth grew faster in the first three years of Trump. But even in these cases, my decision to focus on the first three years of each presidential term helped Trump and disadvantaged Biden. The first three Trump years were untouched by the pandemic, whereas whereas the first three Biden years were heavily affected by the damaging after-effects of the pandemic. That is especially true of the high inflation in the Biden years.