GDP Growth under Obama and Trump

Note: The following text is generally not being updated except for the portion in red which was added in 2020Q3. The tables and graphs, however, are updated through 2020Q3.

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.

Read latest GDP figures from Bureau of Economic Analysis website

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.

In [44]:
import pandas as pd
# pd.read_excel does not work for 2018Q3 and later - save (and convert file to CSV if desired)
#xx = pd.read_excel('https://www.bea.gov/national/xls/gdplev.xlsx', skiprows=7)
xx = pd.read_excel('gdplev.xlsx', skiprows=7) #UPDATE - Save GDP file locally #UPDATE manually?
#xx = pd.read_csv('gdplev.csv', skiprows=7) #UPDATE - Save GDP file locally as a CSV file

#aa = xx.iloc[0:90, 0:3] #UPDATE (0:90 = 2018, 90 = 98(row in file) - 7(skiprows) - 1(hdr))
aa = xx.iloc[0:91, 0:3] #UPDATE (0:91 = 2019, 91 = 99(row in file) - 7(skiprows) - 1(hdr))
aa.columns = ['Year','Current $bil','Chained 2009 $bil']
##qq = xx.iloc[0:289, 4:7] #UPDATE (0:289 = 2019Q1, 289 = 297(row in file - 7(skiprows) - 1(hdr))
#qq = xx.iloc[0:292, 4:7] #UPDATE (0:292 = 2019Q4, 292 = 300(row in file - 7(skiprows) - 1(hdr))
#qq.columns = ['Quarter','Current $bil','Chained 2009 $bil']
# Data no longer on bls site at https://www.bea.gov/national/xls/gdplev.xlsx
# Download current quarterly numbers from https://fred.stlouisfed.org/series/GDP into GDP.csv
# Download real quarterly numbers from https://fred.stlouisfed.org/series/GDPC1 into GDPC1.csv
xxc = pd.read_csv('GDP.csv', skiprows=0) #UPDATE - Save GDP file locally as a CSV file
xxr = pd.read_csv('GDPC1.csv', skiprows=0) #UPDATE - Save GDP file locally as a CSV file
qq = pd.merge(xxc, xxr, on='DATE')
qq.columns = ['Quarter','Current $bil','Chained 2009 $bil']
#print(qq)
lastq = '20q3' #UPDATE

# Must convert strings to floats if read from CSV file (comment out values are already floats)
#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))
     Year  Current $bil  Chained 2009 $bil  Pct_Change
0  1929.0         104.6             1109.4         NaN
1  1930.0          92.2             1015.1   -8.500090
2  1931.0          77.4              950.0   -6.413161
3  1932.0          59.5              827.5  -12.894737
4  1933.0          57.2              817.3   -1.232628
      Year  Current $bil  Chained 2009 $bil  Pct_Change
73  2002.0       10936.4            13493.1    1.741806
74  2003.0       11458.2            13879.1    2.860721
75  2004.0       12213.7            14406.4    3.799238
76  2005.0       13036.6            14912.5    3.513022
77  2006.0       13814.6            15338.3    2.855323
78  2007.0       14451.9            15626.0    1.875697
79  2008.0       14712.8            15604.7   -0.136311
80  2009.0       14448.9            15208.8   -2.537056
81  2010.0       14992.1            15598.8    2.564305
82  2011.0       15542.6            15840.7    1.550760
83  2012.0       16197.0            16197.0    2.249269
84  2013.0       16784.9            16495.4    1.842316
85  2014.0       17527.3            16912.0    2.525553
86  2015.0       18224.8            17403.8    2.907994
87  2016.0       18715.0            17688.9    1.638148
88  2017.0       19519.4            18108.1    2.369848
89  2018.0       20580.2            18638.2    2.927419
90  2019.0       21429.0            19072.5    2.330161

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:

In [45]:
import matplotlib.pyplot as plt
%matplotlib inline
aa.plot.line(x='Year',y='Pct_Change',figsize=(10,8),grid=True,title='GDP Growth: 1930-2019') #UPDATE
Out[45]:
<matplotlib.axes._subplots.AxesSubplot at 0x28e8a632988>

The following code prints the quarterly GDP data and the percent change in real quarterly GDP.

In [46]:
print(qq.head())
print(qq.tail(10))
qq['Quarter'] = qq['Quarter'].str[0:4]
for index,row in qq.iterrows():
    qtr = 1 + index % 4
    #row['Quarter'] = row['Quarter'].str[0:4] + 'Q' + pd.to_character(index % 4)
    #qq[index,'Quarter'] = row['Quarter'] + 'Q' + str(qtr)
    #qq.loc[index,'Quarter'] = row['Quarter'].str[0:4] + 'Q' + str(qtr)
    qq.loc[index,'Quarter'] = qq.loc[index,'Quarter'] + 'Q' + str(qtr)
print(qq.head())
print(qq.tail(10))
      Quarter  Current $bil  Chained 2009 $bil  Pct_Change
0  1947-01-01       243.164           2033.061         NaN
1  1947-04-01       245.968           2027.639   -0.266691
2  1947-07-01       249.585           2023.452   -0.206496
3  1947-10-01       259.745           2055.103    1.564208
4  1948-01-01       265.742           2086.017    1.504256
        Quarter  Current $bil  Chained 2009 $bil  Pct_Change
285  2018-04-01     20552.653          18654.383    0.668628
286  2018-07-01     20742.723          18752.355    0.525196
287  2018-10-01     20909.853          18813.923    0.328321
288  2019-01-01     21115.309          18950.347    0.725123
289  2019-04-01     21329.877          19020.599    0.370716
290  2019-07-01     21540.325          19141.744    0.636915
291  2019-10-01     21747.394          19253.959    0.586232
292  2020-01-01     21561.139          19010.848   -1.262655
293  2020-04-01     19520.114          17302.511   -8.986117
294  2020-07-01     21157.635          18583.984    7.406283
  Quarter  Current $bil  Chained 2009 $bil  Pct_Change
0  1947Q1       243.164           2033.061         NaN
1  1947Q2       245.968           2027.639   -0.266691
2  1947Q3       249.585           2023.452   -0.206496
3  1947Q4       259.745           2055.103    1.564208
4  1948Q1       265.742           2086.017    1.504256
    Quarter  Current $bil  Chained 2009 $bil  Pct_Change
285  2018Q2     20552.653          18654.383    0.668628
286  2018Q3     20742.723          18752.355    0.525196
287  2018Q4     20909.853          18813.923    0.328321
288  2019Q1     21115.309          18950.347    0.725123
289  2019Q2     21329.877          19020.599    0.370716
290  2019Q3     21540.325          19141.744    0.636915
291  2019Q4     21747.394          19253.959    0.586232
292  2020Q1     21561.139          19010.848   -1.262655
293  2020Q2     19520.114          17302.511   -8.986117
294  2020Q3     21157.635          18583.984    7.406283

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.

Calculate percent change over the each quarter (annualized), each 4 quarters, and each calendar year

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.

In [47]:
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))
    Quarter     Year   Change1q  Change4q  Change1y
255  2010Q4  2010.75   2.022775  2.569455  2.564305
256  2011Q1  2011.00  -0.958302  1.930627  1.550760
257  2011Q2  2011.25   2.890711  1.721503  1.550760
258  2011Q3  2011.50  -0.111068  0.949038  1.550760
259  2011Q4  2011.75   4.718401  1.609346  1.550760
260  2012Q1  2012.00   3.168948  2.651757  2.249269
261  2012Q2  2012.25   1.731942  2.361509  2.249269
262  2012Q3  2012.50   0.540886  2.528125  2.249269
263  2012Q4  2012.75   0.456272  1.468567  2.249269
264  2013Q1  2013.00   3.590044  1.571948  1.842316
265  2013Q2  2013.25   0.494500  1.261655  1.842316
266  2013Q3  2013.50   3.170678  1.917418  1.842316
267  2013Q4  2013.75   3.231432  2.614123  1.842316
268  2014Q1  2014.00  -1.126034  1.425725  2.525553
269  2014Q2  2014.25   5.525668  2.672012  2.525553
270  2014Q3  2014.50   4.973900  3.117728  2.525553
271  2014Q4  2014.75   2.270251  2.876855  2.525553
272  2015Q1  2015.00   3.851017  4.147747  2.907994
273  2015Q2  2015.25   2.734045  3.452014  2.907994
274  2015Q3  2015.50   1.458326  2.574767  2.907994
275  2015Q4  2015.75   0.642994  2.164284  2.907994
276  2016Q1  2016.00   2.284976  1.776935  1.638148
277  2016Q2  2016.25   1.253523  1.408255  1.638148
278  2016Q3  2016.50   2.195431  1.591940  1.638148
279  2016Q4  2016.75   2.541054  2.067579  1.638148
280  2017Q1  2017.00   2.281947  2.066823  2.369848
281  2017Q2  2017.25   1.718744  2.183861  2.369848
282  2017Q3  2017.50   2.947362  2.371306  2.369848
283  2017Q4  2017.75   3.877858  2.703335  2.369848
284  2018Q1  2018.00   3.779122  3.077125  2.927419
285  2018Q2  2018.25   2.701456  3.325187  2.927419
286  2018Q3  2018.50   2.117390  3.116300  2.927419
287  2018Q4  2018.75   1.319768  2.475518  2.927419
288  2019Q1  2019.00   2.932191  2.265802  2.330161
289  2019Q2  2019.25   1.491131  1.963163  2.330161
290  2019Q3  2019.50   2.572102  2.076481  2.330161
291  2019Q4  2019.75   2.365628  2.338885  2.330161
292  2020Q1  2020.00  -4.955763  0.319261       NaN
293  2020Q2  2020.25 -31.383181 -9.032775       NaN
294  2020Q3  2020.50  33.081827 -2.913841       NaN
In [48]:
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_'+lastq+'.html')
ax.set_ylabel('Percent Growth')
ax.set_xlim([2008,2020.5]) # #UPDATE x-axis
#ax.set_ylim([-5,6])
#ax.set_yticks(range(-5,6))
#ax.set_ylim([-10,6])
#ax.set_yticks(range(-10,6,2))
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='--')
ytext=-34
ax.axvline(x=2009, linestyle='dashed', alpha=0.5, color='red')
ax.text(x=2009.1, y=ytext, s='Obama', color='red')
ax.axvline(x=2017, linestyle='dashed', alpha=0.5, color='red')
ax.text(x=2017.1, y=ytext, s='Trump', color='red')
ax.axvline(x=2020, linestyle='dashed', alpha=0.5, color='red')
ax.text(x=2020.1, y=ytext, s='COVID-19', color='red')
ax.legend(['Change4q','Change1y','Change1q'])
fig.savefig('gdp08_'+lastq+'.png')

As the above table and graph show, GDP plunged by 31.4 percent in 2020Q1 and recovered 33.1 percent in 2020Q3. This gives no indication of the net gain over those two quarters. Hence, the following code skips 2020Q2 and shows percent change from 2020Q1 to 2020Q3 as the Change1q value for 2020Q3. For both Change1q and Change4q, the value for 2020Q2 is set to the interpolated value halfway between the values for 2020Q1 and 2020Q3. This effectively skips 2020Q2.

In [49]:
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.loc[294,'Change1q'] = (qq.loc[294,'Chained 2009 $bil'] / qq.loc[292,'Chained 2009 $bil'] - 1)*100 # skip 2020Q2
qq['Change4q'] = (qq.loc[:,'Chained 2009 $bil'].pct_change(periods=4))*100
qq.loc[293,'Change1q'] = (qq.loc[292,'Change1q'] + qq.loc[294,'Change1q']) / 2 # interpolate
qq.loc[293,'Change4q'] = (qq.loc[292,'Change4q'] + qq.loc[294,'Change4q']) / 2 # interpolate
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))
    Quarter     Year  Change1q  Change4q  Change1y
255  2010Q4  2010.75  2.022775  2.569455  2.564305
256  2011Q1  2011.00 -0.958302  1.930627  1.550760
257  2011Q2  2011.25  2.890711  1.721503  1.550760
258  2011Q3  2011.50 -0.111068  0.949038  1.550760
259  2011Q4  2011.75  4.718401  1.609346  1.550760
260  2012Q1  2012.00  3.168948  2.651757  2.249269
261  2012Q2  2012.25  1.731942  2.361509  2.249269
262  2012Q3  2012.50  0.540886  2.528125  2.249269
263  2012Q4  2012.75  0.456272  1.468567  2.249269
264  2013Q1  2013.00  3.590044  1.571948  1.842316
265  2013Q2  2013.25  0.494500  1.261655  1.842316
266  2013Q3  2013.50  3.170678  1.917418  1.842316
267  2013Q4  2013.75  3.231432  2.614123  1.842316
268  2014Q1  2014.00 -1.126034  1.425725  2.525553
269  2014Q2  2014.25  5.525668  2.672012  2.525553
270  2014Q3  2014.50  4.973900  3.117728  2.525553
271  2014Q4  2014.75  2.270251  2.876855  2.525553
272  2015Q1  2015.00  3.851017  4.147747  2.907994
273  2015Q2  2015.25  2.734045  3.452014  2.907994
274  2015Q3  2015.50  1.458326  2.574767  2.907994
275  2015Q4  2015.75  0.642994  2.164284  2.907994
276  2016Q1  2016.00  2.284976  1.776935  1.638148
277  2016Q2  2016.25  1.253523  1.408255  1.638148
278  2016Q3  2016.50  2.195431  1.591940  1.638148
279  2016Q4  2016.75  2.541054  2.067579  1.638148
280  2017Q1  2017.00  2.281947  2.066823  2.369848
281  2017Q2  2017.25  1.718744  2.183861  2.369848
282  2017Q3  2017.50  2.947362  2.371306  2.369848
283  2017Q4  2017.75  3.877858  2.703335  2.369848
284  2018Q1  2018.00  3.779122  3.077125  2.927419
285  2018Q2  2018.25  2.701456  3.325187  2.927419
286  2018Q3  2018.50  2.117390  3.116300  2.927419
287  2018Q4  2018.75  1.319768  2.475518  2.927419
288  2019Q1  2019.00  2.932191  2.265802  2.330161
289  2019Q2  2019.25  1.491131  1.963163  2.330161
290  2019Q3  2019.50  2.572102  2.076481  2.330161
291  2019Q4  2019.75  2.365628  2.338885  2.330161
292  2020Q1  2020.00 -4.955763  0.319261       NaN
293  2020Q2  2020.25 -3.600567 -1.297290       NaN
294  2020Q3  2020.50 -2.245371 -2.913841       NaN

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.

In [54]:
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 (combine 2020Q2 and 2020Q3)')
ax.set_xlabel('Source: see http://econdataus.com/gdp_growth_'+lastq+'.html')
ax.set_ylabel('Percent Growth')
ax.set_xlim([2008,2020.5]) # #UPDATE x-axis
ax.set_ylim([-9,6])
#ax.set_ylim([-5,6])
#ax.set_yticks(range(-5,6))
#ax.set_ylim([-10,6])
#ax.set_yticks(range(-10,6,2))
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='--')
ytext=-8.9
ax.axvline(x=2009, linestyle='dashed', alpha=0.5, color='red')
ax.text(x=2009.1, y=ytext, s='Obama', color='red')
ax.axvline(x=2017, linestyle='dashed', alpha=0.5, color='red')
ax.text(x=2017.1, y=ytext, s='Trump', color='red')
ax.axvline(x=2020, linestyle='dashed', alpha=0.5, color='red')
ax.text(x=2020.1, y=ytext, s='COVID-19', color='red')
ax.legend(['Change4q','Change1y','Change1q'])
fig.savefig('gdp08_'+lastq+'_skip20q2.png')
In [55]:
fig = plt.figure(figsize=(10,8))
ax = fig.add_subplot(1, 1, 1)
ax.grid()
ax.set_title('U.S. GDP Growth (combine 2020Q2 and 2020Q3)')
ax.set_xlabel('Source: see http://econdataus.com/gdp_growth_'+lastq+'.html')
ax.set_ylabel('Percent Growth')
ax.set_xlim([2008,2020.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='--')
ytext=-4.9
ax.axvline(x=2009, linestyle='dashed', alpha=0.5, color='red')
ax.text(x=2009.1, y=ytext, s='Obama', color='red')
ax.axvline(x=2017, linestyle='dashed', alpha=0.5, color='red')
ax.text(x=2017.1, y=ytext, s='Trump', color='red')
ax.axvline(x=2020, linestyle='dashed', alpha=0.5, color='red')
ax.text(x=2020.1, y=ytext, s='COVID-19', color='red')
ax.legend(['Change4q','Change1y','Change1q'])
fig.savefig('gdp08_'+lastq+'_5.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_20q3.ipynb. It is identical to the one at http://econdataus.com/gdp_growth.ipynb except that it has been updated to include Q3 of 2020. Links to additional Jupyter Notebooks can be found at http://econdataus.com/jupyter.html.

In [ ]: