The goal of this report is to analyze the three quarters of GDP data that is currently available for the fiscal year 2023. The data is sourced from the Bureau of Economic Analysis. Each quarter is subdivided in advance, second, and third estimates.

The terms “advance,” “second,” and “third estimates” refer to different stages in the process of economic data reporting and revision. Here’s an explanation of each term:

The advance estimate is the first release of economic data for a particular period. It is typically released shortly after the end of the reference period, providing an initial snapshot of economic performance. The advance estimate is based on a subset of available data and statistical models, and it is subject to revision as more comprehensive data becomes available.

The second estimate is an updated release of economic data that occurs after the advance estimate. It incorporates additional data and revisions, providing a more accurate picture of economic indicators. The second estimate may still be subject to further revisions in subsequent releases.

The third estimate is another revision of economic data that follows the second estimate. It incorporates even more comprehensive data, adjustments, and revisions based on additional information that becomes available over time. The third estimate is often considered more accurate and reliable than the advance and second estimates.




To begin, the data is loaded and processed to prepare it for analysis.

data <- read_excel("FY23 GDP Revision Summary.xlsx")

df <- data %>%
  clean_names() %>% 
  pivot_longer(cols = 2:10, names_to = "period", values_to = "value") %>% 
  rename(name = x1) %>% 
  separate(period,into=c("quarter", "estimate"), sep= "_")

head(df,10)
## # A tibble: 10 × 4
##    name                              quarter estimate value
##    <chr>                             <chr>   <chr>    <dbl>
##  1 Gross Domestic Product            q1      advance    1.1
##  2 Gross Domestic Product            q1      second     1.3
##  3 Gross Domestic Product            q1      third      2  
##  4 Gross Domestic Product            q2      advance    2.4
##  5 Gross Domestic Product            q2      second     2.1
##  6 Gross Domestic Product            q2      third      2.1
##  7 Gross Domestic Product            q3      advance    4.9
##  8 Gross Domestic Product            q3      second     5.2
##  9 Gross Domestic Product            q3      third      4.9
## 10 Personal Consumption Expenditures q1      advance    3.7




When reviewing Gross Domestic Product as a whole, it can be observed that Q1 experienced a substantial revision from the advance to third estimate. Q2 GDP remained relatively flat amongst the revisions, as well as from the previous quarter. The data concludes with a significant increase in Q3 GDP.

gdp <- df %>% 
  filter(name == "Gross Domestic Product") %>% 
  arrange(quarter, estimate) %>% 
  group_by(quarter) %>% 
  mutate(sec_min_adv = value - lag(value),
         third_min_sec = lead(value) - value)

ggplot(gdp, aes(x = quarter, y = value, fill = estimate)) +
  geom_col(position = "dodge") +
  geom_hline(yintercept = 0, color = "black", linetype = "solid", linewidth = 1) +
  labs(title = "FY23 Gross Domestic Product Estimates and Revisions ",
       x = "Quarter",
       y = "Value") +
  scale_fill_manual(values = c("lightblue", "blue", "navy"))





To understand what is driving the large increase in Q3 GDP, let’s look closer at what is under the hood.

Personal Consumption Expenditures is a key economic indicator used to measure the total value of goods and services consumed by households in an economy over a specific period. Personal Consumption Expenditures are a crucial component of the Gross Domestic Product (GDP) calculation, representing the portion of GDP attributed to consumer spending.

Looking at Q3, it is clear that strong consumer spending was a material driver for the growth seen in GDP. It is important to note the revisions to Q3, as the third estimate ended up being a large miss to the advance estimate. This tells us that consumer spending was not as strong as anticipated. When observing the advance to third estimate for GDP and PCE, it can be seen that GDP had no change and PCE had a significant reduction. This indicates that the GDP growth was being influenced by other data.

pce <- df %>% 
  filter(name == "Personal Consumption Expenditures") %>% 
  arrange(quarter, estimate) %>% 
  group_by(quarter) %>% 
  mutate(sec_min_adv = value - lag(value),
         third_min_sec = lead(value) - value)

ggplot(pce, aes(x = quarter, y = value, fill = estimate)) +
  geom_col(position = "dodge") +
  geom_hline(yintercept = 0, color = "black", linetype = "solid", linewidth = 1) +
  labs(title = "FY23 Personal Consumption Estimates and Revisions ",
       x = "Quarter",
       y = "Value") +
  scale_fill_manual(values = c("lightblue", "blue", "navy"))





Gross Private Domestic Investment (GPDI) is a key economic indicator that measures the total value of all capital expenditures made by private businesses, households, and nonprofit organizations within a country’s borders. It is one of the components used to calculate Gross Domestic Product (GDP) and provides insights into the level of investment activity in an economy.

Look at GPDI on a high-level, Q1 to Q3 showed dramatic improvement. The third estimate in Q3 of 10% suggest that this data was a material driver of the 4.9% GDP growth. GDPI data will be broken down further and analyzed later in this report.

In summary, a negative GPDI in Q1 may have been influenced by a combination of economic uncertainty, market conditions, and credit constraints. The subsequent increase in GPDI in Q3 could be attributed to factors such as an improving economic outlook, a more favorable business environment, and the resolution of temporary challenges that led to negative investment growth in the earlier quarter.

gpdi <- df %>% 
  filter(name == "Gross Private Domestic Investment") %>% 
  arrange(quarter, estimate) %>% 
  group_by(quarter) %>% 
  mutate(sec_min_adv = value - lag(value),
         third_min_sec = lead(value) - value)

ggplot(gpdi, aes(x = quarter, y = value, fill = estimate)) +
  geom_col(position = "dodge") +
  geom_hline(yintercept = 0, color = "black", linetype = "solid", linewidth = 1) +
  labs(title = "FY23 Gross Private Domestic Investment Estimates and Revisions ",
       x = "Quarter",
       y = "Value") +
  scale_fill_manual(values = c("lightblue", "blue", "navy"))





Government consumption refers to the total value of goods and services purchased and consumed by the government at all levels (federal, state, and local) within a country’s borders. This includes spending on salaries for public employees, public infrastructure, defense, education, healthcare, and other government services. Government consumption represents the value of resources used by the government to provide public goods and services. It’s a crucial component of GDP because it reflects the direct contribution of the government to the economy through the provision of services and the employment of resources.

Gross Investment represents the total value of spending on capital goods (such as machinery, equipment, and structures) that will be used to produce future goods and services. It includes both business and government investment. Gross Investment reflects the level of capital formation and the expansion of the economy’s productive capacity. It is a key driver of future economic growth.

It is important to note the significant miss between the third and advance estimates. Recalling the previous analysis of consumer spending, we can see a troubling observation. Consumer spending was weaker than expected and government expenditures were higher than expected. Government expenditures data will be broken down further and analyzed later in this report.

gcegi <- df %>% 
  filter(name == "Government Consumption Expenditures and Gross Investment") %>% 
  arrange(quarter, estimate) %>% 
  group_by(quarter) %>% 
  mutate(sec_min_adv = value - lag(value),
         third_min_sec = lead(value) - value)

ggplot(gcegi, aes(x = quarter, y = value, fill = estimate)) +
  geom_col(position = "dodge") +
  geom_hline(yintercept = 0, color = "black", linetype = "solid", linewidth = 1) +
  labs(title = "FY23 Government Consumption & Gross Investment Estimates and Revisions ",
       x = "Quarter",
       y = "Value") +
  scale_fill_manual(values = c("lightblue", "blue", "navy"))





Exports and imports are vital components of international trade, and they reveal important information about a country’s economic health, competitiveness, and relationships with other nations. Here’s what exports and imports reveal:

exim <- df %>%
  filter(name %in% c("Exports", "Imports")) %>%
  arrange(quarter, estimate) %>%
  group_by(quarter, name) %>%
  mutate(sec_min_adv = value - lag(value),
         third_min_sec = lead(value) - value)

ggplot(exim, aes(x = quarter, y = value, fill = estimate)) +
  geom_col(position = "dodge") +
  facet_grid(. ~ name, scales = "free_y") +
  geom_hline(yintercept = 0, color = "black", linetype = "solid", linewidth = 1) +
  labs(title = "FY23 Exports and Imports Estimates and Revisions",
       x = "Quarter",
       y = "Value") +
  scale_fill_manual(values = c("lightblue", "blue", "navy"))





Let’s look closer at what makes up Government Consumption Expenditures and Gross Investment.

The first observation from these plots is that all three forms of government expenditures were equal to or greater than overall GDP growth in the third estimate. This means government spending was another significant driver of the Q3 growth, along with Gross Private Domestic Investment.

The increases seen in National Defense spending are driven by the funding of proxy wars in Eurasia. Another pattern to observe is the repeated upward revisions of State and Local spending.

deep_gcegi <- df %>%
  filter(name %in% c("National Defense", "Nondefense", "State and Local")) %>%
  arrange(quarter, estimate) %>%
  group_by(quarter, name) %>%
  mutate(sec_min_adv = value - lag(value),
         third_min_sec = lead(value) - value)

ggplot(deep_gcegi, aes(x = quarter, y = value, fill = estimate)) +
  geom_col(position = "dodge") +
  facet_grid(. ~ name, scales = "free_y") +
  geom_hline(yintercept = 0, color = "black", linetype = "solid", linewidth = 1) +
  labs(title = "Breakdown of Government Consumption Expenditures and Gross Investment",
       x = "Quarter",
       y = "Value") +
  scale_fill_manual(values = c("lightblue", "blue", "navy"))