Table B.103 Balance Sheet of Nonfinancial Corporate Business - B103

Data - FRB

[~](https://fgeerolf.com/)/data/frb/Z1.html

Info

  • Flow of funds. pdf

Layout

Liabilities

Code
Z1_table_variable %>%
  mutate(line = parse_number(pos)) %>%
  filter(table == "B103",
         line %in% c(27, 30)) %>%
  left_join(Z1_csv, by = c("variable", "table")) %>%
  select(date, table, pos, Variable, value) %>%
  left_join(gdp_Q %>% rename(gdp = value), by = "date") %>%
  mutate(value = value / gdp) %>%
  ggplot(.) + theme_minimal() +
  geom_line(aes(x = date, y = value, color = Variable, linetype = Variable)) +
  theme(legend.title = element_blank(),
        legend.position = c(0.3, 0.9)) +
  scale_x_date(breaks = seq(1930, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  ylab("% of GDP") + xlab("") +
  geom_rect(data = nber_recessions %>%
              filter(Peak > as.Date("1950-01-01")), 
            aes(xmin = Peak, xmax = Trough, ymin = -Inf, ymax = +Inf), 
            fill = 'grey', alpha = 0.5) +
  scale_color_manual(values = viridis(4)[1:3]) +
  scale_y_continuous(breaks = 0.01*seq(-100, 600, 2),
                     labels = scales::percent_format(accuracy = 1))

Types of Assets

Code
Z1_table_variable %>%
  mutate(line = parse_number(pos)) %>%
  filter(table == "B103",
         line %in% c(3, 4, 6)) %>%
  left_join(Z1_csv, by = c("variable", "table")) %>%
  select(date, table, pos, Variable, value) %>%
  left_join(gdp_Q %>% rename(gdp = value), by = "date") %>%
  mutate(value = value / gdp) %>%
  ggplot(.) + theme_minimal() +
  geom_line(aes(x = date, y = value, color = Variable, linetype = Variable)) +
  theme(legend.title = element_blank(),
        legend.position = c(0.4, 0.9)) +
  scale_x_date(breaks = seq(1930, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  ylab("% of GDP") + xlab("") +
  geom_rect(data = nber_recessions %>%
              filter(Peak > as.Date("1950-01-01")), 
            aes(xmin = Peak, xmax = Trough, ymin = -Inf, ymax = +Inf), 
            fill = 'grey', alpha = 0.5) +
  scale_color_manual(values = viridis(4)[1:3]) +
  scale_y_continuous(breaks = 0.01*seq(-100, 600, 10),
                     labels = scales::percent_format(accuracy = 1))

Types of Assets

Code
Z1_table_variable %>%
  mutate(line = parse_number(pos)) %>%
  filter(table == "B103",
         line %in% c(3, 4, 6)) %>%
  left_join(Z1_csv, by = c("variable", "table")) %>%
  select(date, table, pos, Variable, value) %>%
  left_join(gdp_Q %>% rename(gdp = value), by = "date") %>%
  mutate(value = value / gdp) %>%
  ggplot(.) + theme_minimal() +
  geom_line(aes(x = date, y = value, color = Variable)) +
  theme(legend.title = element_blank(),
        legend.position = c(0.4, 0.9)) +
  scale_x_date(breaks = seq(1930, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  ylab("% of GDP") + xlab("") +
  geom_rect(data = nber_recessions %>%
              filter(Peak > as.Date("1950-01-01")), 
            aes(xmin = Peak, xmax = Trough, ymin = -Inf, ymax = +Inf), 
            fill = 'grey', alpha = 0.5) +
  scale_color_manual(values = viridis(4)[1:3]) +
  scale_y_continuous(breaks = 0.01*seq(-100, 600, 10),
                     labels = scales::percent_format(accuracy = 1))

Total Assets

Code
Z1_table_variable %>%
  mutate(line = parse_number(pos)) %>%
  filter(table == "B103",
         line %in% c(1, 2, 7)) %>%
  left_join(Z1_csv, by = c("variable", "table")) %>%
  select(date, table, pos, Variable, value) %>%
  left_join(gdp_Q %>% rename(gdp = value), by = "date") %>%
  mutate(value = value / gdp) %>%
  ggplot(.) + theme_minimal() +
  geom_line(aes(x = date, y = value, color = Variable, linetype = Variable)) +
  theme(legend.title = element_blank(),
        legend.position = c(0.3, 0.9)) +
  scale_x_date(breaks = seq(1930, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  ylab("% of GDP") + xlab("") +
  geom_rect(data = nber_recessions %>%
              filter(Peak > as.Date("1950-01-01")), 
            aes(xmin = Peak, xmax = Trough, ymin = -Inf, ymax = +Inf), 
            fill = 'grey', alpha = 0.5) +
  scale_color_manual(values = viridis(4)[1:3]) +
  scale_y_continuous(breaks = 0.01*seq(-100, 600, 10),
                     labels = scales::percent_format(accuracy = 1))

Net Worth VS Market value of equities

Code
Z1_table_variable %>%
  mutate(line = parse_number(pos)) %>%
  filter(table == "B103",
         line %in% c(42, 52)) %>%
  left_join(Z1_csv, by = c("variable", "table")) %>%
  select(date, table, pos, Variable, value) %>%
  left_join(gdp_Q %>% rename(gdp = value), by = "date") %>%
  mutate(value = value / gdp) %>%
  ggplot(.) + theme_minimal() +
  geom_line(aes(x = date, y = value, color = Variable, linetype = Variable)) +
  theme(legend.title = element_blank(),
        legend.position = c(0.3, 0.9)) +
  scale_x_date(breaks = seq(1930, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  ylab("% of GDP") + xlab("") +
  geom_rect(data = nber_recessions %>%
              filter(Peak > as.Date("1950-01-01")), 
            aes(xmin = Peak, xmax = Trough, ymin = -Inf, ymax = +Inf), 
            fill = 'grey', alpha = 0.5) +
  scale_color_manual(values = viridis(4)[1:3]) +
  scale_y_continuous(breaks = 0.01*seq(-100, 600, 10),
                     labels = scales::percent_format(accuracy = 1))

Tobin Q Ratios

Market Assets / Book Assets

Code
Z1 %>%
  filter(SERIES_NAME %in% c("FL102000005.Q", "FL102000115.Q"),
         TIME_PERIOD >= as.Date("1955-01-01")) %>%
  select(TIME_PERIOD, OBS_VALUE, SERIES_NAME) %>%
  spread(SERIES_NAME, OBS_VALUE) %>%
  ggplot + geom_line(aes(x = TIME_PERIOD, y = `FL102000005.Q`/ `FL102000115.Q`)) + 
  theme_minimal() + ylab("Tobin's Q") + xlab("") + 
  geom_rect(data = nber_recessions %>%
              filter(Peak > as.Date("1955-01-01")),
            aes(xmin = Peak, xmax = Trough, ymin = -Inf, ymax = +Inf), 
            fill = 'grey', alpha = 0.5) +
  scale_x_date(breaks = "10 years",
               minor_breaks = "5 years",
               labels = date_format("%Y")) + 
  scale_y_continuous(breaks = seq(0, 3, .05))

Market Real Estate Assets / Book Real Estate Assets

Code
Z1 %>%
  filter(SERIES_NAME %in% c("LM105035005.Q", "FL105035045.Q"),
         TIME_PERIOD >= as.Date("1955-01-01")) %>%
  select(TIME_PERIOD, OBS_VALUE, SERIES_NAME) %>%
  spread(SERIES_NAME, OBS_VALUE) %>%
  ggplot + geom_line(aes(x = TIME_PERIOD, y = `LM105035005.Q`/ `FL105035045.Q`)) + 
  theme_minimal() + ylab("Real Estate Tobin's Q") + xlab("") + 
  geom_rect(data = nber_recessions %>%
              filter(Peak > as.Date("1955-01-01")),
            aes(xmin = Peak, xmax = Trough, ymin = -Inf, ymax = +Inf), 
            fill = 'grey', alpha = 0.5) +
  scale_x_date(breaks = "10 years",
               minor_breaks = "5 years",
               labels = date_format("%Y")) + 
  scale_y_continuous(breaks = seq(0, 3, 0.2))

Tobin’s Q for Nonfinancial Corporations

csv

  • B.103 Balance Sheet of Nonfinancial Corporate Business
Code
Z1_csv %>%
  filter(variable == "FL103164106.Q") %>%
  ggplot + geom_line(aes(x = date, y = value/100)) + theme_minimal() + 
  ylab("Tobin's Q") + xlab("") + 
  geom_rect(data = nber_recessions %>%
              filter(Peak > as.Date("1945-01-01")),
            aes(xmin = Peak, xmax = Trough, ymin = -Inf, ymax = +Inf), 
            fill = 'grey', alpha = 0.5) +
  scale_x_date(breaks = "10 years",
               minor_breaks = "5 years",
               labels = date_format("%Y")) + 
  scale_y_continuous(breaks = 0.01*seq(0, 300, 20))

SDMX

  • B.103 Balance Sheet of Nonfinancial Corporate Business
Code
Z1 %>%
  filter(SERIES_NAME == "FL103164106.Q",
         TIME_PERIOD >= as.Date("1955-01-01")) %>%
  ggplot + geom_line(aes(x = TIME_PERIOD, y = OBS_VALUE/100)) + theme_minimal() + 
  ylab("Tobin's Q") + xlab("") + 
  geom_rect(data = nber_recessions %>%
              filter(Peak > as.Date("1955-01-01")),
            aes(xmin = Peak, xmax = Trough, ymin = -Inf, ymax = +Inf), 
            fill = 'grey', alpha = 0.5) +
  scale_x_date(breaks = "10 years",
               minor_breaks = "5 years",
               labels = date_format("%Y")) + 
  scale_y_continuous(breaks = seq(0, 3,.2))

Code
Z1 %>%
  filter(SERIES_NAME == "FL103164106.Q",
         OBS_STATUS == "A") %>%
  ggplot + geom_line(aes(x = TIME_PERIOD, y = OBS_VALUE/100)) + 
  theme_minimal() + 
  ylab("Tobin's Q") + xlab("") + 
  geom_rect(data = nber_recessions %>%
              filter(Peak > as.Date("1945-01-01")),
            aes(xmin = Peak, xmax = Trough, ymin = -Inf, ymax = +Inf), 
            fill = 'grey', alpha = 0.5) +
  scale_x_date(breaks = seq(1945, 2100, 10) %>% paste0("-01-01") %>% as.Date,
              labels = date_format("%Y")) + 
  scale_y_continuous(breaks = 0.01*seq(0, 300, 20)) +
  scale_color_manual(values = viridis(5)[1:4]) +
  theme(legend.position = c(0.2, 0.3),
        legend.title = element_blank(),
        legend.text = element_text(size = 8),
        legend.key.size = unit(0.9, 'lines'))

2019

Billions

Code
Z1_table_variable %>%
  filter(table == "B103") %>%
  left_join(Z1_csv %>%
              filter(date == as.Date("2019-12-31")),
            by = c("variable", "table")) %>%
  select(table, pos, Variable, value) %>%
  mutate(value = round(value/1000) %>% paste0("$ ", ., " Bn")) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}