Skip to content

Commit 02bfdcc

Browse files
authored
[kalman_2] update exposition of first three sections (#903)
* typo in the opening paragraph * update on the section A worker's output * update on section A firm's wage-setting policy * update doc reference for robustness
1 parent d3a6576 commit 02bfdcc

1 file changed

Lines changed: 37 additions & 36 deletions

File tree

lectures/kalman_2.md

Lines changed: 37 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ kernelspec:
2929
:depth: 2
3030
```
3131

32-
In this quantecon lecture {doc}`A First Look at the Kalman filter <kalman>`, we used
32+
In this QuantEcon lecture {doc}`kalman`, we used
3333
a Kalman filter to estimate locations of a rocket.
3434

3535
In this lecture, we'll use the Kalman filter to
@@ -38,7 +38,7 @@ human capital, neither of which the firm observes directly.
3838

3939
The firm learns about those things only by observing a history of the output that the worker generates for the firm, and from understanding how that output depends on the worker's human capital and how human capital evolves as a function of the worker's effort.
4040

41-
We'll posit a rule that expresses how the much firm pays the worker each period as a function of the firm's information each period.
41+
We'll posit a rule that expresses how much the firm pays the worker each period as a function of the firm's information each period.
4242

4343
In addition to what's in Anaconda, this lecture will need the following libraries:
4444

@@ -48,7 +48,7 @@ In addition to what's in Anaconda, this lecture will need the following librarie
4848
!pip install quantecon
4949
```
5050

51-
To conduct simulations, we bring in these imports, as in {doc}`A First Look at the Kalman filter <kalman>`.
51+
To conduct simulations, we bring in these imports, as in {doc}`kalman`.
5252

5353
```{code-cell} ipython3
5454
import matplotlib.pyplot as plt
@@ -58,22 +58,22 @@ from collections import namedtuple
5858
from scipy.stats import multivariate_normal
5959
import matplotlib as mpl
6060
mpl.rcParams['text.usetex'] = True
61-
mpl.rcParams['text.latex.preamble'] = r'\usepackage{{amsmath}}'
61+
mpl.rcParams['text.latex.preamble'] = r'\usepackage{amsmath,amsfonts}'
6262
```
6363

6464
## A worker's output
6565

6666
A representative worker is permanently employed at a firm.
6767

68-
The workers' output is described by the following dynamic process:
68+
A worker's output is described by the following dynamic process:
6969

7070
```{math}
7171
:label: worker_model
7272
7373
\begin{aligned}
74-
h_{t+1} &= \alpha h_t + \beta u_t + c w_{t+1}, \quad c_{t+1} \sim {\mathcal N}(0,1) \\
74+
h_{t+1} &= \alpha h_t + \beta u_t + c \epsilon_{t+1}, \quad \epsilon_{t+1} \sim N(0,1) \\
7575
u_{t+1} & = u_t \\
76-
y_t & = g h_t + v_t , \quad v_t \sim {\mathcal N} (0, R)
76+
y_t & = g h_t + v_t , \quad v_t \sim N(0, R)
7777
\end{aligned}
7878
```
7979

@@ -82,22 +82,23 @@ Here
8282
* $h_t$ is the logarithm of human capital at time $t$
8383
* $u_t$ is the logarithm of the worker's effort at accumulating human capital at $t$
8484
* $y_t$ is the logarithm of the worker's output at time $t$
85-
* $h_0 \sim {\mathcal N}(\hat h_0, \sigma_{h,0})$
86-
* $u_0 \sim {\mathcal N}(\hat u_0, \sigma_{u,0})$
85+
* $\epsilon_{t+1}$ is an IID standard normal shock to human capital
86+
* $h_0 \sim N(\hat h_0, \sigma_{h,0})$
87+
* $u_0 \sim N(\hat u_0, \sigma_{u,0})$
8788

88-
Parameters of the model are $\alpha, \beta, c, R, g, \hat h_0, \hat u_0, \sigma_h, \sigma_u$.
89+
Parameters of the model are $\alpha, \beta, c, R, g, \hat h_0, \hat u_0, \sigma_{h,0}, \sigma_{u,0}$.
8990

9091
At time $0$, a firm has hired the worker.
9192

9293
The worker is permanently attached to the firm and so works for the same firm at all dates $t =0, 1, 2, \ldots$.
9394

9495
At the beginning of time $0$, the firm observes neither the worker's innate initial human capital $h_0$ nor its hard-wired permanent effort level $u_0$.
9596

96-
The firm believes that $u_0$ for a particular worker is drawn from a Gaussian probability distribution, and so is described by $u_0 \sim {\mathcal N}(\hat u_0, \sigma_{u,0})$.
97+
The firm believes that $u_0$ for a particular worker is drawn from a Gaussian probability distribution, and so is described by $u_0 \sim N(\hat u_0, \sigma_{u,0})$.
9798

98-
The $h_t$ part of a worker's "type" moves over time, but the effort component of the worker's type is $u_t = u_0$.
99+
The $h_t$ part of a worker's "type" moves over time, while the equation $u_{t+1} = u_t$ implies $u_t = u_0$ for all $t$.
99100

100-
This means that from the firm's point of view, the worker's effort is effectively an unknown fixed "parameter".
101+
Thus, from the firm's point of view, effort is a fixed, unobserved component of the worker's type that must be inferred from output observations.
101102

102103
At time $t\geq 1$, for a particular worker the firm observed $y^{t-1} = [y_{t-1}, y_{t-2}, \ldots, y_0]$.
103104

@@ -107,10 +108,10 @@ But the firm does observe the worker's output $y_t$ at time $t$ and remembers
107108

108109
## A firm's wage-setting policy
109110

110-
Based on information about the worker that the firm has at time $t \geq 1$, the firm pays the worker log wage
111+
At time $t \geq 1$, before observing current output $y_t$, the firm sets the worker's log wage using the past output history $y^{t-1}$:
111112

112113
$$
113-
w_t = g E [ h_t | y^{t-1} ], \quad t \geq 1
114+
w_t = g \mathbb{E}[h_t | y^{t-1}], \quad t \geq 1
114115
$$
115116

116117
and at time $0$ pays the worker a log wage equal to the unconditional mean of $y_0$:
@@ -129,7 +130,7 @@ Write system [](worker_model) in the state-space form
129130

130131
```{math}
131132
\begin{aligned}
132-
\begin{bmatrix} h_{t+1} \cr u_{t+1} \end{bmatrix} &= \begin{bmatrix} \alpha & \beta \cr 0 & 1 \end{bmatrix}\begin{bmatrix} h_{t} \cr u_{t} \end{bmatrix} + \begin{bmatrix} c \cr 0 \end{bmatrix} w_{t+1} \cr
133+
\begin{bmatrix} h_{t+1} \cr u_{t+1} \end{bmatrix} &= \begin{bmatrix} \alpha & \beta \cr 0 & 1 \end{bmatrix}\begin{bmatrix} h_{t} \cr u_{t} \end{bmatrix} + \begin{bmatrix} c \cr 0 \end{bmatrix} \epsilon_{t+1} \cr
133134
y_t & = \begin{bmatrix} g & 0 \end{bmatrix} \begin{bmatrix} h_{t} \cr u_{t} \end{bmatrix} + v_t
134135
\end{aligned}
135136
```
@@ -139,9 +140,9 @@ which is equivalent with
139140
```{math}
140141
:label: ssrepresent
141142
\begin{aligned}
142-
x_{t+1} & = A x_t + C w_{t+1} \cr
143+
x_{t+1} & = A x_t + C \epsilon_{t+1} \cr
143144
y_t & = G x_t + v_t \cr
144-
x_0 & \sim {\mathcal N}(\hat x_0, \Sigma_0)
145+
x_0 & \sim N(\hat x_0, \Sigma_0)
145146
\end{aligned}
146147
```
147148

@@ -204,7 +205,7 @@ h_0, u_0 = x[0, 0], x[1, 0]
204205
```
205206

206207
Next, to compute the firm's policy for setting the log wage based on the information it has about the worker,
207-
we use the Kalman filter described in this quantecon lecture {doc}`A First Look at the Kalman filter <kalman>`.
208+
we use the Kalman filter described in this QuantEcon lecture {doc}`kalman`.
208209

209210
In particular, we want to compute all of the objects in an "innovation representation".
210211

@@ -246,26 +247,26 @@ x_hat_t = np.concatenate((x[:, 1][:, np.newaxis],
246247
u_hat_t = x_hat_t[1, :]
247248
```
248249

249-
For a draw of $h_0, u_0$, we plot $E y_t = G \hat x_t $ where $\hat x_t = E [x_t | y^{t-1}]$.
250+
For a draw of $h_0, u_0$, we plot $\mathbb{E}[y_t | y^{t-1}] = G \hat x_t$ where $\hat x_t = \mathbb{E}[x_t | y^{t-1}]$.
250251

251-
We also plot $E [u_0 | y^{t-1}]$, which is the firm inference about a worker's hard-wired "work ethic" $u_0$, conditioned on information $y^{t-1}$ that it has about him or her coming into period $t$.
252+
We also plot $\mathbb{E}[u_0 | y^{t-1}]$, which is the firm inference about a worker's hard-wired "work ethic" $u_0$, conditioned on information $y^{t-1}$ that it has about him or her coming into period $t$.
252253

253-
We can watch as the firm's inference $E [u_0 | y^{t-1}]$ of the worker's work ethic converges toward the hidden $u_0$, which is not directly observed by the firm.
254+
We can watch as the firm's inference $\mathbb{E}[u_0 | y^{t-1}]$ of the worker's work ethic converges toward the hidden $u_0$, which is not directly observed by the firm.
254255

255256
```{code-cell} ipython3
256257
fig, ax = plt.subplots(1, 2)
257258
258-
ax[0].plot(y_hat_t, label=r'$E[y_t| y^{t-1}]$')
259+
ax[0].plot(y_hat_t, label=r'$\mathbb{E}[y_t| y^{t-1}]$')
259260
ax[0].set_xlabel('Time')
260-
ax[0].set_ylabel(r'$E[y_t]$')
261-
ax[0].set_title(r'$E[y_t]$ over time')
261+
ax[0].set_ylabel(r'$\mathbb{E}[y_t]$')
262+
ax[0].set_title(r'$\mathbb{E}[y_t]$ over time')
262263
ax[0].legend()
263264
264-
ax[1].plot(u_hat_t, label=r'$E[u_t|y^{t-1}]$')
265+
ax[1].plot(u_hat_t, label=r'$\mathbb{E}[u_t|y^{t-1}]$')
265266
ax[1].axhline(y=u_0, color='grey',
266267
linestyle='dashed', label=fr'$u_0={u_0:.2f}$')
267268
ax[1].set_xlabel('Time')
268-
ax[1].set_ylabel(r'$E[u_t|y^{t-1}]$')
269+
ax[1].set_ylabel(r'$\mathbb{E}[u_t|y^{t-1}]$')
269270
ax[1].set_title('Inferred work ethic over time')
270271
ax[1].legend()
271272
@@ -287,7 +288,7 @@ print(Σ_t[:, :, -1])
287288

288289
Evidently, entries in the conditional covariance matrix become smaller over time.
289290

290-
It is enlightening to portray how conditional covariance matrices $\Sigma_t$ evolve by plotting confidence ellipsoides around $E [x_t |y^{t-1}] $ at various $t$'s.
291+
It is enlightening to portray how conditional covariance matrices $\Sigma_t$ evolve by plotting confidence ellipsoides around $\mathbb{E}[x_t | y^{t-1}]$ at various $t$'s.
291292

292293
```{code-cell} ipython3
293294
# Create a grid of points for contour plotting
@@ -402,17 +403,17 @@ for t in range(1, T):
402403
# Generate plots for y_hat_t and u_hat_t
403404
fig, ax = plt.subplots(1, 2)
404405
405-
ax[0].plot(y_hat_t, label=r'$E[y_t| y^{t-1}]$')
406+
ax[0].plot(y_hat_t, label=r'$\mathbb{E}[y_t| y^{t-1}]$')
406407
ax[0].set_xlabel('Time')
407-
ax[0].set_ylabel(r'$E[y_t]$')
408-
ax[0].set_title(r'$E[y_t]$ over time')
408+
ax[0].set_ylabel(r'$\mathbb{E}[y_t]$')
409+
ax[0].set_title(r'$\mathbb{E}[y_t]$ over time')
409410
ax[0].legend()
410411
411-
ax[1].plot(u_hat_t, label=r'$E[u_t|y^{t-1}]$')
412+
ax[1].plot(u_hat_t, label=r'$\mathbb{E}[u_t|y^{t-1}]$')
412413
ax[1].axhline(y=u_0, color='grey',
413414
linestyle='dashed', label=fr'$u_0={u_0:.2f}$')
414415
ax[1].set_xlabel('Time')
415-
ax[1].set_ylabel(r'$E[u_t|y^{t-1}]$')
416+
ax[1].set_ylabel(r'$\mathbb{E}[u_t|y^{t-1}]$')
416417
ax[1].set_title('Inferred work ethic over time')
417418
ax[1].legend()
418419
@@ -481,11 +482,11 @@ def simulate_workers(worker, T, ax, mu_0=None, Sigma_0=None,
481482
ax.plot(u_hat_t - u_0, alpha=.5)
482483
ax.axhline(y=0, color='grey', linestyle='dashed')
483484
ax.set_xlabel('Time')
484-
ax.set_ylabel(r'$E[u_t|y^{t-1}] - u_0$')
485+
ax.set_ylabel(r'$\mathbb{E}[u_t|y^{t-1}] - u_0$')
485486
ax.set_title(title)
486487
487488
else:
488-
label_line = (r'$E[u_t|y^{t-1}]$' if name is None
489+
label_line = (r'$\mathbb{E}[u_t|y^{t-1}]$' if name is None
489490
else name)
490491
title = ('Inferred work ethic over time'
491492
if title is None else title)
@@ -494,7 +495,7 @@ def simulate_workers(worker, T, ax, mu_0=None, Sigma_0=None,
494495
ax.axhline(y=u_0, color=u_hat_plot[0].get_color(),
495496
linestyle='dashed', alpha=0.5)
496497
ax.set_xlabel('Time')
497-
ax.set_ylabel(r'$E[u_t|y^{t-1}]$')
498+
ax.set_ylabel(r'$\mathbb{E}[u_t|y^{t-1}]$')
498499
ax.set_title(title)
499500
```
500501

0 commit comments

Comments
 (0)