You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Rename and refactor McCall lecture to emphasize persistent and transitory wage shocks
Renamed mccall_correlated.md to mccall_persist_trans.md to better reflect the lecture's focus on the decomposition of wages into persistent and transitory components, distinguishing it from the earlier mccall_model_with_sep_markov.md lecture.
Key changes:
- Updated title to "Job Search V: Persistent and Transitory Wage Shocks"
- Rewrote Overview section to:
- Emphasize the persistent-transitory decomposition as the key innovation
- Add references to baseline model (mccall_model) and Job Search III (mccall_model_with_sep_markov)
- Explain why we return to permanent jobs (to isolate wage dynamics effects)
- Note use of fitted value function iteration from Job Search IV
- Replaced 'jr' abbreviation with explicit 'jax.random' throughout for clarity
- Refactored draw_τ function:
- Renamed to draw_duration for clarity
- Extracted as standalone JIT-compiled function with explicit parameters
- Prevents unnecessary recompilation when model parameters change
- compute_unemployment_duration now serves as a clean wrapper
- Simplified JobSearchModel class to Model
- Changed Model instantiation to use positional arguments instead of keyword arguments
- Fixed grammatical errors throughout the text (added missing commas, articles, etc.)
- Updated _toc.yml to reflect filename change
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <[email protected]>
# Job Search V: Persistent and Transitory Wage Shocks
21
25
22
26
```{contents} Contents
23
27
:depth: 2
24
28
```
25
29
26
30
In addition to what's in Anaconda, this lecture will need the following libraries:
27
31
28
-
```{code-cell} ipython
29
-
:tags: [hide-output]
30
-
32
+
```python tags=["hide-output"]
31
33
!pip install quantecon jax
32
34
```
33
35
34
-
35
36
## Overview
36
37
37
-
In this lecture we solve a {doc}`McCall style job search model <mccall_model>` with persistent and
38
-
transitory components to wages.
38
+
In this lecture we extend the {doc}`McCall job search model <mccall_model>` by decomposing wage offers into **persistent** and **transitory** components.
39
+
40
+
In the {doc}`baseline model <mccall_model>`, wage offers are IID over time, which is unrealistic.
41
+
42
+
In {doc}`Job Search III <mccall_model_with_sep_markov>`, we introduced correlated wage draws using a Markov chain, but we also added job separation.
43
+
44
+
Here we take a different approach: we model wage dynamics through an AR(1) process for the persistent component plus a transitory shock, while returning to the assumption that jobs are permanent (as in the {doc}`baseline model <mccall_model>`).
39
45
40
-
In other words, we relax the unrealistic assumption that randomness in wages is independent over time.
46
+
This persistent-transitory decomposition is:
47
+
- More realistic for modeling actual wage processes
48
+
- Commonly used in labor economics (see, e.g., {cite}`MaCurdy1982`, {cite}`Meghir2004`)
49
+
- Simple enough to analyze while capturing key features of wage dynamics
41
50
42
-
At the same time, we will go back to assuming that jobs are permanent and no separation occurs.
51
+
By keeping jobs permanent, we can focus on understanding how persistent and transitory wage shocks affect search behavior and reservation wages.
43
52
44
-
This is to keep the model relatively simple as we study the impact of correlation.
53
+
We will solve the model using fitted value function iteration with linear interpolation, as introduced in {doc}`Job Search IV <mccall_fitted_vfi>`.
45
54
46
55
We will use the following imports:
47
56
48
-
```{code-cell} ipython3
57
+
```python
49
58
import matplotlib.pyplot as plt
50
59
import jax
51
60
import jax.numpy as jnp
52
-
import jax.random as jr
61
+
import jax.random
53
62
import quantecon as qe
54
63
from typing import NamedTuple
55
64
```
@@ -89,7 +98,7 @@ v^*(w, z) =
89
98
\right\}
90
99
$$
91
100
92
-
In this expression, $u$ is a utility function and $\mathbb E_z$ is expectation of next period variables given current $z$.
101
+
In this expression, $u$ is a utility function and $\mathbb E_z$ is the expectation of next period variables given current $z$.
93
102
94
103
The variable $z$ enters as a state in the Bellman equation because its current value helps predict future wages.
95
104
@@ -137,7 +146,7 @@ $$
137
146
\frac{u(w)}{1-\beta} \geq f^*(z)
138
147
$$
139
148
140
-
For utility we take $u(c) = \ln(c)$.
149
+
For utility, we take $u(c) = \ln(c)$.
141
150
142
151
The reservation wage is the wage where equality holds in the last expression.
143
152
@@ -167,8 +176,8 @@ Here's a `NamedTuple` that stores the model parameters and data.
167
176
168
177
Default parameter values are embedded in the model.
169
178
170
-
```{code-cell} ipython3
171
-
class JobSearchModel(NamedTuple):
179
+
```python
180
+
classModel(NamedTuple):
172
181
μ: float# transient shock log mean
173
182
s: float# transient shock log variance
174
183
d: float# shift coefficient of persistent state
@@ -180,9 +189,9 @@ class JobSearchModel(NamedTuple):
0 commit comments