That feeling when you realize you're not going to retire until your 70s. (Photo: Spencer Platt/Getty Images)
That feeling when you realize you're not going to retire until your 70s. (Photo: Spencer Platt/Getty Images)

What he said.

Anyway, I’m of the mentality that reading too much into large nominal numbers in the Dow Jones Industrial Average is a fool’s errand. The U.S. is absolutely wealthier on the balance now than it was at almost every other point in the Dow Jones’ history. It means gains in nominal numbers will be larger. Losses in nominal numbers will be larger as well. Humility and scale are important in communicating information and trends from the Dow Jones.

That said, the Dow Jones’ day was clearly no good, and very bad. Here’s how you can contextualize that.

First, my stevemisc package has Dow Jones Industrial Average data dating all the way to 1885 in the data frame DJIA. I updated it not long ago to include the end of 2019. I haven’t added any 2020 observations to it yet, but that is easy to grab with the quantmod package. I also have presidential term data as part of the Presidents data set. Trump is not included in these data (because his term is still ongoing), but added him is simple in a tidyverse pipe.

library(stevemisc)
library(tidyverse)
library(lubridate)
library(quantmod)
library(knitr)
library(kableExtra)

getSymbols("^DJI", src="yahoo", from= as.Date("2020-01-01"))

DJI %>% data.frame %>%
  rownames_to_column() %>% tbl_df() %>%
  rename(date = rowname,
         djia = DJI.Close) %>%
  mutate(date = as_date(date)) %>%
  select(date, djia) %>%
  bind_rows(DJIA, .) -> DJI

Presidents %>%
  # add Trump
  bind_rows(.,tibble(president="Donald J. Trump",
                     start = ymd("2017-01-20"),
                     end = ymd("2020-03-12"))) %>%
  # Grover Cleveland had two non-consecutive terms.
  mutate(president = ifelse(president == "Grover Cleveland" & start == "1885-03-04", "Grover Cleveland 1", president),
         president = ifelse(president == "Grover Cleveland" & start == "1893-03-04", "Grover Cleveland 2", president)) %>%
  # rowwise, list-seq, and unnest...
  rowwise() %>%
  mutate(date = list(seq(start, end, by = '1 day'))) %>%
  unnest(date) %>%
  # get just the president and date to left_join into the Dow data.
  select(president, date) %>%
  # Note: this will create some duplicates because of how terms start/end
  # It won't be much a problem for what we're doing here.
  left_join(DJI, .) %>%
  mutate(president = fct_inorder(president)) -> Data

One way of faithfully communicating Dow data—or any economic data, for that matter—is to index the data to some point. It’s why a lot of manufacturing data, for example, are indexed to 2010 or 2012 on FRED. Since the interest here is political (i.e. politicians like to take credit for good days on the Dow and deflect blame for bad days on the Dow), we can index the Dow trends within presidential administrations to the starting day of the presidency. Most indices start at 100, but we can have this start at 0 to more readily communicate growth and contraction in the Dow Jones Industrial Average within presidencies.

Data %>%
  # Note: Arthur isn't going to have a lot to look at here.
  group_by(president) %>%
  mutate(index = (djia/first(djia))-1) %>% 
  ungroup() %>%
  mutate(cat = ifelse(index < 0, "Negative", "Positive")) %>%
  ggplot(.,aes(date, index,color=cat)) + 
  theme_steve_web() + post_bg() +
  geom_line() +
  geom_hline(yintercept = 0, linetype="dashed", alpha=0.4) +
  # I think '%y is the best I can do because of FDR's tenure.
  scale_x_date(date_labels = "'%y", 
               date_breaks = "1 year") +
  facet_wrap(~president, scales = "free_x") +
  scale_color_manual(values=c("#990000", "#009900")) +
  theme(legend.position = "none") +
  labs(title = "The Dow Jones Industrial Average, Indexed to the Starting Point of Every Administration",
       subtitle = "The trends of the 'roaring '20s', the Great Depression, 1950s and 1990s growth, and post-collapse recoveries for FDR and Obama are apparent.",
       x = "Date",
       y = "Dow Jones Industrial Average, Indexed at Zero to the First Day of Trading for the Administration",
       caption = "Data: Dow Jones Industrial Average (Yahoo Finance, Measuring Worth), in the DJIA data (github.com/svmiller/stevemisc)")

plot of chunk dow-jones-industrial-average-by-presidency

The data do well to show the scale of growth and contraction that defined these various presidencies. For example, we know the 1980s and 1990s were a period of high growth for the United States. This was made possible through a variety of factors, whether deregulation, technological change and innovation, and the Boomers entering their peak earning years. However, Ronald Reagan’s last day close was 2,235 (up from 951) and Bill Clinton’s last day close was 10,588 (up from 3,242). I’m old enough to remember the Dow crossing 10,000 for the first time being a big deal. However, those nominal numbers look paltry in modern times.

The other way of faithfully communicating good and bad trends in the Dow Jones Industrial Average is through a percentage change from some other benchmark’s close. In most applications, this would be the previous day’s close. Thus, what stands out from the blood-letting on the market on March 12, 2020 is less that it was the largest absolute drop from the previous day’s close in the Dow’s history. Again, it’s a fool’s errand to compare nominal numbers on the Dow. More importantly, it was the fourth-largest drop from the previous day’s close in the Dow’s history. That’s a bigger deal.

Calculating percentage changes in a time series is simple. Here, would be the 10 worst days in the Dow Jones’ history and the presidencies with which they concided.

Data %>%
  # We have some duplicates because of start/end dates for presidencies.
  # This should fix that
  group_by(president) %>%
  mutate(l1_djia = lag(djia,1),
         percchange = ((djia - lag(djia,1))/lag(djia, 1))*100) %>%
  arrange(percchange) %>%
  select(date, president, everything()) %>%
  head(10) %>%
  ungroup() %>%
  mutate_if(is.numeric, ~round(., 2)) %>%
   kable(., format="html", table.attr='id="stevetable"',
        col.names=c("Date", "President", "DJIA (Close)", "DJIA (Close, Previous)", "% Change"),
        caption = "The Ten Worst Trading Days in Dow Jones History, Feb. 16, 1885 to March 12, 2020",
        align=c("l","l","c","c","c","c"))
The Ten Worst Trading Days in Dow Jones History, Feb. 16, 1885 to March 12, 2020
Date President DJIA (Close) DJIA (Close, Previous) % Change
1987-10-19 Ronald Reagan 1738.74 2246.74 -22.61
1929-10-28 Herbert Hoover 260.64 298.97 -12.82
1929-10-29 Herbert Hoover 230.07 260.64 -11.73
2020-03-12 Donald J. Trump 21200.62 23553.22 -9.99
1929-11-06 Herbert Hoover 232.13 257.68 -9.92
1899-12-18 William McKinley 42.69 46.77 -8.72
1895-12-20 Grover Cleveland 2 29.42 32.16 -8.51
1932-08-12 Herbert Hoover 63.11 68.90 -8.40
1907-03-14 Theodore Roosevelt 55.84 60.89 -8.29
1987-10-26 Ronald Reagan 1793.93 1950.76 -8.04

There are not a whole lot of surprises. Ronald Reagan’s no-good-very-bad “Black Monday” crash was an all-timer and may not ever be topped. I forget the exact trading curbs initiated for the Dow Jones, but it’s likely trading would stop before that threshold is met in the future. Trump’s no-good-very-bad Thursday ranks fourth all-time and is surrounded by three Herbert Hoover observations at the core of the Great Depression.

For additional context, here’s every president’s worst trading day in Dow Jones history. Here, the data are ranked worst to best and the first appearance for all presidents is provided in this table.

Data %>%
  # We have some duplicates because of start/end dates for presidencies.
  # This should fix that
  group_by(president) %>%
  mutate(l1_djia = lag(djia,1),
         percchange = ((djia - lag(djia,1))/lag(djia, 1))*100) %>%
  arrange(percchange) %>%
  ungroup() %>%
  mutate(rank = seq(1:n())) %>%
  group_by(president) %>%
  filter(row_number() == 1) %>%
  mutate_if(is.numeric, ~round(., 2)) %>%
  select(date, president, everything()) %>%
    kable(., format="html", table.attr='id="stevetable"',
        col.names=c("Date", "President", "DJIA (Close)", "DJIA (Close, Previous)", "% Change", "Rank Among All-Time Worst Days"),
        caption = "The Ten Worst Trading Days in Dow Jones History, Feb. 16, 1885 to March 12, 2020",
        align=c("l","l","c","c","c","c"))
The Ten Worst Trading Days in Dow Jones History, Feb. 16, 1885 to March 12, 2020
Date President DJIA (Close) DJIA (Close, Previous) % Change Rank Among All-Time Worst Days
1987-10-19 Ronald Reagan 1738.74 2246.74 -22.61 1
1929-10-28 Herbert Hoover 260.64 298.97 -12.82 2
2020-03-12 Donald J. Trump 21200.62 23553.22 -9.99 4
1899-12-18 William McKinley 42.69 46.77 -8.72 6
1895-12-20 Grover Cleveland 2 29.42 32.16 -8.51 7
1907-03-14 Theodore Roosevelt 55.84 60.89 -8.29 9
2008-10-15 George W. Bush 8577.91 9310.99 -7.87 11
1933-07-21 Franklin D. Roosevelt 88.71 96.26 -7.84 12
1917-02-01 Woodrow Wilson 88.52 95.43 -7.24 18
1997-10-27 Bill Clinton 7161.15 7715.41 -7.18 19
1989-10-13 George Bush 2569.26 2759.84 -6.91 26
1955-09-26 Dwight Eisenhower 455.56 487.45 -6.54 33
1962-05-28 John F. Kennedy 576.93 611.88 -5.71 47
1946-09-03 Harry S. Truman 178.68 189.19 -5.56 51
2011-08-08 Barack Obama 10809.85 11444.61 -5.55 52
1928-12-08 Calvin Coolidge 257.33 271.05 -5.06 75
1913-01-20 William Howard Taft 59.74 62.82 -4.90 87
1890-11-10 Benjamin Harrison 35.89 37.44 -4.15 148
1886-05-17 Grover Cleveland 1 35.11 36.59 -4.05 165
1974-11-18 Gerald Ford 624.92 647.61 -3.50 255
1921-06-20 Warren G. Harding 64.90 67.25 -3.49 256
1973-11-26 Richard Nixon 824.95 854.00 -3.40 274
1979-10-09 Jimmy Carter 857.59 884.04 -2.99 375
1966-10-03 Lyndon B. Johnson 757.96 774.22 -2.10 947
1885-02-27 Chester Arthur 31.77 32.33 -1.75 1427

One mild surprise here is Lyndon Johnson. Among all presidents through the history of the Dow Jones Industrial Average, Johnson had—for lack of better term—the “second-best worst” trading day in history. The worst trading day of his presidency came on October 3, 1966, a contraction of just over 2% from the previous day’s close. His presidency was turbulent in more than a few ways and it’s any wonder he didn’t have a worse day.