# Lecture Support: Solow Growth Model: Initial and Alternative Scenarios: 2020-01-23¶

In [1]:
# prepare the python environment with the numerical
# analysis package (np), the database package (pd), &
# the matlab clone plotting package (plt):

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

In [2]:
# THESE ARE ALL QUANTITIES YOU CAN CHANGE AT WILL

# choose the model parameters:
n = 0.01 # the labor-force L proportional growth rate
g = 0.02 # the labor-efficiency E proportional growth rate
s = 0.12 # the share of production Y that is saved and invested
δ = 0.03 # the capital depreciation rate
θ = 1.00 # the elasticity of production Y with respect to capital
# intensity κ
#
# additional variables in the model: output per worker y; the
# capital stock K

# choose starting values L_0, E_0, and κ_0 for the labor force, labor
# efficiency, and capital intensity:
L_0 = 1
E_0 = 1
κ_0 = 8

# choose the period at which something changes in the model:
T_alt = 50

# choose the parameter that changes:
Δs = 0.00 # a change in the savings-investment rate
Δg = 0.00 # a change in the labor-efficiency growth rate
Δn = 0.00 # a change in the labor-force growth rate
ΔK = -0.7 # proportional change in the capital stock (due,
# for example, to wartime destruction)

# choose the length of time for which the simulation will run:
T = 100

In [3]:
# initialize the list of labor force values for the initial scenario:
L = [L_0]

# calculate the labor force for the duration of the
# simulation:
for t in range(T):
L = L + [L[t]*np.exp(n)]

# initialize the dataframe:
solow_df = pd.DataFrame()

# stuff the list of labor-force values into the dataframe:
solow_df['L'] = L

# initialize the list of labor efficiency values:
E = [E_0]

# calculate labor efficiency for the duration of the
# simulation:
for t in range(T):
E = E + [E[t]*np.exp(g)]

# stuff the list of labor-efficiency values into the dataframe:
solow_df['E'] = E

# initialize the list of capital-intensity values:
κ = [κ_0]

# calculate capital intensity for the duration of the
# simulation:
for t in range(T):
κ = κ + [κ[t]*(1 + (s/κ[t] - (n+g+δ))/(1+θ))]

# stuff the list of capital-intensity values into the dataframe:
solow_df['κ'] = κ

In [4]:
# initialize the list of labor force values for the alternative
# scenario:
L_alt = [L_0]

# calculate the labor force for the duration of the
# simulation:
for t in range(T_alt):
L_alt = L_alt + [L_alt[t]*np.exp(n)]

for t in range(T_alt, T):
L_alt = L_alt + [L_alt[t]*np.exp(n+Δn)]

# stuff the list of labor-force values into the dataframe:
solow_df['L_alt'] = L_alt

In [5]:
# initialize the list of labor efficiency values:
E_alt = [E_0]

# calculate labor efficiency for the duration of the
# simulation:
for t in range(T_alt):
E_alt = E_alt + [E_alt[t]*np.exp(g)]

for t in range(T_alt, T):
E_alt = E_alt + [E_alt[t]*np.exp(g+Δg)]

# stuff the list of labor-efficiency values into the dataframe:
solow_df['E_alt'] = E_alt

In [6]:
# initialize the list of capital-intensity values:
κ_alt = [κ_0]

# calculate capital intensity for the duration of the
# simulation:
for t in range(T_alt):
κ_alt = κ_alt + [κ_alt[t]*(1 + ((s)/κ_alt[t] - (n+g+δ))/(1+θ))]

κ_alt[T_alt] = np.exp(ΔK/(1+θ))*κ_alt[T_alt]

for t in range(T_alt, T):
κ_alt = κ_alt + [κ_alt[t]*(1 + ((s+Δs)/κ_alt[t] - (n+g+δ+Δn+Δg))/(1+θ))]

# stuff the list of capital-intensity values into the dataframe:
solow_df['κ_alt'] = κ_alt

In [7]:
# calculate the remaining variables in the model

# initialize the lists of values:
Y = []
K = []
y = []

Y_alt = []
K_alt = []
y_alt = []

# calculate the variables for the duration of the
# simulation:
for t in range(T+1):
Y = Y + [(κ[t]**θ)*L[t]*E[t]]
K = K + [(κ[t]*Y[t])]
y = y + [Y[t]/L[t]]

# stuff the lists of values into the dataframe:
solow_df['Y'] = Y
solow_df['K'] = K
solow_df['y'] = y

# calculate the variables for the duration of the
# simulation:
for t in range(T_alt+1):
Y_alt = Y_alt + [(κ_alt[t]**θ)*L_alt[t]*E_alt[t]]
K_alt = K_alt + [(κ_alt[t]*Y_alt[t])]
y_alt = y_alt + [Y_alt[t]/L_alt[t]]

for t in range(T_alt+1,T+1):
Y_alt = Y_alt + [(κ_alt[t]**θ)*L_alt[t]*E_alt[t]]
K_alt = K_alt + [(κ_alt[t]*Y_alt[t])]
y_alt = y_alt + [Y_alt[t]/L_alt[t]]

# stuff the lists of values into the dataframe:
solow_df['Y_alt'] = Y_alt
solow_df['K_alt'] = K_alt
solow_df['y_alt'] = y_alt

# plot the entire dataframe:
solow_df.plot()

# set the y-axis minimum to zero, title the plot,
# & tell python to show the plot:
plt.ylim(bottom=0)
plt.title('All the Model Variables')
plt.show()

In [8]:
# show the labor force:
solow_df[['L','L_alt']].plot()
# set the y-axis minimum to zero, title the plot,
# & tell python to show the plot:
plt.ylim(bottom=0)
plt.title("Labor Force: Baseline (Blue) and Alternative (Orange) Scenarios")
plt.show()

In [9]:
# show labor efficiency:
solow_df[['E','E_alt']].plot()
# set the y-axis minimum to zero, title the plot,
# & tell python to show the plot:
plt.ylim(bottom=0)
plt.title("Labor Efficiency: Baseline (Blue) and Alternative (Orange) Scenarios")
plt.show()

In [10]:
# show capital intensity:
solow_df[['κ','κ_alt']].plot()
# set the y-axis minimum to zero, title the plot,
# & tell python to show the plot:
plt.ylim(bottom=0)
plt.title("Capital Intensity: Baseline (Blue) and Alternative (Orange) Scenarios")
plt.show()

In [11]:
# show output per worker:
solow_df[['y','y_alt']].plot()
# set the y-axis minimum to zero, title the plot,
# & tell python to show the plot:
plt.ylim(bottom=0)
plt.title("Output per Worker: Baseline (Blue) and Alternative (Orange) Scenarios")
plt.show()

In [12]:
# show output:
solow_df[['Y','Y_alt']].plot()
# set the y-axis minimum to zero, title the plot,
# & tell python to show the plot:
plt.ylim(bottom=0)
plt.title("Output: Baseline (Blue) and Alternative (Orange) Scenarios")
plt.show()

In [13]:
# show the capital stock:
solow_df[['K','K_alt']].plot()
# set the y-axis minimum to zero, title the plot,
# & tell python to show the plot:
plt.ylim(bottom=0)
plt.title("Capital Stock: Baseline (Blue) and Alternative (Orange) Scenarios")
plt.show()