In [165]:
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
N = 100
G = np.zeros(N) # government spending
G = 20 + np.arange(0,N)/5.0
G[50:] = 18 + np.arange(50,N)/5.0
theta = 0.2 # tax rate
alpha_Y = 0.9
alpha_H = 0.2
Y = np.zeros(N) # income
T = np.zeros(N) # tax revenue
C = np.zeros(N) # consumption
H_h = np.zeros(N) # private savings
H_g = np.zeros(N) # government balance
Y[0] = 100
C[0] = 80
T[0] = 20
H_h[0] = 100*0.4
H_g[0] = -100*0.4
In [166]:
for t in range(1, N):
# calculate total income for this time step (equation 1)
Y[t] = (G[t] + alpha_H*H_h[t-1])/(1 - alpha_Y*(1-theta))
# calculate the tax paid on income for this time step (3)
T[t] = theta * Y[t]
# calculate the consumption spending for this time step (4)
C[t] = alpha_Y*(1 - theta)*Y[t] + alpha_H*H_h[t-1]
# calculate the new level of private savings for this time step (5)
H_h[t] = H_h[t-1] + Y[t] - T[t] - C[t]
# calculate the new level of government money balance (6)
H_g[t] = H_g[t-1] + T[t]- G[t]
In [167]:
# initialise plot figure
fig = plt.figure(figsize=(12, 4))
# plot government spending (G) through time
gov_plot = fig.add_subplot(131, xlim=(0, N), ylim=(0, 200)) # set axis limits
gov_plot.plot(range(N), G, lw=3) # plot constant G versus time
gov_plot.grid() # add gridlines
plt.xlabel('time') # label x axis
plt.ylabel('government spending') # label y axis
# plot consumption spending (C) through time
consumption_plot = fig.add_subplot(132, xlim=(0, N), ylim=(0, 200)) # set axis limits
consumption_plot.plot(range(N), C, lw=3) # plot C versus time
consumption_plot.grid() # add gridlines
plt.xlabel('time') # label x axis
plt.ylabel('consumption') # label y axis
# plot aggregate income (Y) through time
income_plot = fig.add_subplot(133, xlim=(0, N), ylim=(0, 200)) # set axis limits
income_plot.plot(range(N), Y, lw=3) # plot Y versus time
income_plot.grid() # add gridlines
plt.xlabel('time') # label x axis
plt.ylabel('income') # label y axis
plt.tight_layout() # space subplots neatly
In [168]:
# initialise plot figure
fig = plt.figure(figsize=(8, 4))
gov_plot = fig.add_subplot(121, xlim=(0, N), ylim=(0, np.max(G)*1.5)) # set axis limits
gov_plot.plot(range(N), G, lw=3) # plot constant G versus time
gov_plot.grid() # add gridlines
plt.xlabel('time') # label x axis
plt.ylabel('government spending') # label y axis
tax_plot = fig.add_subplot(122, xlim=(0, N), ylim=(0, np.max(G)*1.5)) # set axis limits
tax_plot.plot(range(N), T, lw=3) # plot tax revenue versus time
tax_plot.grid() # add gridlines
plt.xlabel('time') # label x axis
plt.ylabel('tax revenue') # label y axis
plt.tight_layout() # space subplots neatly
In [169]:
# initialise plot figure
fig = plt.figure(figsize=(8, 4))
budget_plot = fig.add_subplot(121, xlim=(0, N), ylim=(-10, 10)) # set axis limits
budget_plot.plot(range(N), T-G, lw=3) # plot gov budget versus time
budget_plot.plot(range(N), Y-T-C, lw=3) # plot private budget versus time
budget_plot.grid() # add gridlines
plt.xlabel('time') # label x axis
plt.ylabel('budget position') # label y axis
balance_plot = fig.add_subplot(122, xlim=(0, N), ylim=(np.min(H_g), np.max(H_h))) # set axis limits
balance_plot.plot(range(N), H_g, lw=3) # plot gov balance versus time
balance_plot.plot(range(N), H_h, lw=3) # plot private balance versus time
balance_plot.grid() # add gridlines
plt.xlabel('time') # label x axis
plt.ylabel('money balance') # label y axis
plt.tight_layout() # space subplots neatly
In [136]:
# initialise plot figure
fig = plt.figure(figsize=(8, 4))
wealth_ratio_plot = fig.add_subplot(121, xlim=(0, N), ylim=(0,0.6)) # set axis limits
wealth_ratio_plot.plot(range(N), H_h/Y) # plot gov budget versus time
wealth_ratio_plot.grid() # add gridlines
plt.xlabel('time') # label x axis
plt.ylabel('budget position') # label y axis # label y axis
plt.tight_layout() # space subplots neatly
Stationary state versus steady state
What growth represents Increase in population? Increase in productivity? Inflation Note that model does not include real goods and services, only nominal output
In [ ]: