Repository navigation
Conversation
…ality lectures
Review and revision of the seven lectures in the Bounded Rationality in
Macroeconomics suite, checked against the 1993 book and Marimon, McGrattan
and Sargent (1990).
Shared across the suite
- One stochastic-approximation / E-stability thread, introduced in
bounded_rationality ("One recursion, many learners") and used by the later
lectures, with the history credited accurately (DeCanio, Evans,
Marcet-Sargent, Woodford; Evans-Honkapohja as systematizers)
- Consistent verdicts on selection: MMS economy A2 is convergence to a
non-equilibrium; the two-currency exchange rate is history-dependent
- Repaired hand-offs and cross-links, the book's four payoffs, the
prompting gradient, a notation table, and de-duplicated quotes
- Ten new bibliography entries
By lecture
- bounded_rationality: Bray's learners, E-stability, the bubble linked to
olg_adaptive_money, corrected quotes and attributions
- olg_adaptive_money: remove the pi0 = 3 floating-point artifact, explain the
stability reversal by E-stability, condense the Phillips section with
corrected attributions, three new exercises
- learning_approximation: simulate the same 201-state chain the benchmark is
solved on, converge the kernel smoother, correct the recursive kernel
formula, ODE comparison of batch and online learning
- exchange_rate_learning: fix the tautological limits figure and a print bug,
correct the kappa, election-operator, and time-series claims
- genetic_classifier: common random numbers and a 20-seed sweep for the
prisoner's dilemma, matching perceptron code, a bucket-brigade subsection
- marimon_mcgrattan_sargent: correct the Kiyotaki-Wright condition, adopt the
paper's encoding and a single paper-style genetic algorithm, report every
economy across seeds, derive the bucket brigade's effective discount factor
- prospects_bounded_rationality: correct the history (Bray, E-stability,
Chung, SWZ), settle the four payoffs, qualify the identification argument,
four new exercises
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
🔵 Needs a closer look
Execution and output correctness of the substantial new notebook code across the large multi-file revision couldn't be validated in this environment, so confirmation of a clean CI build is needed before approval.
No open issues 🎉
What changed in this PR
This PR revises the seven-lecture "Bounded Rationality in Macroeconomics" suite (checked against Sargent 1993 and Marimon–McGrattan–Sargent 1990), of which five files appear here: four lecture files plus the shared bibliography. The changes tighten the economics narrative, repair hand-offs and cross-links between lectures, introduce a single stochastic-approximation / E-stability thread used across the series, correct quotes/attributions and a few numerical artifacts, add many new worked exercises with executable solutions, and register ten new bibliography entries.
Changes:
- Introduce and reuse one E-stability / stochastic-approximation framing (new
br_one_recursion,br_payoffs,br_notationsections inbounded_rationality), with consistent cross-lecture{ref}/{doc}links and a notation table. - Rework code and prose in
learning_approximation(single 201-state chain for benchmark and learners, matrix-formT_map, converged kernel smoother, ODE batch-vs-online comparison) andexchange_rate_learning(ridge/κ stabilizer, limits figure fix, genetic-algorithm volatility diagnostics), plus many new exercises in all four files. - Add 10 new
.bibentries (DeCanio1979, Evans1989, denHaanMarcet1990, Giannitsarou2005, MalmendierNagel2016, Arthur1991, BullardDuffy1993, Hopfield1982, Arifovic1994, KuanLiu1995), all referenced and unique.
Verification performed: all 65 {cite*} keys across the four lectures resolve to the bib; all {ref}/{numref}/{eq}/{doc} targets resolve; no duplicate figure names or labels; exercise/solution directives and code fences are balanced; removed symbols (brentq, market_prices, sigma_u) are fully unused; and the refactored helpers (e.g., the lfilter rewrite of smoothing_mse, rule/parameterized_expectations/online_pea, and exercise algebra such as the T-map fixed points and slopes) are internally consistent. Notebook execution could not be run in this environment, so output correctness should be confirmed by the CI build.
| File | Description |
|---|---|
lectures/bounded_rationality.md |
Adds the quest/payoffs/notation framing and the "One recursion, many learners" E-stability section; corrects quotes, attributions (muth1961, Friedman1957), and bubble/two-currency exposition; adds exercises br_ex4–ex5. |
lectures/prospects_bounded_rationality.md |
Rewrites the 1993 "ledger" and postscript (four payoffs, identification argument, constant-gain estimability), corrects history/attributions, adds exercises pbr_ex1–ex4. |
lectures/learning_approximation.md |
Unifies benchmark and learners on one 201-state chain, matrix-form T_map/PEA, converged recursive kernel smoother, batch-vs-online ODE/eigenvalue analysis; adds exercises lae_ex4–ex5. |
lectures/exchange_rate_learning.md |
Clarifies Newton–Raphson history-dependence, adds the κ ridge stabilizer, fixes the limits figure and spectrum/print bugs, adds genetic-population diagnostics and exercises xr_ex4–ex5. |
lectures/_static/quant-econ.bib |
Adds ten new bibliography entries supporting the new citations across the suite. |
Review effort: Balanced
…ty lectures marimon_mcgrattan_sargent - A larger bid fraction pulls a rule's stationary strength toward zero rather than always lowering it, so the critique of the paper's "favor specific rules" claim now turns on the sign of downstream payments - A1.1 trade-flow prose matches the figure; the off-equilibrium arrows are not thin - Economy C is compared with the paper's run correctly - Seed count for Economy D; crossover and first-update wording match the code; Ex5 conclusions are scoped to its six runs bounded_rationality - The core of the E-stability theory predates the book; "may seem a weak reed"; Bray's b is distinguished from this lecture's demand slope olg_adaptive_money - Gain contrast with bounded_rationality, the positive-saving qualifier, and the first realized inflation rate in Ex5 learning_approximation - The factor of four is the predicted rate, not the realized one; the Ex1 reading matches its table; Ex4 notes the E-unstable second equilibrium exchange_rate_learning - The zero gap in the limits figure is near-automatic; the election operator is not the only source of learning genetic_classifier - Ex2, Ex3 and Ex4 claims are scoped to the seeds shown; spurious Hopfield states are fixed points, most of them local minima prospects_bounded_rationality - Identification "at the usual rate"; the E-stability limits paragraph; the Ex3 single-learner penalty is bounded, not small The A2.1 and B.1 multi-seed claims are left for the author in #1102. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Review summaryI reviewed all seven lectures:
Bottom line: the corrections are real and the mathematics holds up. Every error named in the description reproduces on One substantive error (the bid-fraction claim in Line numbers below refer to 473d382. Fixed in f596e5f
Prose that contradicted the output, or claimed more than the seeds support:
These are prose-only changes. A full Raised for the author: #1102A2.1 lock-in. "So these runs are slow rather than stuck for good" (L1348) and "all of them reach the fundamental pattern by t = 6000" (L1363) hold for seeds 0–19 only. On seeds 20–39, 3 of the 16 runs that are off the pattern at t = 1000 are still off at t = 6000. Seeds 24 and 26 are unchanged at t = 24,000. The cause is a different lock-in from the one described: type 2's general consumption rule Economy B.1. The overview's "nearly every run" is 31 of 40 on seeds 20–59. The main A2 verdict is unaffected: type 1 never speculates in any of 60 seeds. The issue sets out three ways to reword the claims. Left for the author (optional, not changed)
Verified corrections (highlights)
Build and runtimeAll seven lectures execute with zero cell errors. Locally, Not verifiedQuotations and chapter or footnote locators for Sargent (1993) and Marimon, McGrattan and Sargent (1990), the Arifovic and Bullard–Duffy results as characterised, and the rendered figures. 🤖 Generated with Claude Code |
…ity lectures - olg_adaptive_money: fold the two-sentence parenthetical on the pi0 = 3 rest point into one sentence (qe-writing-001) - exchange_rate_learning: write "IID", as the rest of the suite does (qe-writing-009, proposed) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Style-guide passI checked the PR against the QuantEcon style guide (rules from
The new material is in good shape. Commit f9a095d applies the two changes worth making. Pushed in f9a095d
Both are prose-only. A rescan shows both issues cleared. Checked and fine
Left for the author (optional)
🤖 Generated with Claude Code |
Per Tom's choice of option 2 in #1102: - The first lock-in (a lucky refusal rule shutting out an untried trade rule) is slow rather than permanent, as before; the text now says so only of that mode - A new seed-24 cell shows a second, permanent lock-in: type 2's general consumption rule `##0 -> 1`, kept strong by eating good 2, also eats the good 1 it should keep, and the specific rule `100 -> 0` never wins the argmax auction again; seeds 24 and 26 are unchanged at t = 24,000 - Overview and summary: "a few stay stuck for good" in A2; Economy B selects the fundamental equilibrium in most runs (31 of 40 on seeds 20-59) and the speculative one in none Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Follow-up: A2.1 lock-in (#1102)@thomassargent30 chose option 2 from #1102: describe the second lock-in as a failure mode in its own right. Done in 5a2bf5a, changing
The lecture runs cleanly: 51 cells, 0 errors, 57 s locally. #1102 stays open as the reminder to return to option 3 (more seeds and longer horizons, reporting frequencies) in about six months, as Tom suggested. With this, all the review items are addressed. This is ready to merge once the preview build is green. 🤖 Generated with Claude Code |
- Say the same fact once: the specific rule sits far below the general rule's strength, so it never wins the argmax auction - Name the mechanism with the lecture's own term, an overgeneral consumption rule, instead of coining "the cost of generality" - Add seed 24 to the third item of the three-mechanisms list so the new passage ties into the existing framework Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Five solution-block cells carried mystnb figure captions, which the LaTeX builder renders as a figure environment inside the solution box and rejects with "Not in outer par mode", failing the PDF build on every push of this branch. No lecture on main has a captioned figure inside a solution, and nothing cross-references these five names, so the plots now render as plain outputs. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
📖 Netlify Preview Ready!Preview URL: https://pr-1101--sunny-cactus-210e3e.netlify.app Commit: 📚 Changed Lectures
Build Info
|
✅ Translation sync completed (zh-cn)Target repo: QuantEcon/lecture-python.zh-cn
|
Twenty solution-block cells across ten lectures carried mystnb figure captions, which the LaTeX builder renders as a figure environment inside the solution box and rejects with "Not in outer par mode", failing the PDF step of the preview build. Nothing cross-references these names, so the plots now render as plain outputs, as in the same change on #1101. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…lectures (#1105) * [phillips] Correct, connect, and extend the Phillips Curve Tradeoffs lectures Review and revision of the Phillips Curve Tradeoffs suite, checked against The Conquest of American Inflation and the papers it draws on (Cho, Williams and Sargent 2002; Sargent and Williams 2005; Cogley and Sargent 2005; Sargent and Williams 2025/26; Abreu, Pearce and Stacchetti 1990). Structure - New lecture phillips_policy_evaluation on Conquest chapter 9: maximum likelihood estimation of the classical and Keynesian adaptive models - phillips_drifts_volatilities split; the post-2000 update is now phillips_drifts_volatilities_2 - phillips_lost_conquest moved to the end of the suite Shared across the suite - One escape story: Sims and Chung escape once and stay; Sargent (1999) and CWS recur; Sargent and Williams (2005) explain the difference by the prior; escapes are frequent at the gains the suite uses - The E-stability eigenvalue -1/(1+theta^2) made explicit in 98, 102, 103, 105 - Links to the Bounded Rationality suite, ls_learning, kalman, rational_expectations, markov_perf, and the advanced series, with reverse links from ls_learning, kalman, and rational_expectations - Rewritten notation and gain tables; MarcetSargent1989jet citation key; direct FRED CSV reads; 20 new bibliography entries Corrections that change results - Discounted Riccati cross term in phillips_learning and phillips_lost_conquest - Kalman-filter normalization and the Sims replication in phillips_priors - Both incentive constraints for Abreu's stick and carrot, the worst-value feasibility check, and the APS starting-set condition - Better-than-Nash outcomes of optimal misspecified beliefs shown to vanish as the perceived root goes to one - Vector field of phillips_escaping_nash (the moment matrix lags) - Escape-route persistence prediction, an exact longer MCMC chain, and Monte Carlo error in phillips_drifts_volatilities - Real-time data and the January 2026 propositions in phillips_lost_conquest - Data statements, figures, and the October 2025 gap in phillips_two_stories Exercises: about fifty, up from 21, many linking lectures Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * [phillips] Fix two notebook execution failures phillips_lost_conquest: real_time_gap capped vintage dates at the local date. ALFRED silently drops a vintage date that is still in the future in St. Louis, so whenever the run clock is ahead of US Central time (CI between about 00:00 and 06:00 UTC, or any machine east of the US) and the newest quarter is less than 45 days old, the lecture fails with KeyError 'GDPC1_<today>'. Take today's date in America/Chicago instead. phillips_drifts_volatilities: the nyblom_hansen solution solved a stack of 2x2 systems with a 2-D right-hand side, which NumPy 2 treats as a matrix rather than a stack of vectors. Use the [..., None] / [..., 0] idiom the suite already uses elsewhere. Exercise 3's output then matches the text (critical value 0.731, power 0.10-0.43, size 0.032). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * [phillips] Drop figure metadata from plots inside exercise solutions Twenty solution-block cells across ten lectures carried mystnb figure captions, which the LaTeX builder renders as a figure environment inside the solution box and rejects with "Not in outer par mode", failing the PDF step of the preview build. Nothing cross-references these names, so the plots now render as plain outputs, as in the same change on #1101. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * [phillips] Correct errors found in review - credible_policies, cpol_ex4 solution: the one-period deviation payoff is v^R + G, not v^R + T. - credible_policies, cpol_ex5 solution: as delta -> 0 both curves return to v^N, but the optimal punishment does not become "no harsher than Nash reversion". Measured from v^N it still sustains about twice the improvement (ratio 1.95 at delta = 0.02, 1.98 at 0.005, from the lecture's own solve_aps and nash_reversion_best); a short cell now prints the ratio. - self_confirming, sc_ex3 solution: use the main text's N = 2**14 grid. With 2**12 the solution printed largest B(C)/C = 0.21 at delta = 0.97 where the main text prints 0.311 for the same case; C and nu are unchanged. - escaping_nash: epsilon = 0.0002 is not one of the SW2005 gains (their Table 1 stops at 0.001, as en_ex4 lists) and phillips_priors no longer uses it; say what it is instead. - priors: define V* = sigma^2 M^{-1}, the epsilon-free RLS prior that the code (V_star) and ppr_ex3 (V = epsilon^2 V*) use. - lost_conquest: drop "with the Riccati equation solved correctly", which refers to an earlier bug the reader never sees. - two_stories: pin the Baxter-King comparison to 2008-2019. Its window currently ends in 2019-09, so the output is unchanged today, but once the data run past about 2027 it would take in the 2021-22 surge and contradict the sentence describing it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * [phillips_drifts_volatilities] Match the archive's interest-rate transform The archived NEWQDATA y3 column is exactly i/(400 - i) for the TB3MS first-month rate i (max error 2.3e-16 over all 211 quarters), the quarterly return on a bill bought at a discount of i/400 of face value, not log(1 + i/400) (max error 2.2e-3) as the text said. - Part 1: describe the transform correctly, and recover i in the data figure as 400 y3/(1 + y3). The 400 expm1(y3) used before overstated rates by up to about 0.9 percentage points in the early 1980s. No estimate changes. - Part 2: build the post-2000 extension with the same i/(400 - i), so the splice no longer changes definition at 2001Q1 (log1p understated the new quarters by up to about 2.5 basis points a quarter) and the text's "the transformations are unchanged" is true; plot it the same way. Because the effective sample size of tr(Q) is only about 9, this small data change moves the printed posterior summaries about as much as a new seed or a new quarter of FRED data does (posterior mean of tr(Q) 0.433 -> 0.318, 1970s peak of core inflation 16.6 -> 23.6 percent). Every statement in the text still holds in the new run, since the text quotes only features that are stable across seeds. - Both parts: integrated_autocorrelation_time fell over with an IndexError when no lag satisfies Sokal's window condition, which happens once the autocorrelation time exceeds about a fifth of the chain. Fall back to the last lag instead. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * [phillips] Apply Copilot's suggestions and small style fixes - policy_evaluation: use np.linalg.slogdet in the concentrated log likelihood (Copilot). - prospects_bounded_rationality: "shrank ... by a factor of about fifty", with the broken line rejoined (Copilot). - lost_conquest: pass sort=True to the pd.concat of the FRED series. Under pandas 3 the default emits a Pandas4Warning into the rendered output; sort=True keeps today's sorted union. It is the only concat in lost_conquest, two_stories or policy_evaluation that warns under pandas 3.1. - lost_conquest: IID rather than i.i.d., as elsewhere in the suite. - Split eight multi-sentence paragraphs (adaptive, drifts_volatilities_2, escaping_nash, lost_conquest, misspecified, priors) into one sentence per paragraph. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * [phillips] Use {cite:t} for in-text citations With bibtex_reference_style author_year, a bare {cite} renders as a bracketed parenthetical, so in-text uses read as "[Phelps, 1967] formulated a control problem" or "chapter 7 of [Sargent, 1999]" (as on the live site today). Switch the 89 narrative uses across 13 lectures to {cite:t}, which renders "Phelps [1967] formulated" and "chapter 7 of Sargent [1999]" (qe-ref-001). Kept as {cite}: end-of-clause citations and citations that follow an author's name written out in the prose ("Robert Solow and James Tobin {cite}`...`"). The parenthesized list of three separate citations in escaping_nash is now one {cite} with three keys, so it no longer renders nested brackets. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * [quant-econ.bib] Protect proper nouns in titles cited by the Phillips suite The bibliography style sentence-cases article titles, so capitals not protected by braces are lowercased on the references page: today it prints "The post-war U.S. phillips curve" and "Evolving post-world war II U.S. inflation dynamics". Brace the proper nouns in the eleven titles cited by the phillips lectures where this happens (Phillips, Great Inflation, Great Moderation, World War II, French Revolution, American), and brace the quoted paper titles inside the Sims, Stock and Taylor comments so they keep their own capitalization. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * [phillips] Drop embedded titles that repeat the figure caption Six main-text figures printed the same text twice: once as a matplotlib title or suptitle inside the image and again as the mystnb caption below it (qe-fig-003). Remove the embedded title in two_stories, credible_policies (two figures), escaping_nash (two) and learning. The one that also named the book's figures moves that reference into its caption. Kept on purpose: the two_stories titles that carry the book's figure numbers ("Figure 1.1: ..."), because the prose refers to the plots by those numbers, and panel titles in multi-panel figures, which label the panels rather than repeat the caption. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * [phillips] Greek identifiers in code, and the suite's blackboard operators - lost_conquest: phi_pi, phi_pi_riccati and the phi_0/phi_pi/phi_x/phi_i rule columns become φ_π, φ_π_riccati and φ_0/φ_π/φ_x/φ_i, matching the ρ, κ, λ_x, β already in the same signatures (qe-code-002). - policy_evaluation: gamma_of_beta becomes γ_of_β. - \mathbb E -> \mathbb{E} (lost_conquest), and \operatorname{var}(.) -> \mathbb{V}[.] (credibility, drifts_volatilities_2, lost_conquest) and \operatorname{Prob} -> \mathbb{P} (escaping_nash, learning), the forms the rest of the suite already uses. Outputs of lost_conquest and policy_evaluation are unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * [phillips_lost_conquest] Ask ALFRED for vintages up to yesterday For some hours after midnight in St. Louis, ALFRED still treats today's date as in the future and returns its latest vintage under yesterday's label, so looking up today's column raised a KeyError. The preview for 371f37a failed this way at 00:34 and 00:45 Central time. Capping the latest vintage at yesterday requests the same data ALFRED is serving, and the printed outputs are unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: thomassargent30 <ts43@nyu.edu> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Review and revision of the seven lectures in the Bounded Rationality in Macroeconomics suite, checked against the 1993 book and Marimon, McGrattan and Sargent (1990).
Shared across the suite
By lecture