56. Globalization and Cycles#
Co-authored with Chase Coleman
56.1. Overview#
In this lecture, we review the paper Globalization and Synchronization of Innovation Cycles by Kiminori Matsuyama, Laura Gardini and Iryna Sushko.
This model helps us understand several interesting stylized facts about the world economy.
One of these is synchronized business cycles across different countries.
Most existing models that generate synchronized business cycles do so by assumption, since they tie output in each country to a common shock.
They also fail to explain certain features of the data, such as the fact that the degree of synchronization tends to increase with trade ties.
By contrast, in the model we consider in this lecture, synchronization is both endogenous and increasing with the extent of trade integration.
In particular, as trade costs fall and international competition increases, innovation incentives become aligned and countries synchronize their innovation cycles.
56.1.1. Background#
The model builds on work by Judd [Jud85], Deneckner and Judd [DJ92] and Helpman and Krugman [HK85] by developing a two country model with trade and innovation.
On the technical side, the paper introduces the concept of coupled oscillators to economic modeling.
As we will see, coupled oscillators arise endogenously within the model.
Below we review the model and replicate some of the results on synchronization of innovation across countries.
56.2. Key Ideas#
It is helpful to begin with an overview of the mechanism.
56.2.1. Innovation Cycles#
As discussed above, two countries produce and trade with each other.
In each country, firms innovate, producing new varieties of goods and, in doing so, receiving temporary monopoly power.
Imitators follow and, after one period of monopoly, what had previously been new varieties now enter competitive production.
Firms have incentives to innovate and produce new goods when the mass of varieties of goods currently in production is relatively low.
In addition, there are strategic complementarities in the timing of innovation.
Firms have incentives to innovate in the same period, so as to avoid competing with substitutes that are competitively produced.
This leads to temporal clustering in innovations in each country.
After a burst of innovation, the mass of goods currently in production increases.
However, goods also become obsolete, so that not all survive from period to period.
This mechanism generates a cycle, where the mass of varieties increases through simultaneous innovation and then falls through obsolescence.
56.2.2. Synchronization#
In the absence of trade, the timing of innovation cycles in each country is decoupled.
This will be the case when trade costs are prohibitively high.
If trade costs fall, then goods produced in each country penetrate each other’s markets.
As illustrated below, this leads to synchonization of business cycles across the two countries.
56.3. Model#
Let’s write down the model more formally.
(The treatment is relatively terse since full details can be found in the original paper)
Time is discrete with
There are two countries indexed by
In each country, a representative household inelastically supplies
Without loss of generality, it is assumed that
Households consume a single nontradeable final good which is produced competitively.
Its production involves combining two types of tradeable intermediate inputs via
Here
It is freely tradeable, competitively supplied, and homogeneous across countries.
By choosing the price of this good as numeraire and assuming both countries find it optimal to always produce the homogeneous good, we can set
The good
Here
The parameter
We can split the varieties into those which are supplied competitively and those supplied monopolistically; that is,
56.3.1. Prices#
Demand for differentiated inputs is
Here
is the price of the variety and is the price index for differentiated inputs in , defined by
The price of a variety also depends on the origin,
Thus the effective price in country
Using these expressions, we can derive the total demand for each variety, which is
where
It is assumed that
The value
Producing one unit of each differentiated variety requires
Additionally, all competitive varieties will have the same price (because of equal marginal cost), which means that, for all
Monopolists will have the same marked-up price, so, for all
Define
Using the preceding definitions and some algebra, the price indices can now be rewritten as
The symbols
56.3.2. New Varieties#
To introduce a new variety, a firm must hire
Monopolist profits must be less than or equal to zero in expectation, so
With further manipulations, this becomes
56.3.3. Law of Motion#
With
We will work with a normalized measure of varieties
We also use
We can use these definitions and the preceding expressions to obtain a law of
motion for
In particular, given an initial condition,
Here
while
and
Rewriting the equation above gives us a quadratic equation in terms of
Since we know
This gives us
56.4. Simulation#
Let’s try simulating some of these trajectories.
We will focus in particular on whether or not innovation cycles synchronize across the two countries.
As we will see, this depends on initial conditions.
For some parameterizations, synchronization will occur for “most” initial conditions, while for others synchronization will be rare.
Here’s the main body of code.
using LinearAlgebra, Statistics, Plots
function h_j(j, nk, s1, s2, theta, delta, rho)
# Find out who's h we are evaluating
if j == 1
sj = s1
sk = s2
else
sj = s2
sk = s1
end
# Coefficients on the quadratic a x^2 + b x + c = 0
a = 1.0
b = ((rho + 1 / rho) * nk - sj - sk)
c = (nk * nk - (sj * nk) / rho - sk * rho * nk)
# Positive solution of quadratic form
root = (-b + sqrt(b * b - 4 * a * c)) / (2 * a)
return root
end
function DLL(n1, n2, s1_rho, s2_rho, s1, s2, theta, delta, rho)
(n1 <= s1_rho) && (n2 <= s2_rho)
end
function DHH(n1, n2, s1_rho, s2_rho, s1, s2, theta, delta, rho)
(n1 >= h_j(1, n2, s1, s2, theta, delta, rho)) &&
(n2 >= h_j(2, n1, s1, s2, theta, delta, rho))
end
function DHL(n1, n2, s1_rho, s2_rho, s1, s2, theta, delta, rho)
(n1 >= s1_rho) && (n2 <= h_j(2, n1, s1, s2, theta, delta, rho))
end
function DLH(n1, n2, s1_rho, s2_rho, s1, s2, theta, delta, rho)
(n1 <= h_j(1, n2, s1, s2, theta, delta, rho)) && (n2 >= s2_rho)
end
function one_step(n1, n2, s1_rho, s2_rho, s1, s2, theta, delta, rho)
# Depending on where we are, evaluate the right branch
if DLL(n1, n2, s1_rho, s2_rho, s1, s2, theta, delta, rho)
n1_tp1 = delta * (theta * s1_rho + (1 - theta) * n1)
n2_tp1 = delta * (theta * s2_rho + (1 - theta) * n2)
elseif DHH(n1, n2, s1_rho, s2_rho, s1, s2, theta, delta, rho)
n1_tp1 = delta * n1
n2_tp1 = delta * n2
elseif DHL(n1, n2, s1_rho, s2_rho, s1, s2, theta, delta, rho)
n1_tp1 = delta * n1
n2_tp1 = delta * (theta * h_j(2, n1, s1, s2, theta, delta, rho) +
(1 - theta) * n2)
elseif DLH(n1, n2, s1_rho, s2_rho, s1, s2, theta, delta, rho)
n1_tp1 = delta * (theta * h_j(1, n2, s1, s2, theta, delta, rho) +
(1 - theta) * n1)
n2_tp1 = delta * n2
end
return n1_tp1, n2_tp1
end
function new_n1n2(n1_0, n2_0, s1_rho, s2_rho, s1, s2, theta, delta, rho)
one_step(n1_0, n2_0, s1_rho, s2_rho, s1, s2, theta, delta, rho)
end
function pers_till_sync(n1_0, n2_0, s1_rho, s2_rho, s1, s2, theta, delta, rho,
maxiter, npers)
# Initialize the status of synchronization
synchronized = false
pers_2_sync = maxiter
iters = 0
nsync = 0
while (!synchronized) && (iters < maxiter)
# Increment the number of iterations and get next values
iters += 1
n1_t, n2_t = new_n1n2(n1_0, n2_0, s1_rho, s2_rho, s1, s2, theta, delta,
rho)
# Check whether same in this period
if abs(n1_t - n2_t) < 1e-8
nsync += 1
# If not, then reset the nsync counter
else
nsync = 0
end
# If we have been in sync for npers then stop and countries
# became synchronized nsync periods ago
if nsync > npers
synchronized = true
pers_2_sync = iters - nsync
end
n1_0, n2_0 = n1_t, n2_t
end
return synchronized, pers_2_sync
end
function create_attraction_basis(s1_rho, s2_rho, s1, s2, theta, delta, rho,
maxiter, npers, npts)
# Create unit range with npts
synchronized, pers_2_sync = false, 0
unit_range = range(0.0, 1.0, length = npts)
# Allocate space to store time to sync
time_2_sync = zeros(npts, npts)
# Iterate over initial conditions
for (i, n1_0) in enumerate(unit_range)
for (j, n2_0) in enumerate(unit_range)
synchronized, pers_2_sync = pers_till_sync(n1_0, n2_0, s1_rho,
s2_rho, s1, s2, theta,
delta, rho, maxiter,
npers)
time_2_sync[i, j] = pers_2_sync
end
end
return time_2_sync
end
# model
function MSGSync(s1 = 0.5, theta = 2.5, delta = 0.7, rho = 0.2)
# Store other cutoffs and parameters we use
s2 = 1 - s1
s1_rho = min((s1 - rho * s2) / (1 - rho), 1)
s2_rho = 1 - s1_rho
return (; s1, s2, s1_rho, s2_rho, theta, delta, rho)
end
function simulate_n(model, n1_0, n2_0, T)
(; s1, s2, theta, delta, rho, s1_rho, s2_rho) = model
# Allocate space
n1 = zeros(T)
n2 = zeros(T)
# Simulate for T periods
for t in 1:T
# Get next values
n1[t], n2[t] = n1_0, n2_0
n1_0, n2_0 = new_n1n2(n1_0, n2_0, s1_rho, s2_rho, s1, s2, theta, delta,
rho)
end
return n1, n2
end
function pers_till_sync(model, n1_0, n2_0, maxiter = 500, npers = 3)
(; s1, s2, theta, delta, rho, s1_rho, s2_rho) = model
return pers_till_sync(n1_0, n2_0, s1_rho, s2_rho, s1, s2,
theta, delta, rho, maxiter, npers)
end
function create_attraction_basis(model;
maxiter = 250,
npers = 3,
npts = 50)
(; s1, s2, theta, delta, rho, s1_rho, s2_rho) = model
ab = create_attraction_basis(s1_rho, s2_rho, s1, s2, theta, delta,
rho, maxiter, npers, npts)
return ab
end
create_attraction_basis (generic function with 2 methods)
56.4.1. Time Series of Firm Measures#
We write a short function below that exploits the preceding code and plots two time series.
Each time series gives the dynamics for the two countries.
The time series share parameters but differ in their initial condition.
Here’s the function
function plot_timeseries(n1_0, n2_0, s1 = 0.5, theta = 2.5, delta = 0.7,
rho = 0.2)
model = MSGSync(s1, theta, delta, rho)
n1, n2 = simulate_n(model, n1_0, n2_0, 25)
return [n1 n2]
end
# Create figures
data_ns = plot_timeseries(0.15, 0.35)
data_s = plot_timeseries(0.4, 0.3)
plot(data_ns, title = "Not Synchronized", legend = false)
plot(data_s, title = "Synchronized", legend = false)
In the first case, innovation in the two countries does not synchronize.
In the second case different initial conditions are chosen, and the cycles become synchronized.
56.4.2. Basin of Attraction#
Next let’s study the initial conditions that lead to synchronized cycles more systematically.
We generate time series from a large collection of different initial conditions and mark those conditions with different colors according to whether synchronization occurs or not.
The next display shows exactly this for four different parameterizations (one for each subfigure).
Dark colors indicate synchronization, while light colors indicate failure to synchronize.
As you can see, larger values of
You are asked to replicate this figure in the exercises.
56.5. Exercises#
56.5.1. Exercise 1#
Replicate the figure shown above by coloring initial conditions according to whether or not synchronization occurs from those conditions.
56.6. Solutions#
56.6.1. Exercise 1#
function plot_attraction_basis(s1 = 0.5, theta = 2.5, delta = 0.7, rho = 0.2;
npts = 250)
# Create attraction basis
unitrange = range(0, 1, length = npts)
model = MSGSync(s1, theta, delta, rho)
ab = create_attraction_basis(model, npts = npts)
plt = Plots.heatmap(ab, legend = false)
end
plot_attraction_basis (generic function with 5 methods)
params = [[0.5, 2.5, 0.7, 0.2],
[0.5, 2.5, 0.7, 0.4],
[0.5, 2.5, 0.7, 0.6],
[0.5, 2.5, 0.7, 0.8]]
plots = (plot_attraction_basis(p...) for p in params)
plot(plots..., size = (1000, 1000))