A woman walks wearing a mask to protect herself from the novel coronavirus (COVID-19) in front of a closed theater in Koreatown, Los Angeles, on March 21, 2020. (AFP, GETTY IMAGES)
A woman walks wearing a mask to protect herself from the novel coronavirus (COVID-19) in front of a closed theater in Koreatown, Los Angeles, on March 21, 2020. (AFP, GETTY IMAGES)

Last updated: April 02, 2020

The U.S. Employment and Training Administration released its weekly update on initial unemployment claims, giving us the first glimpse of the economic implications of the COVID-19 pandemic beyond the fluctuation we’re observing in the stock market. And… yikes.

The data are grisly and some R code will illustrate that. First, here are the packages necessary to put this unemployment claims spike in context. tidyverse comes at the fore of my workflow. stevemisc is my toy R package, which incidentally has a data set on U.S. recessions (recessions) for added context. It should be no surprise that unemployment climbs during these periods. Finally, fredr interacts with the Federal Reserve Economic Data maintained by the research division of the Federal Reserve Bank of St. Louis. The API is the easiest and most flexible of any I’ve used and I wish the IMF’s API were as simple. lubridate will help us play with dates.

library(tidyverse)
library(stevemisc)
library(fredr)
library(lubridate)

The fredr call is simple. The initial unemployment claims data has a series id of “ICSA” and the data extend to January 1967. Let’s grab everything we can.

fredr(series_id = "ICSA",
        observation_start = as.Date("1967-01-01")) -> ICSA

Here’s what the data looked like before today.

ICSA %>%
  filter(date <= ymd("2020-03-14")) %>%
  ggplot(.,aes(date, value/1000)) +
  theme_steve_web() + post_bg() +
  scale_x_date(date_breaks = "2 years",
               date_labels = "%Y",
               limits = as.Date(c('1965-01-01','2020-04-01'))) +
  geom_rect(data=filter(recessions,year(peak)>1966), inherit.aes=F, 
            aes(xmin=peak, xmax=trough, ymin=-Inf, ymax=+Inf), fill='darkgray', alpha=0.8) +
     geom_line() +
    geom_ribbon(aes(ymin=-Inf, ymax=value/1000),
              alpha=0.3, fill="#619CFF") +
  labs(title = "Initial Unemployment Claims From January 7, 1967 to March 14, 2020",
       subtitle = "Unemployment claims clearly rise during economic contractions with peaks observed during the early 1980s global recession and the Great Recession from 2007-2009.",
       x = "", y = "Unemployment Claims (in Thousands)",
       caption = "Data: U.S. Employment and Training Administration (initial claims), National Bureau of Economic Research (recessions).") 

plot of chunk initial-claims-data-1967-before-covid19

The peaks in the early 1980s and from 2007 to 2009 are immediately evident. Those periods coincided with global recessions in which the unemployment rate in the U.S. (calculated monthly) exceeded 10% of the civilian labor force.

Now, here’s what the data look like as of today.

ICSA %>%
  # change just one line
  filter(date <= ymd("2020-03-21"))  %>% # Commenting out just one line.
  ggplot(.,aes(date, value/1000)) +
  theme_steve_web() + post_bg() +
  scale_x_date(date_breaks = "2 years",
               date_labels = "%Y",
               limits = as.Date(c('1965-01-01','2020-04-01'))) +
  geom_rect(data=filter(recessions,year(peak)>1966), inherit.aes=F, 
            aes(xmin=peak, xmax=trough, ymin=-Inf, ymax=+Inf), fill='darkgray', alpha=0.8) +
     geom_line() +
    geom_ribbon(aes(ymin=-Inf, ymax=value/1000),
              alpha=0.3, fill="#619CFF") +
  scale_y_continuous(labels = scales::comma) +
  labs(title = "Initial Unemployment Claims From January 7, 1967 to March 21, 2020",
       subtitle = "The almost 3.3 million unemployment claims dwarfs the unemployment effects of the major recessions in the data.",
       x = "", y = "Unemployment Claims (in Thousands)",
       caption = "Data: U.S. Employment and Training Administration (initial claims), National Bureau of Economic Research (recessions).") 

plot of chunk initial-claims-data-1967-first-week-of-covid19

I’ll come back and update this when the states roll out their updates, but it does have me thinking about this dire warning from the President of the Federal Reserve Bank of St. Louis.

Standardizing initial claims to the (growing) civilian labor force of the United States lends to some worry that estimate might be too low. Basically, the initial claims as a proportion of the civilian labor force, right now, is four times what it was at the peak of the Great Recession and the early 1980s recession. Therein, the unemployment rate was between 10-11%. The extent to which initial claims is a sneak peek of the monthly unemployment rate, 30% might be too low an estimate.

Alas, I’ll defer to the President of the FRED’s division in St. Louis. He’ll know more than me. I just know how to play with the data that his research division releases.

Update for April 2, 2020

Gulp.

ICSA %>%
  # Omit the filter
  #filter(date <= ymd("2020-03-21"))  %>% # Commenting out just one line.
  ggplot(.,aes(date, value/1000)) +
  theme_steve_web() + post_bg() +
  scale_x_date(date_breaks = "2 years",
               date_labels = "%Y",
               limits = as.Date(c('1965-01-01','2020-04-01'))) +
  geom_rect(data=filter(recessions,year(peak)>1966), inherit.aes=F, 
            aes(xmin=peak, xmax=trough, ymin=-Inf, ymax=+Inf), fill='darkgray', alpha=0.8) +
     geom_line() +
    geom_ribbon(aes(ymin=-Inf, ymax=value/1000),
              alpha=0.3, fill="#619CFF") +
  scale_y_continuous(labels = scales::comma) +
  labs(title = "Initial Unemployment Claims From January 7, 1967 to the Present",
       subtitle = "The ongoing COVID-19 pandemic makes the initial claims spikes of the early 1980s and mid-2000s almost invisible.",
       x = "", y = "Unemployment Claims (in Thousands)",
       caption = "Data: U.S. Employment and Training Administration (initial claims), National Bureau of Economic Research (recessions).") 

plot of chunk initial-claims-data-1967-starting-with-covid19

The state-level initial claims data also offer an insight to what COVID-19 has done to unemployment. These indicators seem to lag a week behind the national figures so the most recent national update for today (gulp) also comes with more insight to the jarring statistics released last week.

This script will grab the most current data for initial claims for all 50 states.

# Initial claims data
stateclaimsabbs <- paste0(c(state.abb),"ICLAIMS")

sclaims <- tibble()

for (i in 1:length(stateclaimsabbs)) {
  fredr(series_id = stateclaimsabbs[i],
        observation_start = as.Date("1986-01-01")) -> hold_this
    bind_rows(sclaims, hold_this) -> sclaims
}

This will show which states were hit the hardest by the spate of unemployment claims starting last week.

sclaims %>%
  mutate(state = str_sub(series_id, 1, 2)) %>%
  group_by(state) %>%
  mutate(l1_value = lag(value, 1),
         diff = (value - l1_value)/l1_value,
         diff = diff*100) %>%
  slice(n()) %>%
  arrange(-diff)
COVID-19's First Effect on Unemployment Claims, by State
Rank State Initial Claims (March 21, 2020) Initial Claims (March 14, 2020) % Change
1 NH 29379 642 4476.17%
2 ME 21459 634 3284.7%
3 RI 35847 1108 3135.29%
4 LA 72438 2255 3112.33%
5 MN 115773 4010 2787.11%
6 OH 196309 7046 2686.11%
7 NC 94083 3533 2562.98%
8 PA 377451 15439 2344.79%
9 MI 128006 5338 2298.01%
10 IN 59755 2596 2201.81%
11 DE 10776 472 2183.05%
12 NM 18105 869 1983.43%
13 MA 148452 7449 1892.91%
14 NE 15700 795 1874.84%
15 MT 15349 817 1778.7%
16 IA 40952 2229 1737.24%
17 KY 49023 2785 1660.25%
18 VA 46277 2706 1610.16%
19 SC 31826 2093 1420.59%
20 UT 19690 1305 1408.81%
21 NV 92298 6356 1352.14%
22 TN 38077 2702 1309.22%
23 ND 5662 415 1264.34%
24 KS 23563 1755 1242.62%
25 ID 13586 1031 1217.75%
26 NJ 115815 9467 1123.35%
27 OK 21926 1836 1094.23%
28 FL 74313 6463 1049.82%
29 MD 42981 3864 1012.34%
30 MO 42246 4016 951.94%
31 IL 114114 10870 949.81%
32 WI 51031 5190 883.26%
33 TX 155426 16176 860.84%
34 SD 1761 190 826.84%
35 WA 129909 14240 812.28%
36 CO 19774 2321 751.96%
37 AZ 29348 3844 663.48%
38 CT 25100 3440 629.65%
39 WY 3653 517 606.58%
40 OR 30054 4269 604.01%
41 AK 7847 1120 600.62%
42 AR 9275 1382 571.13%
43 AL 10892 1819 498.79%
44 VT 3784 659 474.2%
45 NY 79999 14272 460.53%
46 HI 8815 1589 454.75%
47 MS 5519 1147 381.17%
48 WV 3536 865 308.79%
49 CA 186333 57606 223.46%
50 GA 12140 5445 122.96%

Basically, every state was rocked, some more than others. New Hampshire saw the largest increase from March 14 to March 21. Only 642 people in New Hampshire filed a new jobless claim in the March 14 update. That number skyrocketed to 29,379 in the March 21 update. That is a change of over 4,476 percent. There are four curious states at the bottom: Mississippi, West Virginia, California, and Georgia. To be clear, all four had massive increases from the previous week, all at least doubling from the previous week. West Virginia and Mississippi even tripled. However, California stands out as taking more proactive measures quicker than the other three states, which might suggest worse is yet to come for states like Mississippi and Georgia. For example, Mississippi’s governor rejected calls for a lockdown on March 23 by claiming the state will “never be China” on the COVID-19 front. Now, it has the country’s highest hospitalization rate for COVID-19. Georgia’s governor similarly downplayed COVID-19 before finally rolling out a shelter-in-place order. The economic consequences of these later measures we’re seeing in the Deep South may manifest in subsequent updates.