From 3329567d4b85d7f42133fdd37a7c72a80544d26e Mon Sep 17 00:00:00 2001 From: Matt McKay Date: Sun, 27 Sep 2026 16:05:08 +1000 Subject: [PATCH 01/12] Update translation: lectures/lq_mean_field_games.md --- lectures/lq_mean_field_games.md | 1696 +++++++++++++++++++++++++++++++ 1 file changed, 1696 insertions(+) create mode 100644 lectures/lq_mean_field_games.md diff --git a/lectures/lq_mean_field_games.md b/lectures/lq_mean_field_games.md new file mode 100644 index 00000000..f3c3a070 --- /dev/null +++ b/lectures/lq_mean_field_games.md @@ -0,0 +1,1696 @@ +--- +jupytext: + text_representation: + extension: .md + format_name: myst + format_version: 0.13 +kernelspec: + display_name: Python 3 + language: python + name: python3 +translation: + title: 线性二次平均场博弈 + headings: + Overview: 概览 + The environment: 环境 + The environment::Complements and substitutes: 互补品和替代品 + The environment::Equilibrium: 均衡 + Solving the individual problem: 求解个体问题 + A state-costate system: 状态-协态系统 + The equilibrium Riccati equation: 均衡里卡蒂方程 + The equilibrium Riccati equation::Existence and uniqueness: 存在性和唯一性 + Computing equilibria: 计算均衡 + Computing equilibria::Checking the Hamiltonian structure: 检验哈密顿结构 + The scalar case: 标量情形 + An industry equilibrium with capital accumulation: 具有资本积累的行业均衡 + An industry equilibrium with capital accumulation::Calibration: 校准 + An industry equilibrium with capital accumulation::How much do the interactions matter?: 这些相互作用有多重要? + An industry equilibrium with capital accumulation::Micro and macro adjustment speeds: 微观和宏观调整速度 + An industry equilibrium with capital accumulation::Market power and returns to scale: 市场势力和规模报酬 + An industry equilibrium with capital accumulation::Where are we in the four regions?: 我们处在四个区域中的哪一个? + An industry equilibrium with capital accumulation::Transition paths: 过渡路径 + Persistence: 持久性 + The planner: 计划者 + Multiproduct price setting with Kimball demand: 具有金博尔需求的多产品定价 + Multiproduct price setting with Kimball demand::The superelasticity and aggregate dynamics: 超弹性和总量动态 + Multiproduct price setting with Kimball demand::Static complementarity: 静态互补性 + Multiproduct price setting with Kimball demand::Closed-form eigenvalues: 闭式特征值 + Multiproduct price setting with Kimball demand::Aggregate and individual price paths: 总量和个体价格路径 + Multiproduct price setting with Kimball demand::The planner does care: 计划者确实在乎 + Aggregate shocks and identification: 总量冲击和识别 + Exercises: 练习 + Further reading: 延伸阅读 +--- + +(lq_mean_field_games)= +```{raw} jupyter +
+ + QuantEcon + +
+``` + +# 线性二次平均场博弈 + +```{contents} Contents +:depth: 2 +``` + +## 概览 + +**平均场博弈**描述了连续统的小型代理人,每个代理人求解一个动态优化问题,其收益取决于所有其他人在做什么,这由状态的横截面分布来概括。 + +该框架由 {cite:t}`LasryLions2007` 提出,并由 {cite:t}`HuangMalhameCaines2006` 独立提出。 + +它将两个偏微分方程配对: + +* **哈密顿-雅可比-贝尔曼**方程,随时间反向运行,描述给定总量路径下个体的最优选择 +* **柯尔莫戈罗夫前向**方程,随时间正向运行,描述给定这些选择时个体状态分布如何演化 + +均衡要求代理人视为给定的总量恰好是他们自己决策所产生的总量。 + +同一对方程也是连续时间异质代理人宏观经济学的主力工具;参见 {cite:t}`AchdouEtAl2022`。 + +{doc}`rational_expectations` 的读者会认出这个要求。 + +这就是"大 $Y$、小 $y$"的思想,现在应用于整个分布,而不是单个数字。 + +本讲座研究一个可处理的特殊情形,其中收益是二次的,状态呈线性演化,遵循 {cite:t}`AlvarezArgente2026`。 + +出现两种相互作用: + +* 代理人通过矩阵 $\Theta_X$ 关心横截面平均*状态* $X$ +* 代理人通过矩阵 $\Theta_{\mathcal A}$ 关心横截面平均*行动* $\mathcal A$ + +主要结果是一个惊人的简化: + +```{note} +平均场博弈的均衡满足*单个代理人*线性二次调节器问题的代数里卡蒂方程,其中曲率矩阵 $Q$ 和 $\Gamma$ 被替换为 + +$$ +Q + \Theta_X \qquad\text{和}\qquad \Gamma + \Theta_{\mathcal A} 。 +$$ +``` + +因此,我们对线性调节器所了解的一切都可以用于均衡分析:存在性条件、唯一性、比较静态和数值方法。 + +然后,我们将该框架应用于 {cite:t}`AlvarezArgente2026` 中的两个经济学例子:一个具有资本积累的行业均衡,以及一个具有金博尔需求的多产品定价问题。 + +里卡蒂方程也出现在其他几篇 QuantEcon 讲座中: + +* {doc}`lqcontrol` 介绍了线性调节器及其里卡蒂方程 +* {doc}`lagrangian_lqdp` 研究状态-协态系统及其稳定不变子空间,这正是我们下面遇到的结构 +* {doc}`markov_perf` 研究*有限多个*参与者的动态博弈,其中每个参与者都有一个里卡蒂方程,且这些方程是耦合的 +* {doc}`kalman` 给出了与控制问题对偶的里卡蒂方程 + +让我们从一些导入开始: + +```{code-cell} ipython3 +import numpy as np +import matplotlib.pyplot as plt +from scipy.linalg import solve_continuous_are, expm +``` + +## 环境 + +存在连续统的代理人。 + +个体具有状态 $x \in \mathbb R^n$ 并采取行动 $\alpha \in \mathbb R^k$。 + +横截面平均状态和行动为 + +$$ +X = \int x \, m(x) dx , \qquad +\mathcal A = \int \alpha_*(x) \, m(x) dx , +$$ + +其中 $m$ 是代理人状态的密度。 + +期间收益对所有四个对象都是二次的: + +```{math} +:label: mfg_return +F(x,X) + R(\alpha, \mathcal A) += -\tfrac12 x^\top Q x - X^\top\Theta_X x + -\tfrac12 \alpha^\top \Gamma \alpha - \mathcal A^\top \Theta_{\mathcal A}\alpha 。 +``` + +个体状态遵循 + +```{math} +:label: mfg_state +dx = (B\alpha - Ax) dt + \Sigma^{1/2} dW , +``` + +其中 $W$ 是 $n$ 维布朗运动,目前冲击纯粹是特异性的。 + +代理人以贴现率 $\rho > 0$ 进行贴现。 + +我们假设 $Q$ 和 $\Gamma$ 是正定的,$\Sigma$ 是半正定的,$B$ 具有满行秩,且 $\Theta_X$ 和 $\Theta_{\mathcal A}$ 是对称的。 + +### 互补品和替代品 + +从 {eq}`mfg_return` 可知,个体自身状态与平均状态之间的交叉导数是 $-\Theta_X$,个体自身行动与平均行动之间的交叉导数是 $-\Theta_{\mathcal A}$。 + +因此 + +* 当 $-\Theta_X$ 是正定时,状态是**战略互补品**,即当 $\Theta_X$ 是负定时 +* 当 $\Theta_X$ 是正定时,状态是**战略替代品** + +对于行动也是类似的。 + +在洛纳序中,*更小*的 $\Theta$ 意味着*更强*的互补性。 + +```{note} +{cite:t}`LasryLions2007` 为获得唯一性而施加的单调性条件,在此对应于 $-\Theta_X$ 是半负定的,即状态中的战略*替代性*。 + +我们不需要这个条件:在这个线性二次设置中,无论相互作用是互补还是替代,至多存在一个均衡。 +``` + +### 均衡 + +给定路径 $\{X(t), \mathcal A(t)\}$,代理人的价值函数满足 HJB 方程 + +```{math} +:label: mfg_hjb +\rho u(x,t) = -\tfrac12 x^\top Qx - X(t)^\top\Theta_X x + + H(u_x(x,t), x, \mathcal A(t)) + + \tfrac12 \operatorname{tr}(\Sigma u_{xx}(x,t)) + u_t(x,t) , +``` + +其中哈密顿量为 + +$$ +H(p, x, \mathcal A) = \max_{\alpha} +\left\{ -\tfrac12\alpha^\top\Gamma\alpha - \mathcal A^\top\Theta_{\mathcal A}\alpha ++ p^\top(B\alpha - Ax) \right\} , +$$ + +最大化器为 $\alpha_*(p,\mathcal A) = \Gamma^{-1}(B^\top p - \Theta_{\mathcal A}\mathcal A)$。 + +密度根据柯尔莫戈罗夫前向方程演化 + +```{math} +:label: mfg_kfe +m_t(x,t) = -\operatorname{div}\left( H_p(u_x(x,t),x,\mathcal A(t)) m(x,t)\right) ++ \tfrac12 \operatorname{tr}(\Sigma m_{xx}(x,t)) , +``` + +**均衡**是一个价值函数、一个密度以及 $X$ 和 $\mathcal A$ 的路径,满足 {eq}`mfg_hjb`、{eq}`mfg_kfe`,以及 $X$ 和 $\mathcal A$ 确实是 $m$ 和最优策略所暗示的横截面平均值这一一致性要求。 + +## 求解个体问题 + +给定总量路径,个体面临一个时变线性二次调节器问题,因此她的价值函数是二次的: + +$$ +u(x,t) = \beta_0(t) + \beta_1(t)^\top x + \tfrac12 x^\top\beta_2(t)x 。 +$$ + +代入 {eq}`mfg_hjb` 并匹配各阶项给出三个微分方程。 + +$\beta_2$ 的方程为 + +```{math} +:label: mfg_beta2_ode +\dot\beta_2 = Q - \beta_2 B\Gamma^{-1}B^\top\beta_2 + \beta_2 A + A^\top\beta_2 + \rho\beta_2 。 +``` + +注意 {eq}`mfg_beta2_ode` 中*缺失*了什么:两个相互作用矩阵都没有出现。 + +因此,个体价值函数的曲率与她独自一人生活在世界上时相同。 + +由于个体问题是凹的和平稳的,$\beta_2(t)$ 等于常数 $\bar\beta_2$,即以下方程的负定解 + +```{math} +:label: mfg_beta2 +\bar\beta_2 B\Gamma^{-1}B^\top\bar\beta_2 = Q + \rho\bar\beta_2 + \bar\beta_2 A + A^\top\bar\beta_2 。 +``` + +这是 {doc}`lqcontrol` 中熟悉的代数里卡蒂方程,以连续时间形式写出。 + +最优行动为 + +$$ +\alpha_*(x,t) = \Gamma^{-1}\left[B^\top(\beta_1(t) + \bar\beta_2 x) - \Theta_{\mathcal A}\mathcal A(t)\right] 。 +$$ + +对代理人求平均,并求解 $\mathcal A$ 中的不动点,得到 + +```{math} +:label: mfg_aggregate_action +\mathcal A(t) = (\Gamma + \Theta_{\mathcal A})^{-1} B^\top \left(\beta_1(t) + \bar\beta_2 X(t)\right) 。 +``` + +方程 {eq}`mfg_aggregate_action` 正是行动相互作用首次发挥作用的地方:每个代理人都对平均行动做出反应,求解与人人如此一致的平均值,将 $\Gamma$ 替换为 $\Gamma + \Theta_{\mathcal A}$。 + +## 状态-协态系统 + +现在还剩下两个对象:价值函数的线性系数 $\beta_1(t)$ 和总量状态 $X(t)$。 + +求导并加总得到一对线性微分方程, + +```{math} +:label: mfg_hamiltonian_system +\begin{bmatrix} \dot\beta_1 \\ \dot X \end{bmatrix} += \mathcal H \begin{bmatrix} \beta_1 \\ X\end{bmatrix}, +\qquad +\mathcal H = +\begin{bmatrix} +\rho I + A^\top - \bar\beta_2 \Lambda & \Theta_X + \bar\beta_2(B\Gamma^{-1}B^\top - \Lambda)\bar\beta_2 \\ +\Lambda & -A + \Lambda\bar\beta_2 +\end{bmatrix}, +``` + +其中我们简写为 + +$$ +\Lambda \equiv B(\Gamma + \Theta_{\mathcal A})^{-1}B^\top 。 +$$ + +这正是 {doc}`lagrangian_lqdp` 中研究的那种**状态-协态**系统。 + +总量状态 $X$ 有一个初始条件,即初始分布的均值。 + +协态 $\beta_1$ 没有初始条件:它必须被选择,使得解不违反代理人的横截性条件,这里要求支配路径的特征值实部低于 $\rho/2$。 + +由于 $\Theta_X$、$B\Gamma^{-1}B^\top$ 和 $\Lambda$ 是对称的,$\mathcal H - \tfrac\rho2 I$ 是一个哈密顿矩阵,因此其特征值关于原点对称。 + +等价地: + +```{prf:proposition} +:label: mfg_prop_roots + +如果 $\lambda$ 是 $\mathcal H$ 的特征值,那么 $\rho - \lambda$、$\bar\lambda$ 和 $\rho - \bar\lambda$ 也是。 +``` + +因此恰好有 $n$ 个特征值的实部可以低于 $\rho/2$,这确定了唯一的稳定不变子空间,因而至多存在一个均衡。 + +这是代数里卡蒂方程与哈密顿矩阵不变子空间之间的标准联系,{cite:t}`LancasterRodman1995` 对此有详尽论述。 + +## 均衡里卡蒂方程 + +我们寻找一条鞍路径,沿着这条路径协态是状态的线性函数,$\beta_1(t) = S X(t)$。 + +代入 {eq}`mfg_hamiltonian_system` 得到 $S$ 的一个二次矩阵方程,其系数涉及 $\bar\beta_2$。 + +那个方程看起来令人望而生畏,但一个变量替换可以转化它。 + +定义 + +$$ +P \equiv S + \bar\beta_2 。 +$$ + +```{prf:proposition} +:label: mfg_prop_riccati + +均衡的特征是一个矩阵 $P$ 满足 + +$$ +P \, B(\Gamma+\Theta_{\mathcal A})^{-1}B^\top \, P += Q + \Theta_X + \rho P + PA + A^\top P , +$$ + +总量动态为 + +$$ +\dot X = \left(B(\Gamma+\Theta_{\mathcal A})^{-1}B^\top P - A\right) X 。 +$$ + +均衡要求闭环矩阵的所有特征值实部低于 $\rho/2$。 +``` + +将此与单个代理人的方程 {eq}`mfg_beta2` 比较。 + +它们具有*相同的形式*。 + +唯一的区别是 $Q$ 变成了 $Q + \Theta_X$,$\Gamma$ 变成了 $\Gamma + \Theta_{\mathcal A}$。 + +```{prf:proposition} +:label: mfg_prop_equivalence + +具有相互作用矩阵 $\Theta_X$ 和 $\Theta_{\mathcal A}$ 的线性二次平均场博弈的均衡及其总量运动定律,与状态曲率为 $Q+\Theta_X$、行动曲率为 $\Gamma+\Theta_{\mathcal A}$ 的单代理人线性二次控制问题的解相一致。 +``` + +这是本讲座的核心组织性结果。 + +它说明战略相互作用并不改变决定总量动态的问题的*形式*;它改变的是进入该问题的*曲率*。 + +一个直接的经济学含义是:两个战略相互作用非常不同的模型,只要有效曲率一致,就可以产生完全相同的总量动态。 + +### 存在性和唯一性 + +由于 $P$ 满足一个标准的里卡蒂方程,标准条件适用。 + +定义 + +```{math} +:label: mfg_E +E \equiv Q + \Theta_X + \left(A^\top + \tfrac\rho2 I\right) +\left[B(\Gamma+\Theta_{\mathcal A})^{-1}B^\top\right]^{-1} +\left(A + \tfrac\rho2 I\right) 。 +``` + +```{prf:proposition} +:label: mfg_prop_existence + +假设 $B(\Gamma+\Theta_{\mathcal A})^{-1}B^\top$ 可逆。 + +1. 均衡存在的必要条件是 $E$ 半正定。 +1. 如果 $Q + \Theta_X$ 和 $\Gamma + \Theta_{\mathcal A}$ 是正定的,则均衡存在且唯一。 +1. 至多存在一个均衡。 +``` + +充分条件有一个清晰的解读:*有效*曲率在状态和行动上都必须保持为正。 + +因此互补性是被允许的,但只能到一定程度。 + +还要注意,两种相互作用以加法方式进入 $E$,因此行动中的替代性可以抵消状态中的互补性。 + +## 计算均衡 + +`scipy.linalg.solve_continuous_are(A, B, Q, R)` 返回以下方程的稳定解 $\tilde P$: + +$$ +A^\top \tilde P + \tilde P A - \tilde P B R^{-1} B^\top \tilde P + Q = 0 。 +$$ + +我们的方程在两个方面有所不同:我们的 $P$ 是负定的,并且我们进行贴现。 + +写作 $P = -\tilde P$ 并整理各项表明,我们的方程是标准方程,其中 $A$ 被替换为 $-(A + \tfrac\rho2 I)$。 + +贴现率的进入方式恰好与连续时间控制中熟悉的"$\rho/2$ 移位"相同。 + +```{code-cell} ipython3 +def mfg_riccati(A, B, Q, Γ, ρ): + """ + Solve P B Γ^{-1} B' P = Q + ρ P + P A + A' P for the negative + definite stabilizing solution P. + + Passing Q + Θ_X and Γ + Θ_A gives the equilibrium of the mean field game; + passing Q and Γ gives the single agent's value function curvature. + """ + n = A.shape[0] + return -solve_continuous_are(-(A + ρ/2 * np.eye(n)), B, Q, Γ) + +def closed_loop(A, B, Γ_eff, P): + "The matrix governing aggregate dynamics, Ẋ = (B Γ_eff^{-1} B' P - A) X." + return B @ np.linalg.solve(Γ_eff, B.T) @ P - A +``` + +让我们建立一个二维例子,其中状态存在互补性,行动存在替代性,这是 {cite:t}`AlvarezArgente2026` 从具有资本积累的行业均衡中获得的配置。 + +```{code-cell} ipython3 +ρ = 0.05 +A = np.array([[0.4, 0.1], + [0.0, 0.3]]) +B = np.eye(2) +Q = np.array([[1.0, 0.2], + [0.2, 0.8]]) +Γ = np.array([[1.0, 0.1], + [0.1, 1.2]]) +Θ_X = np.array([[-0.3, 0.05], # negative definite: complements in states + [0.05, -0.2]]) +Θ_A = np.array([[0.2, 0.0], # positive definite: substitutes in actions + [0.0, 0.1]]) + +β2 = mfg_riccati(A, B, Q, Γ, ρ) # single agent +P = mfg_riccati(A, B, Q + Θ_X, Γ + Θ_A, ρ) # equilibrium + +print("individual curvature β̄₂ =\n", β2.round(4)) +print("\nequilibrium matrix P =\n", P.round(4)) +``` + +让我们验证 $P$ 确实满足均衡里卡蒂方程,并将总量动态与单个代理人独自会选择的动态进行比较。 + +```{code-cell} ipython3 +Λ = B @ np.linalg.solve(Γ + Θ_A, B.T) +residual = P @ Λ @ P - (Q + Θ_X + ρ*P + P @ A + A.T @ P) +print(f"Riccati residual: {np.abs(residual).max():.2e}") + +G = closed_loop(A, B, Γ, β2) # dynamics without any interaction +JG = closed_loop(A, B, Γ + Θ_A, P) # equilibrium dynamics + +print("\neigenvalues without interactions:", np.linalg.eigvals(G).round(4)) +print("eigenvalues in equilibrium: ", np.linalg.eigvals(JG).round(4)) +``` + +均衡特征值更接近于零,因此总量调整比每个代理人忽略其他人时更慢。 + +### 检验哈密顿结构 + +{prf:ref}`mfg_prop_roots` 表明 $\mathcal H$ 的特征值成对出现 $\{\lambda, \rho - \lambda\}$,且实部低于 $\rho/2$ 的 $n$ 个特征值是支配均衡动态的那些。 + +让我们检验这两个论断。 + +```{code-cell} ipython3 +BΓB = B @ np.linalg.solve(Γ, B.T) +n = A.shape[0] + +H = np.block([[ρ*np.eye(n) + A.T - β2 @ Λ, Θ_X + β2 @ (BΓB - Λ) @ β2], + [Λ, -A + Λ @ β2]]) + +ev = np.linalg.eigvals(H) +print("eigenvalues of ℋ:", np.sort(ev.real).round(4)) +print("paired as λ and ρ - λ:", + np.allclose(np.sort(ev.real), np.sort(ρ - ev.real))) + +stable = np.sort(ev.real[ev.real < ρ/2]) +print("\nstable half of ℋ: ", stable.round(4)) +print("closed-loop eigenvalues:", np.sort(np.linalg.eigvals(JG).real).round(4)) +``` + +鞍路径恰好是 $\mathcal H$ 的稳定不变子空间,与 {doc}`lagrangian_lqdp` 中完全一致。 + +## 标量情形 + +当 $n = k = 1$ 时,一切都是显式的。 + +用 $q, a, b, \gamma, \theta_X, \theta_{\mathcal A}$ 表示标量。 + +里卡蒂方程变成一个二次方程,可容许的根给出总量特征值 + +```{math} +:label: mfg_scalar_lambda +\lambda = \frac\rho2 - \sqrt{\left(\frac\rho2 + a\right)^2 ++ \frac{b^2(q + \theta_X)}{\gamma + \theta_{\mathcal A}}} 。 +``` + +当且仅当根号下的项为正时均衡存在, + +```{math} +:label: mfg_scalar_existence +q + \theta_X + \left(\frac\rho2+a\right)^2\frac{\gamma+\theta_{\mathcal A}}{b^2} > 0 , +``` + +均衡是稳定的(即 $\lambda<0$)当且仅当 + +```{math} +:label: mfg_scalar_stability +q + \theta_X + a(a+\rho)\frac{\gamma+\theta_{\mathcal A}}{b^2} > 0 。 +``` + +公式 {eq}`mfg_scalar_lambda` 一目了然地展示了两种比较静态。 + +*状态*中更强的互补性(更小的 $\theta_X$)提高了 $\lambda$,使总量动态*更加*持久:当其他人远离稳态时,每个代理人也就没有那么强的动机回归稳态。 + +*行动*中更强的互补性(更小的 $\theta_{\mathcal A}$)降低了 $\lambda$,使动态*更不*持久:当其他人调整时,每个代理人也想调整。 + +让我们确认我们的求解器能再现 {eq}`mfg_scalar_lambda`。 + +```{code-cell} ipython3 +def scalar_lambda(ρ, a, b, q, γ, θ_X, θ_A): + "Closed-form aggregate eigenvalue in the scalar case." + return ρ/2 - np.sqrt((ρ/2 + a)**2 + b**2*(q + θ_X)/(γ + θ_A)) + +ρ_s, a, b, q, γ = 0.05, 0.3, 1.0, 1.0, 1.0 + +print(f"{'θ_X':>6}{'θ_A':>6}{'solver':>12}{'closed form':>14}") +for θ_X, θ_A in ((0.0, 0.0), (-0.5, 0.0), (0.0, 0.5), (-0.5, 0.5)): + P_s = mfg_riccati(np.array([[a]]), np.array([[b]]), + np.array([[q + θ_X]]), np.array([[γ + θ_A]]), ρ_s) + λ_num = closed_loop(np.array([[a]]), np.array([[b]]), + np.array([[γ + θ_A]]), P_s)[0, 0] + print(f"{θ_X:>6}{θ_A:>6}{λ_num:>12.6f}{scalar_lambda(ρ_s,a,b,q,γ,θ_X,θ_A):>14.6f}") +``` + +## 具有资本积累的行业均衡 + +标量模型并非玩具。 + +{cite:t}`AlvarezArgente2026` 表明,它描述了一个既存在两种相互作用、且符号相反的具有资本积累的行业均衡。 + +存在连续统的垄断竞争企业。 + +一个拥有资本 $k$ 的企业生产 $y = k^\nu$,其中 $0 < \nu < 1$,一个规模报酬不变的部门以替代弹性 $\eta > 1$ 加总这些差异化商品。 + +以最终商品作为计价商品,当行业产出为 $Y$ 时生产 $y$ 的企业获得的收入与 $y^{1-1/\eta}Y^{1/\eta}$ 成正比。 + +因此,如果其他所有企业都持有资本 $K$,经营利润与以下成正比 + +```{math} +:label: mfg_capital_profit +\Pi(k,K) = k^{\nu(1 - 1/\eta)} K^{\nu/\eta} 。 +``` + +资本演化遵循 + +$$ +dk = (i - \delta k)dt + k \sigma dW , +$$ + +企业以价格 $\mathcal P(I)$ 购买投资品,其中 $I$ 是总投资,它还支付一个凸调整成本 $\psi(i)$。 + +设 $\bar i = \delta \bar k$ 为稳态投资,将 $\mathcal P(\bar i) = 1$ 和 $\psi'(\bar i) = 0$ 归一化,并将偏离确定性稳态的百分比偏差写为 + +$$ +x = \frac{k - \bar k}{\bar k}, \qquad +X = \frac{K - \bar k}{\bar k}, \qquad +\alpha = \frac{i - \bar i}{\bar i}, \qquad +\mathcal A = \frac{I - \bar i}{\bar i} 。 +$$ + +围绕稳态对收益进行二阶展开,将目标函数用 $\bar\Pi \equiv \Pi(\bar k, \bar k)$ 归一化,恰好得到 {eq}`mfg_return` 的形式,其中 + +$$ +q = -\frac{\bar k^2 \Pi_{kk}}{\bar\Pi}, \qquad +\theta_X = -\frac{\bar k^2 \Pi_{kK}}{\bar\Pi}, \qquad +\gamma = \frac{\delta^2\bar k^2 \psi''(\bar i)}{\bar\Pi}, \qquad +\theta_{\mathcal A} = \frac{\delta^2\bar k^2 \mathcal P'(\bar i)}{\bar\Pi} , +$$ + +而状态方程一阶近似变为 $dx = \delta(\alpha - x)dt + \sigma dW$,因此 + +$$ +a = b = \delta 。 +$$ + +对 {eq}`mfg_capital_profit` 求导给出闭式表达式: + +```{math} +:label: mfg_capital_coeffs +\begin{aligned} +q &= \nu\frac{\eta-1}{\eta^2}\left[\eta(1-\nu) + \nu\right] > 0 , \\ +\theta_X &= -\frac{\eta-1}{\eta}\frac{\nu^2}{\eta} < 0 , \\ +q + \theta_X &= \frac{\eta-1}{\eta}\nu(1-\nu) > 0 。 +\end{aligned} +``` + +{eq}`mfg_capital_coeffs` 有三个特征值得强调。 + +第一,$\theta_X < 0$:资本存量是战略*互补品*,因为更大的行业资本存量提高了需求转移变量 $Y^{1/\eta}$,从而提高了企业自身资本的边际盈利能力。 + +第二,如果投资品的供给曲线向上倾斜,那么 $\mathcal P'(\bar i) > 0$,因而 $\theta_{\mathcal A} > 0$:投资率是战略*替代品*,因为所有人同时投资会抬高资本品的价格。 + +第三,对于每一个 $\eta > 1$ 和每一个 $\nu \in (0,1)$,都有 $q + \theta_X > 0$,因此根据 {prf:ref}`mfg_prop_existence`,无论市场势力多强、规模报酬多接近不变,均衡都存在且唯一。 + +让我们把这些公式写成代码,并与利润函数本身的数值导数进行比较。 + +```{code-cell} ipython3 +def cap_q(η, ν): + "Own-state curvature in the capital accumulation example." + return ν*(η - 1)/η**2*(η*(1 - ν) + ν) + +def cap_θ_X(η, ν): + "State interaction in the capital accumulation example." + return -(η - 1)/η*ν**2/η + +η_c, ν_c = 4.0, 0.7 + +Π = lambda k, K: k**(ν_c*(1 - 1/η_c))*K**(ν_c/η_c) + +h = 1e-5 +Π_kk = (Π(1+h, 1) - 2*Π(1, 1) + Π(1-h, 1))/h**2 +Π_kK = (Π(1+h, 1+h) - Π(1+h, 1-h) - Π(1-h, 1+h) + Π(1-h, 1-h))/(4*h**2) + +print(f"{'':>10}{'finite difference':>20}{'closed form':>15}") +print(f"{'q':>10}{-Π_kk/Π(1, 1):>20.6f}{cap_q(η_c, ν_c):>15.6f}") +print(f"{'θ_X':>10}{-Π_kK/Π(1, 1):>20.6f}{cap_θ_X(η_c, ν_c):>15.6f}") +print(f"{'q + θ_X':>10}{-(Π_kk + Π_kK)/Π(1, 1):>20.6f}" + f"{(η_c - 1)/η_c*ν_c*(1 - ν_c):>15.6f}") +``` + +### 校准 + +采用年度单位,$\delta = 0.10$,$\rho = 0.05$,替代弹性 $\eta = 4$,规模报酬 $\nu = 0.7$。 + +对于技术无法确定的两个曲率,我们设置 $\gamma = 0.05$,这使得忽略行业的企业在三年内弥合一半的资本缺口,同时设置 $\theta_{\mathcal A} = 0.09$。 + +{ref}`mfg_ex5` 从调整成本函数和投资供给曲线推导了这两个数字。 + +```{code-cell} ipython3 +ρ_c, δ_c = 0.05, 0.10 +γ_c, θ_A_c = 0.05, 0.09 + +q_c, θ_X_c = cap_q(η_c, ν_c), cap_θ_X(η_c, ν_c) + +def half_life(λ): + "Time for the aggregate state to close half of a gap." + return np.log(2)/(-λ) + +λ_c = scalar_lambda(ρ_c, δ_c, δ_c, q_c, γ_c, θ_X_c, θ_A_c) + +P_c = mfg_riccati(np.array([[δ_c]]), np.array([[δ_c]]), + np.array([[q_c + θ_X_c]]), np.array([[γ_c + θ_A_c]]), ρ_c) +λ_c_solver = closed_loop(np.array([[δ_c]]), np.array([[δ_c]]), + np.array([[γ_c + θ_A_c]]), P_c)[0, 0] + +print(f"q = {q_c:.4f}, θ_X = {θ_X_c:.4f}, q + θ_X = {q_c + θ_X_c:.4f}") +print(f"λ from the solver = {λ_c_solver:.6f}") +print(f"λ from the closed form = {λ_c:.6f}") +print(f"half-life of aggregate capital = {half_life(λ_c):.2f} years") +``` + +### 这些相互作用有多重要? + +由于 {eq}`mfg_scalar_lambda` 分别依赖于 $\theta_X$ 和 $\theta_{\mathcal A}$,我们可以关闭每种相互作用来读出答案。 + +```{code-cell} ipython3 +cases = {'no interactions': (0.0, 0.0), + 'state complementarity only': (θ_X_c, 0.0), + 'action substitutability only': (0.0, θ_A_c), + 'equilibrium': (θ_X_c, θ_A_c), + 'planner (both doubled)': (2*θ_X_c, 2*θ_A_c)} + +print(f"{'':>30}{'λ':>10}{'half-life':>12}") +for label, (tx, ta) in cases.items(): + λ_case = scalar_lambda(ρ_c, δ_c, δ_c, q_c, γ_c, tx, ta) + print(f"{label:>30}{λ_case:>10.4f}{half_life(λ_case):>12.2f}") +``` + +两种相互作用都会减缓总量资本的调整速度,但原因不同。 + +状态中的互补性意味着,当行业其余部分仍低于其稳态时,企业重建资本的理由较少。 + +行动中的替代性意味着行业投资的一次性激增代价高昂,因此企业会将投资分散到不同时期。 + +两者共同将行业资本存量的半衰期从三年拉长到五年。 + +将这两种外部性都内化的计划者则更慢。 + +### 微观和宏观调整速度 + +该模型的一个显著预测是,个体资本回归均值的速度比总量资本更快,因为 {eq}`mfg_beta2` 中没有相互作用矩阵。 + +```{code-cell} ipython3 +β2_c = mfg_riccati(np.array([[δ_c]]), np.array([[δ_c]]), + np.array([[q_c]]), np.array([[γ_c]]), ρ_c) +λ_micro = closed_loop(np.array([[δ_c]]), np.array([[δ_c]]), + np.array([[γ_c]]), β2_c)[0, 0] + +print(f"individual half-life = {half_life(λ_micro):.2f} years") +print(f"aggregate half-life = {half_life(λ_c):.2f} years") +print(f"ratio = {half_life(λ_c)/half_life(λ_micro):.2f}") +``` + +若研究人员从企业层面的数据估计资本调整速度,然后用它来预测行业对全行业冲击的反应速度有多快,那么其预测速度将比实际快三分之二。 + +这个差距是一个纯粹的相互作用效应:相同的技术和相同的调整成本产生了这两个数字。 + +### 市场势力和规模报酬 + +行业的调整速度如何取决于这两个技术参数? + +两者都只通过 $q + \theta_X = \frac{\eta-1}{\eta}\nu(1-\nu)$ 起作用,该值随 $\eta$ 上升,并在 $\nu = 1/2$ 处取得最大值。 + +```{code-cell} ipython3 +--- +mystnb: + figure: + caption: Half-lives of industry and firm capital + name: fig-mfg-half-lives +--- +η_grid = np.linspace(1.2, 12, 200) +ν_grid = np.linspace(0.05, 0.995, 200) + +def macro_micro(η, ν): + "Aggregate and individual half-lives as functions of (η, ν)." + q, θ_X = cap_q(η, ν), cap_θ_X(η, ν) + λ_agg = scalar_lambda(ρ_c, δ_c, δ_c, q, γ_c, θ_X, θ_A_c) + λ_ind = scalar_lambda(ρ_c, δ_c, δ_c, q, γ_c, 0.0, 0.0) + return half_life(λ_agg), half_life(λ_ind) + +fig, axes = plt.subplots(1, 2, figsize=(11, 4.2)) + +hl_agg, hl_ind = np.array([macro_micro(η, ν_c) for η in η_grid]).T +axes[0].plot(η_grid, hl_agg, lw=2, label='industry') +axes[0].plot(η_grid, hl_ind, lw=2, ls='--', label='single firm') +axes[0].set_xlabel('elasticity of substitution $\\eta$') + +hl_agg, hl_ind = np.array([macro_micro(η_c, ν) for ν in ν_grid]).T +axes[1].plot(ν_grid, hl_agg, lw=2, label='industry') +axes[1].plot(ν_grid, hl_ind, lw=2, ls='--', label='single firm') +axes[1].axhline(np.log(2)/δ_c, color='k', lw=1, alpha=0.6) +axes[1].set_xlabel('returns to scale $\\nu$') +axes[1].annotate('$\\ln 2/\\delta$', (0.12, np.log(2)/δ_c - 0.45)) + +for ax in axes: + ax.set_ylabel('half-life in years') + ax.legend() +plt.tight_layout() +plt.show() +``` + +更强的市场势力,即更小的 $\eta$,使行业变得更慢:它削弱了自身资本曲率相对于相互作用的强度,左侧面板显示行业半衰期随 $\eta$ 下降而上升。 + +右侧面板包含一个更为尖锐的结果。 + +随着 $\nu \to 1$,有效曲率 $q + \theta_X$ 趋于消失,{eq}`mfg_scalar_lambda` 收缩为 $\lambda \to -\delta$:此时行业的资本存量只能通过折旧回归其稳态,总量投资根本不做反应。 + +{ref}`mfg_ex6` 要求你验证这一极限并解释它。 + +### 我们处在四个区域中的哪一个? + +{ref}`mfg_ex1` 使用阈值 $-\theta^{*}$ 和 $-\theta^{**}$ 将标量模型划分为四个区域。 + +由于技术给出 $q + \theta_X > 0$,而向上倾斜的投资供给给出 $\theta_{\mathcal A} > 0$,这个例子始终处于第一个区域。 + +阈值显示了有多大的余地。 + +```{code-cell} ipython3 +mθ_star = q_c + δ_c*(δ_c + ρ_c)*(γ_c + θ_A_c)/δ_c**2 +mθ_2star = q_c + (ρ_c/2 + δ_c)**2*(γ_c + θ_A_c)/δ_c**2 + +print(f"complementarity in the calibration, -θ_X = {-θ_X_c:.4f}") +print(f"instability threshold, -θ* = {mθ_star:.4f}") +print(f"nonexistence threshold, -θ** = {mθ_2star:.4f}") +``` + +互补性需要比技术所暗示的强五倍,才会使行业资本存量停止收敛。 + +### 过渡路径 + +最后,让我们描绘出行业对起始高于稳态百分之十的资本存量的反应。 + +总量投资由 {eq}`mfg_aggregate_action` 推得,在标量情形下给出 $\mathcal A(t) = \frac{\lambda + \delta}{\delta}X(t)$。 + +```{code-cell} ipython3 +--- +mystnb: + figure: + caption: Transition paths of capital and investment + name: fig-mfg-transition +--- +t_c = np.linspace(0, 25, 300) +X0_c = 0.10 + +fig, axes = plt.subplots(1, 2, figsize=(11, 4.2)) +for label in ('no interactions', 'equilibrium', 'planner (both doubled)'): + tx, ta = cases[label] + λ_case = scalar_lambda(ρ_c, δ_c, δ_c, q_c, γ_c, tx, ta) + path = X0_c*np.exp(λ_case*t_c) + axes[0].plot(t_c, 100*path, lw=2, label=label) + axes[1].plot(t_c, 100*(λ_case + δ_c)/δ_c*path, lw=2, label=label) + +axes[0].set_ylabel('capital, % above steady state') +axes[1].set_ylabel('investment, % above steady state') +for ax in axes: + ax.set_xlabel('years') + ax.axhline(0, color='k', lw=0.8) +axes[0].legend() +plt.tight_layout() +plt.show() +``` + +右侧面板是行业的投资反应,这里最清楚地展示了两种相互作用。 + +一个忽略行业的企业会在冲击发生时立即将投资削减其稳态水平的百分之十三;而在均衡中,削减幅度不到百分之四,且撤销速度慢得多。 + +支撑这些路径的协态 $\beta_1(t) + \bar\beta_2 x$ 是已安装资本的边际价值,即托宾的 $q$。 + +{doc}`optimal_growth_uncertainty` 在约束 $i \geq 0$ 起作用、价值函数并非处处可微的设定下研究了这个对象,而这恰恰是此处二次近似所忽略的非线性。 + + +## 持久性 + +当 $n > 1$ 时,相互作用如何改变总量调整? + +无论哪种类型,更强的互补性都使稳定解 $P$ 变得不那么负定。 + +这种排序不足以确定闭环矩阵每个特征值变化的符号,但它确实确定了它们*总和*变化的符号。 + +状态中更强的互补性提高了闭环矩阵的迹,而行动中更强的互补性降低了它。 + +迹衡量了一组总量初始状态在遵循各自均衡路径时体积收缩的速率,因此在稳定均衡中,第一种力量减缓了向稳态的坍缩,而第二种力量加速了它。 + +```{code-cell} ipython3 +print(f"{'scale on Θ_X':>14}{'trace':>10} eigenvalues") +for scale in (0.0, 0.5, 1.0, 1.5): + P_s = mfg_riccati(A, B, Q + scale*Θ_X, Γ + Θ_A, ρ) + JG_s = closed_loop(A, B, Γ + Θ_A, P_s) + print(f"{scale:>14}{np.trace(JG_s):>10.4f} {np.linalg.eigvals(JG_s).real.round(4)}") +``` + +提高比例使 $\Theta_X$ 更负,即互补性更强,正如所声称的那样,迹随之上升。 + +{ref}`mfg_ex2` 要求你研究*每个*特征值是否必须朝同一方向移动。 + +## 计划者 + +功利主义计划者将每个代理人的状态和行动对相应横截面平均值的影响内在化。 + +当 $\Theta_X$ 和 $\Theta_{\mathcal A}$ 是对称时,对计划者的目标函数求导会使每个相互作用项加倍。 + +```{prf:proposition} +:label: mfg_prop_planner + +计划者的配置与相互作用矩阵为 $2\Theta_X$ 和 $2\Theta_{\mathcal A}$ 的经济体的分散均衡相一致,因此计划者的里卡蒂方程为 + +$$ +P^{*} B(\Gamma + 2\Theta_{\mathcal A})^{-1}B^\top P^{*} += Q + 2\Theta_X + \rho P^{*} + P^{*}A + A^\top P^{*} 。 +$$ +``` + +将状态互补性内在化使配置*更加*持久,而将行动互补性内在化使其*更不*持久。 + +当两者同时存在时,比较结果是不明确的,正如 {ref}`mfg_ex3` 所探讨的那样。 + +```{code-cell} ipython3 +P_planner = mfg_riccati(A, B, Q + 2*Θ_X, Γ + 2*Θ_A, ρ) +JG_planner = closed_loop(A, B, Γ + 2*Θ_A, P_planner) + +print("equilibrium eigenvalues:", np.linalg.eigvals(JG).real.round(4)) +print("planner eigenvalues: ", np.linalg.eigvals(JG_planner).real.round(4)) +``` + +让我们看看这对总量状态的路径意味着什么。 + +```{code-cell} ipython3 +--- +mystnb: + figure: + caption: Path of the aggregate state + name: fig-mfg-planner-path +--- +X0 = np.array([1.0, 0.5]) +times = np.linspace(0, 12, 200) + +paths = {'no interactions': G, 'equilibrium': JG, 'planner': JG_planner} + +fig, ax = plt.subplots(figsize=(8, 4.5)) +for label, M in paths.items(): + traj = np.array([expm(M*t) @ X0 for t in times]) + ax.plot(times, traj[:, 0], lw=2, label=label) +ax.set_xlabel('$t$') +ax.set_ylabel('first component of $X(t)$') +ax.legend() +plt.tight_layout() +plt.show() +``` + +## 具有金博尔需求的多产品定价 + +我们的第二个例子是多维的,它带来了一个惊喜。 + +{cite:t}`AlvarezArgente2026` 研究了连续统的"商店",每个商店以恒定边际成本 $z_j$ 销售 $n$ 种产品。 + +商店内的产品由弹性为 $\bar\eta_d$ 的 CES 价格指数加总,而商店则由对称的金博尔加总器加总 {cite}`Kimball1995`。 + +设 $\eta_D(y)$ 为商店需求相对于其相对价格的弹性,设 $\bar\eta_D > 1$ 和 $\bar\eta_D'$ 分别表示其在对称点的水平和导数。 + +导数 $\bar\eta_D'$ 是需求的**超弹性**,这也是金博尔需求在定价模型中被广泛使用的原因:正的超弹性意味着,价格高于平均水平的商店面临更具弹性的需求,这会阻止它偏离大众。 + +这就是价格上的战略互补性,也是 {cite:t}`KlenowWillis2016` 及随后大量文献用来解释实际刚性的机制。 + +用 $x$ 和 $X$ 表示商店价格和平均商店价格相对于灵活价格水平 $\bar p_i = \bar z_i \bar\eta_D/(\bar\eta_D-1)$ 的对数偏差,用 $\bar s$ 表示稳态支出份额向量,曲率矩阵为 + +```{math} +:label: mfg_kimball_Q +\begin{aligned} +Q &= (\bar\eta_D - 1)\left[\left(\bar\eta_D - \bar\eta_d ++ \frac{\bar\eta_D'}{\bar\eta_D-1}\right)\bar s\bar s^\top ++ \bar\eta_d \operatorname{diag}(\bar s)\right] , \\ +\Theta_X &= -\bar\eta_D' \, \bar s \bar s^\top , \\ +Q + \Theta_X &= (\bar\eta_D-1)\left[(\bar\eta_D - \bar\eta_d)\bar s \bar s^\top ++ \bar\eta_d \operatorname{diag}(\bar s)\right] 。 +\end{aligned} +``` + +盯着第三行看。 + +超弹性出现在 $Q$ 和 $\Theta_X$ 中,但在 $Q + \Theta_X$ 中却*消失了*。 + +根据 {prf:ref}`mfg_prop_riccati`,$Q+\Theta_X$ 之和是这两个矩阵到达总量动态的唯一渠道。 + +行动是价格的变化率,商店为改变价格支付二次的罗滕伯格成本。 + +矩阵 $\Gamma$ 使这一成本取决于改变的是哪一组价格,负的非对角元素代表了 {cite:t}`Midrigan2011` 和 {cite:t}`AlvarezLippi2014` 所强调的那种重新定价中的范围经济。 + +总量行动之间不存在相互作用,因此 $\Theta_{\mathcal A} = 0$,而非零的成本通胀率使 $A$ 为对角矩阵。 + +```{code-cell} ipython3 +def kimball(η_d, η_D, η_D_prime, s): + "Curvature and state-interaction matrices under Kimball demand." + s = np.asarray(s, dtype=float) + S = np.outer(s, s) + Q = (η_D - 1)*((η_D - η_d + η_D_prime/(η_D - 1))*S + η_d*np.diag(s)) + Θ_X = -η_D_prime*S + return Q, Θ_X + +s_bar = np.array([0.5, 0.3, 0.2]) # three products, unequal shares +η_d, η_D = 6.0, 4.0 # within-store and across-store elasticities +ρ_K, π_K = 0.04, 0.02 # discount rate and cost inflation + +n_K = len(s_bar) +A_K = π_K*np.eye(n_K) +B_K = np.eye(n_K) +Γ_K = 20.0*(np.eye(n_K) - 0.25*(np.ones((n_K, n_K)) - np.eye(n_K))) + +print("Rotemberg cost matrix Γ =\n", Γ_K) +print("\neigenvalues of Γ:", np.linalg.eigvalsh(Γ_K).round(4)) +``` + +### 超弹性和总量动态 + +现在将超弹性在一个很宽的范围内扫描,包括一个负值,观察什么在改变,什么没有改变。 + +```{code-cell} ipython3 +print(f"{'η_D′':>6} {'eigenvalues of Q':>28} {'eigenvalues of Q + Θ_X':>28}") +for η_Dp in (-3.0, 0.0, 3.0, 10.0): + Q_K, Θ_K = kimball(η_d, η_D, η_Dp, s_bar) + print(f"{η_Dp:>6} {str(np.linalg.eigvalsh(Q_K).round(3)):>28}" + f" {str(np.linalg.eigvalsh(Q_K + Θ_K).round(3)):>28}") +``` + +自身曲率矩阵 $Q$ 变化很大,$\Theta_X$ 也随之变化,但有效曲率根本没有变化。 + +因此总量价格动态对超弹性是不变的。 + +```{code-cell} ipython3 +print(f"{'η_D′':>6} {'aggregate eigenvalues':>34} {'individual eigenvalues':>34}") +for η_Dp in (-3.0, 0.0, 3.0, 10.0): + Q_K, Θ_K = kimball(η_d, η_D, η_Dp, s_bar) + P_K = mfg_riccati(A_K, B_K, Q_K + Θ_K, Γ_K, ρ_K) + β2_K = mfg_riccati(A_K, B_K, Q_K, Γ_K, ρ_K) + ev_agg = np.sort(np.linalg.eigvals(closed_loop(A_K, B_K, Γ_K, P_K)).real) + ev_ind = np.sort(np.linalg.eigvals(closed_loop(A_K, B_K, Γ_K, β2_K)).real) + print(f"{η_Dp:>6} {str(ev_agg.round(4)):>34} {str(ev_ind.round(4)):>34}") +``` + +左边一组数字在每一行中都相同,而右边一组则不是。 + +超弹性改变了单个商店的行为方式,但没有改变行业的行为方式。 + +几乎所有的变化都集中在单一模式中,因为 $\Theta_X$ 是秩一的,并指向方向 $\bar s$,即商店自身以份额加权的价格指数。 + +其余涉及商店内部相对价格的模式几乎不变。 + +### 静态互补性 + +值得了解我们正在改变的静态互补性有多大。 + +对静态利润函数最大化给出最优反应 $x^{*}(X) = -Q^{-1}\Theta_X X$,{cite:t}`AlvarezArgente2026` 表明 + +```{math} +:label: mfg_kimball_br +\frac{\partial x_i^{*}(X)}{\partial X_j} = \bar s_j \frac{\kappa}{1+\kappa}, +\qquad +\kappa \equiv \frac{\bar\eta_D'}{(\bar\eta_D-1)\bar\eta_D} 。 +``` + +```{code-cell} ipython3 +print(f"{'η_D′':>6}{'pass-through':>14} best response matrix, first row") +for η_Dp in (-3.0, 0.0, 3.0, 10.0): + Q_K, Θ_K = kimball(η_d, η_D, η_Dp, s_bar) + BR = -np.linalg.solve(Q_K, Θ_K) + κ = η_Dp/((η_D - 1)*η_D) + BR_closed = κ/(1 + κ)*np.outer(np.ones(n_K), s_bar) + assert np.allclose(BR, BR_closed) + print(f"{η_Dp:>6}{BR.sum(axis=1)[0]:>14.4f} {BR[0].round(4)}") + +print("\nΘ_X symmetric: ", np.allclose(Θ_K, Θ_K.T)) +print("best response symmetric:", np.allclose(BR, BR.T)) +``` + +在这些行中,静态转嫁率从 $-33\%$ 变到 $+45\%$,且随超弹性变化符号,但每一个这样的经济体都具有完全相同的总量动态。 + +因此,那种认为静态互补性越强、总量传播就越大的直觉是不可靠的。 + +还请注意,最优反应矩阵*不是*对称的,因为不同产品的份额不同,而 $\Theta_X$ 始终是对称的。 + +$\Theta_X$ 的对称性正是 {prf:ref}`mfg_prop_planner` 所需要的,即使静态博弈看起来不对称,它也依然成立。 + +### 闭式特征值 + +由于 $A_K$ 是单位矩阵的倍数且 $B_K = I$,总量特征值与标量情形具有相同的形式,$(\Gamma+\Theta_{\mathcal A})^{-1}(Q+\Theta_X)$ 的每一个特征值 $\omega_i$ 对应一个: + +$$ +\lambda_i = \frac\rho2 - \sqrt{\left(\frac\rho2 + a\right)^2 + \omega_i} 。 +$$ + +```{code-cell} ipython3 +Q_K, Θ_K = kimball(η_d, η_D, 3.0, s_bar) +P_K = mfg_riccati(A_K, B_K, Q_K + Θ_K, Γ_K, ρ_K) +JG_K = closed_loop(A_K, B_K, Γ_K, P_K) + +ω = np.linalg.eigvals(np.linalg.solve(Γ_K, Q_K + Θ_K)).real +predicted = np.sort(ρ_K/2 - np.sqrt((ρ_K/2 + π_K)**2 + ω)) + +print("eigenvalues of the closed-loop matrix:", np.sort(np.linalg.eigvals(JG_K).real).round(6)) +print("from the closed-form formula: ", predicted.round(6)) +``` + +{ref}`mfg_ex8` 提出当不同产品之间通胀率不同时(此时 $A$ 是对角矩阵但不是单位矩阵的倍数)会发生什么。 + +### 总量和个体价格路径 + +分解 {eq}`mfg_decomposition` 将商店的价格分为行业平均值 $X$ 和其自身的偏离 $z = x - X$。 + +前者遵循均衡矩阵 $P$,后者遵循单代理人矩阵 $\bar\beta_2$。 + +因此我们发现的不变性应该表现为行业的路径相同,而偏离常态的商店的路径不同。 + +```{code-cell} ipython3 +--- +mystnb: + figure: + caption: Industry and store price paths + name: fig-mfg-kimball-paths +--- +t_K = np.linspace(0, 8, 200) +shock = 0.10*np.ones(n_K) # ten percent above target, all products + +fig, axes = plt.subplots(1, 2, figsize=(11, 4.2)) +for k, η_Dp in enumerate((-3.0, 0.0, 3.0, 10.0)): + Q_K, Θ_K = kimball(η_d, η_D, η_Dp, s_bar) + P_K = mfg_riccati(A_K, B_K, Q_K + Θ_K, Γ_K, ρ_K) + β2_K = mfg_riccati(A_K, B_K, Q_K, Γ_K, ρ_K) + U_XX = closed_loop(A_K, B_K, Γ_K, P_K) + U_zz = closed_loop(A_K, B_K, Γ_K, β2_K) + agg = np.array([s_bar @ expm(U_XX*t) @ shock for t in t_K]) + dev = np.array([s_bar @ expm(U_zz*t) @ shock for t in t_K]) + label = f"$\\bar\\eta_D' = {η_Dp}$" + # decreasing line widths, so that four coincident curves remain visible + axes[0].plot(t_K, 100*agg, lw=6 - 1.5*k, label=label) + axes[1].plot(t_K, 100*dev, lw=2, label=label) + +axes[0].set_title('industry price index, $\\bar s^\\top X(t)$') +axes[1].set_title("one store's deviation, $\\bar s^\\top z(t)$") +for ax in axes: + ax.set_xlabel('years') + ax.set_ylabel('percent above target') + ax.legend() +plt.tight_layout() +plt.show() +``` + +左侧面板中的四条曲线完全重叠。 + +右侧面板中的四条曲线则不然:超弹性越高,商店弥合自身价格与行业价格之间的缺口就越快。 + +微观和宏观的价格灵活性由不同的对象支配,而只有微观的那个对超弹性做出反应。 + +### 计划者确实在乎 + +将相互作用加倍给了计划者有效曲率 $Q + 2\Theta_X = (Q + \Theta_X) - \bar\eta_D' \bar s\bar s^\top$,它*确实*依赖于超弹性。 + +```{code-cell} ipython3 +print(f"{'η_D′':>6} {'eig(Q + 2Θ_X)':>26} {'planner eigenvalues':>32}") +for η_Dp in (-3.0, 0.0, 3.0, 10.0, 20.0): + Q_K, Θ_K = kimball(η_d, η_D, η_Dp, s_bar) + M = Q_K + 2*Θ_K + P_p = mfg_riccati(A_K, B_K, M, Γ_K, ρ_K) + ev = np.sort(np.linalg.eigvals(closed_loop(A_K, B_K, Γ_K, P_p)).real) + flag = "" if np.linalg.eigvalsh(M).min() > 0 else " <- not positive definite" + print(f"{η_Dp:>6} {str(np.linalg.eigvalsh(M).round(3)):>26}" + f" {str(ev.round(4)):>32}{flag}") +``` + +因此,均衡对超弹性的不敏感性是均衡所特有的。 + +计划者本会做的与行业实际所做之间的差距,随着超弹性的上升而扩大,在最后一行中,计划者的有效曲率已经不再是正定的,返回的矩阵也不再能使系统稳定。 + +{ref}`mfg_ex7` 精确定位了这一阈值,并从静态转嫁的角度对其作出解释。 + + +## 总量冲击和识别 + +现在加入一个同时冲击所有人的冲击。 + +设 $\mathcal J$ 是一个补偿跳跃过程,并假设 + +$$ +dx = (B\alpha - Ax)dt + \Sigma^{1/2}dW + \Upsilon \, d\mathcal J 。 +$$ + +在有共同噪声的情况下,价值函数必须同时跟踪总量状态和个体状态,因此它变成 $v(x, X)$。 + +尽管如此,在递归 HJB 方程中匹配系数会得到一个值得强调的结果。 + +```{prf:proposition} +:label: mfg_prop_common_noise + +在存在共同噪声的情况下,支配总量动态的矩阵 $P$ 满足与之前*相同*的均衡里卡蒂方程。 +``` + +这是一个熟悉的确定性等价结果,与线性二次控制中的结果类似。 + +它还给出了一个清晰的分解。 + +用 $z = x - X$ 表示代理人偏离横截面均值的偏差, + +```{math} +:label: mfg_decomposition +\begin{aligned} +dX &= \left(\Lambda P - A\right) X dt + \Upsilon d\mathcal J , \\ +dz &= \left(B\Gamma^{-1}B^\top\bar\beta_2 - A\right) z \, dt + \Sigma^{1/2}dW , \\ +\alpha &= (\Gamma+\Theta_{\mathcal A})^{-1}B^\top P X + \Gamma^{-1}B^\top\bar\beta_2 z 。 +\end{aligned} +``` + +仔细看第二行。 + +代理人偏离均值的偏差动态涉及 $\bar\beta_2$,即*单代理人*里卡蒂方程的解,两个相互作用矩阵都没有出现。 + +对 $z$ 做出反应的那部分行动也是如此。 + +```{prf:proposition} +:label: mfg_prop_identification + +关于 $x(t) - X(t)$ 和 $\alpha(t)-\mathcal A(t)$ 的数据不包含关于 $\Theta_X$ 或 $\Theta_{\mathcal A}$ 的任何信息。 +``` + +这是"缺失截距"问题的一个尖锐表述。 + +从微观数据中去除时间效应——这是控制总量条件的标准方法——恰好去除了识别战略相互作用所需的变异。 + +相反,总量数据确实携带这一信息,可以与微观数据结合来恢复它。 + +```{code-cell} ipython3 +# reduced-form matrices that an econometrician could estimate +U_XX = closed_loop(A, B, Γ + Θ_A, P) # drift of the aggregate state +U_zz = closed_loop(A, B, Γ, β2) # drift of the deviation from the mean + +print("aggregate drift U_XX =\n", U_XX.round(4)) +print("\ndeviation drift U_zz =\n", U_zz.round(4)) + +# now double the state interaction and recompute +P_alt = mfg_riccati(A, B, Q + 2*Θ_X, Γ + Θ_A, ρ) +print("\nwith Θ_X doubled:") +print(" aggregate drift changes: ", + not np.allclose(U_XX, closed_loop(A, B, Γ + Θ_A, P_alt))) +print(" deviation drift changes: ", + not np.allclose(U_zz, closed_loop(A, B, Γ, β2))) +``` + +{ref}`mfg_ex4` 展示了如何从总量数据中恢复 $\Theta_X$,以及为什么没有归一化就无法区分 $\Theta_X$ 和 $\Theta_{\mathcal A}$。 + +## 练习 + +```{exercise} +:label: mfg_ex1 + +公式 {eq}`mfg_scalar_existence` 和 {eq}`mfg_scalar_stability` 将标量模型划分为四个区域。 + +定义 + +$$ +-\theta^{*} \equiv q + a(a+\rho)\frac{\gamma+\theta_{\mathcal A}}{b^2}, +\qquad +-\theta^{**} \equiv q + \left(\frac\rho2+a\right)^2\frac{\gamma+\theta_{\mathcal A}}{b^2} 。 +$$ + +取 $\rho = 0.5$, $a = 0.3$, $b = 1$, $q = 1$, $\gamma = 1$, $\theta_{\mathcal A}=0$。 + +1. 计算 $\theta^{*}$ 和 $\theta^{**}$,并验证 $-\theta^{**} = -\theta^{*} + (\rho/2)^2(\gamma+\theta_{\mathcal A})/b^2$。 +1. 对于每个阈值两侧的 $\theta_X$ 值,计算 $\lambda$ 并对结果进行分类:稳定、单位根、发散但可接受,或不存在均衡。 +1. 当不存在均衡时,`mfg_riccati` 会怎么做? +1. 绘制 $\lambda$ 对 $\theta_X$ 的图,并标出这些阈值。 +``` + +```{solution-start} mfg_ex1 +:class: dropdown +``` + +```{code-cell} ipython3 +ρ_e, a_e, b_e, q_e, γ_e, θA_e = 0.5, 0.3, 1.0, 1.0, 1.0, 0.0 + +θ_star = -(q_e + a_e*(a_e + ρ_e)*(γ_e + θA_e)/b_e**2) +θ_ss = -(q_e + (ρ_e/2 + a_e)**2*(γ_e + θA_e)/b_e**2) + +print(f"θ* = {θ_star:.4f}") +print(f"θ** = {θ_ss:.4f}") +print(f"gap = {θ_star - θ_ss:.4f}, " + f"(ρ/2)²(γ+θ_A)/b² = {(ρ_e/2)**2*(γ_e + θA_e)/b_e**2:.4f}") +``` + +```{code-cell} ipython3 +for θ_X in (0.5, -0.5, θ_star, -1.27, -1.31): + inside = (ρ_e/2 + a_e)**2 + b_e**2*(q_e + θ_X)/(γ_e + θA_e) + if inside < 0: + print(f"θ_X = {θ_X:+.4f}: no equilibrium") + continue + λ = ρ_e/2 - np.sqrt(inside) + if λ < -1e-9: + kind = "stable, X converges to zero" + elif abs(λ) <= 1e-9: + kind = "unit root, X stays where it starts" + else: + kind = "divergent but admissible" + print(f"θ_X = {θ_X:+.4f}: λ = {λ:+.5f} {kind}") +``` + +在 $\theta^{**}$ 以下不存在实根,求解器会报告失败,而不是返回一个虚假的答案。 + +```{code-cell} ipython3 +try: + mfg_riccati(np.array([[a_e]]), np.array([[b_e]]), + np.array([[q_e - 1.31]]), np.array([[γ_e]]), ρ_e) +except Exception as e: + print(f"solver raises {type(e).__name__} when no equilibrium exists") +``` + +```{code-cell} ipython3 +θ_grid = np.linspace(-1.30, 0.5, 400) +inside = (ρ_e/2 + a_e)**2 + b_e**2*(q_e + θ_grid)/(γ_e + θA_e) +λ_grid = np.where(inside >= 0, ρ_e/2 - np.sqrt(np.maximum(inside, 0)), np.nan) + +fig, ax = plt.subplots(figsize=(8, 4.5)) +ax.plot(θ_grid, λ_grid, lw=2) +ax.axhline(0, color='k', lw=0.8) +ax.axhline(ρ_e/2, color='grey', ls=':', lw=1, label=r'$\rho/2$') +ax.axvline(θ_star, color='r', ls='--', lw=1, label=r'$\theta^{*}$') +ax.axvline(θ_ss, color='b', ls='--', lw=1, label=r'$\theta^{**}$') +ax.set_xlabel(r'$\theta_X$') +ax.set_ylabel(r'$\lambda$') +ax.legend() +plt.tight_layout() +plt.show() +``` + +沿横轴向左移动意味着状态互补性更强。 + +持久性平稳上升,直至 $\theta^{*}$ 处,此时总量状态停止收敛;在 $\theta^{*}$ 和 $\theta^{**}$ 之间,均衡路径发散,但发散得足够慢以保持贴现收益有限;在 $\theta^{**}$ 以下则完全不存在均衡。 + +```{solution-end} +``` + +```{exercise} +:label: mfg_ex2 + +讲座表明状态中更强的互补性提高了闭环矩阵的*迹*。 + +它是否也提高了每一个特征值? + +绘制许多随机的二维经济体:取 $B = I$,令 $Q$ 和 $\Gamma$ 为随机正定矩阵,令 $\Theta_X$ 为随机负定矩阵,设置 $\rho = 0.05$。 + +对每次抽样,将相互作用为 $\Theta_X$ 的均衡与相互作用为 $1.5\,\Theta_X$ 的均衡进行比较,只保留两个均衡都存在且可接受的那些抽样。 + +报告迹上升的频率和*每个*特征值都上升的频率。 +``` + +```{solution-start} mfg_ex2 +:class: dropdown +``` + +```{code-cell} ipython3 +rng = np.random.default_rng(3) +trace_rose = eig_rose = kept = 0 + +for _ in range(400): + A_r = rng.normal(size=(2, 2))*0.3 + 0.4*np.eye(2) + B_r = np.eye(2) + M = rng.normal(size=(2, 2)); Q_r = M @ M.T + 0.5*np.eye(2) + M = rng.normal(size=(2, 2)); Γ_r = M @ M.T + 0.5*np.eye(2) + M = rng.normal(size=(2, 2)); Θ_r = -0.2 * (M @ M.T) + + try: + P0 = mfg_riccati(A_r, B_r, Q_r + Θ_r, Γ_r, 0.05) + P1 = mfg_riccati(A_r, B_r, Q_r + 1.5*Θ_r, Γ_r, 0.05) + except Exception: + continue + + J0 = closed_loop(A_r, B_r, Γ_r, P0) + J1 = closed_loop(A_r, B_r, Γ_r, P1) + if max(np.linalg.eigvals(J0).real.max(), np.linalg.eigvals(J1).real.max()) >= 0.025: + continue + + kept += 1 + trace_rose += np.trace(J1) > np.trace(J0) - 1e-10 + e0 = np.sort(np.linalg.eigvals(J0).real) + e1 = np.sort(np.linalg.eigvals(J1).real) + eig_rose += np.all(e1 >= e0 - 1e-10) + +print(f"admissible draws: {kept}") +print(f"trace rose: {trace_rose}/{kept}") +print(f"every eigenvalue rose: {eig_rose}/{kept}") +``` + +迹的结果在每次抽样中都成立,正如理论所要求的那样。 + +逐个特征值的单调性在相当一部分情况下失败。 + +原因是 $Q+\Theta_X$ 和 $B(\Gamma+\Theta_{\mathcal A})^{-1}B^\top$ 不一定可交换,因此问题不会分解为独立的一维问题,一个总体上减缓调整的变化仍可能在某个方向上加速调整。 + +额外的限制——例如标量漂移矩阵 $A = a I$——可以逐个模式地恢复单调性。 + +```{solution-end} +``` + +```{exercise} +:label: mfg_ex3 + +将计划者与分散均衡进行比较。 + +使用讲座中的二维例子,计算以下四种情形下均衡和计划者的闭环矩阵的特征值: + +1. 仅状态互补,$\Theta_X \prec 0$ 且 $\Theta_{\mathcal A}=0$ +1. 仅行动替代,$\Theta_X = 0$ 且 $\Theta_{\mathcal A} = 0.2 I$ +1. 仅行动互补,$\Theta_X = 0$ 且 $\Theta_{\mathcal A} = -0.2 I$ +1. 两者均互补 + +在哪些情形下计划者的配置比均衡更持久?请解释。 +``` + +```{solution-start} mfg_ex3 +:class: dropdown +``` + +```{code-cell} ipython3 +def eigen_pair(Θ_X_use, Θ_A_use): + "Closed-loop eigenvalues for the equilibrium and for the planner." + P_eq = mfg_riccati(A, B, Q + Θ_X_use, Γ + Θ_A_use, ρ) + P_pl = mfg_riccati(A, B, Q + 2*Θ_X_use, Γ + 2*Θ_A_use, ρ) + e_eq = np.sort(np.linalg.eigvals(closed_loop(A, B, Γ + Θ_A_use, P_eq)).real) + e_pl = np.sort(np.linalg.eigvals(closed_loop(A, B, Γ + 2*Θ_A_use, P_pl)).real) + return e_eq, e_pl + +zero = np.zeros((2, 2)) +cases = {'states, complements': (Θ_X, zero), + 'actions, substitutes': (zero, 0.2*np.eye(2)), + 'actions, complements': (zero, -0.2*np.eye(2)), + 'both complements': (Θ_X, -0.2*np.eye(2))} + +print(f"{'case':24}{'equilibrium':>22}{'planner':>22} planner slower?") +for label, (tx, ta) in cases.items(): + e_eq, e_pl = eigen_pair(tx, ta) + slower = bool(np.all(e_pl >= e_eq - 1e-12)) + print(f"{label:24}{str(e_eq.round(4)):>22}{str(e_pl.round(4)):>22} {slower}") +``` + +仅存在状态互补性时,计划者的配置更持久。 + +计划者认识到,当一个代理人远离稳态时,其他代理人也乐于远离稳态,因此没有那么迫切要回归。 + +仅存在*行动*互补性时,比较结果反转,计划者调整得更快:计划者将以下事实内在化——当一个代理人调整时,其他代理人也想调整。 + +行动替代性的情形是最后一种情形的镜像,同样使计划者更慢。 + +当状态和行动都存在互补性时,两种力量相互对抗。 + +在这个校准中,状态相互作用占主导地位,计划者仍然更慢,但这个排序是一个数量上的偶然,而非定理:一般来说,计划者与均衡持久性之间的比较无法确定符号。 + +```{solution-end} +``` + +```{exercise} +:label: mfg_ex4 + +本练习贯穿 {prf:ref}`mfg_prop_identification` 及其推论。 + +1. 验证当 $\Theta_X$ 和 $\Theta_{\mathcal A}$ 改变时,代理人偏离横截面均值的偏差漂移保持不变。 +1. 假设计量经济学家知道 $\rho$、$Q$、$A$、$B$、$\Gamma$ 和 $\Theta_{\mathcal A}$,并估计出总量漂移矩阵 $U_{\dot X, X}$。展示如何恢复 $\Theta_X$,并用数值方法验证你的步骤。 +1. 在标量模型中,证明 $\theta_X$ 和 $\theta_{\mathcal A}$ 无法分别识别:构造一族参数对,它们产生完全相同的总量动态*和*完全相同的策略系数。 +``` + +```{solution-start} mfg_ex4 +:class: dropdown +``` + +对于第一部分,偏差漂移为 $B\Gamma^{-1}B^\top\bar\beta_2 - A$,而 $\bar\beta_2$ 满足单代理人里卡蒂方程 {eq}`mfg_beta2`,其中不出现任何相互作用矩阵。 + +```{code-cell} ipython3 +for label, (tx, ta) in {'baseline': (Θ_X, Θ_A), + 'very different': (3*Θ_X, -0.1*np.eye(2))}.items(): + β2_case = mfg_riccati(A, B, Q, Γ, ρ) # does not depend on tx, ta + print(f"{label:16}: U_zz =", closed_loop(A, B, Γ, β2_case).round(6).tolist()) +``` + +对于第二部分,反转闭环矩阵的定义得到 $P$,然后从均衡里卡蒂方程中读出 $\Theta_X$: + +$$ +P = \Lambda^{-1}\left(U_{\dot X, X} + A\right), +\qquad +\Theta_X = P\Lambda P - Q - \rho P - PA - A^\top P 。 +$$ + +```{code-cell} ipython3 +U_obs = closed_loop(A, B, Γ + Θ_A, P) # what the econometrician estimates + +P_hat = np.linalg.solve(Λ, U_obs + A) +Θ_X_hat = P_hat @ Λ @ P_hat - Q - ρ*P_hat - P_hat @ A - A.T @ P_hat + +print("true Θ_X =\n", Θ_X.round(6)) +print("\nrecovered Θ_X =\n", Θ_X_hat.round(6)) +print(f"\nmaximum error: {np.abs(Θ_X - Θ_X_hat).max():.2e}") +``` + +对于第三部分,公式 {eq}`mfg_scalar_lambda` 表明 $\lambda$ 只通过比率 $(q+\theta_X)/(\gamma+\theta_{\mathcal A})$ 依赖于这两个相互作用。 + +保持该比率不变会描绘出一族可观察等价的经济体。 + +策略系数无法打破这种平局,因为 $\lambda = b\,U_{\alpha,X} - a$ 将其与 $\lambda$ 绑定在一起。 + +```{code-cell} ipython3 +ratio = (q + (-0.4))/(γ + 0.3) # baseline θ_X = -0.4, θ_A = 0.3 + +print(f"{'θ_A':>7}{'θ_X':>12}{'λ':>12}{'policy coeff':>15}") +for θ_A_alt in (0.3, 0.0, 0.6, 1.0): + θ_X_alt = ratio*(γ + θ_A_alt) - q + λ_alt = scalar_lambda(ρ_s, a, b, q, γ, θ_X_alt, θ_A_alt) + print(f"{θ_A_alt:>7.2f}{θ_X_alt:>12.6f}{λ_alt:>12.6f}{(λ_alt + a)/b:>15.6f}") +``` + +每一行描述了一个不同的经济体,具有不同数量的状态和行动战略互补性,但它们全都产生完全相同的总量动态和相同的策略规则。 + +要区分它们需要对其中一种相互作用进行归一化,或引入外部信息。 + +```{solution-end} +``` + +```{exercise} +:label: mfg_ex5 + +本练习推导了我们在校准资本积累例子时简单假设的两个曲率。 + +假设调整成本为 + +$$ +\psi(i) = \frac{\phi}{2}\,\bar i\left(\frac{i - \bar i}{\bar i}\right)^2 , +$$ + +因此 $\psi'(\bar i) = 0$,$\psi''(\bar i) = \phi/\bar i$,并假设投资品以恒定弹性 $\varepsilon_s$ 供给, + +$$ +\mathcal P(I) = \left(\frac{I}{\bar i}\right)^{1/\varepsilon_s} 。 +$$ + +1. 利用稳态欧拉方程 $\Pi_k(\bar k, \bar k) = \rho + \delta$ 证明 $\bar k^{1-\nu} = \nu(\eta-1)/[\eta(\rho+\delta)]$,然后证明 + +$$ +\gamma = \phi\,\delta\bar k^{1-\nu} , \qquad +\theta_{\mathcal A} = \frac{\delta \bar k^{1-\nu}}{\varepsilon_s} 。 +$$ + +1. 哪一组 $(\phi, \varepsilon_s)$ 能再现校准值 $\gamma = 0.05$ 和 $\theta_{\mathcal A} = 0.09$? +1. 证明具有相同 $\phi + 1/\varepsilon_s$ 值的所有参数对都产生完全相同的*总量*动态,并用数值方法验证它们尽管如此仍蕴含不同的个体投资规则和不同的计划者配置。 +``` + +```{solution-start} mfg_ex5 +:class: dropdown +``` + +对于第一部分,$\Pi_k(k,K) = \nu\frac{\eta-1}{\eta}k^{\nu(1-1/\eta)-1}K^{\nu/\eta}$,因此在对角线上 $\Pi_k(\bar k,\bar k) = \nu\frac{\eta-1}{\eta}\bar k^{\nu-1}$。 + +将其设为等于 $\rho+\delta$(这是当 $\mathcal P(\bar i) = 1$ 且 $\psi'(\bar i) = 0$ 时的稳态使用者成本),得到 $\bar k^{1-\nu}$ 的表达式。 + +由于 $\bar\Pi = \bar k^{\nu}$ 且 $\bar i = \delta\bar k$, + +$$ +\gamma = \frac{\delta^2\bar k^2}{\bar k^{\nu}}\frac{\phi}{\delta \bar k} += \phi\,\delta\bar k^{1-\nu} , +\qquad +\theta_{\mathcal A} = \frac{\delta^2\bar k^2}{\bar k^{\nu}} +\frac{1}{\varepsilon_s \delta\bar k} = \frac{\delta\bar k^{1-\nu}}{\varepsilon_s} 。 +$$ + +```{code-cell} ipython3 +scale_c = δ_c*ν_c*(η_c - 1)/(η_c*(ρ_c + δ_c)) # δ k̄^{1-ν} + +print(f"δ k̄^(1-ν) = {scale_c:.4f}") +print(f"φ implied by γ = {γ_c}: {γ_c/scale_c:.4f}") +print(f"ε_s implied by θ_A = {θ_A_c}: {scale_c/θ_A_c:.4f}") +``` + +该校准对应于一个适度凸的调整成本 $\phi = 0.14$,以及大约 $3.9$ 的投资供给弹性。 + +对于第三部分,$\gamma + \theta_{\mathcal A} = \delta\bar k^{1-\nu}(\phi + 1/\varepsilon_s)$,而根据 {eq}`mfg_scalar_lambda`,对 $\lambda$ 而言只有这个和是重要的。 + +但个体的里卡蒂方程 {eq}`mfg_beta2` 单独涉及 $\gamma$,而计划者的方程涉及 $\gamma + 2\theta_{\mathcal A}$,因此两者都能区分这些参数对。 + +```{code-cell} ipython3 +print(f"{'φ':>6}{'1/ε_s':>8}{'aggregate':>12}{'individual':>12}{'planner':>10}") +for φ, inv_ε in ((0.40, 0.00), (0.30, 0.10), (1/7, 0.257143), (0.05, 0.35)): + γ_case, θ_A_case = φ*scale_c, inv_ε*scale_c + λ_agg = scalar_lambda(ρ_c, δ_c, δ_c, q_c, γ_case, θ_X_c, θ_A_case) + λ_ind = scalar_lambda(ρ_c, δ_c, δ_c, q_c, γ_case, 0.0, 0.0) + λ_pl = scalar_lambda(ρ_c, δ_c, δ_c, q_c, γ_case, 2*θ_X_c, 2*θ_A_case) + print(f"{φ:>6.3f}{inv_ε:>8.3f}{λ_agg:>12.6f}{λ_ind:>12.6f}{λ_pl:>10.4f}") +``` + +总量动态完全相同,精确到最后一位数字,而个体行为则从迟缓到几乎没有摩擦不等。 + +只拥有总量数据的计量经济学家无法区分资本品市场的拥挤与昂贵的安装技术,这正是 {prf:ref}`mfg_prop_identification` 的标量版本。 + +```{solution-end} +``` + +```{exercise} +:label: mfg_ex6 + +上图右侧面板表明,当规模报酬接近不变时会发生一些特殊的事情。 + +1. 证明对于每一个 $\eta > 1$,当 $\nu \to 1$ 时 $q + \theta_X \to 0$,$\lambda \to -\delta$。 +1. 证明在同一极限下,总量投资对资本缺口的反应 $(\lambda+\delta)/\delta$ 趋于零。 +1. 用经济学术语解释这一极限。 +``` + +```{solution-start} mfg_ex6 +:class: dropdown +``` + +第一部分从 {eq}`mfg_capital_coeffs` 立即可得:$q + \theta_X = \frac{\eta-1}{\eta}\nu(1-\nu) \to 0$,而由 $a = b = \delta$, + +$$ +\lambda \to \frac\rho2 - \sqrt{\left(\frac\rho2 + \delta\right)^2} = -\delta 。 +$$ + +对于第二部分,{eq}`mfg_aggregate_action` 的标量版本给出 $\mathcal A = \frac{\lambda+\delta}{\delta}X$,当 $\lambda \to -\delta$ 时该式趋于零。 + +```{code-cell} ipython3 +print(f"{'ν':>8}{'q + θ_X':>10}{'λ':>10}{'half-life':>11}{'A/X':>9}") +for ν in (0.7, 0.9, 0.99, 0.999, 0.99999): + λ_ν = scalar_lambda(ρ_c, δ_c, δ_c, cap_q(η_c, ν), γ_c, cap_θ_X(η_c, ν), θ_A_c) + print(f"{ν:>8}{cap_q(η_c,ν) + cap_θ_X(η_c,ν):>10.5f}{λ_ν:>10.5f}" + f"{half_life(λ_ν):>11.3f}{(λ_ν + δ_c)/δ_c:>9.4f}") +``` + +对于第三部分,请注意 $q + \theta_X = -\bar k^2\left[\Pi_{kk} + \Pi_{kK}\right]/\bar\Pi$ 衡量的是沿*对角线*的利润曲率,即当整个行业一同扩张时,资本边际盈利能力下降的速率。 + +当 $\nu = 1$ 时,利润函数 {eq}`mfg_capital_profit` 是关于 $(k, K)$ 联合一次齐次的,因此 $\Pi_k(k,k)$ 根本不依赖于 $k$。 + +那么,全行业范围内的资本缺口就不会产生以不同方式进行投资的激励,缺口只能通过折旧来弥合。 + +有效曲率为零,经济体恰好位于 {eq}`mfg_scalar_existence` 中存在性区域的边界上,均衡仍然是唯一且稳定的,$\lambda = -\delta$。 + +```{solution-end} +``` + +```{exercise} +:label: mfg_ex7 + +在金博尔例子中,均衡的有效曲率 $Q + \Theta_X$ 对每一个超弹性都是正定的,但计划者的 $Q + 2\Theta_X$ 却不是。 + +1. 利用 $Q + 2\Theta_X = (Q+\Theta_X) - \bar\eta_D'\,\bar s\bar s^\top$,证明它是正定的当且仅当 +$\bar\eta_D'\,\bar s^\top(Q+\Theta_X)^{-1}\bar s < 1$。 +1. 证明 $(Q+\Theta_X)\mathbb{1} = (\bar\eta_D-1)\bar\eta_D\,\bar s$,其中 $\mathbb{1}$ 是全一向量,因而该条件为 $\bar\eta_D' < (\bar\eta_D-1)\bar\eta_D$。 +1. 证明这恰好是 {eq}`mfg_kimball_br` 中静态转嫁率低于二分之一的条件,并用数值方法验证该阈值。 +``` + +```{solution-start} mfg_ex7 +:class: dropdown +``` + +对于第一部分,如果 $\bar\eta_D' \leq 0$,秩一项是相加而非相减,正定性是立即成立的。 + +如果 $\bar\eta_D' > 0$,那么对于 $M \succ 0$,矩阵 $M - c vv^\top$($c>0$)是正定的当且仅当 $c\, v^\top M^{-1}v < 1$,这可以从行列式恒等式 $\det(M - cvv^\top) = \det(M)(1 - c\,v^\top M^{-1}v)$ 应用于每个主子块推出,或者直接从有边界矩阵的舒尔补推出。 + +对于第二部分,在 {eq}`mfg_kimball_Q` 的第三行中利用 $\bar s^\top\mathbb{1} = 1$, + +$$ +(Q+\Theta_X)\mathbb{1} += (\bar\eta_D-1)\left[(\bar\eta_D-\bar\eta_d)\bar s + \bar\eta_d \bar s\right] += (\bar\eta_D-1)\bar\eta_D\,\bar s 。 +$$ + +因此 $(Q+\Theta_X)^{-1}\bar s = \mathbb{1}/[(\bar\eta_D-1)\bar\eta_D]$,从而 + +$$ +\bar s^\top(Q+\Theta_X)^{-1}\bar s = \frac{1}{(\bar\eta_D-1)\bar\eta_D} , +$$ + +这将第一部分中的条件转化为 $\bar\eta_D' < (\bar\eta_D-1)\bar\eta_D$。 + +对于第三部分,该不等式恰好说明 $\kappa < 1$,且 $\kappa/(1+\kappa)$ 关于 $\kappa$ 递增,在 $\kappa = 1$ 处取值 $1/2$。 + +总静态转嫁率为 $\sum_j \partial x_i^{*}/\partial X_j = \kappa/(1+\kappa)$,因为份额之和为一,因此当商店将行业范围价格上涨转嫁到自身价格的比例不到一半时,计划者的问题恰好表现良好。 + +```{code-cell} ipython3 +lo, hi = 0.0, 100.0 +for _ in range(60): + mid = (lo + hi)/2 + Q_m, Θ_m = kimball(η_d, η_D, mid, s_bar) + if np.linalg.eigvalsh(Q_m + 2*Θ_m).min() > 0: + lo = mid + else: + hi = mid + +κ_star = lo/((η_D - 1)*η_D) +print(f"threshold by bisection: η_D′ = {lo:.6f}") +print(f"(η_D - 1) η_D = {(η_D - 1)*η_D:.6f}") +print(f"κ at the threshold = {κ_star:.6f}") +print(f"pass-through there = {κ_star/(1 + κ_star):.6f}") +``` + +```{solution-end} +``` + +```{exercise} +:label: mfg_ex8 + +金博尔例子中的闭式特征值使用了 $A = \pi I$。 + +将其替换为 $A = \operatorname{diag}(0.00, 0.02, 0.06)$,使得三种产品面临不同的成本通胀率。 + +1. 检验闭式公式是否失效。 +1. 检验*持久性*一节中迹的比较静态是否仍然成立,方法是对 $\Theta_X$ 进行缩放,并记录闭环矩阵的迹和特征值。 +1. 总量动态对超弹性的不变性是否依然成立? +``` + +```{solution-start} mfg_ex8 +:class: dropdown +``` + +```{code-cell} ipython3 +A_het = np.diag([0.00, 0.02, 0.06]) +Q_h, Θ_h = kimball(η_d, η_D, 3.0, s_bar) + +P_h = mfg_riccati(A_het, B_K, Q_h + Θ_h, Γ_K, ρ_K) +JG_h = closed_loop(A_het, B_K, Γ_K, P_h) + +ω_h = np.linalg.eigvals(np.linalg.solve(Γ_K, Q_h + Θ_h)).real +print("closed-loop eigenvalues:", np.sort(np.linalg.eigvals(JG_h).real).round(5)) +print("closed-form formula: ", + np.sort(ρ_K/2 - np.sqrt((ρ_K/2 + np.diag(A_het))**2 + np.sort(ω_h))).round(5)) +``` + +该公式不再成立:当 $A$ 不是单位矩阵的倍数时,没有单一的标量位移可以放到根号内,而 $A$ 与 $Q+\Theta_X$ 的特征向量不一定一致。 + +由于三种通胀率相互接近,此处的误差较小,但它们是系统性的,并且随 $A$ 的离散程度增大而增大。 + +另一方面,迹的结果不需要这样的限制。 + +```{code-cell} ipython3 +print(f"{'scale on Θ_X':>14}{'trace':>10} eigenvalues") +for scale in (0.0, 0.5, 1.0, 1.5): + P_s = mfg_riccati(A_het, B_K, Q_h + scale*Θ_h, Γ_K, ρ_K) + JG_s = closed_loop(A_het, B_K, Γ_K, P_s) + print(f"{scale:>14}{np.trace(JG_s):>10.5f} " + f"{np.sort(np.linalg.eigvals(JG_s).real).round(5)}") +``` + +提高比例增强了互补性并提高了迹,这与前面的二维例子完全一致。 + +对于第三部分,不变性与 $A$ 无关:它来自于 $\bar\eta_D'$ 在 $Q + \Theta_X$ 中的抵消,而 {prf:ref}`mfg_prop_riccati` 表明只有 $Q+\Theta_X$ 和 $\Gamma+\Theta_{\mathcal A}$ 会进入均衡里卡蒂方程。 + +```{code-cell} ipython3 +for η_Dp in (-3.0, 0.0, 3.0, 10.0): + Q_i, Θ_i = kimball(η_d, η_D, η_Dp, s_bar) + P_i = mfg_riccati(A_het, B_K, Q_i + Θ_i, Γ_K, ρ_K) + ev = np.sort(np.linalg.eigvals(closed_loop(A_het, B_K, Γ_K, P_i)).real) + print(f"η_D′ = {η_Dp:>5}: {ev.round(6)}") +``` + +```{solution-end} +``` + + +## 延伸阅读 + +{cite:t}`AlvarezArgente2026` 发展了本讲座中的结果,以及我们在上文中实现的两个经济学例子。 + +他们还将分析扩展到通过横截面分布的高阶矩进行的相互作用。 + +{cite:t}`CarmonaDelarue2018` 对平均场博弈给出了全面的概率论处理,{cite:t}`AchdouEtAl2022` 描述了当模型不是线性二次时,用于求解耦合偏微分方程的数值方法。 \ No newline at end of file From c8b041a8b12679c81a4d3bf97157e5fc2d8d64d5 Mon Sep 17 00:00:00 2001 From: Matt McKay Date: Sun, 27 Sep 2026 16:05:09 +1000 Subject: [PATCH 02/12] Update translation: .translate/state/lq_mean_field_games.md.yml --- .translate/state/lq_mean_field_games.md.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .translate/state/lq_mean_field_games.md.yml diff --git a/.translate/state/lq_mean_field_games.md.yml b/.translate/state/lq_mean_field_games.md.yml new file mode 100644 index 00000000..f1041a0e --- /dev/null +++ b/.translate/state/lq_mean_field_games.md.yml @@ -0,0 +1,6 @@ +source-sha: 0abf4031c9db8f7a50abb2b21af78929ca39e179 +synced-at: "2026-09-27" +model: claude-sonnet-5 +mode: NEW +section-count: 14 +tool-version: 0.29.3 From 7e31256f47635ae91650d67bd0a62d8d626a93e4 Mon Sep 17 00:00:00 2001 From: Matt McKay Date: Sun, 27 Sep 2026 16:05:10 +1000 Subject: [PATCH 03/12] Update translation: lectures/lucas_prescott_investment.md --- lectures/lucas_prescott_investment.md | 1032 +++++++++++++++++++++++++ 1 file changed, 1032 insertions(+) create mode 100644 lectures/lucas_prescott_investment.md diff --git a/lectures/lucas_prescott_investment.md b/lectures/lucas_prescott_investment.md new file mode 100644 index 00000000..78204e0f --- /dev/null +++ b/lectures/lucas_prescott_investment.md @@ -0,0 +1,1032 @@ +--- +jupytext: + text_representation: + extension: .md + format_name: myst + format_version: 0.13 +kernelspec: + display_name: Python 3 + language: python + name: python3 +translation: + title: 不确定性下的投资 + headings: + Overview: 概述 + The industry: 行业 + The firm and the price of installed capital: 企业与已安装资本的价格 + Rational expectations equilibrium: 理性预期均衡 + Equilibrium as a planning problem: 作为规划问题的均衡 + Recursive competitive equilibrium: 递归竞争均衡 + A computable version: 一个可计算的版本 + A computable version::The price of installed capital: 已安装资本的价格 + Long run behavior with serially independent demand: 需求序列独立时的长期行为 + Long run behavior with serially correlated demand: 需求序列相关时的长期行为 + Relation to the rational expectations lecture: 与理性预期讲座的关系 + Exercises: 练习 +--- + +(lucas_prescott_investment)= +```{raw} jupyter + +``` + +# 不确定性下的投资 + +```{contents} Contents +:depth: 2 +``` + +除了 Anaconda 中已有的库之外,本讲座还需要以下库: + +```{code-cell} ipython3 +--- +tags: [hide-output] +--- +!pip install quantecon +``` + +## 概述 + +本讲座研究 {cite:t}`Lucas_Prescott_1971`,这篇论文有助于点燃一场“理性预期革命”。 + +卢卡斯和普雷斯科特研究了一个竞争性行业,其中 + +* 需求每期都随机变化 +* 企业面临调整资本存量的成本 +* 企业必须预测未来价格才能决定投资多少 +* 企业用来预测价格的概率分布*恰好等于*它们的投资决策实际生成的概率分布 + +最后一点正是 {cite:t}`muth1961` 所称的**理性预期**。 + +QuantEcon 讲座 {doc}`rational_expectations` 呈现的可以说是卢卡斯-普雷斯科特模型的一个“简化版”。 + +那篇讲座研究的是*没有不确定性*的线性二次型行业。 + +本讲座则描述了卢卡斯和普雷斯科特实际构建的更加宏大的结构。 + +相对于简化版,卢卡斯和普雷斯科特 + +* 让需求由一个马尔可夫过程 $\{u_t\}$ 来推动,因此均衡是一个随机过程而非确定性路径 +* 允许将投资转化为产能的技术是非线性的 +* 证明竞争均衡*存在*且*唯一* +* 证明均衡是一个*规划问题*的解,该规划问题最大化贴现的消费者剩余 +* 证明均衡是状态 $(k_t, u_t)$ 上的*马尔可夫过程* +* 提供了该马尔可夫过程存在*不变概率分布*且从任意初始条件都收敛于该分布的条件 + +最后一点正是对后续研究影响最大的部分。 + +一个均衡是具有不变分布的马尔可夫过程的模型,就是一个可以用来对照时间序列数据的模型。 + +这一观察为拉尔斯·彼得·汉森和托马斯·萨金特随后发展的*理性预期计量经济学*奠定了基础 {cite}`HanSar1980`。 + +在此过程中,我们将描述 {cite:t}`PrescottMehra1980` 后来如何将卢卡斯-普雷斯科特的结构提炼成**递归竞争均衡**的一般定义。 + +后续讲座 {doc}`optimal_growth_uncertainty` 研究了对一个单部门最优增长模型提出同样问题的论文,即 {cite:t}`BrockMirman1972`,以及一篇利用该模型思考托宾 $q$ 的论文,即 {cite:t}`Sargent1980q`。 + +让我们从一些导入开始: + +```{code-cell} ipython3 +import numpy as np +import matplotlib.pyplot as plt +import quantecon as qe +from collections import namedtuple +``` + +## 行业 + +一个行业由许多小企业组成。 + +每个企业用单一投入品——资本 $k_t$——生产单一产出品 $q_t$。 + +生产具有规模报酬不变的性质,通过适当选取单位,生产函数为 + +```{math} +:label: lp_production +0 \leq q_t \leq k_t . +``` + +由于资本是唯一投入,产出以正价格出售,因此每个企业都以满负荷生产,即 $q_t = k_t$。 + +令 $x_t$ 表示总投资。 + +下一期产能与本期产能及投资的关系为 + +```{math} +:label: lp_accumulation +k_{t+1} = k_t \, h\!\left(\frac{x_t}{k_t}\right), +``` + +其中 $h$ 是有界、连续可微、递增且严格*凹*的。 + +$h$ 的严格凹性正是**调整成本**产生的原因:单位资本的投资率翻倍所带来的产能增量少于原来的两倍。 + +调整成本正是企业逐步调整资本存量,而不是立即跳跃到长期目标水平的原因。 + +假设 $\delta = h^{-1}(1)$ 存在且满足 $0 < \delta < 1$。 + +那么 $x_t = \delta k_t$ 恰好是维持产能所需的投资率,因此 $\delta$ 起到折旧率的作用。 + +令 $p_t$ 为产出价格,令 $\beta = 1/(1+r)$,其中 $r > 0$ 是资本成本。 + +企业的现值为 + +```{math} +:label: lp_value +V = \sum_{t=0}^\infty \beta^t \left[ p_t q_t - x_t \right]. +``` + +由于给定行业资本存量在各企业间的分配并不重要,我们可以将 $k_t, x_t, q_t$ 既用作企业变量,也用作行业变量,二者可互换使用。 + +等价地,我们可以把这个行业看作只有一个价格接受者的竞争性企业。 + +行业需求受到随机冲击的影响: + +```{math} +:label: lp_demand +p_t = D(q_t, u_t), +``` + +其中 $D$ 关于 $q_t$ 连续且严格递减,关于 $u_t$ 递增,因此 $u_t$ 增加会使需求曲线向右移动。 + +需求扰动 $\{u_t\}$ 是一个马尔可夫过程,转移分布为 $p(\cdot, u)$,这意味着在 $u_t = u$ 的条件下,$u_{t+1} \in A$ 的概率为 $\int_A p(dz, u)$。 + +## 企业与已安装资本的价格 + +在研究均衡之前,卢卡斯和普雷斯科特先驻足思考一个富有启发性的问题:单个企业究竟需要知道什么? + +令 $w_t$ 为一单位已安装资本的当期市场价值,$w^*_t$ 为预期下一期将占优的单位价值。 + +一个在 $t$ 期初拥有资本 $k_t$ 并投资 $x$ 的企业,将在下一期获得价值为 $\beta k_t h(x/k_t) w^*_t$ 的资本,而其成本为 $x$,因此它求解 + +$$ +\max_x \left[ -x + \beta k_t h(x/k_t) w^*_t \right] . +$$ + +企业的当期价值为 + +```{math} +:label: lp_firmvalue +w_t k_t = p_t k_t - x + \beta k_t h(x/k_t) w^*_t +``` + +一阶条件为 + +```{math} +:label: lp_firmfoc +0 \geq -1 + \beta h'(x/k_t) w^*_t, \quad \text{当 } x > 0 \text{ 时取等号} . +``` + +联立求解 {eq}`lp_firmvalue` 和 {eq}`lp_firmfoc` 中的 $x$ 与 $w^*_t$,可得如下形式的投资函数 + +```{math} +:label: lp_investment_fn +x_t = k_t \, g(w_t - p_t), \qquad g'(\cdot) > 0 . +``` + +卢卡斯和普雷斯科特指出,{eq}`lp_investment_fn` 本质上就是格伦费尔德在实证工作中使用过的投资函数,其中企业的市场价值作为解释变量。 + +不过他们的论证比格伦费尔德的更有力:企业根本不需要预测自己未来的收入流。 + +它只需要知道证券市场对一单位已安装资本所赋予的价值。 + +读者会认出这正是后来被称为托宾 $q$ 投资理论的一个版本。 + +但方程 {eq}`lp_investment_fn` 只是一个*一致性要求*,还算不上是资本积累理论,因为 $w_t$ 的路径仍然未知。 + +要确定 $w_t$,我们必须研究均衡。 + +## 理性预期均衡 + +企业必须预测未来价格。 + +卢卡斯和普雷斯科特将常规方法描述为假设一个预测规则——例如“适应性预期”——由此产生投资行为,再结合需求生成实际的价格过程。 + +他们反对这种做法,理由是:如果潜在的扰动确实具有规律性的随机特征,那么除非出现巧合,预测价格与实际价格将具有*不同的概率分布*,而这种差异将是持续的、代价高昂的,同时也是容易被纠正的。 + +于是他们走向另一个极端,假设实际价格与预期价格具有*相同的概率分布*。 + +为了精确表述这一点,先固定初始状态 $(k_0, u_0)$。 + +由于价格取决于需求冲击的历史,预期价格过程是关于 $(u_1, \ldots, u_t)$ 的函数序列 $\{p_t\}$。 + +类似地,投资-产出计划是一对关于 $(u_1, \ldots, u_t)$ 的函数序列 $\{q_t, x_t\}$——即一个提前说明企业在每一种可能历史之后将如何行动的相机抉择计划。 + +```{prf:definition} +:label: lp_equilibrium_def + +对于固定的初始状态 $(k_0, u_0)$,一个**行业均衡**是一个三元组序列 $\{q^0_t, x^0_t, p^0_t\}$,使得 + +1. 需求曲线 {eq}`lp_demand` 对每一种历史都成立,且 +1. 计划 $\{q^0_t, x^0_t\}$ 在给定价格过程 $\{p^0_t\}$ 的条件下,在满足 {eq}`lp_production` 和 {eq}`lp_accumulation` 的所有计划 $\{q_t, x_t\}$ 中,最大化预期现值 + + $$ + \mathbb{E} \left\{ \sum_{t=0}^\infty \beta^t \left[ p^0_t q_t - x_t \right] \right\} + $$ +``` + +理性预期的要求就明明白白地隐藏在 {prf:ref}`lp_equilibrium_def` 之中。 + +企业在最大化时视为给定的价格过程 $\{p^0_t\}$,恰好*就是*它们自身决策通过需求曲线所生成的那个价格过程。 + +这正是讲座 {doc}`rational_expectations` 中不动点思想的翻版:总产出的**感知运动规律** $H$ 必须等于由所产生的决策规则得出的**实际运动规律**。 + +区别在于,这里的不动点是在历史函数序列空间中,而不是在线性决策规则空间中。 + +```{note} +卢卡斯和普雷斯科特对理性假设了什么、没假设什么十分谨慎。 + +他们写道,他们“事先放弃了对企业如何将当前信息转化为价格预测这一过程有所启示的任何希望”。 + +他们也为这一假设辩护:如果需求变化过程确实具有规律的、平稳的结构,那么在他们意义上的理性预期“肯定比任何简单的适应性方案更为合理”;如果不是这样,那么采用其他某种预期假设“肯定不会改善局面”。 +``` + +## 作为规划问题的均衡 + +我们该如何计算一个由如此庞大空间中的不动点所定义的对象呢? + +卢卡斯和普雷斯科特的答案,正是讲座 {doc}`rational_expectations` 所使用的手法:找到一个**规划问题**,其解就是均衡。 + +将**消费者剩余**定义为需求曲线下方的面积 + +$$ +s(q, u) = \int_0^q D(z, u) \, dz , +$$ + +并将扣除投资成本后的贴现消费者剩余定义为 + +```{math} +:label: lp_surplus +S = \mathbb{E} \left\{ \sum_{t=0}^\infty \beta^t \left[ s(q_t, u_t) - x_t \right] \right\} . +``` + +与最大化 $S$ 的问题相关联的泛函方程为 + +```{math} +:label: lp_bellman +v(k, u) = \sup_{x \geq 0} \left\{ s(k, u) - x + \beta \int v\!\left[ k h\!\left(\frac{x}{k}\right), z \right] p(dz, u) \right\} . +``` + +```{prf:theorem} +:label: lp_theorem1 + +泛函方程 {eq}`lp_bellman` 具有唯一的有界解 $v$,且对每一个 $(k,u)$,上确界都在唯一的 $x(k,u)$ 处取得。 + +用该策略函数表示,给定 $(k_0, u_0)$ 的唯一行业均衡为 + +$$ +x_t = x(k_t, u_t), \qquad +k_{t+1} = k_t h\!\left(\frac{x(k_t,u_t)}{k_t}\right), \qquad +q_t = k_t, \qquad +p_t = D(q_t, u_t) . +$$ +``` + +证明分为两部分,两部分对后续工作都很重要。 + +第一部分说明竞争均衡最大化 $S$,反之亦然。 + +这是对无限维商品空间中福利定理的一种应用,用到了德布鲁的估价均衡以及普雷斯科特和卢卡斯在一篇姊妹论文中发展的价格体系。 + +卢卡斯和普雷斯科特明确指出,他们只是把这种联系当作一种计算工具来使用:“$S$ 的福利意义并不重要。我们只对利用 $S$ 的最大化与竞争均衡之间的联系来确定后者的性质感兴趣。” + +第二部分说明规划问题由泛函方程 {eq}`lp_bellman` 求解。 + +在这里他们使用算子 + +$$ +Tf(k,u) = \sup_{x \geq 0} \left\{ s(k,u) - x + \beta \int f\!\left[ k h(x/k), z \right] p(dz, u) \right\} +$$ + +并验证 $T$ 是单调的且满足一个贴现性质,因此根据布莱克韦尔定理 {cite}`Blackwell1965`,它有唯一的不动点,且逐次逼近会收敛到该不动点。 + +他们还证明了 $T$ 保持了关于 $k$ 的凹性和单调性,这就得到了唯一且连续的策略函数 $x(k,u)$。 + +```{note} +这些论证如今已是标准做法,在 {cite:t}`StokeyLucas1989` 中有详尽的讨论。 + +在 1971 年时它们还不是标准做法,这也是这篇论文难读的原因之一。 + +论文中大量篇幅都用于处理可测性方面的细节——贝尔函数、博雷尔集——而在现代处理方式中,这些内容通常会放到附录中。 +``` + +{prf:ref}`lp_theorem1` 的两个特征值得强调。 + +第一,均衡是**递归的**:$(k_t, u_t)$ 二元组是一个马尔可夫过程,均衡价格和数量是关于它的时不变函数。 + +第二,均衡的计算*完全无需迭代一个从信念到结果的映射*。 + +讲座 {doc}`rational_expectations` 解释了为什么这一点很重要:从感知运动规律到实际运动规律的映射 $\Phi$ *不是一个压缩映射*,对它进行迭代可能会发散。 + +规划问题用一个是压缩映射的动态规划,取代了一个不可靠的不动点计算。 + +## 递归竞争均衡 + +{cite:t}`PrescottMehra1980` 后来提炼出了卢卡斯和普雷斯科特所利用的一般结构。 + +他们的目标是用对均衡*决策规则*的搜索,取代阿罗和德布鲁风格的对均衡*相机抉择函数序列*的搜索。 + +这样的规则将当前行动表述为少数几个**状态变量**的函数,这些状态变量概括了过去决策和当前信息的影响。 + +正如普雷斯科特和梅拉所说,这些均衡决策规则“必须是时不变的,才能应用标准的时间序列方法,而这就要求有一个递归结构”。 + +这句话正是从卢卡斯-普雷斯科特理论通往计量经济学的桥梁。 + +在递归竞争均衡中 + +* 状态变量应具有最小的维数,仅索引那些可能随时间变化的因素 +* 状态是可观测的,或者是可观测量的可逆函数 +* 在给定当前决策和当前状态的条件下,下一期状态的条件分布是时不变的 +* 个体决策规则在给定均衡定价函数的条件下是最优的,且市场出清 + +普雷斯科特和梅拉指出,他们的结构“涵盖了卢卡斯和普雷斯科特在分析不确定性下均衡投资时所考虑的结构”。 + +他们的分析还以“比通过与状态相机抉择均衡等价性来论证更简单、更直接的方式”确立了递归均衡的最优性以及帕累托最优的可支持性。 + +对我们而言,重要的一点是 {prf:ref}`lp_theorem1` 恰好产生了理性预期计量经济学所需要的那些对象:由马尔可夫状态驱动的时不变决策规则,以及将冲击过程参数与决策规则参数联系起来的跨方程约束。 + +## 一个可计算的版本 + +现在让我们来计算该模型某个版本的均衡。 + +我们采用调整技术 + +$$ +h(z) = (1 - \delta + z)^\alpha, \qquad 0 < \alpha \leq 1 , +$$ + +它满足卢卡斯-普雷斯科特的假设:当 $\alpha < 1$ 时 $h$ 递增且严格凹,且 $h(\delta) = 1$,因此 $\delta$ 是维持性投资率。 + +当 $\alpha = 1$ 时,我们就得到熟悉的线性积累方程 $k_{t+1} = (1-\delta) k_t + x_t$。 + +当 $\alpha < 1$ 时存在调整成本。 + +注意 $h'(\delta) = \alpha$,我们下面会用到这一事实。 + +我们采用线性逆需求曲线 + +$$ +D(q, u) = a_0 + u - a_1 q , +$$ + +这与讲座 {doc}`rational_expectations` 中的需求曲线一致,只是多了一个由 $u$ 带来的位移。 + +消费者剩余于是为 + +$$ +s(k, u) = (a_0 + u) k - \frac{a_1}{2} k^2 . +$$ + +需求扰动遵循高斯 AR(1) 过程 + +$$ +u_{t+1} = \rho u_t + \sigma \epsilon_{t+1}, \qquad \epsilon_{t+1} \sim N(0,1), +$$ + +这正是卢卡斯和普雷斯科特自己给出的一个满足其假设的过程示例。 + +我们用陶臣方法对其进行离散化。 + +与其直接选择投资 $x$,不如让规划者在网格上选择下一期资本 $k'$ 更为方便,再对 {eq}`lp_accumulation` 求逆,得到所需的投资 + +$$ +x = k \left[ \left(\frac{k'}{k}\right)^{1/\alpha} - (1 - \delta) \right] . +$$ + +```{code-cell} ipython3 +Model = namedtuple("Model", "r β δ α a0 a1 k u P X feasible s") + +def create_model(r=0.05, δ=0.10, α=0.70, a0=1.0, a1=0.01, + ρ=0.9, σ=0.02, n_u=9, n_k=400, k_lo=20.0, k_hi=160.0): + "Discretize the Lucas-Prescott industry." + β = 1 / (1 + r) + mc = qe.markov.tauchen(n_u, ρ, σ) + u, P = mc.state_values, mc.P + k = np.linspace(k_lo, k_hi, n_k) + # investment needed to move from k (rows) to k' (columns) + X = k[:, None] * ((k[None, :] / k[:, None])**(1/α) - (1 - δ)) + feasible = X >= 0 + s = (a0 + u[None, :]) * k[:, None] - a1 * k[:, None]**2 / 2 + return Model(r, β, δ, α, a0, a1, k, u, P, X, feasible, s) +``` + +我们通过值函数迭代来求解规划者的贝尔曼方程 {eq}`lp_bellman`,并使用霍华德策略改进步骤来加快收敛速度。 + +```{code-cell} ipython3 +def solve_model(m, tol=1e-8, maxit=1000, howard=30): + "Solve the planning problem; return value function and policies." + n_k, n_u = len(m.k), len(m.u) + R = np.where(m.feasible, -m.X, -1e12) + rows, cols = np.arange(n_k)[:, None], np.arange(n_u)[None, :] + v = m.s.copy() + + for it in range(maxit): + EV = v @ m.P.T # EV[k', u] = E[v(k', u') | u] + obj = R[:, :, None] + m.β * EV[None, :, :] # (k, k', u) + idx = obj.argmax(axis=1) # choice of k' given (k, u) + v_new = m.s + np.take_along_axis(obj, idx[:, None, :], axis=1)[:, 0, :] + + for _ in range(howard): # policy evaluation steps + EV = v_new @ m.P.T + v_new = m.s + R[rows, idx] + m.β * EV[idx, cols] + + if np.max(np.abs(v_new - v)) < tol: + v = v_new + break + v = v_new + + k_next = m.k[idx] + x = np.take_along_axis(m.X, idx, axis=1) + return v, idx, k_next, x + +m = create_model() +v, idx, k_next, x = solve_model(m) +print(f"grid: {len(m.k)} capital points, {len(m.u)} demand states") +``` + +让我们来看看均衡投资策略以及资本的运动规律。 + +```{code-cell} ipython3 +--- +mystnb: + figure: + caption: Investment policy and law of motion + name: fig-lp-policy +--- +fig, axes = plt.subplots(1, 2, figsize=(12, 4.5)) + +for j in [0, len(m.u)//2, len(m.u)-1]: + axes[0].plot(m.k, x[:, j], label=f'$u = {m.u[j]:.3f}$') + axes[1].plot(m.k, k_next[:, j], label=f'$u = {m.u[j]:.3f}$') + +axes[0].plot(m.k, m.δ * m.k, 'k--', lw=1, label=r'$\delta k$') +axes[0].set_xlabel('$k$'); axes[0].set_ylabel('$x(k, u)$') +axes[0].set_title('investment policy') +axes[1].plot(m.k, m.k, 'k--', lw=1, label='45 degree line') +axes[1].set_xlabel('$k$'); axes[1].set_ylabel("$k'(k, u)$") +axes[1].set_title('law of motion for capital') +for ax in axes: + ax.legend() +plt.tight_layout() +plt.show() +``` + +当 $x(k,u)$ 位于维持线 $\delta k$ 之上时资本上升,位于其下时资本下降。 + +需求越高,投资策略就越向上移动,因此需求强劲时行业能够维持的资本存量也更高。 + +### 已安装资本的价格 + +规划问题还给出了出现在 {eq}`lp_firmvalue` 中的一单位已安装资本的市场价值 $w$。 + +令 $z = x/k$ 表示投资率。 + +对贝尔曼方程 {eq}`lp_bellman` 求导并运用包络条件,可得 + +$$ +w(k,u) = v_k(k, u) = D(k,u) + \beta \mathbb{E}\left[ v_k(k', u') \mid u \right] \left[ h(z) - z h'(z) \right], +$$ + +而关于 $x$ 的一阶条件为 + +```{math} +:label: lp_planner_foc +\beta \mathbb{E}\left[ v_k(k', u') \mid u \right] = \frac{1}{h'(z)} . +``` + +将二者结合起来,就以闭合形式表达出了影子价格, + +```{math} +:label: lp_shadow +w(k,u) = D(k,u) + \frac{h(z)}{h'(z)} - z . +``` + +已安装资本的边际价值,等于当前产出价格加上该单位资本带入未来的产能价值。 + +注意到 {eq}`lp_planner_foc` 正是企业一阶条件 {eq}`lp_firmfoc` 的规划者对应版本,其中 $w^* = \mathbb{E}[v_k(k',u') \mid u]$。 + +这种对应关系正是讲座 {doc}`rational_expectations` 中“大 $K$、小 $k$”逻辑在卢卡斯-普雷斯科特形式下的体现。 + +```{code-cell} ipython3 +h = lambda z, m: (1 - m.δ + z)**m.α +h_prime = lambda z, m: m.α * (1 - m.δ + z)**(m.α - 1) + +z = x / m.k[:, None] +D = m.a0 + m.u[None, :] - m.a1 * m.k[:, None] +w = D + h(z, m) / h_prime(z, m) - z + +# check the first-order condition (up to grid error) +Ew = np.take_along_axis(w @ m.P.T, idx, axis=0) +resid = np.abs(m.β * Ew - 1 / h_prime(z, m)) +scale = np.median(1 / h_prime(z, m)) +near = (m.k > 70) & (m.k < 95) # capital levels the industry actually visits +print(f"typical size of each side of the FOC: {scale:.3f}") +print(f"median residual, all k: {np.median(resid):.2e}") +print(f"median residual, 70 < k < 95: {np.median(resid[near]):.2e}") +``` + +残差仅为所比较各项量级的十分之几个百分点,这证实了 {eq}`lp_shadow`。 + +它没有完全消失,是因为规划者从有限网格中选择 $k'$,因此策略函数每次都会跳过一整个网格点。 + +在行业从不涉足的那些极端资本水平上,残差要大得多。 + +## 需求序列独立时的长期行为 + +卢卡斯和普雷斯科特接下来探讨了长期会发生什么。 + +他们处理了两种情形,第一种是特殊情形,即当 $s \neq t$ 时 $u_t$ 与 $u_s$ 相互独立。 + +在 $p(dz,u)$ 不依赖于 $u$ 的情况下检视贝尔曼方程 {eq}`lp_bellman`,可以看出最优投资率 $x(k,u)$ *不依赖于 $u$*。 + +这时需求变化只是一次纯粹的意外收获:它不告诉企业任何关于未来需求的信息,因此不改变投资。 + +于是,资本存量按照 $k_{t+1} = k_t h(x(k_t)/k_t)$ 的规律*确定性地*演化,而产出无弹性地供给,需求冲击只改变价格。 + +````{prf:theorem} +:label: lp_theorem2 + +在独立性假设下,资本存量存在两种可能性。 + +如果 + +```{math} +:label: lp_existence_iid +\int D(0, u) p(du) > \delta + \frac{r}{h'(\delta)} , +``` + +且 $k_0 > 0$,那么 $k_t$ 会单调收敛到唯一的稳态值 $k^c$,该值由下式隐式给出 + +```{math} +:label: lp_kc +\int D(k^c, u) p(du) = \delta + \frac{r}{h'(\delta)} . +``` + +否则资本会单调收敛到零。 +```` + +条件 {eq}`lp_kc` 有一个熟悉的解释。 + +左边是资本的预期边际收益产品,这里恰好就是预期产出价格,因为边际实物产品为一。 + +右边是**资本的使用者成本**:折旧项 $\delta$ 加上利息项 $r/h'(\delta)$。 + +卢卡斯和普雷斯科特指出,这种情形与教科书中短期供给和长期供给之间的二分法非常吻合。 + +在短期,产能是固定的,需求决定价格。 + +在长期,需求波动完全不起作用:产能完全由*平均*需求决定。 + +让我们通过设定 $\rho = 0$ 来数值验证这一点。 + +```{code-cell} ipython3 +m_iid = create_model(ρ=0.0) +v_iid, idx_iid, k_next_iid, x_iid = solve_model(m_iid) + +# does the policy depend on u? +print("investment policy independent of u:", + np.allclose(x_iid, x_iid[:, [0]], atol=1e-10)) + +# stationary capital: where x(k) crosses δ k +def stationary_k(x_col, m): + "Capital where investment just maintains capacity." + d = x_col - m.δ * m.k + i = np.where(np.sign(d[:-1]) != np.sign(d[1:]))[0] + if len(i) == 0: + return np.nan + i = i[0] + return np.interp(0, [d[i+1], d[i]], [m.k[i+1], m.k[i]]) + +kc = stationary_k(x_iid[:, 0], m_iid) +user_cost = m_iid.δ + m_iid.r / h_prime(m_iid.δ, m_iid) +print(f"\nstationary capital k^c = {kc:.3f}") +print(f"expected price at k^c = {m_iid.a0 - m_iid.a1 * kc:.5f}") +print(f"user cost δ + r / h'(δ) = {user_cost:.5f}") +``` + +稳态资本存量使预期价格等于资本的使用者成本,正如 {eq}`lp_kc` 所要求的那样。 + +现在让我们确认资本是单调地趋近于 $k^c$ 的,且无论从哪个方向趋近都是如此。 + +```{code-cell} ipython3 +--- +mystnb: + figure: + caption: Capital paths under IID demand + name: fig-lp-iid-paths +--- +def capital_path(m, idx, k0, T=60, u_index=None): + "Simulate capital, holding the demand state fixed if u_index is given." + ki = np.abs(m.k - k0).argmin() + path = np.empty(T) + j = len(m.u) // 2 if u_index is None else u_index + for t in range(T): + path[t] = m.k[ki] + ki = idx[ki, j] + return path + +fig, ax = plt.subplots(figsize=(8, 4.5)) +for k0 in (30.0, 55.0, 110.0, 150.0): + ax.plot(capital_path(m_iid, idx_iid, k0), lw=2, label=f'$k_0 = {k0:.0f}$') +ax.axhline(kc, color='k', ls='--', lw=1, label='$k^c$') +ax.set_xlabel('$t$'); ax.set_ylabel('$k_t$') +ax.legend() +plt.tight_layout() +plt.show() +``` + +收敛是单调的,且极限并不依赖于初始资本存量。 + +## 需求序列相关时的长期行为 + +更有意思的情形是允许需求变化呈正序列相关,此时今天的高需求预示着明天的高需求。 + +现在当前的需求状态*确实*会影响投资,资本存量也变得真正具有随机性。 + +为了刻画长期行为,卢卡斯和普雷斯科特对 $\{u_t\}$ 过程施加了额外的限制,其目的是保证 $(k_t, u_t)$ 的分布最终会稳定下来。 + +用文字来说,他们假设 + +* 从任何当前的 $u$ 出发,下一期的冲击落入任何非退化区间的概率都为正 +* $u_t$ 具有不依赖于初始值 $u_0$ 的极限分布,并且该分布对每个非退化区间都赋予正概率 +* $\mathbb{P}\{u_{t+1} \geq x \mid u_t\}$ 关于 $u_t$ 严格递增,因此今天的高需求总是预示着明天的高需求 +* 当 $u \to \pm\infty$ 时,消费者剩余 $s(k,u)$ 一致收敛 + +一个 $0 < \rho < 1$ 的高斯 AR(1) 过程满足这些条件,这也正是他们给出并且我们进行模拟的示例。 + +之后的分析通过界定资本存量的范围来展开。 + +令 $\bar v(k)$ 和 $\underline v(k)$ 分别为当 $u \to \infty$ 和 $u \to -\infty$ 时预期值函数的极限,令 $\bar x(k)$ 和 $\underline x(k)$ 为相应的投资策略。 + +由于投资关于 $u$ 递增,这两者对每一个 $u$ 下的策略都构成了上下界。 + +令 $\bar k$ 满足 $\bar x(k) = \delta k$,令 $\underline k$ 满足 $\underline x(k) = \delta k$。 + +这两个值分别是在永久性最大需求和永久性最小需求下能够维持的资本存量。 + +卢卡斯和普雷斯科特随后证明了 + +* 集合 $(0, \underline k)$ 和 $(\bar k, \infty)$,与任意需求状态配对,都是**暂态的**:行业一旦离开这些集合就不会返回,且从任何起点出发,以趋近于一的概率进入 $(\underline k, \bar k)$ +* 集合 $B = (\underline k, \bar k) \times E$(其中 $E$ 是 $u$ 可能取值的集合)是一个**单一遍历集** + +```{prf:theorem} +:label: lp_theorem3 + +如果 $B$ 非空,那么对所有 $(k,u)$ 以及每个初始状态 $(k_0, u_0)$, + +$$ +\lim_{t \to \infty} \mathbb{P}\{ k_t \leq k, u_t \leq u \mid k_0, u_0 \} = P(k,u) +$$ + +都存在,且*不依赖于 $(k_0, u_0)$*。 + +函数 $P$ 是一个概率分布,它对暂态集赋予概率零,对 $B$ 中任何正面积的子集赋予正概率。 +``` + +```{prf:theorem} +:label: lp_theorem4 + +如果 $B$ 非空,那么对任意初始状态,以概率一有 + +$$ +\lim_{T \to \infty} \frac{1}{T}\sum_{t=1}^T k_t = k^* , +$$ + +其中 $k^*$ 是 $k$ 在不变分布 $P$ 下的均值。 +``` + +遍历集非空——因而这种长期行为才成立——当且仅当 + +```{math} +:label: lp_existence +\lim_{u \to \infty} D(0, u) > \delta + \frac{r}{h'(\delta)} , +``` + +这说明需求必须有时强劲到足以支撑持有任何数量的资本。 + +{prf:ref}`lp_theorem3` 和 {prf:ref}`lp_theorem4` 正是使这个模型成为计量经济学家可以使用的对象的那些结果。 + +第一个结果说明该模型意味着可观测时间序列存在一个良定义的平稳概率分布。 + +第二个结果说明由单个长实现计算出的样本均值收敛于该分布相应的总体矩。 + +让我们为我们的参数设定计算界限 $\underline k$ 和 $\bar k$,并检验模拟结果是否符合定理所说的那样。 + +```{code-cell} ipython3 +bounds = np.array([stationary_k(x[:, j], m) for j in range(len(m.u))]) +k_lo_star, k_hi_star = bounds.min(), bounds.max() +print(f"conditional stationary capital, lowest demand state: {k_lo_star:.2f}") +print(f"conditional stationary capital, highest demand state: {k_hi_star:.2f}") +print(f"ergodic set for capital: ({k_lo_star:.2f}, {k_hi_star:.2f})") +``` + +现在我们用*同一*需求冲击序列,从两个截然不同的初始资本存量出发,模拟均衡马尔可夫过程。 + +```{code-cell} ipython3 +--- +mystnb: + figure: + caption: Capital paths entering the ergodic set + name: fig-lp-ergodic-paths +--- +def simulate(m, idx, k0, T=20_000, seed=0): + "Simulate the equilibrium Markov process for (k, u)." + mc = qe.MarkovChain(m.P, m.u) + u_idx = mc.simulate_indices(T, init=len(m.u)//2, random_state=seed) + ki = np.abs(m.k - k0).argmin() + k_path = np.empty(T) + for t in range(T): + k_path[t] = m.k[ki] + ki = idx[ki, u_idx[t]] + p_path = m.a0 + m.u[u_idx] - m.a1 * k_path + return k_path, p_path + +k_low, p_low = simulate(m, idx, k0=30.0, seed=1) +k_high, p_high = simulate(m, idx, k0=150.0, seed=1) + +fig, ax = plt.subplots(figsize=(9, 4.5)) +ax.plot(k_low[:250], lw=2, label='$k_0 = 30$') +ax.plot(k_high[:250], lw=2, label='$k_0 = 150$') +ax.axhline(k_lo_star, color='k', ls='--', lw=1) +ax.axhline(k_hi_star, color='k', ls='--', lw=1, label='ergodic set') +ax.set_xlabel('$t$'); ax.set_ylabel('$k_t$') +ax.legend() +plt.tight_layout() +plt.show() +``` + +两条路径都被吸引进入遍历集,此后便永远在其中波动。 + +下图比较了从两次模拟中计算出的资本长期分布,两者都已剔除了预烧样本。 + +```{code-cell} ipython3 +--- +mystnb: + figure: + caption: Invariant distributions of capital and price + name: fig-lp-invariant +--- +burn = 2000 +fig, axes = plt.subplots(1, 2, figsize=(12, 4.5)) + +axes[0].hist(k_low[burn:], bins=60, density=True, alpha=0.5, label='from $k_0 = 30$') +axes[0].hist(k_high[burn:], bins=60, density=True, alpha=0.5, label='from $k_0 = 150$') +axes[0].set_xlabel('$k$'); axes[0].set_ylabel('density') +axes[0].set_title('invariant distribution of capital') +axes[0].legend() + +axes[1].hist(p_low[burn:], bins=60, density=True, alpha=0.5) +axes[1].set_xlabel('$p$'); axes[1].set_ylabel('density') +axes[1].set_title('invariant distribution of price') + +plt.tight_layout() +plt.show() + +print(f"mean capital from k_0 = 30: {k_low[burn:].mean():.3f}") +print(f"mean capital from k_0 = 150: {k_high[burn:].mean():.3f}") +print(f"range visited: ({k_low[burn:].min():.2f}, {k_low[burn:].max():.2f})") +``` + +正如 {prf:ref}`lp_theorem3` 所保证的那样,两个直方图相互吻合,且资本存量始终停留在遍历集之内。 + +最后,这里是 {prf:ref}`lp_theorem4` 的实际体现:来自单个实现的时间平均值收敛于不变分布的均值。 + +```{code-cell} ipython3 +--- +mystnb: + figure: + caption: Time average of capital + name: fig-lp-time-average +--- +running_mean = np.cumsum(k_low) / np.arange(1, len(k_low) + 1) + +fig, ax = plt.subplots(figsize=(8, 4.5)) +ax.plot(running_mean, lw=2) +ax.axhline(k_low[burn:].mean(), color='k', ls='--', lw=1, label='$k^*$') +ax.set_xlabel('$T$'); ax.set_ylabel(r'$T^{-1}\sum_{t \leq T} k_t$') +ax.set_xscale('log') +ax.legend() +plt.tight_layout() +plt.show() +``` + +## 与理性预期讲座的关系 + +值得把本讲座与 {doc}`rational_expectations` 之间的对应关系整理一下。 + +| | {doc}`rational_expectations` | 本讲座 | +|---|---|---| +| 不确定性 | 无 | 马尔可夫需求扰动 $u_t$ | +| 调整成本 | 二次型,$\gamma (y'-y)^2/2$ | 凹性技术 $k' = k h(x/k)$ | +| 均衡对象 | 信念 $H$,满足 $Y' = H(Y)$ | 价格过程 $\{p_t\}$,等价地为策略 $x(k,u)$ | +| 均衡概念 | $H$ 是 $\Phi$ 的不动点 | 预期价格分布等于实际价格分布 | +| 求解方式 | 规划问题,作为 LQ 问题求解 | 规划问题,用动态规划求解 | +| 规划者所最大化的对象 | 消费者剩余加生产者剩余 | 贴现消费者剩余 {eq}`lp_surplus` | +| 均衡动态 | $Y_{t+1} = \kappa_0 + \kappa_1 Y_t$ | $(k_t, u_t)$ 上的马尔可夫过程 | +| 长期行为 | 收敛到稳态 | 收敛到不变分布 | + +二者最深层的共同点在于计算均衡的策略。 + +在两篇讲座中,直接方法——猜测一个运动规律、计算由此引出的最优反应、然后迭代——都是不可靠的,因为这个映射未必是压缩映射。 + +在两篇讲座中,解决办法都是找到一个欧拉方程与均衡条件相吻合的规划问题,然后用动态规划求解该规划问题。 + +讲座 {doc}`rational_expectations` 通过为一个特定的线性二次型例子匹配欧拉方程来验证这种对应关系。 + +{prf:ref}`lp_theorem1` 是一般性的陈述:对这一类经济体而言,竞争均衡的集合与规划问题解的集合是重合的,且二者都是单点集。 + +简化版所无法展示的——因为它没有不确定性——正是卢卡斯和普雷斯科特所追求的回报:一个作为*平稳随机过程*的均衡,具有不变分布和遍历时间平均值。 + +正是这一点使得用数据检验这样的模型成为可能,并进而催生了理性预期计量经济学。 + +姊妹讲座 {doc}`optimal_growth_uncertainty` 在一个单部门增长模型中恰恰延续了这一主题。 + +{cite:t}`BrockMirman1972` 在那里证明了 {prf:ref}`lp_theorem3` 和 {prf:ref}`lp_theorem4` 的对应结果:资本的分布收敛到一个不依赖于初始条件的不变分布,且沿着单一实现计算的时间平均值收敛于总体矩。 + +那篇讲座还展示了这样一个规划问题中资本的影子价格在竞争均衡中会变成什么——即托宾的 $q$——并考察了一个关于价值函数可微性的微妙问题,答案就取决于这一点。 + +## 练习 + +```{exercise} +:label: lp_ex1 + +{eq}`lp_kc` 中资本的使用者成本通过 $h'(\delta) = \alpha$ 依赖于调整技术的曲率参数 $\alpha$。 + +1. 解释为什么*较低*的 $\alpha$——意味着更强的调整成本——应当降低长期资本存量。 +1. 对于序列独立的情形,为 $\alpha \in \{0.4, 0.6, 0.8, 1.0\}$ 分别计算稳态资本存量 $k^c$,并在每种情形下验证边际条件 {eq}`lp_kc` 是否成立。 +1. 确认当 $\alpha = 1$ 时,积累方程为 $k_{t+1} = (1-\delta)k_t + x_t$,且使用者成本为教科书式的 $\delta + r$。 +``` + +```{solution-start} lp_ex1 +:class: dropdown +``` + +较低的 $\alpha$ 使 $h$ 更凹,因此单位投资在边际上买到的产能更少。 + +由于 $h'(\delta) = \alpha$,使用者成本中的利息部分 $r / h'(\delta) = r/\alpha$ 随着 $\alpha$ 的降低而升高。 + +更高的使用者成本必须由更高的预期价格来匹配,而由于需求曲线向下倾斜,这意味着更小的资本存量。 + +```{code-cell} ipython3 +print(f"{'α':>5} {'k^c':>10} {'E[price]':>12} {'user cost':>12}") +for α in (0.4, 0.6, 0.8, 1.0): + m_α = create_model(ρ=0.0, α=α, k_lo=5.0, k_hi=160.0, n_k=600) + _, _, _, x_α = solve_model(m_α) + kc_α = stationary_k(x_α[:, 0], m_α) + price = m_α.a0 - m_α.a1 * kc_α + cost = m_α.δ + m_α.r / h_prime(m_α.δ, m_α) + print(f"{α:>5.1f} {kc_α:>10.3f} {price:>12.5f} {cost:>12.5f}") +``` + +更强的调整成本(更低的 $\alpha$)确实降低了长期资本存量。 + +当 $\alpha = 1$ 时,我们有 $h(z) = 1 - \delta + z$,因此 $k' = k(1 - \delta + x/k) = (1-\delta)k + x$,且 $h'(\delta) = 1$,因此使用者成本为 $\delta + r$。 + +```{solution-end} +``` + +```{exercise} +:label: lp_ex2 + +{prf:ref}`lp_theorem1` 说明规划者的策略*就是*竞争均衡。 + +利用讲座 {doc}`rational_expectations` 中“大 $K$、小 $k$”的逻辑,用数值方法验证这一点。 + +求解一个价格接受型个体企业的问题,该企业 + +* 拥有资本 $k_i$,并在同样的积累技术约束下选择 $k_i'$ +* 将总资本存量 $K$ 视为给定,$K$ 按上文计算出的规划者策略演化 +* 将价格 $p = a_0 + u - a_1 K$ 视为给定,该价格取决于总量而非自身资本 + +然后检验,当企业自身的资本等于总资本时,即 $k_i = K$ 时,企业所选择的正是规划者所选择的。 + +为了减小计算量,为企业自身资本使用一个较粗的网格。 +``` + +```{solution-start} lp_ex2 +:class: dropdown +``` + +企业的贝尔曼方程为 + +$$ +v_i(k_i, K, u) = \max_{k_i'} \left\{ p(K,u) k_i - x(k_i, k_i') + + \beta \mathbb{E}\left[ v_i(k_i', K', u') \mid u \right] \right\} +$$ + +其中 $K' $ 遵循规划者的运动规律。 + +注意企业自身的资本会影响其收入,但不会影响价格。 + +```{code-cell} ipython3 +def firm_problem(m, idx_agg, n_i=80, tol=1e-8, maxit=1000, howard=20): + "Solve an individual firm's problem taking the aggregate law of motion as given." + sub = np.linspace(0, len(m.k) - 1, n_i).astype(int) # firm grid ⊂ aggregate grid + ki = m.k[sub] + n_K, n_u = len(m.k), len(m.u) + + Xi = ki[:, None] * ((ki[None, :] / ki[:, None])**(1/m.α) - (1 - m.δ)) + Ri = np.where(Xi >= 0, -Xi, -1e12) # (k_i, k_i') + price = m.a0 + m.u[None, :] - m.a1 * m.k[:, None] # (K, u) + revenue = ki[:, None, None] * price[None, :, :] # (k_i, K, u) + + v_i = np.zeros((n_i, n_K, n_u)) + u_cols = np.arange(n_u)[None, :] + for it in range(maxit): + EV = np.tensordot(v_i, m.P, axes=([2], [1])) # E[v_i(k_i', K', u') | u] + cont = EV[:, idx_agg, u_cols] # impose K' = planner's choice + obj = Ri[:, :, None, None] + m.β * cont[None, :, :, :] + pol = obj.argmax(axis=1) + v_new = revenue + np.take_along_axis(obj, pol[:, None, :, :], axis=1)[:, 0, :, :] + + for _ in range(howard): + EV = np.tensordot(v_new, m.P, axes=([2], [1])) + cont = EV[:, idx_agg, u_cols] + v_new = (revenue + Ri[np.arange(n_i)[:, None, None], pol] + + m.β * np.take_along_axis(cont, pol, axis=0)) + + if np.max(np.abs(v_new - v_i)) < tol: + v_i = v_new + break + v_i = v_new + + return ki, sub, pol + +ki, sub, pol_firm = firm_problem(m, idx) + +# compare the firm's choice with the planner's, evaluated at k_i = K +gaps = [] +for a, K_i in enumerate(sub): + for j in range(len(m.u)): + gaps.append(abs(ki[pol_firm[a, K_i, j]] - m.k[idx[K_i, j]])) +gaps = np.array(gaps) + +print(f"firm grid spacing: {np.diff(ki).mean():.3f}") +print(f"mean |firm choice - planner choice|: {gaps.mean():.3f}") +print(f"max |firm choice - planner choice|: {gaps.max():.3f}") +``` + +误差小于企业自身资本网格的间距。 + +因此,对规划者的分配所产生的价格过程做出最优反应的价格接受型企业,其选择恰恰是规划者所做的选择。 + +这正是 {prf:ref}`lp_theorem1` 的内容,也是讲座 {doc}`rational_expectations` 中不动点条件 $H(Y) = h(Y,Y)$ 在卢卡斯-普雷斯科特情形下的对应版本。 + +```{solution-end} +``` + +```{exercise} +:label: lp_ex3 + +{prf:ref}`lp_theorem3` 说明不变分布不依赖于初始条件,但它没有说明该分布*有多宽*。 + +探究需求中的序列相关性如何影响遍历集。 + +1. 对于 $\rho \in \{0.0, 0.5, 0.9, 0.98\}$,计算遍历界限 $\underline k$ 和 $\bar k$。 +1. 模拟每个经济体,并比较资本的不变分布。 +1. 解释这一规律。为什么 $\rho = 0$ 的情形会对资本产生一个退化分布? +``` + +```{solution-start} lp_ex3 +:class: dropdown +``` + +这里给出一种解法。 + +```{code-cell} ipython3 +fig, ax = plt.subplots(figsize=(9, 4.5)) +print(f"{'ρ':>6} {'k_lo':>9} {'k_hi':>9} {'width':>9} {'std(k)':>9}") + +for ρ in (0.0, 0.5, 0.9, 0.98): + m_ρ = create_model(ρ=ρ) + _, idx_ρ, _, x_ρ = solve_model(m_ρ) + b = np.array([stationary_k(x_ρ[:, j], m_ρ) for j in range(len(m_ρ.u))]) + k_ρ, _ = simulate(m_ρ, idx_ρ, k0=80.0, seed=3) + print(f"{ρ:>6.2f} {b.min():>9.2f} {b.max():>9.2f} " + f"{b.max()-b.min():>9.2f} {k_ρ[2000:].std():>9.3f}") + if ρ > 0: # the ρ = 0 distribution is a spike at k^c, so we omit it here + ax.hist(k_ρ[2000:], bins=50, density=True, alpha=0.45, label=f'$\\rho = {ρ}$') + +ax.set_xlabel('$k$'); ax.set_ylabel('density') +ax.legend() +plt.tight_layout() +plt.show() +``` + +需求持续性越强,遍历集就越宽,资本的不变分布也就越分散。 + +(图中省略了 $\rho = 0$ 的情形,因为其分布是在 $k^c$ 处的一个尖峰,会使其他分布相形见绌。) + +原因正是卢卡斯和普雷斯科特所强调的那一点。 + +投资对*关于未来需求的消息*做出反应,而不是对当前需求本身做出反应。 + +当 $\rho = 0$ 时,需求变化不传递任何关于未来的信息,因此投资完全不做反应,资本收敛到 {prf:ref}`lp_theorem2` 中那个单一确定性的值 $k^c$:即使价格持续波动,资本的不变分布也是退化的。 + +随着 $\rho$ 的升高,高需求状态预示着一段持续的高价格时期,因此企业投资更多,资本存量便继承了需求的持续性。 + +```{solution-end} +``` \ No newline at end of file From 376d110f67f698640f6162c208de962cadd3ec39 Mon Sep 17 00:00:00 2001 From: Matt McKay Date: Sun, 27 Sep 2026 16:05:11 +1000 Subject: [PATCH 04/12] Update translation: .translate/state/lucas_prescott_investment.md.yml --- .translate/state/lucas_prescott_investment.md.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .translate/state/lucas_prescott_investment.md.yml diff --git a/.translate/state/lucas_prescott_investment.md.yml b/.translate/state/lucas_prescott_investment.md.yml new file mode 100644 index 00000000..547be74f --- /dev/null +++ b/.translate/state/lucas_prescott_investment.md.yml @@ -0,0 +1,6 @@ +source-sha: 0abf4031c9db8f7a50abb2b21af78929ca39e179 +synced-at: "2026-09-27" +model: claude-sonnet-5 +mode: NEW +section-count: 11 +tool-version: 0.29.3 From 4e7190a47ade577435695f50025a2183d8dbc1c4 Mon Sep 17 00:00:00 2001 From: Matt McKay Date: Sun, 27 Sep 2026 16:05:12 +1000 Subject: [PATCH 05/12] Update translation: lectures/rational_expectations.md --- lectures/rational_expectations.md | 55 +++++++++++++++++++++++++------ 1 file changed, 45 insertions(+), 10 deletions(-) diff --git a/lectures/rational_expectations.md b/lectures/rational_expectations.md index da1cbbc0..9fadc889 100644 --- a/lectures/rational_expectations.md +++ b/lectures/rational_expectations.md @@ -14,7 +14,7 @@ translation: Overview::The big Y, little y trick: 大 Y,小 y 技巧 Overview::The big Y, little y trick::A simple static example of the big Y, little y trick: 大 Y,小 y 技巧的简单静态示例 Overview::Related planning problem: 相关的规划问题 - Overview::Further Reading: 延伸阅读 + Overview::Further reading: 延伸阅读 Rational expectations equilibrium: 理性预期均衡 Rational expectations equilibrium::Competitive equilibrium with adjustment costs: 带调整成本的竞争均衡 Rational expectations equilibrium::Competitive equilibrium with adjustment costs::The firm's problem: 企业的问题 @@ -31,6 +31,7 @@ translation: Computing an equilibrium::Solution of planning problem: 规划问题的求解 Computing an equilibrium::Key insight: 关键洞见 Computing an equilibrium::Key insight::Structure of the law of motion: 动态规律的结构 + Concluding remarks: 总结性评论 Exercises: 练习 --- @@ -53,9 +54,9 @@ translation: "如果你真的那么聪明,为什么不富有?" ``` -除了Anaconda自带的库外,本讲义还需要以下库: +除了 Anaconda 自带的库外,本讲义还需要以下库: -```{code-cell} ipython +```{code-cell} ipython3 --- tags: [hide-output] --- @@ -70,6 +71,14 @@ tags: [hide-output] 这篇1971年的论文是引发*理性预期革命*的少数几篇研究文章之一。 +你可以将本讲义视为该论文的"简化版",也可以将其视为介绍两篇后续讲义在更一般情形下所研究思想的入门。 + +{doc}`lucas_prescott_investment` 描述了Lucas和Prescott实际构建的模型,其中需求由马尔可夫过程驱动,因此均衡是一个随机过程,而非确定性路径。 + +{doc}`optimal_growth_uncertainty` 研究了一个带有生产随机冲击的单部门最优增长模型,并用它来思考托宾的 $q$。 + +这两篇后续讲义都提出了一个在本讲义中无法出现的问题(因为本讲义不涉及不确定性):均衡是否存在一个不变的概率分布,使得从任意初始条件出发都会收敛到该分布? + 我们遵循Lucas和Prescott的思路,采用一个易于"贝尔曼化"的设置(即,可以被表述为动态规划问题)。 由于我们对需求和成本均使用线性二次形式,我们可以运用{doc}`另一篇讲义 `中描述的LQ规划技术。 @@ -89,7 +98,7 @@ tags: [hide-output] 让我们从一些标准导入开始: -```{code-cell} ipython +```{code-cell} ipython3 import matplotlib.pyplot as plt import matplotlib as mpl FONTPATH = "fonts/SourceHanSerifSC-SemiBold.otf" @@ -102,7 +111,7 @@ import numpy as np 我们还将使用`QuantEcon.py`中的LQ类。 -```{code-cell} ipython +```{code-cell} ipython3 from quantecon import LQ ``` @@ -235,6 +244,8 @@ $$ * {cite}`Sargent1987`, 第XIV章 * {cite}`Ljungqvist2012`, 第7章 +本讲义的两篇后续讲义是 {doc}`lucas_prescott_investment` 和 {doc}`optimal_growth_uncertainty`。 + ## 理性预期均衡 ```{index} single: Rational Expectations Equilibrium; Definition @@ -589,6 +600,30 @@ y_{t+1} = h_0 + h_1 y_t + h_2 Y_t 因此,理性预期均衡将由 {eq}`ree_hlom2`--{eq}`ree_ex5` 中的参数 $(\kappa_0, \kappa_1, h_0, h_1, h_2)$ 来定义。 +## 总结性评论 + +本讲座中的三个思想贯穿于整个宏观经济学。 + +第一个思想是均衡概念本身:对市场层面对象的*感知到的*运动规律必须与由由此产生的决策所生成的*实际*运动规律相吻合。 + +第二个思想是“大 $Y$、小 $y$”这一手法,它使得一个价格接受型企业能够成为代表性企业。 + +第三个思想是计算策略:由于从感知运动规律到实际运动规律的映射并非压缩映射,我们转而通过求解一个*计划问题*来找到均衡,然后将均衡价格解读为影子价格。 + +接下来的两篇后续内容将这些思想引入具有不确定性的场景中。 + +{doc}`lucas_prescott_investment` 回到 {cite:t}`Lucas_Prescott_1971` 本身。 + +在那里,需求由一个马尔可夫过程驱动变化,企业面临将投资转化为产能的非线性技术,并且证明了均衡的存在性、唯一性,以及该均衡可求解一个使贴现消费者剩余最大化的计划问题。 + +由于均衡是一个马尔可夫过程,我们可以追问它是否收敛到一个不变分布,以及从单次实现中计算出的时间平均值是否收敛到总体矩。 + +肯定的答案正是使这类模型在计量经济学中可用的关键。 + +{doc}`optimal_growth_uncertainty` 在 {cite:t}`BrockMirman1972` 的单部门最优增长模型中探讨了同样的问题,然后遵循 {cite:t}`Sargent1980q` 的做法加入了不可逆投资。 + +这一微小的改变使得已安装资本的影子价格——托宾的 $q$——偏离了新资本的价格,并使计划者的价值函数成为投资理论所依赖的对象。 + ## 练习 ```{exercise} @@ -671,7 +706,7 @@ $$ 参考代码: -```{code-cell} python3 +```{code-cell} ipython3 # 模型参数 a0 = 100 @@ -770,7 +805,7 @@ $$ 以下代码实现了这个检验 -```{code-cell} python3 +```{code-cell} ipython3 candidates = ((94.0886298678, 0.923409232937), (93.2119845412, 0.984323478873), (95.0818452486, 0.952459076301)) @@ -861,7 +896,7 @@ $$ 解决此问题的Python代码如下: -```{code-cell} python3 +```{code-cell} ipython3 # 构建规划者的LQ问题 A = np.array([[1, 0], [0, 1]]) @@ -923,7 +958,7 @@ $$ 问题可以按如下方式求解: -```{code-cell} python3 +```{code-cell} ipython3 A = np.array([[1, 0], [0, 1]]) B = np.array([[1], [0]]) R = np.array([[a1, -a0 / 2], [-a0 / 2, 0]]) @@ -954,4 +989,4 @@ $Y_{t+1} = 95.0818 + 0.9525 Y_t$。 ```{solution-end} ``` -[^fn_im]: 有一类文献研究:当模型中的个体具有学习行为时,这些个体是否能收敛到理性预期均衡。该文献探讨的核心是对映射 $\Phi$ 的修正型迭代,其可近似表示为 $\gamma \Phi + (1-\gamma)I$。这里 $I$ 是恒等算子,$\gamma \in (0,1)$ 是一个*松弛参数*。参见 {cite}`MarcetSargent1989` 和 {cite}`EvansHonkapohja2001` 中关于这种方法的阐述和应用,该方法用于确定在什么条件下使用最小二乘学习的自适应代理群体会收敛到理性预期均衡。 +[^fn_im]: 有一类文献研究:当模型中的个体具有学习行为时,这些个体是否能收敛到理性预期均衡。该文献探讨的核心是对映射 $\Phi$ 的修正型迭代,其可近似表示为 $\gamma \Phi + (1-\gamma)I$。这里 $I$ 是恒等算子,$\gamma \in (0,1)$ 是一个*松弛参数*。参见 {cite:t}`MarcetSargent1989` 和 {cite:t}`EvansHonkapohja2001` 中关于这种方法的阐述和应用,该方法用于确定在什么条件下使用最小二乘学习的自适应代理群体会收敛到理性预期均衡。 From 1a5171ed2580d293924278eb8edd59a678e76b33 Mon Sep 17 00:00:00 2001 From: Matt McKay Date: Sun, 27 Sep 2026 16:05:13 +1000 Subject: [PATCH 06/12] Update translation: .translate/state/rational_expectations.md.yml --- .translate/state/rational_expectations.md.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.translate/state/rational_expectations.md.yml b/.translate/state/rational_expectations.md.yml index 7289e0b1..96e0fc5f 100644 --- a/.translate/state/rational_expectations.md.yml +++ b/.translate/state/rational_expectations.md.yml @@ -1,6 +1,6 @@ -source-sha: d7cdb96bc7bc53ee15bf005885607da09967ef3e -synced-at: "2026-08-06" +source-sha: 0abf4031c9db8f7a50abb2b21af78929ca39e179 +synced-at: "2026-09-27" model: claude-sonnet-5 mode: UPDATE -section-count: 4 -tool-version: 0.25.0 +section-count: 5 +tool-version: 0.29.3 From ff70280d2ac029f42c2b9c1b731666f768d1a85f Mon Sep 17 00:00:00 2001 From: Matt McKay Date: Sun, 27 Sep 2026 16:05:14 +1000 Subject: [PATCH 07/12] Update translation: lectures/_toc.yml --- lectures/_toc.yml | 41 ++++++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/lectures/_toc.yml b/lectures/_toc.yml index 6f5d2f66..953297f6 100644 --- a/lectures/_toc.yml +++ b/lectures/_toc.yml @@ -1,7 +1,7 @@ format: jb-book root: intro parts: -- caption: 基础工具 +- caption: Tools and Techniques numbered: true chapters: - file: sir_model @@ -11,7 +11,7 @@ parts: - file: svd_intro - file: var_dmd - file: newton_method -- caption: 基础统计学 +- caption: Elementary Statistics numbered: true chapters: - file: prob_matrix @@ -24,13 +24,13 @@ parts: - file: back_prop - file: rand_resp - file: util_rand_resp -- caption: 贝叶斯定律 +- caption: Bayes Law numbered: true chapters: - file: bayes_nonconj - file: ar1_bayes - file: ar1_turningpts -- caption: 统计与信息论 +- caption: Statistics and Information numbered: true chapters: - file: divergence_measures @@ -50,12 +50,12 @@ parts: - file: survival_recursive_preferences - file: pricing_information - file: market_diffusion -- caption: 线性规划 +- caption: Linear Programming numbered: true chapters: - file: opt_transport - file: von_neumann_model -- caption: 动态系统导论 +- caption: Introduction to Dynamics numbered: true chapters: - file: finite_markov @@ -71,7 +71,7 @@ parts: - file: var_subsets - file: organization_capital - file: measurement_models -- caption: 搜索 +- caption: Search numbered: true chapters: - file: mccall_model @@ -83,13 +83,13 @@ parts: - file: career - file: jv - file: odu -- caption: 强化学习 +- caption: Reinforcement Learning numbered: true chapters: - file: inventory_q - file: rs_inventory_q - file: mccall_q -- caption: 最优储蓄导论 +- caption: Introduction to Optimal Savings numbered: true chapters: - file: os @@ -98,7 +98,7 @@ parts: - file: os_time_iter - file: os_egm - file: os_egm_jax -- caption: 收入波动问题 +- caption: Household Problems numbered: true chapters: - file: ifp_discrete @@ -106,7 +106,7 @@ parts: - file: ifp_egm - file: ifp_egm_transient_shocks - file: ifp_advanced -- caption: LQ控制 +- caption: LQ Control numbered: true chapters: - file: lqcontrol @@ -122,7 +122,7 @@ parts: - file: lq_robust_smoothing - file: lq_robust_bewley - file: lq_inventories -- caption: 宏观经济学中的有限理性 +- caption: Bounded Rationality in Macroeconomics numbered: true chapters: - file: bounded_rationality @@ -132,7 +132,7 @@ parts: - file: genetic_classifier - file: marimon_mcgrattan_sargent - file: prospects_bounded_rationality -- caption: 菲利普斯曲线权衡 +- caption: Phillips Curve Tradeoffs numbered: true chapters: - file: phillips_two_stories @@ -146,19 +146,21 @@ parts: - file: phillips_priors - file: phillips_lost_conquest - file: phillips_drifts_volatilities -- caption: 最优增长 +- caption: Optimal Growth numbered: true chapters: - file: cass_koopmans_1 - file: cass_koopmans_2 - file: cass_fiscal - file: cass_fiscal_2 -- caption: 多主体模型 +- caption: Multiple Agent Models numbered: true chapters: - file: lake_model - file: endogenous_lake - file: rational_expectations + - file: lucas_prescott_investment + - file: optimal_growth_uncertainty - file: re_with_feedback - file: markov_perf - file: uncertainty_traps @@ -167,7 +169,8 @@ parts: - file: ak2 - file: ak_aiyagari - file: two_computation -- caption: 资产定价与金融 + - file: lq_mean_field_games +- caption: Asset Pricing and Finance numbered: true chapters: - file: markov_asset @@ -182,7 +185,7 @@ parts: - file: ross_recovery - file: long_run_risk_operator - file: misspecified_recovery -- caption: 数据与实证 +- caption: Data and Empirics numbered: true chapters: - file: pandas_panel @@ -191,12 +194,12 @@ parts: - file: unemployment_linear - file: unemployment_shocks - file: sargent_surico -- caption: 拍卖 +- caption: Auctions numbered: true chapters: - file: two_auctions - file: house_auction -- caption: 其他 +- caption: Other numbered: true chapters: - file: troubleshooting From c819724f76b15f5547c802191916b882a612fe51 Mon Sep 17 00:00:00 2001 From: Matt McKay Date: Sun, 27 Sep 2026 16:05:15 +1000 Subject: [PATCH 08/12] Update translation: lectures/_static/quant-econ.bib --- lectures/_static/quant-econ.bib | 129 ++++++++++++++++++++++++++++++++ 1 file changed, 129 insertions(+) diff --git a/lectures/_static/quant-econ.bib b/lectures/_static/quant-econ.bib index 1c082c16..5c09b109 100644 --- a/lectures/_static/quant-econ.bib +++ b/lectures/_static/quant-econ.bib @@ -5356,3 +5356,132 @@ @article{ShakedSutton1982 pages = {3--13}, year = {1982} } + +% --- Entries below added automatically by action-translation (#117) --- + +@article{LasryLions2007, + author = {Lasry, Jean-Michel and Lions, Pierre-Louis}, + title = {Mean Field Games}, + journal = {Japanese Journal of Mathematics}, + volume = {2}, + number = {1}, + pages = {229--260}, + year = {2007} +} + +@article{HuangMalhameCaines2006, + author = {Huang, Minyi and Malham{\'e}, Roland P. and Caines, Peter E.}, + title = {Large Population Stochastic Dynamic Games: Closed-Loop + {McKean-Vlasov} Systems and the Nash Certainty Equivalence + Principle}, + journal = {Communications in Information and Systems}, + volume = {6}, + number = {3}, + pages = {221--252}, + year = {2006} +} + +@article{AchdouEtAl2022, + author = {Achdou, Yves and Han, Jiequn and Lasry, Jean-Michel and + Lions, Pierre-Louis and Moll, Benjamin}, + title = {Income and Wealth Distribution in Macroeconomics: A + Continuous-Time Approach}, + journal = {Review of Economic Studies}, + volume = {89}, + number = {1}, + pages = {45--86}, + year = {2022} +} + +@techreport{AlvarezArgente2026, + author = {Alvarez, Fernando and Argente, David}, + title = {Strategic Complementarity and Persistence in Linear-Quadratic + Mean Field Games}, + institution = {University of Chicago and Yale University}, + year = {2026} +} + +@book{LancasterRodman1995, + author = {Lancaster, Peter and Rodman, Leiba}, + title = {Algebraic {R}iccati Equations}, + publisher = {Oxford University Press}, + address = {Oxford}, + year = {1995} +} + +@article{Kimball1995, + author = {Kimball, Miles S.}, + title = {The Quantitative Analytics of the Basic Neomonetarist Model}, + journal = {Journal of Money, Credit and Banking}, + volume = {27}, + number = {4}, + pages = {1241--1277}, + year = {1995} +} + +@article{KlenowWillis2016, + author = {Klenow, Peter J. and Willis, Jonathan L.}, + title = {Real Rigidities and Nominal Price Changes}, + journal = {Economica}, + volume = {83}, + number = {331}, + pages = {443--472}, + year = {2016} +} + +@article{Midrigan2011, + author = {Midrigan, Virgiliu}, + title = {Menu Costs, Multiproduct Firms, and Aggregate Fluctuations}, + journal = {Econometrica}, + volume = {79}, + number = {4}, + pages = {1139--1180}, + year = {2011} +} + +@article{AlvarezLippi2014, + author = {Alvarez, Fernando and Lippi, Francesco}, + title = {Price Setting with Menu Cost for Multiproduct Firms}, + journal = {Econometrica}, + volume = {82}, + number = {1}, + pages = {89--135}, + year = {2014} +} + +@book{CarmonaDelarue2018, + author = {Carmona, Ren{\'e} and Delarue, Fran{\c c}ois}, + title = {Probabilistic Theory of Mean Field Games with Applications}, + publisher = {Springer}, + address = {Cham}, + year = {2018} +} + +@article{BrockMirman1972, + author = {Brock, William A. and Mirman, Leonard J.}, + title = {Optimal Economic Growth and Uncertainty: The Discounted Case}, + journal = {Journal of Economic Theory}, + volume = {4}, + number = {3}, + pages = {479--513}, + year = {1972} +} + +@article{Sargent1980q, + author = {Sargent, Thomas J.}, + title = {``{T}obin's q'' and the Rate of Investment in General Equilibrium}, + journal = {Carnegie-Rochester Conference Series on Public Policy}, + volume = {12}, + pages = {107--154}, + year = {1980} +} + +@article{Blackwell1965, + author = {Blackwell, David}, + title = {Discounted Dynamic Programming}, + journal = {Annals of Mathematical Statistics}, + volume = {36}, + number = {1}, + pages = {226--235}, + year = {1965} +} From cffec3b1c67c16c8d55d895112c9215431f6b514 Mon Sep 17 00:00:00 2001 From: Matt McKay Date: Thu, 22 Oct 2026 09:57:45 +1100 Subject: [PATCH 09/12] Seed optimal_growth_uncertainty, the lecture this sync dropped QuantEcon/lecture-python.myst#1070 added two lectures, but this PR delivered only lucas_prescott_investment: optimal_growth_uncertainty failed the structural parity check (the model dropped the leading {raw} header block and the anchor), so its sync failure was filed as QuantEcon/lecture-python.myst#1072 and the file never arrived. This PR's _toc.yml and lucas_prescott_investment both point at it, so the preview could not build. translate init -f optimal_growth_uncertainty.md at engine v0.29.6 (@v0), claude-sonnet-5, from lecture-python.myst main (9ad04de; the file's last change is 0abf403, the #1070 merge). Parity passed on the first attempt. Output as written by the CLI. Its font path, font block placement, two English figure captions and one term are repaired in the next commit. Co-Authored-By: Claude Opus 5.5 --- .../state/optimal_growth_uncertainty.md.yml | 6 + lectures/optimal_growth_uncertainty.md | 871 ++++++++++++++++++ 2 files changed, 877 insertions(+) create mode 100644 .translate/state/optimal_growth_uncertainty.md.yml create mode 100644 lectures/optimal_growth_uncertainty.md diff --git a/.translate/state/optimal_growth_uncertainty.md.yml b/.translate/state/optimal_growth_uncertainty.md.yml new file mode 100644 index 00000000..b921114e --- /dev/null +++ b/.translate/state/optimal_growth_uncertainty.md.yml @@ -0,0 +1,6 @@ +source-sha: 0abf4031c9db8f7a50abb2b21af78929ca39e179 +synced-at: "2026-10-21" +model: claude-sonnet-5 +mode: NEW +section-count: 7 +tool-version: 0.29.6 diff --git a/lectures/optimal_growth_uncertainty.md b/lectures/optimal_growth_uncertainty.md new file mode 100644 index 00000000..eed38ae6 --- /dev/null +++ b/lectures/optimal_growth_uncertainty.md @@ -0,0 +1,871 @@ +--- +jupytext: + text_representation: + extension: .md + format_name: myst + format_version: 0.13 +kernelspec: + display_name: Python 3 + language: python + name: python3 +translation: + title: 不确定性下的最优增长与托宾 q + headings: + Overview: 概览 + The Brock-Mirman planning problem: 布洛克-米尔曼规划问题 + Long-run behavior: 长期行为 + Irreversible investment and Tobin's q: 不可逆投资与托宾 q + Differentiability of the value function: 价值函数的可微性 + Computing the model: 计算模型 + Computing the model::Policies and the price of installed capital: 策略与已安装资本的价格 + Computing the model::The invariant distribution: 不变分布 + Exercises: 练习 +--- + +(optimal_growth_uncertainty)= +```{raw} jupyter + +``` + +# 不确定性下的最优增长与托宾 q + +```{contents} Contents +:depth: 2 +``` + +## 概览 + +本讲座研究两篇论文。 + +第一篇是 {cite:t}`BrockMirman1972`,这是一篇关于生产函数受到随机冲击时单部门最优增长的经典分析。 + +第二篇是 {cite:t}`Sargent1980q`,它增添了一个微小但关键的要素——**不可逆投资**——并利用这一结果来思考詹姆斯·托宾的 $q$ 投资理论。 + +{doc}`lucas_prescott_investment` 这一讲座研究了一个竞争行业,其均衡是某个规划问题的解,且其均衡是一个具有不变分布的马尔可夫过程。 + +布洛克和米尔曼就一个单部门增长模型提出了相同的问题: + +* 规划问题是否有良好性质的解,具有连续且单调的策略函数? +* 最优策略使资本成为一个马尔可夫过程;该过程是否存在*不变分布*? +* 资本的分布是否从*任意*初始条件收敛到该不变分布? +* 从单次实现计算出的*时间平均*是否收敛到总体矩? + +后两个问题正是这两篇论文对计量经济学而言重要的原因。 + +一个能对这些问题给出肯定答案的模型,会给出可观测时间序列的平稳、遍历随机过程。 + +从一个长实现中计算出的样本矩,随后可用来估计总体矩,这正是 {cite:t}`HanSar1980` 的理性预期计量经济学所要求的。 + +{cite:t}`Sargent1980q` 将布洛克-米尔曼的工具应用于宏观经济学中的一个问题:何时、在何种意义上,存在一条将投资与托宾 $q$ 联系起来的投资需求曲线? + +在此过程中,本讲座会停下来讨论一个技术性问题,而这个问题最终被证明是核心所在: + +* 规划者的价值函数相对于资本的导数,*就是*已安装资本的竞争性价格,也就是说,它本质上就是托宾的 $q$ +* 因此整个分析能否成立,取决于这个导数是否存在 +* 不可逆投资产生了一个**角点**,而在角点处,关于可微性的标准论证会失效 + +我们将描述这一困难,指出已发表论证中的一个缺口,并给出一个修正后的证明。 + +让我们从一些导入开始: + +```{code-cell} ipython3 +import numpy as np +import matplotlib.pyplot as plt +from collections import namedtuple +``` + +## 布洛克-米尔曼规划问题 + +规划者选择消费以最大化 + +```{math} +:label: bm_objective +\mathbb{E}_0 \sum_{t=0}^\infty \beta^t u(c_t), \qquad 0 < \beta < 1, +``` + +约束条件为 + +$$ +c_t + i_t \leq f(k_t, r_t), \qquad c_t \geq 0, \quad i_t \geq 0 , +$$ + +其中 $k_t$ 是人均资本,$i_t$ 是投资,$\{r_t\}$ 是对生产造成冲击的独立同分布序列。 + +布洛克和米尔曼假设:对冲击的每一个实现值,$f(\cdot, r)$ 都是递增的、严格凹的,并且满足 Inada 条件 + +$$ +f(0, r) = 0, \qquad f'(0, r) = +\infty, \qquad f'(\infty, r) = 0 , +$$ + +并且 $f$ 关于 $r$ 递增,这意味着更高的冲击意味着更多的产出。 + +期间效用函数 $u$ 是递增的、严格凹的且可微的。 + +在他们的表述中,资本在一期内完全折旧,因此 $k_{t+1} = i_t$,当期资源为 $s_t = f(k_{t-1}, r_{t-1})$。 + +贝尔曼方程为 + +```{math} +:label: bm_bellman +v(s) = \max_{0 \leq c \leq s} \left\{ u(c) + \beta \int v\bigl(f(s - c, r)\bigr) \, \nu(dr) \right\} , +``` + +其中 $\nu$ 是冲击的分布。 + +标准的论证方法——压缩映射,加上单调性和凹性的保持性——给出了一个唯一的有界解 $v$,该解通过唯一的消费策略 $c = g(s)$ 和投资策略 $x = h(s) = s - g(s)$ 达到。 + +```{prf:proposition} +:label: bm_policies + +最优策略 $g$ 和 $h$ 是递增且连续的,且 $g(0) = h(0) = 0$。 +``` + +布洛克和米尔曼从一阶条件 + +```{math} +:label: bm_euler +u'(g(s)) = \beta \int u'\bigl(g(f(s - g(s), r))\bigr) \, f'(s - g(s), r) \, \nu(dr) , +``` + +证明了单调性,该式是欧拉方程的随机形式对应物。 + +如果 $g$ 不随 $s$ 增加,{eq}`bm_euler` 的左边将保持不变,而右边则会下降,因为 $f$ 递增而 $u'$ 和 $f'$ 递减。 + +## 长期行为 + +最优策略使资本成为一个马尔可夫过程, + +```{math} +:label: bm_markov +k_{t+1} = h\bigl(f(k_t, r_t)\bigr) , +``` + +布洛克和米尔曼在论文中花了大量篇幅研究这个过程的长期行为。 + +这一策略与 {doc}`lucas_prescott_investment` 中所用的方法类似。 + +考虑将冲击固定在其可能的最低值 $\underline r$ 和最高值 $\bar r$ 时所得到的确定性差分方程: + +$$ +k_{t+1} = h(f(k_t, \underline r)), \qquad k_{t+1} = h(f(k_t, \bar r)) . +$$ + +设 $\underline k$ 为第一个方程的一个正不动点,$\bar k$ 为第二个方程的一个正不动点。 + +由于 $f$ 对冲击递增且 $h$ 递增,有 $\underline k \leq \bar k$。 + +布洛克和米尔曼称,当 $\underline k$ 和 $\bar k$ 均为正且 $\underline k < \bar k$ 时,模型具有**稳定的不动点构型**。 + +随后他们证明: + +* 低于 $\underline k$ 和高于 $\bar k$ 的资本存量集合是**暂态的**:该过程会离开这些集合并且不再返回 +* 区间 $[\underline k, \bar k]$ 是该过程最终所处的区域 + +```{prf:theorem} +:label: bm_theorem + +存在一个分布函数 $F$,使得 $k_t$ 的分布 $F_t$ 一致收敛到 $F$,并且 $F$ 不依赖于初始资本存量。 +``` + +{prf:ref}`bm_theorem` 是 {doc}`lucas_prescott_investment` 中不变分布定理的对应物。 + +证明的重要一环是关于**逆最优过程**的论证,该过程将马尔可夫过程在时间上反向运行;布洛克和米尔曼用它来证明平稳分布存在且唯一,而无需借助概率论中更重的工具。 + +分布的收敛本身对计量经济学而言还不够。 + +计量经济学家额外需要的是一个**均值遍历定理**:保证沿单次实现计算出的平均值会收敛到 $F$ 的矩, + +```{math} +:label: bm_ergodic +\frac{1}{T}\sum_{t=1}^T \phi(k_t) \to \int \phi \, dF \qquad \text{以概率1成立} . +``` + +对于具有唯一不变分布且不动点构型稳定的马尔可夫过程,这样的大数定律是成立的;{cite:t}`Sargent1980q` 援引了杜布(Doob)著作中的版本,以此来证明计算其模型总体矩并将其与样本矩进行比较是合理的。 + +这正是从布洛克-米尔曼理论通往二十世纪七十年代末、八十年代初发展起来的理性预期计量经济学的桥梁。 + +没有 {prf:ref}`bm_theorem` 和 {eq}`bm_ergodic`,从单一时间序列计算出的似然函数就没有坚实的依据。 + +```{note} +{cite:t}`BrockMirman1972` 研究的是冲击独立同分布的情形。 + +{doc}`lucas_prescott_investment` 这一讲座描述了一组平行的结果,针对的是冲击序列相关的模型。 + +在这两种情形下,经济学含义是相同的:状态最终必须进入一个紧集中游走,该过程在此集合上表现良好,而该集合的边界就是与最有利和最不利的冲击相关联的平稳点。 +``` + +## 不可逆投资与托宾 q + +{cite:t}`Sargent1980q` 对模型做了一处修改:资本一旦安装,就不能被“吃掉”(即消耗掉)。 + +产出可以被消费,也可以被加入到资本存量中,但这种转换不能反向进行, + +```{math} +:label: q_irreversible +K_{t+1} = (1 - \delta) K_t + I_t, \qquad I_t \geq 0 , +``` + +其中 $0 < \delta < 1$ 为折旧率。 + +产出为 $y_t = f(K_t)\theta_t$,单期效用函数 $u(c_t, e_t)$ 受到偏好冲击 $e_t$ 的影响。 + +冲击 $(\theta_t, e_t)$ 在时间上独立同分布。 + +这个微小的改变为什么重要? + +在投资可逆的模型中,一单位已安装资本的价格总是等于一单位新生产产出的价格,因此托宾的 $q$ 恒等于 1,企业根本没有投资需求曲线可言。 + +不可逆性约束是一种**摩擦**,它使得已安装资本的价格可以低于新资本的价格。 + +萨金特描述了一个竞争经济,在该经济中,家庭拥有资本,将资本出租给企业,并以相对价格 $p_{Kt}$(即托宾的 $q$)交易对已安装资本的索取权。 + +按照 {cite:t}`Lucas_Prescott_1971` 的做法——正是 {doc}`lucas_prescott_investment` 所使用的策略——他通过产生该均衡的规划问题,间接地研究竞争均衡。 + +规划者求解 + +```{math} +:label: q_bellman +v(K, \theta, e) = \max_{K' \geq (1-\delta)K} +\left\{ u\bigl(f(K)\theta + (1-\delta)K - K', e\bigr) ++ \beta \mathbb{E}\bigl[v(K', \theta', e')\bigr] \right\} . +``` + +设 $\lambda \geq 0$ 为不可逆性约束所对应的乘子。 + +一阶条件为 + +```{math} +:label: q_foc +u_c(c, e) = \beta \mathbb{E}\bigl[v_K(K', \theta', e')\bigr] + \lambda , +\qquad \lambda \geq 0, \quad \lambda I = 0 , +``` + +已安装资本的价格为 + +```{math} +:label: q_definition +q = \frac{\beta \mathbb{E}\bigl[v_K(K', \theta', e')\bigr]}{u_c(c,e)} = 1 - \frac{\lambda}{u_c(c,e)} . +``` + +因此该模型意味着: + +* $q \leq 1$ 始终成立 +* 当且仅当投资为正时,$q = 1$ +* 当且仅当不可逆性约束起作用(即投资为零)时,$q < 1$ + +请注意 {eq}`q_definition` 所说的内容:*托宾的 $q$ 就是规划者价值函数的导数*,经边际效用归一化后得到。 + +因此一切都取决于 $v_K$ 是否存在。 + +## 价值函数的可微性 + +这里正是困难所在。 + +研究价值函数可微性的标准工具是 {cite:t}`BenvenisteScheinkman1979` 的定理。 + +```{prf:theorem} Benveniste-Scheinkman +:label: bs_theorem + +设 $v$ 在开集 $D$ 上是凹的,$K_0 \in D$。 + +假设 $W$ 是凹的,在 $K_0$ 处可微,并在 $K_0$ 的某邻域上满足 $W(K) \leq v(K)$,且 $W(K_0) = v(K_0)$。 + +那么 $v$ 在 $K_0$ 处可微,且 $v'(K_0) = W'(K_0)$。 +``` + +构造这样一个 $W$ 的通常方法是:取 $K_0$ 处的最优方案,将下一期资本*固定*在其最优值 $K_0'$,并让消费来吸收 $K$ 的变化: + +```{math} +:label: q_W1 +W_1(K) = u\bigl(f(K)\theta + (1-\delta)K - K_0', e\bigr) + \beta \mathbb{E}\bigl[v(K_0', \theta', e')\bigr] . +``` + +这是一个可行方案,所以 $W_1 \leq v$,在 $K_0$ 处取等,并且它是可微的。 + +但可行性要求 $K_0' \geq (1-\delta)K$,即 $K \leq K_0'/(1-\delta)$。 + +当投资为正时,$K_0' > (1-\delta)K_0$,该方案在 $K_0$ 的一个完整邻域上都是可行的。 + +当投资*为零*时,恰好有 $K_0' = (1-\delta)K_0$,而该方案对所有 $K > K_0$ 都不可行。 + +在角点处,标准的支撑函数只能从左侧获得。 + +这正是已发表论证变得棘手之处,在我们看来,其中存在一些缺口。 + +```{note} +两个具体的困难之处。 + +第一,{cite:t}`Sargent1980q` 将价值函数的导数写成如下形式 + +$$ +v_K(K,\theta,e) = u_c(c,e)\bigl[f'(K)\theta + (1-\delta)\bigr] , +$$ + +这是通过将一阶条件 {eq}`q_foc` *以等式形式*代入包络条件而得到的。 + +这一代换只有在投资为正时才是合理的。 + +而当投资为零时,$\lambda > 0$,该公式高估了 $v_K$;该论文自身随后给出的不等式记录了这一点,因此这两个表述彼此并不一致。 + +第二,该论证通过对迭代序列 $v^j = T^j v^0$ 的归纳来建立价值函数的可微性,然后取极限。 + +这一路径需要了解约束恰好起作用处的资本存量集合的结构。 + +已发表的证明处理了三种构型,见其图3-5中的描绘,并援引一个附录,该附录假设迭代序列几乎处处二阶可微。 + +而该附录又通过对一阶条件求导,并指出“由于右边几乎处处存在,所以左边也存在”来为此辩护,但这一推理并不能按原样成立,并且它未加证明地断言约束起作用点的集合的勒贝格测度为零。 +``` + +幸运的是,结论是正确的,并且存在一条完全避开对迭代序列进行归纳的路径。 + +关键的观察是:在角点处,有一个*不同的*可行方案能够提供所需的支撑函数:在*任何*资本存量水平上,不进行任何投资都是可行的,因此它在两侧都适用。 + +````{prf:proposition} +:label: q_differentiability + +假设 $u$ 和 $f$ 都是递增的、严格凹的且连续可微的,并且 $u_c(0,e) = \infty$,$f'(0) = \infty$。 + +那么对每个 $(\theta, e)$,由 {eq}`q_bellman` 定义的价值函数 $v(\cdot,\theta,e)$ 在 $(0,\infty)$ 上连续可微,且 + +```{math} +:label: q_envelope +v_K(K,\theta,e) = u_c(c,e) f'(K)\theta + \beta(1-\delta) \mathbb{E}\bigl[v_K(K',\theta',e')\bigr] , +``` + +其中 $c$ 和 $K'$ 是在 $(K,\theta,e)$ 处的最优值。 + +当投资为正时,{eq}`q_envelope` 化简为 $v_K = u_c(c,e)[f'(K)\theta + (1-\delta)]$。 + +当投资为零时,$v_K < u_c(c,e)[f'(K)\theta + (1-\delta)]$。 +```` + +````{prf:proof} +**第0步。** 与 {eq}`q_bellman` 相关联的算子将有界连续凹函数映射为有界连续严格凹函数,所以 $v(\cdot,\theta,e)$ 是凹的且连续的,并且最优策略是单值且连续的。 + +**第1步(投资为正)。** 设 $I(K_0,\theta,e) > 0$,令 $K_0'$ 为最优选择。 + +那么 $K_0' > (1-\delta)K_0$,于是由连续性,将下一期资本固定在 $K_0'$ 的方案在 $K_0$ 的某个邻域内对所有 $K$ 都是可行的。 + +因此 {eq}`q_W1` 中的函数 $W_1$ 是凹的、连续可微的,被 $v$ 所支配,且在 $K_0$ 处等于 $v$。 + +{prf:ref}`bs_theorem` 给出 $v$ 在 $K_0$ 处的可微性,且 + +$$ +v_K(K_0,\theta,e) = u_c(c,e)\bigl[f'(K_0)\theta + (1-\delta)\bigr] . +$$ + +因为此处一阶条件以等式成立,$\beta \mathbb{E}[v_K(K_0',\cdot)] = u_c(c,e)$,代入即得 {eq}`q_envelope`。 + +**第2步(投资为零,以较小资本存量为条件)。** 设 $I(K_0,\theta,e) = 0$,这样 $K_0' = (1-\delta)K_0$,且在 $K_0$ 处不进行投资是最优的。 + +转而考虑本期不投资、此后按最优方式行事的方案: + +$$ +W_2(K) = u\bigl(f(K)\theta, e\bigr) + \beta \mathbb{E}\bigl[v\bigl((1-\delta)K, \theta', e'\bigr)\bigr] . +$$ + +在*任何*资本存量水平上不进行投资都是可行的,所以处处有 $W_2 \leq v$,且 $W_2(K_0) = v(K_0)$,$W_2$ 是凹的。 + +假设对每个 $(\theta',e')$,$v(\cdot,\theta',e')$ 在 $(1-\delta)K_0$ 处都可微。 + +那么 $W_2$ 在 $K_0$ 处可微;在期望内求导是合理的,因为函数 $v(\cdot,\theta',e')$ 是凹函数,因此在紧邻域上具有共同界的局部利普希茨性。 + +{prf:ref}`bs_theorem` 随即给出 $v$ 在 $K_0$ 处的可微性,且 + +$$ +v_K(K_0,\theta,e) = u_c(c,e) f'(K_0)\theta + \beta(1-\delta) \mathbb{E}\bigl[v_K((1-\delta)K_0, \theta', e')\bigr] , +$$ + +这正是 {eq}`q_envelope`。 + +**第3步(角点不可能起作用的区域)。** 因为 $f'(0) = \infty$,所以存在 $\eta > 0$,使得对每个 $K \leq \eta$ 以及每个 $(\theta,e)$,都有 $I(K,\theta,e) > 0$。 + +直观理解是:当资本趋于零时,资本的边际产量会变得无穷大,所以今天放弃一点消费会在明天换来极大的消费量。 + +要使这一点精确化,需要比较当 $K \downarrow 0$ 时 {eq}`q_foc` 两边发散的速率,因为例如在对数效用下,两边都会变得无界。 + +{cite:t}`Sargent1980q` 在其附录A(其命题 A2)中证明了该论断,所依据的是他为此目的而对 $u$ 和 $f$ 施加的一个明确限制。 + +这一结果是下面论证中唯一借用其附录内容之处,并且它与此处所讨论的可微性问题相互独立。 + +由第1步可知,对每个 $(\theta,e)$,$v(\cdot,\theta,e)$ 因此在 $(0,\eta]$ 上可微。 + +**第4步(自助提升)。** 令 + +$$ +D = \{K > 0 : \text{对每个 } (\theta,e),v(\cdot,\theta,e) \text{ 在 } K \text{ 处可微}\} . +$$ + +我们断言:若 $(0, A) \subseteq D$,则 $(0, A/(1-\delta)) \subseteq D$。 + +取 $K < A/(1-\delta)$ 及任意 $(\theta,e)$。 + +若 $I(K,\theta,e) > 0$,第1步可直接应用。 + +若 $I(K,\theta,e) = 0$,则 $(1-\delta)K < A$,所以对每个 $(\theta',e')$,$v(\cdot,\theta',e')$ 在 $(1-\delta)K$ 处可微,第2步可以应用。 + +由第3步,我们可以从 $A = \eta$ 开始归纳。 + +因为 $1/(1-\delta) > 1$,反复应用该断言得到对每个 $n$ 都有 $(0, \eta (1-\delta)^{-n}) \subseteq D$,因此 $D = (0,\infty)$。 + +**第5步(连续性)。** 在开区间上可微的凹函数在该区间上具有连续导数,所以 $v(\cdot,\theta,e)$ 是连续可微的。 + +最后,在投资为零之处,一阶条件以 $\lambda > 0$ 成立,所以 $\beta \mathbb{E}[v_K(K',\cdot)] < u_c$,{eq}`q_envelope` 给出 $v_K < u_c[f'(K)\theta + (1-\delta)]$。 +```` + +这个修正后的公式有一个自然的解读。 + +将 {eq}`q_envelope` 向前迭代可得 + +```{math} +:label: q_envelope_sum +v_K(K_t,\theta_t,e_t) = \mathbb{E}_t \sum_{j=0}^\infty \beta^j (1-\delta)^j \, +u_c(c_{t+j}, e_{t+j}) \, f'(K_{t+j})\theta_{t+j} . +``` + +今天安装的一单位边际资本会在其存续期间持续产生边际产量,而每一期的边际产量都按产出到来那一天的消费边际效用来估值。 + +当投资为正时,市场会以新产出的成本为整条流定价,{eq}`q_envelope_sum` 就化简为 $u_c[f'(K)\theta + (1-\delta)]$。 + +当投资为零时,情况并非如此,这一差异恰恰是使 $q$ 低于 1 的原因。 + +## 计算模型 + +现在我们用下式来求解 {eq}`q_bellman` 的模型: + +$$ +u(c,e) = e \ln c, \qquad f(K) = K^a . +$$ + +冲击 $\theta$ 和 $e$ 各自以等概率取两个值,并且彼此之间以及随时间都是独立的。 + +有一个数值细节非常重要。 + +不可逆性约束要求 $K' \geq (1-\delta)K$,所以我们希望只要 $K$ 是资本网格上的一点,$(1-\delta)K$ 也是网格上的一点。 + +按照 {cite:t}`Sargent1980q` 的做法,我们使用一个比率为 $(1-\delta)^{1/z}$($z$ 为整数)的*几何*网格,使得 $(1-\delta)K_i = K_{i-z}$ 精确成立。 + +```{code-cell} ipython3 +Model = namedtuple("Model", "β δ a z K θ e W nθ ne") + +def create_model(β=0.95, δ=0.05, a=0.25, z=10, n_K=500, K_hi=20.0, + θ_vals=(0.85, 1.15), e_vals=(0.6, 1.4)): + "几何资本网格,使得 (1-δ)K 本身也是网格点。" + ratio = (1 - δ)**(1/z) + K = K_hi * ratio**np.arange(n_K - 1, -1, -1) + θ, e = np.array(θ_vals), np.array(e_vals) + W = np.outer(np.ones(len(θ))/len(θ), np.ones(len(e))/len(e)) + return Model(β, δ, a, z, K, θ, e, W, len(θ), len(e)) + +f = lambda m, K: K**m.a +f_prime = lambda m, K: m.a * K**(m.a - 1) +``` + +规划者从网格中选择下一期的资本,需满足消费为正以及不可逆性约束。 + +```{code-cell} ipython3 +def solve_model(m, irreversible=True, tol=1e-10, maxit=5000, howard=50): + "带有霍华德策略改进步骤的价值函数迭代。" + nK = len(m.K) + C = f(m, m.K)[:, None] * m.θ[None, :] # 产出 (K, θ) + C = C[:, None, :] + (1 - m.δ)*m.K[:, None, None] - m.K[None, :, None] + ok = C > 1e-12 # (K, K', θ) + + if irreversible: # K' ≥ (1-δ)K + irr = np.zeros((nK, nK), bool) + for i in range(nK): + irr[i, max(i - m.z, 0):] = True + ok = ok & irr[:, :, None] + + U = np.where(ok[:, :, :, None], + m.e[None, None, None, :] * np.log(np.where(ok, C, 1.0))[:, :, :, None], + -1e12) + + v = np.zeros((nK, m.nθ, m.ne)) + for it in range(maxit): + EV = np.tensordot(v, m.W, axes=([1, 2], [0, 1])) # E v(K') 对 (θ', e') 求期望 + obj = U + m.β * EV[None, :, None, None] + idx = obj.argmax(axis=1) + v_new = np.take_along_axis(obj, idx[:, None, :, :], axis=1)[:, 0, :, :] + + for _ in range(howard): + EV = np.tensordot(v_new, m.W, axes=([1, 2], [0, 1])) + v_new = (np.take_along_axis(U, idx[:, None, :, :], axis=1)[:, 0, :, :] + + m.β * EV[idx]) + + if np.max(np.abs(v_new - v)) < tol: + v = v_new + break + v = v_new + + K_next = m.K[idx] + I = K_next - (1 - m.δ) * m.K[:, None, None] + C_pol = (f(m, m.K)[:, None, None] * m.θ[None, :, None] + + (1 - m.δ) * m.K[:, None, None] - K_next) + return v, idx, K_next, I, C_pol +``` + +为了计算 $q$,我们需要 $v_K$,而 {prf:ref}`q_differentiability` 告诉我们如何得到它:给定最优策略,方程 {eq}`q_envelope` 是关于 $v_K$ 的一个线性不动点问题,并且它是模为 $\beta(1-\delta)$ 的压缩映射。 + +```{code-cell} ipython3 +def marginal_value(m, idx, C_pol, tol=1e-13, maxit=50_000): + "求解包络方程 v_K = u_c f'(K)θ + β(1-δ) E v_K(K')。" + vK = np.zeros_like(C_pol) + direct = (m.e[None, None, :]/C_pol) * f_prime(m, m.K)[:, None, None] * m.θ[None, :, None] + for _ in range(maxit): + EvK = np.tensordot(vK, m.W, axes=([1, 2], [0, 1])) + new = direct + m.β * (1 - m.δ) * EvK[idx] + if np.max(np.abs(new - vK)) < tol: + return new + vK = new + return vK + +m = create_model() +v, idx, K_next, I, C_pol = solve_model(m) +vK = marginal_value(m, idx, C_pol) + +u_c = m.e[None, None, :] / C_pol +E_vK = np.tensordot(vK, m.W, axes=([1, 2], [0, 1])) +q = m.β * E_vK[idx] / u_c +corner = I <= 1e-12 + +print(f"投资为零的状态占比: {corner.mean():.3f}") +``` + +让我们通过将包络公式与所计算价值函数的有限差分导数进行比较,从数值上检验一下 {prf:ref}`q_differentiability`。 + +```{code-cell} ipython3 +vK_fd = np.gradient(v, m.K, axis=0) +naive = u_c * (f_prime(m, m.K)[:, None, None] * m.θ[None, :, None] + (1 - m.δ)) +mid = ((m.K > 2.2) & (m.K < 7.0))[:, None, None] & np.ones_like(corner) + +rel = lambda x: np.median((np.abs(x - vK_fd)/np.abs(vK_fd))[mid & sel]) + +sel = ~corner +print(f"投资为正: 包络公式误差 {rel(vK):.4f}, " + f"朴素公式误差 {rel(naive):.4f}") +sel = corner +print(f"投资为零: 包络公式误差 {rel(vK):.4f}, " + f"朴素公式误差 {rel(naive):.4f}") +``` + +在投资为正之处,两个公式都与数值导数一致。 + +在投资为零之处,包络公式 {eq}`q_envelope` 依然准确,而公式 $u_c[f'(K)\theta + (1-\delta)]$ 则会偏离百分之几十。 + +这正是这一修正的实际意义所在:在角点处,这两个表达式确实是不同的对象,而给出已安装资本价格的是包络公式。 + +我们还可以验证证明中的第3步,该步骤断言存在一个小资本存量区域,在该区域内角点永远不会起作用。 + +```{code-cell} ipython3 +m_wide = create_model(n_K=700) # 一个能达到更低资本存量的网格 +_, idx_w, _, I_w, _ = solve_model(m_wide) +frac_corner = (I_w <= 1e-12).reshape(len(m_wide.K), -1).mean(axis=1) +first = np.argmax(frac_corner > 0) +print(f"网格范围始于 K = {m_wide.K.min():.3f}") +print(f"当 K < {m_wide.K[first]:.3f} 时,对每个冲击投资都为正") +``` + +### 策略与已安装资本的价格 + +```{code-cell} ipython3 +--- +mystnb: + figure: + caption: Law of motion and Tobin's q + name: fig-ogu-policy-q +--- +import matplotlib as mpl # i18n +FONTPATH = "_fonts/SourceHanSerifSC-SemiBold.otf" # i18n +mpl.font_manager.fontManager.addfont(FONTPATH) # i18n +mpl.rcParams['font.family'] = ['Source Han Serif SC'] # i18n + +fig, axes = plt.subplots(1, 2, figsize=(12, 4.5)) +show = (m.K > 1.5) & (m.K < 9) + +for j in range(m.nθ): + for l in range(m.ne): + lab = rf'$\theta={m.θ[j]}, e={m.e[l]}$' + axes[0].plot(m.K[show], K_next[show, j, l], label=lab) + axes[1].plot(m.K[show], q[show, j, l], label=lab) + +axes[0].plot(m.K[show], m.K[show], 'k--', lw=1, label='45度线') +axes[0].plot(m.K[show], (1-m.δ)*m.K[show], 'k:', lw=1, label=r'$(1-\delta)K$') +axes[0].set_xlabel('$K$'); axes[0].set_ylabel("$K'$"); axes[0].set_title('运动法则') +axes[1].axhline(1.0, color='k', ls='--', lw=1) +axes[1].set_xlabel('$K$'); axes[1].set_ylabel('$q$'); axes[1].set_title("托宾的 $q$") +axes[0].legend(fontsize=8); axes[1].legend(fontsize=8) +plt.tight_layout() +plt.show() +``` + +每当不可逆性约束起作用时,运动法则就会沿着较低的那条虚线 $(1-\delta)K$ 运行。 + +恰恰是在这一区域,$q$ 会降到 1 以下。 + +### 不变分布 + +与 {doc}`lucas_prescott_investment` 中一样,我们要检验长期分布是否不依赖于经济体的起点。 + +```{code-cell} ipython3 +def simulate(m, idx, K0, T=50_000, seed=0, burn=500): + "模拟均衡马尔可夫过程。" + rng = np.random.default_rng(seed) + j_idx = rng.integers(0, m.nθ, T) + l_idx = rng.integers(0, m.ne, T) + k = np.abs(m.K - K0).argmin() + path = np.empty(T, int) + for t in range(T): + path[t] = k + k = idx[k, j_idx[t], l_idx[t]] + return path[burn:], j_idx[burn:], l_idx[burn:] + +p_lo, j_lo, l_lo = simulate(m, idx, K0=2.0, seed=7) +p_hi, j_hi, l_hi = simulate(m, idx, K0=15.0, seed=7) + +print(f"从 K0 = 2 起始的平均资本: {m.K[p_lo].mean():.4f}") +print(f"从 K0 = 15 起始的平均资本: {m.K[p_hi].mean():.4f}") +print(f"访问到的资本范围: [{m.K[p_lo].min():.2f}, {m.K[p_lo].max():.2f}]") +``` + +```{code-cell} ipython3 +--- +mystnb: + figure: + caption: Invariant distribution and investment against q + name: fig-ogu-invariant-q +--- +fig, axes = plt.subplots(1, 2, figsize=(12, 4.5)) + +axes[0].hist(m.K[p_lo], bins=60, density=True, alpha=0.5, label='起始于 $K_0 = 2$') +axes[0].hist(m.K[p_hi], bins=60, density=True, alpha=0.5, label='起始于 $K_0 = 15$') +axes[0].set_xlabel('$K$'); axes[0].set_ylabel('密度') +axes[0].set_title('资本的不变分布') +axes[0].legend() + +q_sim, I_sim = q[p_lo, j_lo, l_lo], I[p_lo, j_lo, l_lo] +axes[1].scatter(q_sim, I_sim, s=4, alpha=0.2) +axes[1].set_xlabel('$q$'); axes[1].set_ylabel('$I$') +axes[1].set_title("投资与托宾的 $q$") + +plt.tight_layout() +plt.show() +``` + +正如 {prf:ref}`bm_theorem` 所预示的那样,这两个直方图是重合的。 + +右侧的散点图再现了 {cite:t}`Sargent1980q` 的核心图景。 + +只有当 $q$ 等于 1 时投资才为正;当 $q$ 低于 1 时,投资恰好为零。 + +```{code-cell} ipython3 +print(f"I > 0 时的 q: [{q_sim[I_sim > 1e-12].min():.4f}, {q_sim[I_sim > 1e-12].max():.4f}]") +print(f"I = 0 时的 q: [{q_sim[I_sim <= 1e-12].min():.4f}, {q_sim[I_sim <= 1e-12].max():.4f}]") +``` + +与 1 之间的微小偏差反映了资本网格的离散性。 + +萨金特的观点此刻变得清晰可见。 + +在这些数据中,投资与 $q$ 之间*的确*存在正相关关系,计量经济学家当然可以去跑这样一个回归。 + +但这个关系并不是一条投资需求曲线。 + +它是一种**混杂关系**,将偏好、技术以及冲击的分布混合在一起,而且只要其中任何一项发生变化,它就会随之改变。 + +{ref}`ogu_ex3` 要求你演示这一点。 + +## 练习 + +```{exercise} +:label: ogu_ex1 + +{cite:t}`BrockMirman1972` 之所以著名,部分原因在于存在一个可以手算求解的特例。 + +设 $u(c) = \ln c$,$f(k, r) = r k^\alpha$,其中 $0 < \alpha < 1$,并设资本每期完全折旧,使得 $k_{t+1} = f(k_t, r_t) - c_t$。 + +1. 验证最优策略为 $k_{t+1} = \alpha\beta\, r_t k_t^\alpha$。 +1. 证明 $\ln k_t$ 服从 AR(1) 过程,并在 $\ln r_t \sim N(\mu, \sigma^2)$ 时推导其不变分布的均值和方差。 +1. 模拟该模型,并检验其不变分布以及均值遍历性质 {eq}`bm_ergodic`。 +``` + +```{solution-start} ogu_ex1 +:class: dropdown +``` + +猜测资源中有一个固定比例被储蓄,即 $k_{t+1} = s\, r_t k_t^\alpha$。 + +该问题的欧拉方程为 + +$$ +\frac{1}{c_t} = \beta \mathbb{E}_t \left[ \frac{1}{c_{t+1}} \alpha r_{t+1} k_{t+1}^{\alpha - 1} \right] . +$$ + +将 $c_t = (1-s) r_t k_t^\alpha$ 和 $k_{t+1} = s r_t k_t^\alpha$ 代入,右边变为 + +$$ +\beta \mathbb{E}_t \left[\frac{\alpha r_{t+1}k_{t+1}^{\alpha-1}}{(1-s) r_{t+1} k_{t+1}^{\alpha}}\right] += \frac{\beta \alpha}{(1-s) k_{t+1}} += \frac{\beta\alpha}{(1-s) s r_t k_t^{\alpha}} , +$$ + +而左边是 $1/[(1-s) r_t k_t^\alpha]$。 + +令两者相等,得到 $s = \alpha\beta$。 + +对策略取对数, + +$$ +\ln k_{t+1} = \ln(\alpha\beta) + \alpha \ln k_t + \ln r_t , +$$ + +这是一个系数为 $\alpha$ 的 AR(1) 过程。 + +当 $\ln r_t \sim N(\mu, \sigma^2)$ 时,$\ln k$ 的不变分布是正态分布,其 + +$$ +\text{均值} = \frac{\ln(\alpha\beta) + \mu}{1 - \alpha}, +\qquad +\text{方差} = \frac{\sigma^2}{1 - \alpha^2} . +$$ + +```{code-cell} ipython3 +α, β_d, μ, σ = 0.4, 0.95, 0.0, 0.1 +T = 200_000 +rng = np.random.default_rng(0) +ln_r = μ + σ * rng.normal(size=T) + +k = np.empty(T + 1) +k[0] = 1.0 +for t in range(T): + k[t+1] = α * β_d * np.exp(ln_r[t]) * k[t]**α + +ln_k = np.log(k[1000:]) +print(f"ln k 的均值: 模拟值 {ln_k.mean():.4f}, " + f"理论值 {(np.log(α*β_d) + μ)/(1-α):.4f}") +print(f"ln k 的方差: 模拟值 {ln_k.var():.4f}, " + f"理论值 {σ**2/(1-α**2):.4f}") +``` + +时间平均值与不变分布的总体矩相匹配,这正是均值遍历性质 {eq}`bm_ergodic` 在起作用。 + +```{solution-end} +``` + +```{exercise} +:label: ogu_ex2 + +本练习考察上文讨论的两个 $v_K$ 候选公式之间的差异。 + +对于基准模型,在每个状态上计算: + +* 包络公式 {eq}`q_envelope` +* 公式 $u_c(c,e)[f'(K)\theta + (1-\delta)]$ +* 价值函数的有限差分导数 + +然后: + +1. 确认在投资为正之处,三者是一致的。 +1. 确认在投资为零之处,第二个公式与另外两者不一致,并报告差异大小。 +1. 利用 {eq}`q_foc`,解释为什么第二个公式是 $v_K$ 的一个上界。 +1. 如果在所有地方都使用第二个公式,计算出的 $q$ 会出什么问题? +``` + +```{solution-start} ogu_ex2 +:class: dropdown +``` + +第二个公式的得来方式是:*仿佛* $\lambda = 0$ 一样,将一阶条件 {eq}`q_foc` 代入包络条件。 + +由于 $\lambda \geq 0$,略去它只会使该表达式增大,因此 + +$$ +v_K = u_c f'(K)\theta + (1-\delta)\bigl[u_c - \lambda\bigr] +\leq u_c\bigl[f'(K)\theta + (1-\delta)\bigr] , +$$ + +当且仅当 $\lambda = 0$(即投资为正)时取等号。 + +```{code-cell} ipython3 +gap = np.abs(naive - vK_fd)/np.abs(vK_fd) +env = np.abs(vK - vK_fd)/np.abs(vK_fd) + +for name, sel in (("投资为正", ~corner), ("投资为零", corner)): + s = mid & sel + print(f"{name:20}: 包络公式 {np.median(env[s]):.4f} " + f"朴素公式 {np.median(gap[s]):.4f} 最大朴素误差 {gap[s].max():.4f}") + +q_naive = m.β * np.tensordot(naive, m.W, axes=([1, 2], [0, 1]))[idx] / u_c +print(f"\n使用朴素公式,最大 q = {q_naive.max():.3f} " + f"(理论要求 q ≤ 1)") +print(f"q > 1 的状态占比: {(q_naive > 1 + 1e-8).mean():.3f}") +``` + +在所有地方都使用第二个公式会产生超过 1 的 $q$ 值,而理论排除了这种可能。 + +原因是经济学上的,而非数值上的:在角点处,市场并不会按照新资本的成本为已安装资本定价,这恰恰是因为家庭想要出售资本而又无法这样做。 + +```{solution-end} +``` + +```{exercise} +:label: ogu_ex3 + +证明投资对 $q$ 的回归并非结构性关系。 + +针对在以下方面有所不同的若干经济体求解并模拟该模型: + +* 偏好风险的大小($e$ 的离散程度) +* 技术风险的大小($\theta$ 的离散程度) +* 折旧率 $\delta$ + +对于每个经济体,报告 $I$ 对 $q$ 回归的斜率和 $R^2$,以及投资为零的频率。 + +评论这对于一位估计将投资与 $q$ 联系起来的“投资需求曲线”的计量经济学家意味着什么。 +``` + +```{solution-start} ogu_ex3 +:class: dropdown +``` + +以下是一种解法。 + +```{code-cell} ipython3 +def q_regression(**kwargs): + "求解一个经济体,模拟它,并对 I 关于 q 做回归。" + mm = create_model(**kwargs) + vv, ii, _, II, CC = solve_model(mm) + vvK = marginal_value(mm, ii, CC) + uu_c = mm.e[None, None, :]/CC + qq = mm.β * np.tensordot(vvK, mm.W, axes=([1, 2], [0, 1]))[ii] / uu_c + p, j, l = simulate(mm, ii, K0=3.5) + q_s, I_s = qq[p, j, l], II[p, j, l] + slope = np.polyfit(q_s, I_s, 1)[0] + corr = np.corrcoef(I_s, q_s)[0, 1] + return slope, corr**2, (I_s <= 1e-12).mean() + +cases = [("基准经济", {}), + ("偏好风险较小", dict(e_vals=(0.8, 1.2))), + ("偏好风险较大", dict(e_vals=(0.4, 1.6))), + ("技术风险较小", dict(θ_vals=(0.95, 1.05))), + ("技术风险较大", dict(θ_vals=(0.7, 1.3))), + ("更快的折旧率", dict(δ=0.10))] + +print(f"{'经济体':24}{'斜率':>9}{'R^2':>8}{'零投资比例':>9}") +for name, kw in cases: + slope, r2, zero = q_regression(**kw) + print(f"{name:24}{slope:9.3f}{r2:8.3f}{zero:9.3f}") +``` + +在那些偏好和技术参数相同、但冲击分布或折旧率不同的经济体之间,回归的斜率和拟合优度都发生了很大变化。 + +回归中没有任何东西是不变的,因此它无法用来预测在改变这些特征中的任何一项的政策下,投资会如何变化。 + +这正是 {cite:t}`Sargent1980q` 所传达的信息,也是卢卡斯批判的一个具体实例:正是那种使 $q$ 变得有意义的摩擦——偶尔起作用的不可逆性约束——同时也使得 $I$ 与 $q$ 之间的关系成为一种简化形式的产物,而非一条决策规则。 + +```{solution-end} +``` From 55e77a2bde69bf43c68fe1d28d68aae3cf307e0c Mon Sep 17 00:00:00 2001 From: Matt McKay Date: Thu, 22 Oct 2026 09:57:55 +1100 Subject: [PATCH 10/12] optimal_growth_uncertainty: font path and placement, captions, one term MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Hand repairs to the seed in the previous commit: - The engine writes FONTPATH as _fonts/...; this edition keeps the font in lectures/fonts/ (110 of the other 111 lectures), so the build would fail with FileNotFoundError. Path corrected, and the i18n block moved from the first plotting cell into the imports cell, where the rest of the edition keeps it. - Both figure captions (cell metadata) came through in English, the QuantEcon/action-translation#255 class: localised to "运动规律与托宾 q" and "不变分布以及投资与 q 的关系". - "law of motion" was rendered 运动法则 (axis title and one sentence); the edition uses 运动规律 throughout (107 occurrences), so aligned. Verified against the English source: identical directive sequence (43), anchors, the 51 cross-references and citations, heading levels, and code cells (ASTs with string literals masked); every display-math block identical except \text{with probability one} -> \text{以概率1成立}, the edition's practice. All 13 code cells execute from lectures/ with numerical output identical to the English, and both figures render in Source Han Serif SC with no missing-glyph warnings. Co-Authored-By: Claude Opus 5.5 --- lectures/optimal_growth_uncertainty.md | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/lectures/optimal_growth_uncertainty.md b/lectures/optimal_growth_uncertainty.md index eed38ae6..f46c1209 100644 --- a/lectures/optimal_growth_uncertainty.md +++ b/lectures/optimal_growth_uncertainty.md @@ -76,6 +76,10 @@ translation: import numpy as np import matplotlib.pyplot as plt from collections import namedtuple +import matplotlib as mpl # i18n +FONTPATH = "fonts/SourceHanSerifSC-SemiBold.otf" # i18n +mpl.font_manager.fontManager.addfont(FONTPATH) # i18n +mpl.rcParams['font.family'] = ['Source Han Serif SC'] # i18n ``` ## 布洛克-米尔曼规划问题 @@ -576,14 +580,9 @@ print(f"当 K < {m_wide.K[first]:.3f} 时,对每个冲击投资都为正") --- mystnb: figure: - caption: Law of motion and Tobin's q + caption: 运动规律与托宾 q name: fig-ogu-policy-q --- -import matplotlib as mpl # i18n -FONTPATH = "_fonts/SourceHanSerifSC-SemiBold.otf" # i18n -mpl.font_manager.fontManager.addfont(FONTPATH) # i18n -mpl.rcParams['font.family'] = ['Source Han Serif SC'] # i18n - fig, axes = plt.subplots(1, 2, figsize=(12, 4.5)) show = (m.K > 1.5) & (m.K < 9) @@ -595,7 +594,7 @@ for j in range(m.nθ): axes[0].plot(m.K[show], m.K[show], 'k--', lw=1, label='45度线') axes[0].plot(m.K[show], (1-m.δ)*m.K[show], 'k:', lw=1, label=r'$(1-\delta)K$') -axes[0].set_xlabel('$K$'); axes[0].set_ylabel("$K'$"); axes[0].set_title('运动法则') +axes[0].set_xlabel('$K$'); axes[0].set_ylabel("$K'$"); axes[0].set_title('运动规律') axes[1].axhline(1.0, color='k', ls='--', lw=1) axes[1].set_xlabel('$K$'); axes[1].set_ylabel('$q$'); axes[1].set_title("托宾的 $q$") axes[0].legend(fontsize=8); axes[1].legend(fontsize=8) @@ -603,7 +602,7 @@ plt.tight_layout() plt.show() ``` -每当不可逆性约束起作用时,运动法则就会沿着较低的那条虚线 $(1-\delta)K$ 运行。 +每当不可逆性约束起作用时,运动规律就会沿着较低的那条虚线 $(1-\delta)K$ 运行。 恰恰是在这一区域,$q$ 会降到 1 以下。 @@ -636,7 +635,7 @@ print(f"访问到的资本范围: [{m.K[p_lo].min():.2f}, {m.K[p_lo].max():.2f}] --- mystnb: figure: - caption: Invariant distribution and investment against q + caption: 不变分布以及投资与 q 的关系 name: fig-ogu-invariant-q --- fig, axes = plt.subplots(1, 2, figsize=(12, 4.5)) From f9787258a70fc52c9cd9b000f3acc397a6cba6f9 Mon Sep 17 00:00:00 2001 From: Matt McKay Date: Thu, 22 Oct 2026 09:57:55 +1100 Subject: [PATCH 11/12] _toc.yml: restore the Chinese part captions, keep the three new entries This sync wrote the source _toc.yml whole, which turned all 19 part captions back to English (the QuantEcon/action-translation#254 class, fixed in the engine on 2026-10-09, after this PR was opened). Rebuilt from main's _toc.yml plus only this PR's three lectures, at their source positions: lucas_prescott_investment and optimal_growth_uncertainty after rational_expectations, and lq_mean_field_games after two_computation. Every entry resolves to a file on this branch. Co-Authored-By: Claude Opus 5.5 --- lectures/_toc.yml | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/lectures/_toc.yml b/lectures/_toc.yml index 953297f6..4ed0b4a4 100644 --- a/lectures/_toc.yml +++ b/lectures/_toc.yml @@ -1,7 +1,7 @@ format: jb-book root: intro parts: -- caption: Tools and Techniques +- caption: 基础工具 numbered: true chapters: - file: sir_model @@ -11,7 +11,7 @@ parts: - file: svd_intro - file: var_dmd - file: newton_method -- caption: Elementary Statistics +- caption: 基础统计学 numbered: true chapters: - file: prob_matrix @@ -24,13 +24,13 @@ parts: - file: back_prop - file: rand_resp - file: util_rand_resp -- caption: Bayes Law +- caption: 贝叶斯定律 numbered: true chapters: - file: bayes_nonconj - file: ar1_bayes - file: ar1_turningpts -- caption: Statistics and Information +- caption: 统计与信息论 numbered: true chapters: - file: divergence_measures @@ -50,12 +50,12 @@ parts: - file: survival_recursive_preferences - file: pricing_information - file: market_diffusion -- caption: Linear Programming +- caption: 线性规划 numbered: true chapters: - file: opt_transport - file: von_neumann_model -- caption: Introduction to Dynamics +- caption: 动态系统导论 numbered: true chapters: - file: finite_markov @@ -71,7 +71,7 @@ parts: - file: var_subsets - file: organization_capital - file: measurement_models -- caption: Search +- caption: 搜索 numbered: true chapters: - file: mccall_model @@ -83,13 +83,13 @@ parts: - file: career - file: jv - file: odu -- caption: Reinforcement Learning +- caption: 强化学习 numbered: true chapters: - file: inventory_q - file: rs_inventory_q - file: mccall_q -- caption: Introduction to Optimal Savings +- caption: 最优储蓄导论 numbered: true chapters: - file: os @@ -98,7 +98,7 @@ parts: - file: os_time_iter - file: os_egm - file: os_egm_jax -- caption: Household Problems +- caption: 收入波动问题 numbered: true chapters: - file: ifp_discrete @@ -106,7 +106,7 @@ parts: - file: ifp_egm - file: ifp_egm_transient_shocks - file: ifp_advanced -- caption: LQ Control +- caption: LQ控制 numbered: true chapters: - file: lqcontrol @@ -122,7 +122,7 @@ parts: - file: lq_robust_smoothing - file: lq_robust_bewley - file: lq_inventories -- caption: Bounded Rationality in Macroeconomics +- caption: 宏观经济学中的有限理性 numbered: true chapters: - file: bounded_rationality @@ -132,7 +132,7 @@ parts: - file: genetic_classifier - file: marimon_mcgrattan_sargent - file: prospects_bounded_rationality -- caption: Phillips Curve Tradeoffs +- caption: 菲利普斯曲线权衡 numbered: true chapters: - file: phillips_two_stories @@ -146,14 +146,14 @@ parts: - file: phillips_priors - file: phillips_lost_conquest - file: phillips_drifts_volatilities -- caption: Optimal Growth +- caption: 最优增长 numbered: true chapters: - file: cass_koopmans_1 - file: cass_koopmans_2 - file: cass_fiscal - file: cass_fiscal_2 -- caption: Multiple Agent Models +- caption: 多主体模型 numbered: true chapters: - file: lake_model @@ -170,7 +170,7 @@ parts: - file: ak_aiyagari - file: two_computation - file: lq_mean_field_games -- caption: Asset Pricing and Finance +- caption: 资产定价与金融 numbered: true chapters: - file: markov_asset @@ -185,7 +185,7 @@ parts: - file: ross_recovery - file: long_run_risk_operator - file: misspecified_recovery -- caption: Data and Empirics +- caption: 数据与实证 numbered: true chapters: - file: pandas_panel @@ -194,12 +194,12 @@ parts: - file: unemployment_linear - file: unemployment_shocks - file: sargent_surico -- caption: Auctions +- caption: 拍卖 numbered: true chapters: - file: two_auctions - file: house_auction -- caption: Other +- caption: 其他 numbered: true chapters: - file: troubleshooting From 6c3f689a7d934c723a9981dcbc620fe47a51d568 Mon Sep 17 00:00:00 2001 From: Matt McKay Date: Thu, 22 Oct 2026 09:59:19 +1100 Subject: [PATCH 12/12] Localise the nine English figure captions in the two new lectures MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit lucas_prescott_investment (5) and lq_mean_field_games (4) arrived with their mystnb figure captions in English, the QuantEcon/action-translation#255 class. Each caption now uses the term its lecture's own text uses (需求序列独立 for IID demand, 遍历集, 过渡路径, 总量状态, 商店). Plot labels in both lectures are English and need no font block; that is the edition-wide QuantEcon/action-translation#178 class and is left as is. Co-Authored-By: Claude Opus 5.5 --- lectures/lq_mean_field_games.md | 8 ++++---- lectures/lucas_prescott_investment.md | 10 +++++----- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/lectures/lq_mean_field_games.md b/lectures/lq_mean_field_games.md index f3c3a070..7bc19e26 100644 --- a/lectures/lq_mean_field_games.md +++ b/lectures/lq_mean_field_games.md @@ -698,7 +698,7 @@ print(f"ratio = {half_life(λ_c)/half_life(λ_micro):.2f}") --- mystnb: figure: - caption: Half-lives of industry and firm capital + caption: 行业资本与单个企业资本的半衰期 name: fig-mfg-half-lives --- η_grid = np.linspace(1.2, 12, 200) @@ -769,7 +769,7 @@ print(f"nonexistence threshold, -θ** = {mθ_2star:.4f}") --- mystnb: figure: - caption: Transition paths of capital and investment + caption: 资本与投资的过渡路径 name: fig-mfg-transition --- t_c = np.linspace(0, 25, 300) @@ -861,7 +861,7 @@ print("planner eigenvalues: ", np.linalg.eigvals(JG_planner).real.round(4)) --- mystnb: figure: - caption: Path of the aggregate state + caption: 总量状态的路径 name: fig-mfg-planner-path --- X0 = np.array([1.0, 0.5]) @@ -1046,7 +1046,7 @@ print("from the closed-form formula: ", predicted.round(6)) --- mystnb: figure: - caption: Industry and store price paths + caption: 行业价格与商店价格的路径 name: fig-mfg-kimball-paths --- t_K = np.linspace(0, 8, 200) diff --git a/lectures/lucas_prescott_investment.md b/lectures/lucas_prescott_investment.md index 78204e0f..7c7c64cc 100644 --- a/lectures/lucas_prescott_investment.md +++ b/lectures/lucas_prescott_investment.md @@ -453,7 +453,7 @@ print(f"grid: {len(m.k)} capital points, {len(m.u)} demand states") --- mystnb: figure: - caption: Investment policy and law of motion + caption: 投资策略与运动规律 name: fig-lp-policy --- fig, axes = plt.subplots(1, 2, figsize=(12, 4.5)) @@ -615,7 +615,7 @@ print(f"user cost δ + r / h'(δ) = {user_cost:.5f}") --- mystnb: figure: - caption: Capital paths under IID demand + caption: 需求序列独立时的资本路径 name: fig-lp-iid-paths --- def capital_path(m, idx, k0, T=60, u_index=None): @@ -729,7 +729,7 @@ print(f"ergodic set for capital: ({k_lo_star:.2f}, {k_hi_star:.2f})") --- mystnb: figure: - caption: Capital paths entering the ergodic set + caption: 进入遍历集的资本路径 name: fig-lp-ergodic-paths --- def simulate(m, idx, k0, T=20_000, seed=0): @@ -766,7 +766,7 @@ plt.show() --- mystnb: figure: - caption: Invariant distributions of capital and price + caption: 资本与价格的不变分布 name: fig-lp-invariant --- burn = 2000 @@ -798,7 +798,7 @@ print(f"range visited: ({k_low[burn:].min():.2f}, {k_low[burn:].max():.2f})") --- mystnb: figure: - caption: Time average of capital + caption: 资本的时间平均 name: fig-lp-time-average --- running_mean = np.cumsum(k_low) / np.arange(1, len(k_low) + 1)