15. A Monetarist Theory of Price Levels#

15.1. Overview#

We’ll use linear algebra first to explain and then do some experiments with a “monetarist theory of price levels”.

Economists call it a “monetary” or “monetarist” theory of price levels because effects on price levels occur via a central bank’s decisions to print money supply.

  • a goverment’s fiscal policies determine whether its expenditures exceed its tax collections

  • if its expenditures exceed its tax collections, the government can instruct the central bank to cover the difference by printing money

  • that leads to effects on the price level as price level path adjusts to equate the supply of money to the demand for money

Such a theory of price levels was described by Thomas Sargent and Neil Wallace in chapter 5 of [Sargent, 2013], which reprints a 1981 Federal Reserve Bank of Minneapolis article entitled “Unpleasant Monetarist Arithmetic”.

Sometimes this theory is also called a “fiscal theory of price levels” to emphasize the importance of fiscal deficits in shaping changes in the money supply.

The theory has been extended, criticized, and applied by John Cochrane [Cochrane, 2023].

In another lecture price level histories, we described some European hyperinflations that occurred in the wake of World War I.

Elemental forces at work in the fiscal theory of the price level help to understand those episodes.

According to this theory, when the government persistently spends more than it collects in taxes and prints money to finance the shortfall (the “shortfall” is called the “government deficit”), it puts upward pressure on the price level and generates persistent inflation.

The “monetarist” or “fiscal theory of price levels” asserts that

  • to start a persistent inflation the government begins persistently to run a money-financed government deficit

  • to stop a persistent inflation the government stops persistently running a money-financed government deficit

The model in this lecture is a “rational expectations” (or “perfect foresight”) version of a model that Philip Cagan [Cagan, 1956] used to study the monetary dynamics of hyperinflations.

While Cagan didn’t use that “rational expectations” version of the model, Thomas Sargent [Sargent, 1982] did when he studied the Ends of Four Big Inflations in Europe after World War I.

  • this lecture fiscal theory of the price level with adaptive expectations describes a version of the model that does not impose “rational expectations” but instead uses what Cagan and his teacher Milton Friedman called “adaptive expectations”

    • a reader of both lectures will notice that the algebra is less complicated in the present rational expectations version of the model

    • the difference in algebra complications can be traced to the following source: the adaptive expectations version of the model has more endogenous variables and more free parameters

Some of our quantitative experiments with the rational expectations version of the model are designed to illustrate how the fiscal theory explains the abrupt end of those big inflations.

In those experiments, we’ll encounter an instance of a “velocity dividend” that has sometimes accompanied successful inflation stabilization programs.

To facilitate using linear matrix algebra as our main mathematical tool, we’ll use a finite horizon version of the model.

As in the present values and consumption smoothing lectures, our mathematical tools are matrix multiplication and matrix inversion.

15.2. Structure of the model#

The model consists of

  • a function that expresses the demand for real balances of government printed money as an inverse function of the public’s expected rate of inflation

  • an exogenous sequence of rates of growth of the money supply. The money supply grows because the government prints it to pay for goods and services

  • an equilibrium condition that equates the demand for money to the supply

  • a “perfect foresight” assumption that the public’s expected rate of inflation equals the actual rate of inflation.

To represent the model formally, let

  • mt m_t be the log of the supply of nominal money balances;

  • μt=mt+1mt\mu_t = m_{t+1} - m_t be the net rate of growth of nominal balances;

  • ptp_t be the log of the price level;

  • πt=pt+1pt\pi_t = p_{t+1} - p_t be the net rate of inflation between tt and t+1 t+1;

  • πt\pi_t^* be the public’s expected rate of inflation between tt and t+1t+1;

  • TT the horizon – i.e., the last period for which the model will determine ptp_t

  • πT+1\pi_{T+1}^* the terminal rate of inflation between times TT and T+1T+1.

The demand for real balances exp(mtdpt)\exp\left(m_t^d - p_t\right) is governed by the following version of the Cagan demand function

(15.1)#mtdpt=απt,α>0;t=0,1,,T. m_t^d - p_t = -\alpha \pi_t^* \: , \: \alpha > 0 ; \quad t = 0, 1, \ldots, T .

This equation asserts that the demand for real balances is inversely related to the public’s expected rate of inflation with sensitivity α\alpha.

People somehow acquire perfect foresight by their having solved a forecasting problem.

This lets us set

(15.2)#πt=πt, \pi_t^* = \pi_t , % \forall t

while equating demand for money to supply lets us set mtd=mtm_t^d = m_t for all t0t \geq 0.

The preceding equations then imply

(15.3)#mtpt=α(pt+1pt) m_t - p_t = -\alpha(p_{t+1} - p_t)

To fill in details about what it means for private agents to have perfect foresight, we subtract equation (15.3) at time t t from the same equation at t+1 t+1 to get

μtπt=απt+1+απt, \mu_t - \pi_t = -\alpha \pi_{t+1} + \alpha \pi_t ,

which we rewrite as a forward-looking first-order linear difference equation in πs\pi_s with μs\mu_s as a “forcing variable”:

πt=α1+απt+1+11+αμt,t=0,1,,T \pi_t = \frac{\alpha}{1+\alpha} \pi_{t+1} + \frac{1}{1+\alpha} \mu_t , \quad t= 0, 1, \ldots , T

where 0<α1+α<1 0< \frac{\alpha}{1+\alpha} <1 .

Setting δ=α1+α\delta =\frac{\alpha}{1+\alpha}, let’s us represent the preceding equation as

πt=δπt+1+(1δ)μt,t=0,1,,T \pi_t = \delta \pi_{t+1} + (1-\delta) \mu_t , \quad t =0, 1, \ldots, T

Write this system of T+1T+1 equations as the single matrix equation

(15.4)#[1δ000001δ000001δ00δ000001δ000001][π0π1π2πT1πT]=(1δ)[μ0μ1μ2μT1μT]+[0000δπT+1] \begin{bmatrix} 1 & -\delta & 0 & 0 & \cdots & 0 & 0 \cr 0 & 1 & -\delta & 0 & \cdots & 0 & 0 \cr 0 & 0 & 1 & -\delta & \cdots & 0 & 0 \cr \vdots & \vdots & \vdots & \vdots & \vdots & -\delta & 0 \cr 0 & 0 & 0 & 0 & \cdots & 1 & -\delta \cr 0 & 0 & 0 & 0 & \cdots & 0 & 1 \end{bmatrix} \begin{bmatrix} \pi_0 \cr \pi_1 \cr \pi_2 \cr \vdots \cr \pi_{T-1} \cr \pi_T \end{bmatrix} = (1 - \delta) \begin{bmatrix} \mu_0 \cr \mu_1 \cr \mu_2 \cr \vdots \cr \mu_{T-1} \cr \mu_T \end{bmatrix} + \begin{bmatrix} 0 \cr 0 \cr 0 \cr \vdots \cr 0 \cr \delta \pi_{T+1}^* \end{bmatrix}

By multiplying both sides of equation (15.4) by the inverse of the matrix on the left side, we can calculate

π[π0π1π2πT1πT] \pi \equiv \begin{bmatrix} \pi_0 \cr \pi_1 \cr \pi_2 \cr \vdots \cr \pi_{T-1} \cr \pi_T \end{bmatrix}

It turns out that

(15.5)#πt=(1δ)s=tTδstμs+δT+1tπT+1 \pi_t = (1-\delta) \sum_{s=t}^T \delta^{s-t} \mu_s + \delta^{T+1-t} \pi_{T+1}^*

We can represent the equations

mt+1=mt+μt,t=0,1,,T m_{t+1} = m_t + \mu_t , \quad t = 0, 1, \ldots, T

as the matrix equation

(15.6)#[100001100001100000001000011][m1m2m3mTmT+1]=[μ0μ1μ2μT1μT]+[m00000] \begin{bmatrix} 1 & 0 & 0 & \cdots & 0 & 0 \cr -1 & 1 & 0 & \cdots & 0 & 0 \cr 0 & -1 & 1 & \cdots & 0 & 0 \cr \vdots & \vdots & \vdots & \vdots & 0 & 0 \cr 0 & 0 & 0 & \cdots & 1 & 0 \cr 0 & 0 & 0 & \cdots & -1 & 1 \end{bmatrix} \begin{bmatrix} m_1 \cr m_2 \cr m_3 \cr \vdots \cr m_T \cr m_{T+1} \end{bmatrix} = \begin{bmatrix} \mu_0 \cr \mu_1 \cr \mu_2 \cr \vdots \cr \mu_{T-1} \cr \mu_T \end{bmatrix} + \begin{bmatrix} m_0 \cr 0 \cr 0 \cr \vdots \cr 0 \cr 0 \end{bmatrix}

Multiplying both sides of equation (15.6) with the inverse of the matrix on the left will give

(15.7)#mt=m0+s=0t1μs,t=1,,T+1 m_t = m_0 + \sum_{s=0}^{t-1} \mu_s, \quad t =1, \ldots, T+1

Equation (15.7) shows that the log of the money supply at tt equals the log of the initial money supply m0m_0 plus accumulation of rates of money growth between times 00 and TT.

15.3. Continuation values#

To determine the continuation inflation rate πT+1\pi_{T+1}^* we shall proceed by applying the following infinite-horizon version of equation (15.5) at time t=T+1t = T+1:

(15.8)#πt=(1δ)s=tδstμs, \pi_t = (1-\delta) \sum_{s=t}^\infty \delta^{s-t} \mu_s ,

and by also assuming the following continuation path for μt\mu_t beyond TT:

μt+1=γμt,tT. \mu_{t+1} = \gamma^* \mu_t, \quad t \geq T .

Plugging the preceding equation into equation (15.8) at t=T+1t = T+1 and rearranging we can deduce that

(15.9)#πT+1=1δ1δγγμT \pi_{T+1}^* = \frac{1 - \delta}{1 - \delta \gamma^*} \gamma^* \mu_T

where we require that γδ<1\vert \gamma^* \delta \vert < 1.

Let’s implement and solve this model.

As usual, we’ll start by importing some Python modules.

import numpy as np
from collections import namedtuple
import matplotlib.pyplot as plt

First, we store parameters in a namedtuple:

# Create the rational expectation version of Cagan model in finite time
CaganREE = namedtuple("CaganREE", 
                        ["m0",    # initial money supply
                         "μ_seq", # sequence of rate of growth
                         "α",     # sensitivity parameter
                         "δ",     # α/(1 + α)
                         "π_end"  # terminal expected inflation
                        ])

def create_cagan_model(m0=1, α=5, μ_seq=None):
    δ = α/(1 + α)
    π_end = μ_seq[-1]    # compute terminal expected inflation
    return CaganREE(m0, μ_seq, α, δ, π_end)

Now we can solve the model to compute πt\pi_t, mtm_t and ptp_t for t=1,,T+1t =1, \ldots, T+1 using the matrix equation above

def solve(model, T):
    m0, π_end, μ_seq, α, δ = (model.m0, model.π_end, 
                              model.μ_seq, model.α, model.δ)
    
    # Create matrix representation above
    A1 = np.eye(T+1, T+1) - δ * np.eye(T+1, T+1, k=1)
    A2 = np.eye(T+1, T+1) - np.eye(T+1, T+1, k=-1)

    b1 = (1-δ) * μ_seq + np.concatenate([np.zeros(T), [δ * π_end]])
    b2 = μ_seq + np.concatenate([[m0], np.zeros(T)])

    π_seq = np.linalg.solve(A1, b1)
    m_seq = np.linalg.solve(A2, b2)

    π_seq = np.append(π_seq, π_end)
    m_seq = np.append(m0, m_seq)

    p_seq = m_seq + α * π_seq

    return π_seq, m_seq, p_seq

15.3.1. Some quantitative experiments#

In the experiments below, we’ll use formula (15.9) as our terminal condition for expected inflation.

In devising these experiments, we’ll make assumptions about {μt}\{\mu_t\} that are consistent with formula (15.9).

We describe several such experiments.

In all of them,

μt=μ,tT1 \mu_t = \mu^* , \quad t \geq T_1

so that, in terms of our notation and formula for πT+1\pi_{T+1}^* above, γ=1\gamma^* = 1.

15.3.1.1. Experiment 1: Foreseen sudden stabilization#

In this experiment, we’ll study how, when α>0\alpha >0, a foreseen inflation stabilization has effects on inflation that proceed it.

We’ll study a situation in which the rate of growth of the money supply is μ0\mu_0 from t=0t=0 to t=T1t= T_1 and then permanently falls to μ\mu^* at t=T1t=T_1.

Thus, let T1(0,T)T_1 \in (0, T).

So where μ0>μ\mu_0 > \mu^*, we assume that

μt+1={μ0,t=0,,T11μ,tT1 \mu_{t+1} = \begin{cases} \mu_0 , & t = 0, \ldots, T_1 -1 \\ \mu^* , & t \geq T_1 \end{cases}

We’ll start by executing a version of our “experiment 1” in which the government implements a foreseen sudden permanent reduction in the rate of money creation at time T1T_1.

Let’s experiment with the following parameters

T1 = 60
μ0 = 0.5
μ_star = 0
T = 80

μ_seq_1 = np.append(μ0*np.ones(T1+1), μ_star*np.ones(T-T1))

cm = create_cagan_model(μ_seq=μ_seq_1)

# solve the model
π_seq_1, m_seq_1, p_seq_1 = solve(cm, T)

Now we use the following function to plot the result

def plot_sequences(sequences, labels):
    fig, axs = plt.subplots(len(sequences), 1, figsize=(5, 12), dpi=200)
    for ax, seq, label in zip(axs, sequences, labels):
        ax.plot(range(len(seq)), seq, label=label)
        ax.set_ylabel(label)
        ax.set_xlabel('$t$')
        ax.legend()
    plt.tight_layout()
    plt.show()

sequences = (μ_seq_1, π_seq_1, m_seq_1 - p_seq_1, m_seq_1, p_seq_1)
plot_sequences(sequences, (r'$\mu$', r'$\pi$', r'$m - p$', r'$m$', r'$p$'))
_images/37226ad3c4a5645432adb65dd01b3a69251cf696a1be2ccc40d481d7e09262fc.png

The plot of the money growth rate μt\mu_t in the top level panel portrays a sudden reduction from .5.5 to 00 at time T1=60T_1 = 60.

This brings about a gradual reduction of the inflation rate πt\pi_t that precedes the money supply growth rate reduction at time T1T_1.

Notice how the inflation rate declines smoothly (i.e., continuously) to 00 at T1T_1 – unlike the money growth rate, it does not suddenly “jump” downward at T1T_1.

This is because the reduction in μ\mu at T1T_1 has been foreseen from the start.

While the log money supply portrayed in the bottom panel has a kink at T1T_1, the log price level does not – it is “smooth” – once again a consequence of the fact that the reduction in μ\mu has been foreseen.

To set the stage for our next experiment, we want to study the determinants of the price level a little more.

15.3.2. The log price level#

We can use equations (15.1) and (15.2) to discover that the log of the price level satisfies

(15.10)#pt=mt+απt p_t = m_t + \alpha \pi_t

or, by using equation (15.5),

(15.11)#pt=mt+α[(1δ)s=tTδstμs+δT+1tπT+1] p_t = m_t + \alpha \left[ (1-\delta) \sum_{s=t}^T \delta^{s-t} \mu_s + \delta^{T+1-t} \pi_{T+1}^* \right]

In our next experiment, we’ll study a “surprise” permanent change in the money growth that beforehand was completely unanticipated.

At time T1T_1 when the “surprise” money growth rate change occurs, to satisfy equation (15.10), the log of real balances jumps upward as πt\pi_t jumps downward.

But in order for mtptm_t - p_t to jump, which variable jumps, mT1m_{T_1} or pT1p_{T_1}?

We’ll study that interesting question next.

15.3.3. What jumps?#

What jumps at T1T_1?

Is it pT1p_{T_1} or mT1m_{T_1}?

If we insist that the money supply mT1m_{T_1} is locked at its value mT11m_{T_1}^1 inherited from the past, then formula (15.10) implies that the price level jumps downward at time T1T_1, to coincide with the downward jump in πT1\pi_{T_1}

An alternative assumption about the money supply level is that as part of the “inflation stabilization”, the government resets mT1m_{T_1} according to

(15.12)#mT12mT11=α(πT11πT12), m_{T_1}^2 - m_{T_1}^1 = \alpha (\pi_{T_1}^1 - \pi_{T_1}^2),

which describes how the government could reset the money supply at T1T_1 in response to the jump in expected inflation associated with monetary stabilization.

Doing this would let the price level be continuous at T1T_1.

By letting money jump according to equation (15.12) the monetary authority prevents the price level from falling at the moment that the unanticipated stabilization arrives.

In various research papers about stabilizations of high inflations, the jump in the money supply described by equation (15.12) has been called “the velocity dividend” that a government reaps from implementing a regime change that sustains a permanently lower inflation rate.

15.3.3.1. Technical details about whether pp or mm jumps at T1T_1#

We have noted that with a constant expected forward sequence μs=μˉ\mu_s = \bar \mu for sts\geq t, πt=μˉ\pi_{t} =\bar{\mu}.

A consequence is that at T1T_1, either mm or pp must “jump” at T1T_1.

We’ll study both cases.

15.3.3.2. mT1m_{T_{1}} does not jump.#

mT1=mT11+μ0πT1=μpT1=mT1+απT1 \begin{aligned} m_{T_{1}}&=m_{T_{1}-1}+\mu_{0}\\\pi_{T_{1}}&=\mu^{*}\\p_{T_{1}}&=m_{T_{1}}+\alpha\pi_{T_{1}} \end{aligned}

Simply glue the sequences tT1t\leq T_1 and t>T1t > T_1.

15.3.3.3. mT1m_{T_{1}} jumps.#

We reset mT1m_{T_{1}} so that pT1=(mT11+μ0)+αμ0p_{T_{1}}=\left(m_{T_{1}-1}+\mu_{0}\right)+\alpha\mu_{0}, with πT1=μ\pi_{T_{1}}=\mu^{*}.

Then,

mT1=pT1απT1=(mT11+μ0)+α(μ0μ) m_{T_{1}}=p_{T_{1}}-\alpha\pi_{T_{1}}=\left(m_{T_{1}-1}+\mu_{0}\right)+\alpha\left(\mu_{0}-\mu^{*}\right)

We then compute for the remaining TT1T-T_{1} periods with μs=μ,sT1\mu_{s}=\mu^{*},\forall s\geq T_{1} and the initial condition mT1m_{T_{1}} from above.

We are now technically equipped to discuss our next experiment.

15.3.3.4. Experiment 2: an unforeseen sudden stabilization#

This experiment deviates a little bit from a pure version of our “perfect foresight” assumption by assuming that a sudden permanent reduction in μt\mu_t like that analyzed in experiment 1 is completely unanticipated.

Such a completely unanticipated shock is popularly known as an “MIT shock”.

The mental experiment involves switching at time T1T_1 from an initial “continuation path” for {μt,πt}\{\mu_t, \pi_t\} to another path that involves a permanently lower inflation rate.

Initial Path: μt=μ0\mu_t = \mu_0 for all t0t \geq 0. So this path is for {μt}t=0\{\mu_t\}_{t=0}^\infty; the associated path for πt\pi_t has πt=μ0\pi_t = \mu_0.

Revised Continuation Path Where μ0>μ \mu_0 > \mu^*, we construct a continuation path {μs}s=T1\{\mu_s\}_{s=T_1}^\infty by setting μs=μ\mu_s = \mu^* for all sT1s \geq T_1. The perfect foresight continuation path for π\pi is πs=μ\pi_s = \mu^*

To capture a “completely unanticipated permanent shock to the {μt}\{\mu_t\} process at time T1T_1, we simply glue the μt,πt\mu_t, \pi_t that emerges under path 2 for tT1t \geq T_1 to the μt,πt\mu_t, \pi_t path that had emerged under path 1 for t=0,,T11 t=0, \ldots, T_1 -1.

We can do the MIT shock calculations mostly by hand.

Thus, for path 1, πt=μ0\pi_t = \mu_0 for all t[0,T11]t \in [0, T_1-1], while for path 2, μs=μ\mu_s = \mu^* for all sT1s \geq T_1.

We now move on to experiment 2, our “MIT shock”, completely unforeseen sudden stabilization.

We set this up so that the {μt}\{\mu_t\} sequences that describe the sudden stabilization are identical to those for experiment 1, the foreseen sudden stabilization.

The following code does the calculations and plots outcomes.

# path 1
μ_seq_2_path1 = μ0 * np.ones(T+1)

cm1 = create_cagan_model(μ_seq=μ_seq_2_path1)
π_seq_2_path1, m_seq_2_path1, p_seq_2_path1 = solve(cm1, T)

# continuation path
μ_seq_2_cont = μ_star * np.ones(T-T1)

cm2 = create_cagan_model(m0=m_seq_2_path1[T1+1], 
                         μ_seq=μ_seq_2_cont)
π_seq_2_cont, m_seq_2_cont1, p_seq_2_cont1 = solve(cm2, T-1-T1)


# regime 1 - simply glue π_seq, μ_seq
μ_seq_2 = np.concatenate((μ_seq_2_path1[:T1+1],
                          μ_seq_2_cont))
π_seq_2 = np.concatenate((π_seq_2_path1[:T1+1], 
                          π_seq_2_cont))
m_seq_2_regime1 = np.concatenate((m_seq_2_path1[:T1+1], 
                                  m_seq_2_cont1))
p_seq_2_regime1 = np.concatenate((p_seq_2_path1[:T1+1], 
                                  p_seq_2_cont1))

# regime 2 - reset m_T1
m_T1 = (m_seq_2_path1[T1] + μ0) + cm2.α*(μ0 - μ_star)

cm3 = create_cagan_model(m0=m_T1, μ_seq=μ_seq_2_cont)
π_seq_2_cont2, m_seq_2_cont2, p_seq_2_cont2 = solve(cm3, T-1-T1)

m_seq_2_regime2 = np.concatenate((m_seq_2_path1[:T1+1], 
                                  m_seq_2_cont2))
p_seq_2_regime2 = np.concatenate((p_seq_2_path1[:T1+1],
                                  p_seq_2_cont2))
Hide code cell source
T_seq = range(T+2)

# plot both regimes
fig, ax = plt.subplots(5, 1, figsize=(5, 12), dpi=200)

# Configuration for each subplot
plot_configs = [
    {'data': [(T_seq[:-1], μ_seq_2)], 'ylabel': r'$\mu$'},
    {'data': [(T_seq, π_seq_2)], 'ylabel': r'$\pi$'},
    {'data': [(T_seq, m_seq_2_regime1 - p_seq_2_regime1)], 
     'ylabel': r'$m - p$'},
    {'data': [(T_seq, m_seq_2_regime1, 'Smooth $m_{T_1}$'), 
              (T_seq, m_seq_2_regime2, 'Jumpy $m_{T_1}$')], 
     'ylabel': r'$m$'},
    {'data': [(T_seq, p_seq_2_regime1, 'Smooth $p_{T_1}$'), 
              (T_seq, p_seq_2_regime2, 'Jumpy $p_{T_1}$')], 
     'ylabel': r'$p$'}
]

def experiment_plot(plot_configs, ax):
    # Loop through each subplot configuration
    for axi, config in zip(ax, plot_configs):
        for data in config['data']:
            if len(data) == 3:  # Plot with label for legend
                axi.plot(data[0], data[1], label=data[2])
                axi.legend()
            else:  # Plot without label
                axi.plot(data[0], data[1])
        axi.set_ylabel(config['ylabel'])
        axi.set_xlabel(r'$t$')
    plt.tight_layout()
    plt.show()
    
experiment_plot(plot_configs, ax)
_images/267c429a181bfd49494af01349dc1fb3c797a4aab288fd749e0cccd7a95a203d.png

We invite you to compare these graphs with corresponding ones for the foreseen stabilization analyzed in experiment 1 above.

Note how the inflation graph in the second panel is now identical to the money growth graph in the top panel, and how now the log of real balances portrayed in the third panel jumps upward at time T1T_1.

The bottom two panels plot mm and pp under two possible ways that mT1m_{T_1} might adjust as required by the upward jump in mpm - p at T1T_1.

  • the orange line lets mT1m_{T_1} jump upward in order to make sure that the log price level pT1p_{T_1} does not fall.

  • the blue line lets pT1p_{T_1} fall while stopping the money supply from jumping.

Here is a way to interpret what the government is doing when the orange line policy is in place.

The government prints money to finance expenditure with the “velocity dividend” that it reaps from the increased demand for real balances brought about by the permanent decrease in the rate of growth of the money supply.

The next code generates a multi-panel graph that includes outcomes of both experiments 1 and 2.

That allows us to assess how important it is to understand whether the sudden permanent drop in μt\mu_t at t=T1t=T_1 is fully unanticipated, as in experiment 1, or completely unanticipated, as in experiment 2.

Hide code cell source
# compare foreseen vs unforeseen shock
fig, ax = plt.subplots(5, figsize=(5, 12), dpi=200)

plot_configs = [
    {'data': [(T_seq[:-1], μ_seq_2)], 'ylabel': r'$\mu$'},
    {'data': [(T_seq, π_seq_2, 'Unforeseen'), 
              (T_seq, π_seq_1, 'Foreseen')], 'ylabel': r'$p$'},
    {'data': [(T_seq, m_seq_2_regime1 - p_seq_2_regime1, 'Unforeseen'), 
              (T_seq, m_seq_1 - p_seq_1, 'Foreseen')], 'ylabel': r'$m - p$'},
    {'data': [(T_seq, m_seq_2_regime1, 'Unforeseen (Smooth $m_{T_1}$)'), 
              (T_seq, m_seq_2_regime2, 'Unforeseen ($m_{T_1}$ jumps)'),
              (T_seq, m_seq_1, 'Foreseen')], 'ylabel': r'$m$'},   
    {'data': [(T_seq, p_seq_2_regime1, 'Unforeseen (Smooth $m_{T_1}$)'), 
          (T_seq, p_seq_2_regime2, 'Unforeseen ($m_{T_1}$ jumps)'),
          (T_seq, p_seq_1, 'Foreseen')], 'ylabel': r'$p$'}   
]

experiment_plot(plot_configs, ax)
_images/a8081f612dfe216448bbc739263ded93c0e5c720281bec194a561b60da4ff18b.png

It is instructive to compare the preceding graphs with graphs of log price levels and inflation rates for data from four big inflations described in this lecture.

In particular, in the above graphs, notice how a gradual fall in inflation precedes the “sudden stop” when it has been anticipated long beforehand, but how inflation instead falls abruptly when the permanent drop in money supply growth is unanticipated.

It seems to the author team at quantecon that the drops in inflation near the ends of the four hyperinflations described in this lecture more closely resemble outcomes from the experiment 2 “unforeseen stabilization”.

(It is fair to say that the preceding informal pattern recognition exercise should be supplemented with a more formal structural statistical analysis.)

15.3.3.5. Experiment 3#

Foreseen gradual stabilization

Instead of a foreseen sudden stabilization of the type studied with experiment 1, it is also interesting to study the consequences of a foreseen gradual stabilization.

Thus, suppose that ϕ(0,1)\phi \in (0,1), that μ0>μ\mu_0 > \mu^*, and that for t=0,,T1t = 0, \ldots, T-1

μt=ϕtμ0+(1ϕt)μ. \mu_t = \phi^t \mu_0 + (1 - \phi^t) \mu^* .

Next we perform an experiment in which there is a perfectly foreseen gradual decrease in the rate of growth of the money supply.

The following code does the calculations and plots the results.

# parameters
ϕ = 0.9
μ_seq_stab = np.array([ϕ**t * μ0 + (1-ϕ**t)*μ_star for t in range(T)])
μ_seq_stab = np.append(μ_seq_stab, μ_star)

cm4 = create_cagan_model(μ_seq=μ_seq_stab)

π_seq_4, m_seq_4, p_seq_4 = solve(cm4, T)

sequences = (μ_seq_stab, π_seq_4, 
             m_seq_4 - p_seq_4, m_seq_4, p_seq_4)
plot_sequences(sequences, (r'$\mu$', r'$\pi$', 
                           r'$m - p$', r'$m$', r'$p$'))
_images/64a592d3a82ebad09e06723317ab723a07eb56e4c52357794a768e57f25bf2ce.png

15.4. Sequel#

Another lecture monetarist theory of price levels with adaptive expectations describes an “adaptive expectations” version of Cagan’s model.

The dynamics become more complicated and so does the algebra.

Nowadays, the “rational expectations” version of the model is more popular among central bankers and economists advising them.