Skip to content

Commit b89064f

Browse files
committed
final touches on cagan_ree
1 parent 4d9ed8a commit b89064f

File tree

1 file changed

+42
-33
lines changed

1 file changed

+42
-33
lines changed

lectures/cagan_ree.md

Lines changed: 42 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ m0 = 1
252252
253253
+++ {"user_expressions": []}
254254
255-
Now we can solve the model and plot $\pi_t$, $m_t$ and $p_t$ for $t =1, \ldots, T+1$
255+
Now we can solve the model to compute $\pi_t$, $m_t$ and $p_t$ for $t =1, \ldots, T+1$
256256
257257
```{code-cell} ipython3
258258
def solve(model):
@@ -410,48 +410,57 @@ The following code does the calculations and plots outcomes.
410410
411411
```{code-cell} ipython3
412412
# path 1
413-
μ_seq_3_path1 = μ0 * np.ones(T+1)
413+
μ_seq_2_path1 = μ0 * np.ones(T+1)
414414
415-
mc1 = create_cagan_model(m0=m0, α=α, T=T, μ_seq=μ_seq_3_path1)
416-
π_seq_3_path1, m_seq_3_path1, p_seq_3_path1 = solve(mc1)
415+
mc1 = create_cagan_model(m0=m0, α=α,
416+
T=T, μ_seq=μ_seq_2_path1)
417+
π_seq_2_path1, m_seq_2_path1, p_seq_2_path1 = solve(mc1)
417418
418419
# continuation path
419-
μ_seq_3_cont = μ_star * np.ones(T-T1)
420+
μ_seq_2_cont = μ_star * np.ones(T-T1)
420421
421-
mc2 = create_cagan_model(m0=m_seq_3_path1[T1+1], α=α, T=T-1-T1, μ_seq=μ_seq_3_cont)
422-
π_seq_3_cont, m_seq_3_cont1, p_seq_3_cont1 = solve(mc2)
422+
mc2 = create_cagan_model(m0=m_seq_2_path1[T1+1],
423+
α=α, T=T-1-T1, μ_seq=μ_seq_2_cont)
424+
π_seq_2_cont, m_seq_2_cont1, p_seq_2_cont1 = solve(mc2)
423425
424426
425427
# regime 1 - simply glue π_seq, μ_seq
426-
μ_seq_3 = np.concatenate([μ_seq_3_path1[:T1+1], μ_seq_3_cont])
427-
π_seq_3 = np.concatenate([π_seq_3_path1[:T1+1], π_seq_3_cont])
428-
m_seq_3_regime1 = np.concatenate([m_seq_3_path1[:T1+1], m_seq_3_cont1])
429-
p_seq_3_regime1 = np.concatenate([p_seq_3_path1[:T1+1], p_seq_3_cont1])
428+
μ_seq_2 = np.concatenate([μ_seq_2_path1[:T1+1],
429+
μ_seq_2_cont])
430+
π_seq_2 = np.concatenate([π_seq_2_path1[:T1+1],
431+
π_seq_2_cont])
432+
m_seq_2_regime1 = np.concatenate([m_seq_2_path1[:T1+1],
433+
m_seq_2_cont1])
434+
p_seq_2_regime1 = np.concatenate([p_seq_2_path1[:T1+1],
435+
p_seq_2_cont1])
430436
431437
# regime 2 - reset m_T1
432-
m_T1 = (m_seq_3_path1[T1] + μ0) + α*(μ0 - μ_star)
438+
m_T1 = (m_seq_2_path1[T1] + μ0) + α*(μ0 - μ_star)
433439
434-
mc = create_cagan_model(m0=m_T1, α=α, T=T-1-T1, μ_seq=μ_seq_3_cont)
435-
π_seq_3_cont2, m_seq_3_cont2, p_seq_3_cont2 = solve(mc)
440+
mc = create_cagan_model(m0=m_T1, α=α,
441+
T=T-1-T1, μ_seq=μ_seq_2_cont)
442+
π_seq_2_cont2, m_seq_2_cont2, p_seq_2_cont2 = solve(mc)
436443
437-
m_seq_3_regime2 = np.concatenate([m_seq_3_path1[:T1+1], m_seq_3_cont2])
438-
p_seq_3_regime2 = np.concatenate([p_seq_3_path1[:T1+1], p_seq_3_cont2])
444+
m_seq_2_regime2 = np.concatenate([m_seq_2_path1[:T1+1],
445+
m_seq_2_cont2])
446+
p_seq_2_regime2 = np.concatenate([p_seq_2_path1[:T1+1],
447+
p_seq_2_cont2])
439448
440449
T_seq = range(T+2)
441450
442451
# plot both regimes
443452
fig, ax = plt.subplots(2, 3, figsize=[10,5], dpi=200)
444453
445-
ax[0,0].plot(T_seq[:-1], μ_seq_3)
446-
ax[0,1].plot(T_seq, π_seq_3)
447-
ax[0,2].plot(T_seq, m_seq_3_regime1 - p_seq_3_regime1)
448-
ax[1,0].plot(T_seq, m_seq_3_regime1,
454+
ax[0,0].plot(T_seq[:-1], μ_seq_2)
455+
ax[0,1].plot(T_seq, π_seq_2)
456+
ax[0,2].plot(T_seq, m_seq_2_regime1 - p_seq_2_regime1)
457+
ax[1,0].plot(T_seq, m_seq_2_regime1,
449458
label='Smooth $m_{T_1}$')
450-
ax[1,0].plot(T_seq, m_seq_3_regime2,
459+
ax[1,0].plot(T_seq, m_seq_2_regime2,
451460
label='Jumpy $m_{T_1}$')
452-
ax[1,1].plot(T_seq, p_seq_3_regime1,
461+
ax[1,1].plot(T_seq, p_seq_2_regime1,
453462
label='Smooth $m_{T_1}$')
454-
ax[1,1].plot(T_seq, p_seq_3_regime2,
463+
ax[1,1].plot(T_seq, p_seq_2_regime2,
455464
label='Jumpy $m_{T_1}$')
456465
457466
@@ -502,33 +511,33 @@ unanticipated, as in experiment 2.
502511
# compare foreseen vs unforeseen shock
503512
fig, ax = plt.subplots(2, 3, figsize=[12,6], dpi=200)
504513
505-
ax[0,0].plot(T_seq[:-1], μ_seq_3)
514+
ax[0,0].plot(T_seq[:-1], μ_seq_2)
506515
ax[0,0].set_ylabel(r'$\mu$')
507516
508-
ax[0,1].plot(T_seq, π_seq_3,
517+
ax[0,1].plot(T_seq, π_seq_2,
509518
label='Unforeseen')
510519
ax[0,1].plot(T_seq, π_seq_1,
511520
label='Foreseen', color='tab:green')
512521
ax[0,1].set_ylabel(r'$\pi$')
513522
514523
ax[0,2].plot(T_seq,
515-
m_seq_3_regime1 - p_seq_3_regime1,
524+
m_seq_2_regime1 - p_seq_2_regime1,
516525
label='Unforeseen')
517526
ax[0,2].plot(T_seq, m_seq_1 - p_seq_1,
518527
label='Foreseen', color='tab:green')
519528
ax[0,2].set_ylabel(r'$m - p$')
520529
521-
ax[1,0].plot(T_seq, m_seq_3_regime1,
530+
ax[1,0].plot(T_seq, m_seq_2_regime1,
522531
label=r'Unforseen (Insist on $m_{T_1}$)')
523-
ax[1,0].plot(T_seq, m_seq_3_regime2,
532+
ax[1,0].plot(T_seq, m_seq_2_regime2,
524533
label=r'Unforseen (Reset $m_{T_1}$)')
525534
ax[1,0].plot(T_seq, m_seq_1,
526535
label='Foreseen shock')
527536
ax[1,0].set_ylabel(r'$m$')
528537
529-
ax[1,1].plot(T_seq, p_seq_3_regime1,
538+
ax[1,1].plot(T_seq, p_seq_2_regime1,
530539
label=r'Unforseen (Insist on $m_{T_1}$)')
531-
ax[1,1].plot(T_seq, p_seq_3_regime2,
540+
ax[1,1].plot(T_seq, p_seq_2_regime2,
532541
label=r'Unforseen (Reset $m_{T_1}$)')
533542
ax[1,1].plot(T_seq, p_seq_1,
534543
label='Foreseen')
@@ -641,10 +650,10 @@ The following code does the calculations and plots the results.
641650
```{code-cell} ipython3
642651
# parameters
643652
ϕ = 0.9
644-
μ_seq_2 = np.array([ϕ**t * μ0 + (1-ϕ**t)*μ_star for t in range(T)])
645-
μ_seq_2 = np.append(μ_seq_2, μ_star)
653+
μ_seq = np.array([ϕ**t * μ0 + (1-ϕ**t)*μ_star for t in range(T)])
654+
μ_seq = np.append(μ_seq, μ_star)
646655
647656
648657
# solve and plot
649-
π_seq_2, m_seq_2, p_seq_2 = solve_and_plot(m0=m0, α=α, T=T, μ_seq=μ_seq_2)
658+
π_seq, m_seq, p_seq = solve_and_plot(m0=m0, α=α, T=T, μ_seq=μ_seq)
650659
```

0 commit comments

Comments
 (0)