# quant-econ Solutions: The Linear State Space Model



In [1]:

%matplotlib inline




In [2]:

import numpy as np
import matplotlib.pyplot as plt
from quantecon import LSS



## Exercise 1



In [3]:

phi_0, phi_1, phi_2 = 1.1, 0.8, -0.8

A = [[1,     0,     0],
[phi_0, phi_1, phi_2],
[0,     1,     0]]
C = np.zeros((3, 1))
G = [0, 1, 0]

ar = LSS(A, C, G, mu_0=np.ones(3))
x, y = ar.simulate(ts_length=50)

fig, ax = plt.subplots(figsize=(8, 4.6))
y = y.flatten()
ax.plot(y, 'b-', lw=2, alpha=0.7)
ax.grid()
ax.set_xlabel('time')
ax.set_ylabel(r'$y_t$', fontsize=16)




Out[3]:

<matplotlib.text.Text at 0x3fa4110>



## Exercise 2



In [4]:

phi_1, phi_2, phi_3, phi_4 = 0.5, -0.2, 0, 0.5
sigma = 0.2

A = [[phi_1, phi_2, phi_3, phi_4],
[1,     0,     0,     0],
[0,     1,     0,     0],
[0,     0,     1,     0]]
C = [[sigma],
[0],
[0],
[0]]
G = [1, 0, 0, 0]

ar = LSS(A, C, G, mu_0=np.ones(4))
x, y = ar.simulate(ts_length=200)

fig, ax = plt.subplots(figsize=(8, 4.6))
y = y.flatten()
ax.plot(y, 'b-', lw=2, alpha=0.7)
ax.grid()
ax.set_xlabel('time')
ax.set_ylabel(r'$y_t$', fontsize=16)
plt.show()






## Exercise 3



In [5]:

from __future__ import division
from scipy.stats import norm
import random

phi_1, phi_2, phi_3, phi_4 = 0.5, -0.2, 0, 0.5
sigma = 0.1

A = [[phi_1, phi_2, phi_3, phi_4],
[1,     0,     0,     0],
[0,     1,     0,     0],
[0,     0,     1,     0]]
C = [[sigma],
[0],
[0],
[0]]
G = [1, 0, 0, 0]

I = 20
T = 50
ar = LSS(A, C, G, mu_0=np.ones(4))
ymin, ymax = -0.5, 1.15

fig, ax = plt.subplots(figsize=(8, 5))

ax.set_ylim(ymin, ymax)
ax.set_xlabel(r'time', fontsize=16)
ax.set_ylabel(r'$y_t$', fontsize=16)

ensemble_mean = np.zeros(T)
for i in range(I):
x, y = ar.simulate(ts_length=T)
y = y.flatten()
ax.plot(y, 'c-', lw=0.8, alpha=0.5)
ensemble_mean = ensemble_mean + y

ensemble_mean = ensemble_mean / I
ax.plot(ensemble_mean, color='b', lw=2, alpha=0.8, label=r'$\bar y_t$')

m = ar.moment_sequence()
population_means = []
for t in range(T):
mu_x, mu_y, Sigma_x, Sigma_y = m.next()
population_means.append(mu_y)
ax.plot(population_means, color='g', lw=2, alpha=0.8, label=r'$G\mu_t$')
ax.legend(ncol=2)




Out[5]:

<matplotlib.legend.Legend at 0x45fc790>



## Exercise 4



In [6]:

phi_1, phi_2, phi_3, phi_4 = 0.5, -0.2, 0, 0.5
sigma = 0.1

A = [[phi_1, phi_2, phi_3, phi_4],
[1,     0,     0,     0],
[0,     1,     0,     0],
[0,     0,     1,     0]]
C = [[sigma],
[0],
[0],
[0]]
G = [1, 0, 0, 0]

T0 = 10
T1 = 50
T2 = 75
T4 = 100

ar = LSS(A, C, G, mu_0=np.ones(4))
ymin, ymax = -0.6, 0.6

fig, ax = plt.subplots(figsize=(8, 5))

ax.grid(alpha=0.4)
ax.set_ylim(ymin, ymax)
ax.set_ylabel(r'$y_t$', fontsize=16)
ax.vlines((T0, T1, T2), -1.5, 1.5)

ax.set_xticks((T0, T1, T2))
ax.set_xticklabels((r"$T$", r"$T'$", r"$T''$"), fontsize=14)

mu_x, mu_y, Sigma_x, Sigma_y = ar.stationary_distributions()
ar.mu_0 = mu_x
ar.Sigma_0 = Sigma_x

for i in range(80):
rcolor = random.choice(('c', 'g', 'b'))
x, y = ar.simulate(ts_length=T4)
y = y.flatten()
ax.plot(y, color=rcolor, lw=0.8, alpha=0.5)
ax.plot((T0, T1, T2), (y[T0], y[T1], y[T2],), 'ko', alpha=0.5)







In [ ]: