Table 2.7. Investment in Private Fixed Assets, Equipment, Structures, and Intellectual Property Products by Type (A) - FAAt207

Data - BEA

Info

Last observation: 2024 (N = 103)

First observation: 1901 (N = 103)

Last data update: 25 jul 2026, 12:36. Last compile: 17 aoû 2026, 22:06

Layout

  • Fixed Assets Website. html

What is investment

Code
nber_recessions_extract <- nber_recessions |>
  filter(Peak >= as.Date("1929-01-01"))
FAAt207 |>
  year_to_date() |>
  filter(LineNumber %in% c(4, 11, 18, 26)) |>
  rename(variable = LineDescription) |>
  left_join(gdp_A, by = "date") |>
  mutate(DataValue = DataValue/value) |>
  filter(date >= as.Date("1929-01-01")) |>
  ggplot() + geom_line(aes(x = date, y = DataValue, color = variable)) + 
  ylab("% of GDP") + xlab("") + 
  theme_minimal()+
  geom_rect(data = nber_recessions_extract,
            aes(xmin = Peak, xmax = Trough, ymin = -Inf, ymax = +Inf), 
            fill = 'grey', alpha = 0.5) +
  scale_x_date(breaks = nber_recessions_extract$Peak,
               labels = date_format("%Y")) + 
  scale_y_continuous(breaks = 0.01*seq(0, 160, 0.2),
                     labels = scales::percent_format(accuracy = 0.2)) + 
  theme(legend.position = c(0.25, 0.85),
        legend.title = element_blank(),
        legend.text = element_text(size = 8),
        legend.key.size = unit(0.9, 'lines'))

Private Investment

Code
FAAt207 |>
  year_to_date() |>
  filter(LineNumber %in% c(4, 11, 18, 26)) |>
  rename(variable = LineDescription) |>
  left_join(gdp_A, by = "date") |>
  mutate(DataValue = DataValue/value) |>
  filter(date >= as.Date("1929-01-01")) |>
  ggplot() + geom_line(aes(x = date, y = DataValue, color = variable)) + 
  
  ylab("% of GDP") + xlab("") + 
  theme_minimal()+
  geom_rect(data = nber_recessions_extract |>
              filter(Peak > as.Date("1927-01-01")),
            aes(xmin = Peak, xmax = Trough, ymin = -Inf, ymax = +Inf), 
            fill = 'grey', alpha = 0.5) +
  scale_x_date(breaks = nber_recessions_extract$Peak,
               labels = date_format("%Y")) + 
  scale_y_continuous(breaks = 0.01*seq(0, 160, 0.2),
                     labels = scales::percent_format(accuracy = 0.2)) + 
  theme(legend.position = c(0.25, 0.85),
        legend.title = element_blank(),
        legend.text = element_text(size = 8),
        legend.key.size = unit(0.9, 'lines'))

Decomposition of Structures Investment (% of GDP)

Code
FAAt207 |>
  year_to_date() |>
  filter(LineNumber %in% c(37, 48, 49, 54, 57)) |>
  rename(variable = LineDescription) |>
  left_join(gdp_A, by = "date") |>
  mutate(DataValue = DataValue/value) |>
  filter(date >= as.Date("1929-01-01")) |>
  ggplot() + geom_line(aes(x = date, y = DataValue, color = variable)) + 
  ylab("% of GDP") + xlab("") + 
  theme_minimal()+
  geom_rect(data = nber_recessions_extract |>
              filter(Peak > as.Date("1927-01-01")),
            aes(xmin = Peak, xmax = Trough, ymin = -Inf, ymax = +Inf), 
            fill = 'grey', alpha = 0.5) +
  scale_x_date(breaks = nber_recessions_extract$Peak,
               minor_breaks = "5 years",
               labels = date_format("%Y")) + 
  scale_y_continuous(breaks = 0.01*seq(0, 160, 0.2),
                     labels = scales::percent_format(accuracy = 0.2)) + 
  theme(legend.position = c(0.30, 0.8),
        legend.title = element_blank(),
        legend.text = element_text(size = 8),
        legend.key.size = unit(0.9, 'lines'))

Ex 2: 1938, 1958, 1978, 1998, 2018 Table

Percent

Code
FAAt207 |>
  year_to_date() |>
  mutate(year = year(date)) |>
  filter(year %in% c(1938, 1958, 1978, 1998, 2018)) |>
  group_by(year) |>
  mutate(DataValue = round(100*DataValue/DataValue[1], 1)) |>
  ungroup() |>
  select(LineNumber, LineDescription, year, DataValue) |>
  spread(year, DataValue) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}

Billions

Code
FAAt207 |>
  year_to_date() |>
  mutate(year = year(date)) |>
  filter(year %in% c(1938, 1958, 1978, 1998, 2018)) |>
  group_by(year) |>
  mutate(DataValue = round(DataValue)) |>
  ungroup() |>
  select(LineNumber, LineDescription, year, DataValue) |>
  spread(year, DataValue) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}