As recounted in an article in "The Hill", President Trump stated the following on August 30, 2017 in a speech on tax reform in Springfield, Missouri:
We just announced that we hit 3 percent in [gross domestic product]. It just came out. And on a yearly basis, as you know, the last administration during an eight-year period never hit 3 percent, so we're really on our way.
The Hill article goes on to explain that, under Obama, the economy hit or surpassed 3 percent growth during numerous quarters, but never sustained that level of growth for a full year. The following Python code looks at available GDP data to see to what degree the original claim is true.
The following code reads both the annual and quarterly GDP figures from the Bureau of Economic Analysis website and calculates the percent change between successive periods.
import pandas as pd
# pd.read_excel does not seem to work for 2018Q3 - save and convert file to CSV
#xx = pd.read_excel('https://www.bea.gov/national/xls/gdplev.xlsx', skiprows=7)
xx = pd.read_csv('gdplev.csv', skiprows=7) #Save GDP file locally as a CSV file
aa = xx.iloc[0:89, 0:3] # UPDATE (0:89 = 2017)
aa.columns = ['Year','Current $bil','Chained 2009 $bil']
qq = xx.iloc[0:287, 4:7] #UPDATE (0:286 = 2018Q2
qq.columns = ['Quarter','Current $bil','Chained 2009 $bil']
# Must convert strings to floats if read from CSV file
aa['Chained 2009 $bil'] = aa['Chained 2009 $bil'].str.replace(',', '')
qq['Chained 2009 $bil'] = qq['Chained 2009 $bil'].str.replace(',', '')
aa['Chained 2009 $bil'] = aa['Chained 2009 $bil'].astype(float)
qq['Chained 2009 $bil'] = qq['Chained 2009 $bil'].astype(float)
aa['Pct_Change'] = aa.loc[:,'Chained 2009 $bil'].pct_change()*100
qq['Pct_Change'] = qq.loc[:,'Chained 2009 $bil'].pct_change()*100
print(aa.head())
print(aa.tail(18))
The above output shows that GDP growth did not reach or exceed 3 percent during any of Obama's eight calendar years from 2009 through 2016. The closest that it came was 2.88 percent in 2015. However, it likewise did not reach 3 percent in Trump's first year, reaching just 2.22 percent in 2017. In fact, the last time that GDP growth surpassed 3 percent was in 2005 when it reached 3.51 percent. The following code generates a plot of GDP growth since 1929, the start of the annual GDP data:
import matplotlib.pyplot as plt
%matplotlib inline
aa.plot.line(x='Year',y='Pct_Change',figsize=(10,8),grid=True,title='GDP Growth')
The following code prints the quarterly GDP data and the percent change in real quarterly GDP.
print(qq.head())
print(qq.tail(10))
As can be seen, the percent change in real quarterly GDP has surpassed one percent just once in the last 10 quarters and then, just barely. This is not that surprising, however, because this is the change for 1 quarter and is not annualized. For this reason, this percent change is not especially useful in this form.
To remedy this, the following code annualizes the quarterly percent change and also calculates the percent change over every consecutive four quarters, as well as each calendar year.
qq['iYear'] = qq['Quarter'].str[0:4]
qq['iQtr'] = qq['Quarter'].str[5:6]
qq['Year'] = pd.to_numeric(qq['iYear']) + (pd.to_numeric(qq['iQtr'])-1) * 0.25
qq['Change1q'] = (((1 + qq.loc[:,'Chained 2009 $bil'].pct_change())**4)-1)*100
qq['Change4q'] = (qq.loc[:,'Chained 2009 $bil'].pct_change(periods=4))*100
for index,row in aa.iterrows():
qq.loc[qq['Year']==row['Year'],'Change1y'] = row['Pct_Change']
qq.loc[qq['Year']==(row['Year']+0.25),'Change1y'] = row['Pct_Change']
qq.loc[qq['Year']==(row['Year']+0.50),'Change1y'] = row['Pct_Change']
qq.loc[qq['Year']==(row['Year']+0.75),'Change1y'] = row['Pct_Change']
gg = qq.loc[:, ['Quarter','Year','Change1q','Change4q','Change1y']]
print(gg.tail(n=40))
As can be seen from the above output, annualized quarterly GDP growth did surpass 3 percent under Obama in the following quarters:
Quarter Year Change1q Change4q Change1y 251 2009Q4 2009.75 4.468203 0.183325 -2.537056 253 2010Q2 2010.25 3.741260 2.796334 2.564305 259 2011Q4 2011.75 4.718218 1.609462 1.550760 260 2012Q1 2012.00 3.168668 2.651342 2.249269 264 2013Q1 2013.00 3.591924 1.572284 1.842316 266 2013Q3 2013.50 3.170549 1.917303 1.842316 267 2013Q4 2013.75 3.229843 2.614061 1.842316 269 2014Q2 2014.25 5.110240 2.602541 2.451593 270 2014Q3 2014.50 4.925003 3.035985 2.451593 272 2015Q1 2015.00 3.331728 3.808275 2.881099 273 2015Q2 2015.25 3.339844 3.368370 2.881099
In addition, it surpassed 3 percent under Trump in the last 2 of his 7 quarters:
Quarter Year Change1q Change4q Change1y 285 2018Q2 2018.25 4.158495 2.869654 NaN 286 2018Q3 2018.50 3.500156 3.039049 NaN
Over all spans of 4 quarters, real GDP growth surpassed 3 percent under Obama in spans starting in the following quarters:
Quarter Year Change1q Change4q Change1y 254 2010Q3 2010.50 2.981873 3.178574 2.564305 270 2014Q3 2014.50 4.925003 3.035985 2.451593 272 2015Q1 2015.00 3.331728 3.808275 2.881099 273 2015Q2 2015.25 3.339844 3.368370 2.881099
There have been four spans of 4 quarters under Trump and GDP growth just surpassed 3 percent during the last one:
286 2018Q3 2018.50 3.500156 3.039049 NaN
Finally, as previously mentioned, GDP growth did not surpass 3 percent growth during a calendar year under either Obama or Trump though it is likely to surpass 3 percent for 2018. In any case, the following code generates a plot that shows all of the abovementioned percent changes.
import matplotlib.pyplot as plt
%matplotlib inline
#rr = qq[pd.to_numeric(qq['iYear']) >= 2008]
#rr.plot.line(x='Year',y=['Change4q','Change1y','Change1q'],figsize=(10,8),grid=True,title='GDP Growth',yticks=range(-9,6),ylim=(-5,6))
fig = plt.figure(figsize=(10,8))
ax = fig.add_subplot(1, 1, 1)
ax.grid()
ax.set_title('U.S. GDP Growth')
ax.set_xlabel('Source: see http://econdataus.com/gdp_growth_18q3.html')
ax.set_ylabel('Percent Growth')
ax.set_xlim([2008,2018.5]) # #UPDATE x-axis
ax.set_ylim([-5,6])
ax.set_yticks(range(-5,6))
ax.plot(qq.Year,qq.Change4q,'b-')
ax.plot(qq.Year,qq.Change1y,'r-')
ax.plot(qq.Year,qq.Change1q,'g-')
ax.axhline(y=3, color='k', linestyle='--')
ax.legend()
fig.savefig('gdp08_18q3.png')
Hence, saying that "the last administration during an eight-year period never hit 3 percent" and that "we hit 3 percent" was comparing annual calendar figures with quarterly figures (at least when stated in 2017). This is arguably equivalent to comparing apples and oranges. At the very least, it would seem that the current administration had no real grounds to claim that they have improved economic growth at that point. Only if they can consistently surpass 3 percent real GDP growth over several years and/or measurably increase the average GDP growth, would it seem valid to make that claim.
On this topic, it's instructive to look at the GDP projections in Table 3 on page 9 of the OMB's Mid-Session Review for Fiscal Year 2019.
Economic Assumptions for Real GDP (Fourth Quarter-over-Fourth Quarter):
2017 | 2018 | 2019 | 2020 | 2021 | 2022 | 2023 | 2024 | 2025 | 2026 | 2027 | 2028 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2019 MSR | 2.6 | 3.1 | 3.2 | 3.1 | 3.0 | 3.0 | 3.0 | 3.0 | 2.9 | 2.8 | 2.8 | 2.8 |
2019 Budget | 2.5 | 3.1 | 3.2 | 3.1 | 3.0 | 3.0 | 3.0 | 3.0 | 2.9 | 2.8 | 2.8 | 2.8 |
CBO | 2.5 | 3.3 | 2.4 | 1.8 | 1.5 | 1.6 | 1.6 | 1.8 | 1.7 | 1.7 | 1.9 | 1.8 |
Blue Chip | 2.6 | 2.9 | 2.3 | 1.8 | 1.9 | 2.1 | 2.1 | 2.1 | 2.0 | 2.0 | 2.0 | 2.0 |
FOMC | 2.7–3.0 | 2.2–2.6 | 1.8–2.1 | 1.8–2.0 | (longer run) |
As can be seen, all sources project 2018 GDP growth of about 3 percent but only the Trump administration's Budget and Mid-Session Review project that this growth will continue. The CBO (Congressional Budget Office), Blue Chip consensus forecast, and FOMC (Federal Reserve Open Market Committee) all project that this growth will drop over half of a percent in 2019 and a full percent from 2020 on. Hence, the real story regarding GDP growth will be told in 2019 and the following years. There is a PBS article on this topic titled "How Trump’s tax cuts are boosting GDP, and why that might not last".
Note: The Jupyter Notebook from which this post is generated can be found at http://econdataus.com/gdp_growth_18q3.ipynb. It is identical to the one at http://econdataus.com/gdp_growth.ipynb except that it has been updated to include Q3 of 2018. Links to additional Jupyter Notebooks can be found at http://econdataus.com/jupyter.html.