8. Present Values#
8.1. Overview#
This lecture describes the present value model that is a starting point of much asset pricing theory.
We’ll use the calculations described here in several subsequent lectures.
Our only tool is some elementary linear algebra operations, namely, matrix multiplication and matrix inversion.
Let’s dive in.
Let
\(\{d_t\}_{t=0}^T \) be a sequence of dividends or “payouts”
\(\{p_t\}_{t=0}^T \) be a sequence of prices of a claim on the continuation of the asset stream from date \(t\) on, namely, \(\{d_s\}_{s=t}^T \)
\( \delta \in (0,1) \) be a one-period “discount factor”
\(p_{T+1}^*\) be a terminal price of the asset at time \(T+1\)
We assume that the dividend stream \(\{d_t\}_{t=0}^T \) and the terminal price \(p_{T+1}^*\) are both exogenous.
Assume the sequence of asset pricing equations
This is a “cost equals benefits” formula.
It says that the cost of buying the asset today equals the reward for holding it for one period (which is the dividend \(d_t\)) and then selling it, at \(t+1\).
The future value \(p_{t+1}\) is discounted using \(\delta\) to shift it to a present value, so it is comparable with \(d_t\) and \(p_t\).
We want to solve for the asset price sequence \(\{p_t\}_{t=0}^T \) as a function of \(\{d_t\}_{t=0}^T \) and \(p_{T+1}^*\).
In this lecture we show how this can be done using matrix algebra.
We will use the following imports
import numpy as np
import matplotlib.pyplot as plt
8.2. Present value calculations#
The equations in (8.1) can be stacked, as in
Write the system (8.2) of \(T+1\) asset pricing equations as the single matrix equation
Exercise 8.1
Carry out the matrix multiplication in (8.3) by hand and confirm that you recover the equations in (8.2).
In vector-matrix notation, we can write the system (8.3) as
Here \(A\) is the matrix on the left side of equation (8.3), while
The solution for prices is given by
Here is a small example, where the dividend stream is given by
T = 6
current_d = 1.0
d = []
for t in range(T+1):
d.append(current_d)
current_d = current_d * 1.05
fig, ax = plt.subplots()
ax.plot(d, 'o', label='dividends')
ax.legend()
ax.set_xlabel('time')
plt.show()
We set \(\delta\) and \(p_{T+1}^*\) to
δ = 0.99
p_star = 10.0
Let’s build the matrix \(A\)
A = np.zeros((T+1, T+1))
for i in range(T+1):
for j in range(T+1):
if i == j:
A[i, j] = 1
if j < T:
A[i, j+1] = -δ
Let’s inspect \(A\)
A
array([[ 1. , -0.99, 0. , 0. , 0. , 0. , 0. ],
[ 0. , 1. , -0.99, 0. , 0. , 0. , 0. ],
[ 0. , 0. , 1. , -0.99, 0. , 0. , 0. ],
[ 0. , 0. , 0. , 1. , -0.99, 0. , 0. ],
[ 0. , 0. , 0. , 0. , 1. , -0.99, 0. ],
[ 0. , 0. , 0. , 0. , 0. , 1. , -0.99],
[ 0. , 0. , 0. , 0. , 0. , 0. , 1. ]])
Now let’s solve for prices using (8.5).
b = np.zeros(T+1)
b[-1] = δ * p_star
p = np.linalg.solve(A, d + b)
fig, ax = plt.subplots()
ax.plot(p, 'o', label='asset price')
ax.legend()
ax.set_xlabel('time')
plt.show()
We can also consider a cyclically growing dividend sequence, such as
T = 100
current_d = 1.0
d = []
for t in range(T+1):
d.append(current_d)
current_d = current_d * 1.01 + 0.1 * np.sin(t)
fig, ax = plt.subplots()
ax.plot(d, 'o-', ms=4, alpha=0.8, label='dividends')
ax.legend()
ax.set_xlabel('time')
plt.show()
Exercise 8.2
Compute the corresponding asset price sequence when \(p^*_{T+1} = 0\) and \(\delta = 0.98\).
Solution to Exercise 8.2
We proceed as above after modifying parameters and \(A\).
δ = 0.98
p_star = 0.0
A = np.zeros((T+1, T+1))
for i in range(T+1):
for j in range(T+1):
if i == j:
A[i, j] = 1
if j < T:
A[i, j+1] = -δ
b = np.zeros(T+1)
b[-1] = δ * p_star
p = np.linalg.solve(A, d + b)
fig, ax = plt.subplots()
ax.plot(p, 'o-', ms=4, alpha=0.8, label='asset price')
ax.legend()
ax.set_xlabel('time')
plt.show()
The weighted averaging associated with the present value calculation largely eliminates the cycles.
8.3. Analytical expressions#
It can be verified that the inverse of the matrix \(A\) in (8.3) is
Exercise 8.3
Check this by showing that \(A A^{-1}\) is equal to the identity matrix.
(By the inverse matrix theorem, a matrix \(B\) is the inverse of \(A\) whenever \(A B\) is the identity.)
If we use the expression (8.6) in (8.5) and perform the indicated matrix multiplication, we shall find that
Pricing formula (8.7) asserts that two components sum to the asset price \(p_t\):
a fundamental component \(\sum_{s=t}^T \delta^{s-t} d_s\) that equals the discounted present value of prospective dividends
a bubble component \(\delta^{T+1-t} p_{T+1}^*\)
The fundamental component is pinned down by the discount factor \(\delta\) and the “fundamentals” of the asset (in this case, the dividends).
The bubble component is the part of the price that is not pinned down by fundamentals.
It is sometimes convenient to rewrite the bubble component as
where
8.4. More about bubbles#
For a few moments, let’s focus on the special case of an asset that will never pay dividends, in which case
In this case system (8.1) of our \(T+1\) asset pricing equations takes the form of the single matrix equation
Evidently, if \(p_{T+1}^* = 0\), a price vector \(p\) of all entries zero solves this equation and the only the fundamental component of our pricing formula (8.7) is present.
But let’s activate the bubble component by setting
for some positive constant \(c\).
In this case, it can be verified that when we multiply both sides of (8.8) by the matrix \(A^{-1}\) presented in equation (8.6), we shall find that
8.5. Gross rate of return#
Define the gross rate of return on holding the asset from period \(t\) to period \(t+1\) as
Equation (8.10) confirms that an asset whose sole source of value is a bubble that earns a gross rate of return
8.6. Exercises#
Exercise 8.4
Give analytical expressions for the asset price \(p_t\) under the following settings for \(d\) and \(p_{T+1}^*\):
\(p_{T+1}^* = 0, d_t = g^t d_0\) (a modified version of the Gordon growth formula)
\(p_{T+1}^* = g^{T+1} d_0, d_t = g^t d_0\) (the plain vanilla Gordon growth formula)
\(p_{T+1}^* = 0, d_t = 0\) (price of a worthless stock)
\(p_{T+1}^* = c \delta^{-(T+1)}, d_t = 0\) (price of a pure bubble stock)