Skip to article frontmatterSkip to article content
Contents
Monetarist Theory of Price Levels with Adaptive Expectations
and

15. Monetarist Theory of Price Levels with Adaptive Expectations

15.1Overview

This lecture is a sequel or prequel to A Monetarist Theory of Price Levels.

We’ll use linear algebra to do some experiments with an alternative “monetarist” or “fiscal” theory of price levels.

Like the model in A Monetarist Theory of Price Levels, the model asserts that when a government persistently spends more than it collects in taxes and prints money to finance the shortfall, it puts upward pressure on the price level and generates persistent inflation.

Instead of the “perfect foresight” or “rational expectations” version of the model in A Monetarist Theory of Price Levels, our model in the present lecture is an “adaptive expectations” version of a model that Cagan (1956) used to study the monetary dynamics of hyperinflations.

It combines these components:

  • a demand function for real money balances that asserts that the logarithm of the quantity of real balances demanded depends inversely on the public’s expected rate of inflation

  • an adaptive expectations model that describes how the public’s anticipated rate of inflation responds to past values of actual inflation

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

  • an exogenous sequence of rates of growth of the money supply

Our model stays quite close to Cagan’s original specification.

As in Present Values and Consumption Smoothing, the only linear algebra operations that we’ll be using are matrix multiplication and matrix inversion.

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

15.2Structure of the model

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
  • π0\pi_0^* public’s initial expected rate of inflation between time 0 and time 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

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 α.

Equating the logarithm mtdm_t^d of the demand for money to the logarithm mtm_t of the supply of money in equation (1) and solving for the logarithm ptp_t of the price level gives

pt=mt+απtp_t = m_t + \alpha \pi_t^*

Taking the difference between equation (2) at time t+1t+1 and at time tt gives

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

We assume that the expected rate of inflation πt\pi_t^* is governed by the following adaptive expectations scheme proposed by Friedman (1956) and Cagan (1956), where λ[0,1]\lambda\in [0,1] denotes the weight on expected inflation.

πt+1=λπt+(1λ)πt\pi_{t+1}^* = \lambda \pi_t^* + (1 -\lambda) \pi_t

As exogenous inputs into the model, we take initial conditions m0,π0m_0, \pi_0^* and a money growth sequence μ={μt}t=0T\mu = \{\mu_t\}_{t=0}^T.

As endogenous outputs of our model we want to find sequences π={πt}t=0T,p={pt}t=0T\pi = \{\pi_t\}_{t=0}^T, p = \{p_t\}_{t=0}^T as functions of the exogenous inputs.

We’ll do some mental experiments by studying how the model outputs vary as we vary the model inputs.

15.3Representing key equations with linear algebra

We begin by writing the equation (4) adaptive expectations model for πt\pi_t^* for t=0,,Tt=0, \ldots, T as

[10000λ10000λ100000λ1][π0π1π2πT+1]=(1λ)[0000100001000001][π0π1π2πT]+[π0000]\begin{bmatrix} 1 & 0 & 0 & \cdots & 0 & 0 \cr -\lambda & 1 & 0 & \cdots & 0 & 0 \cr 0 & - \lambda & 1 & \cdots & 0 & 0 \cr \vdots & \vdots & \vdots & \cdots & \vdots & \vdots \cr 0 & 0 & 0 & \cdots & -\lambda & 1 \end{bmatrix} \begin{bmatrix} \pi_0^* \cr \pi_1^* \cr \pi_2^* \cr \vdots \cr \pi_{T+1}^* \end{bmatrix} = (1-\lambda) \begin{bmatrix} 0 & 0 & 0 & \cdots & 0 \cr 1 & 0 & 0 & \cdots & 0 \cr 0 & 1 & 0 & \cdots & 0 \cr \vdots &\vdots & \vdots & \cdots & \vdots \cr 0 & 0 & 0 & \cdots & 1 \end{bmatrix} \begin{bmatrix}\pi_0 \cr \pi_1 \cr \pi_2 \cr \vdots \cr \pi_T \end{bmatrix} + \begin{bmatrix} \pi_0^* \cr 0 \cr 0 \cr \vdots \cr 0 \end{bmatrix}

Write this equation as

Aπ=(1λ)Bπ+π0A \pi^* = (1-\lambda) B \pi + \pi_0^*

where the (T+2)×(T+2)(T+2) \times (T+2) matrix AA, the (T+2)×(T+1)(T+2)\times (T+1) matrix BB, and the vectors π,π0,π0\pi^* , \pi_0, \pi_0^* are defined implicitly by aligning these two equations.

Next we write the key equation (3) in matrix notation as

[π0π1π1πT]=[μ0μ1μ2μT]+[αα0000αα0000α00α0000αα][π0π1π2πT+1]\begin{bmatrix} \pi_0 \cr \pi_1 \cr \pi_1 \cr \vdots \cr \pi_T \end{bmatrix} = \begin{bmatrix} \mu_0 \cr \mu_1 \cr \mu_2 \cr \vdots \cr \mu_T \end{bmatrix} + \begin{bmatrix} - \alpha & \alpha & 0 & \cdots & 0 & 0 \cr 0 & -\alpha & \alpha & \cdots & 0 & 0 \cr 0 & 0 & -\alpha & \cdots & 0 & 0 \cr \vdots & \vdots & \vdots & \cdots & \alpha & 0 \cr 0 & 0 & 0 & \cdots & -\alpha & \alpha \end{bmatrix} \begin{bmatrix} \pi_0^* \cr \pi_1^* \cr \pi_2^* \cr \vdots \cr \pi_{T+1}^* \end{bmatrix}

Represent the previous equation system in terms of vectors and matrices as

π=μ+Cπ\pi = \mu + C \pi^*

where the (T+1)×(T+2)(T+1) \times (T+2) matrix CC is defined implicitly to align this equation with the preceding equation system.

15.4Harvesting insights from our matrix formulation

We now have all of the ingredients we need to solve for π as a function of μ,π0,π0\mu, \pi_0, \pi_0^*.

Combine equations (6)and (8) to get

Aπ=(1λ)Bπ+π0=(1λ)B[μ+Cπ]+π0\begin{aligned} A \pi^* & = (1-\lambda) B \pi + \pi_0^* \cr & = (1-\lambda) B \left[ \mu + C \pi^* \right] + \pi_0^* \end{aligned}

which implies that

[A(1λ)BC]π=(1λ)Bμ+π0\left[ A - (1-\lambda) B C \right] \pi^* = (1-\lambda) B \mu+ \pi_0^*

Multiplying both sides of the above equation by the inverse of the matrix on the left side gives

π=[A(1λ)BC]1[(1λ)Bμ+π0]\pi^* = \left[ A - (1-\lambda) B C \right]^{-1} \left[ (1-\lambda) B \mu+ \pi_0^* \right]

Having solved equation (11) for π\pi^*, we can use equation (8) to solve for π:

π=μ+Cπ\pi = \mu + C \pi^*

We have thus solved for two of the key endogenous time series determined by our model, namely, the sequence π\pi^* of expected inflation rates and the sequence π of actual inflation rates.

Knowing these, we can then quickly calculate the associated sequence pp of the logarithm of the price level from equation (2).

Let’s fill in the details for this step.

Since we now know μ it is easy to compute mm.

Thus, notice that we can represent the equations

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

as the matrix equation

[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 (14) with the inverse of the matrix on the left will give

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

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

We can then compute ptp_t for each tt from equation (2).

We can write a compact formula for pp as

p=m+απ^p = m + \alpha \hat \pi^*

where

π^=[π0π1π2πT],\hat \pi^* = \begin{bmatrix} \pi_0^* \cr \pi_1^* \cr \pi_2^* \cr \vdots \cr \pi_{T}^* \end{bmatrix},

which is just π\pi^* with the last element dropped.

15.5Forecast errors and model computation

Our computations will verify that

π^π,\hat \pi^* \neq \pi,

so that in general

πtπt,t=0,1,,T\pi_t^* \neq \pi_t, \quad t = 0, 1, \ldots , T

This outcome is typical in models in which adaptive expectations hypothesis like equation (4) appear as a component.

In A Monetarist Theory of Price Levels, we studied a version of the model that replaces hypothesis (4) with a “perfect foresight” or “rational expectations” hypothesis.

But now, let’s dive in and do some computations with the adaptive expectations version of the model.

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

import numpy as np
from collections import namedtuple
import matplotlib.pyplot as plt
Cagan_Adaptive = namedtuple("Cagan_Adaptive", 
                        ["α", "m0", "Eπ0", "T", "λ"])

def create_cagan_adaptive_model(α = 5, m0 = 1, Eπ0 = 0.5, T=80, λ = 0.9):
    return Cagan_Adaptive(α, m0, Eπ0, T, λ)

md = create_cagan_adaptive_model()

We solve the model and plot variables of interests using the following functions.

def solve_cagan_adaptive(model, μ_seq):
    " Solve the Cagan model in finite time. "
    α, m0, Eπ0, T, λ = model
    
    A = np.eye(T+2, T+2) - λ*np.eye(T+2, T+2, k=-1)
    B = np.eye(T+2, T+1, k=-1)
    C = -α*np.eye(T+1, T+2) + α*np.eye(T+1, T+2, k=1)
    Eπ0_seq = np.append(Eπ0, np.zeros(T+1))

    # Eπ_seq is of length T+2
    Eπ_seq = np.linalg.solve(A - (1-λ)*B @ C, (1-λ) * B @ μ_seq + Eπ0_seq)

    # π_seq is of length T+1
    π_seq = μ_seq + C @ Eπ_seq

    D = np.eye(T+1, T+1) - np.eye(T+1, T+1, k=-1) # D is the coefficient matrix in Equation (14.8)
    m0_seq = np.append(m0, np.zeros(T))

    # m_seq is of length T+2
    m_seq = np.linalg.solve(D, μ_seq + m0_seq)
    m_seq = np.append(m0, m_seq)

    # p_seq is of length T+2
    p_seq = m_seq + α * Eπ_seq

    return π_seq, Eπ_seq, m_seq, p_seq
def solve_and_plot(model, μ_seq):
    
    π_seq, Eπ_seq, m_seq, p_seq = solve_cagan_adaptive(model, μ_seq)
    
    T_seq = range(model.T+2)
    
    fig, ax = plt.subplots(5, 1, figsize=[5, 12], dpi=200)
    ax[0].plot(T_seq[:-1], μ_seq)
    ax[1].plot(T_seq[:-1], π_seq, label=r'$\pi_t$')
    ax[1].plot(T_seq, Eπ_seq, label=r'$\pi^{*}_{t}$')
    ax[2].plot(T_seq, m_seq - p_seq)
    ax[3].plot(T_seq, m_seq)
    ax[4].plot(T_seq, p_seq)
    
    y_labs = [r'$\mu$', r'$\pi$', r'$m - p$', r'$m$', r'$p$']
    subplot_title = [r'Money supply growth', r'Inflation', r'Real balances', r'Money supply', r'Price level']

    for i in range(5):
        ax[i].set_xlabel(r'$t$')
        ax[i].set_ylabel(y_labs[i])
        ax[i].set_title(subplot_title[i])

    ax[1].legend()
    plt.tight_layout()
    plt.show()
    
    return π_seq, Eπ_seq, m_seq, p_seq

15.6Technical condition for stability

In constructing our examples, we shall assume that (λ,α)(\lambda, \alpha) satisfy

λα(1λ)1α(1λ)<1\Bigl| \frac{\lambda-\alpha(1-\lambda)}{1-\alpha(1-\lambda)} \Bigr| < 1

The source of this condition is the following string of deductions:

πt=μt+απt+1απtπt+1=λπt+(1λ)πtπt=μt1α(1λ)α(1λ)1α(1λ)πt    πt=1α(1λ)μt1α(1λ)α(1λ)πtπt+1=μt+11α(1λ)α(1λ)1α(1λ)(λπt+(1λ)πt)=μt+11α(1λ)λ1α(1λ)μt+λα(1λ)1α(1λ)πt\begin{aligned} \pi_{t}&=\mu_{t}+\alpha\pi_{t+1}^{*}-\alpha\pi_{t}^{*}\\\pi_{t+1}^{*}&=\lambda\pi_{t}^{*}+(1-\lambda)\pi_{t}\\\pi_{t}&=\frac{\mu_{t}}{1-\alpha(1-\lambda)}-\frac{\alpha(1-\lambda)}{1-\alpha(1-\lambda)}\pi_{t}^{*}\\\implies\pi_{t}^{*}&=\frac{1}{\alpha(1-\lambda)}\mu_{t}-\frac{1-\alpha(1-\lambda)}{\alpha(1-\lambda)}\pi_{t}\\\pi_{t+1}&=\frac{\mu_{t+1}}{1-\alpha(1-\lambda)}-\frac{\alpha(1-\lambda)}{1-\alpha(1-\lambda)}\left(\lambda\pi_{t}^{*}+(1-\lambda)\pi_{t}\right)\\&=\frac{\mu_{t+1}}{1-\alpha(1-\lambda)}-\frac{\lambda}{1-\alpha(1-\lambda)}\mu_{t}+\frac{\lambda-\alpha(1-\lambda)}{1-\alpha(1-\lambda)}\pi_{t} \end{aligned}

By assuring that the coefficient on πt\pi_t is less than one in absolute value, condition (20) assures stability of the dynamics of {πt}\{\pi_t\} described by the last line of our string of deductions.

The reader is free to study outcomes in examples that violate condition (20).

print(np.abs((md.λ - md.α*(1-md.λ))/(1 - md.α*(1-md.λ))))
0.8

15.7Experiments

Now we’ll turn to some experiments.

15.7.1Experiment 1

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={μ0,t=0,,T11μ,tT1\mu_{t} = \begin{cases} \mu_0 , & t = 0, \ldots, T_1 -1 \\ \mu^* , & t \geq T_1 \end{cases}

Notice that we studied exactly this experiment in a rational expectations version of the model in A Monetarist Theory of Price Levels.

So by comparing outcomes across the two lectures, we can learn about consequences of assuming adaptive expectations, as we do here, instead of rational expectations as we assumed in that other lecture.

# Parameters for the experiment 1
T1 = 60
μ0 = 0.5
μ_star = 0

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

# solve and plot
π_seq_1, Eπ_seq_1, m_seq_1, p_seq_1 = solve_and_plot(md, μ_seq_1)
<Figure size 1000x2400 with 5 Axes>

We invite the reader to compare outcomes with those under rational expectations studied in A Monetarist Theory of Price Levels.

Please note how the actual inflation rate πt\pi_t “overshoots” its ultimate steady-state value at the time of the sudden reduction in the rate of growth of the money supply at time T1T_1.

We invite you to explain to yourself the source of this overshooting and why it does not occur in the rational expectations version of the model.

15.7.2Experiment 2

Now we’ll do a different experiment, namely, a gradual stabilization in which the rate of growth of the money supply smoothly decline from a high value to a persistently low value.

While price level inflation eventually falls, it falls more slowly than the driving force that ultimately causes it to fall, namely, the falling rate of growth of the money supply.

The sluggish fall in inflation is explained by how anticipated inflation πt\pi_t^* persistently exceeds actual inflation πt\pi_t during the transition from a high inflation to a low inflation situation.

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


# solve and plot
π_seq_2, Eπ_seq_2, m_seq_2, p_seq_2 = solve_and_plot(md, μ_seq_2)
<Figure size 1000x2400 with 5 Axes>
References
  1. Cagan, P. (1956). The Monetary Dynamics of Hyperinflation. In M. Friedman (Ed.), Studies in the Quantity Theory of Money (pp. 25–117). University of Chicago Press.
  2. Friedman, M. (1956). A Theory of the Consumption Function. Princeton University Press.
CC-BY-SA-4.0

Creative Commons License – This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International.