diff --git a/.translate/state/affine_risk_prices.md.yml b/.translate/state/affine_risk_prices.md.yml index f6fe4bcc..1a186645 100644 --- a/.translate/state/affine_risk_prices.md.yml +++ b/.translate/state/affine_risk_prices.md.yml @@ -1,6 +1,6 @@ -source-sha: d1a3cccb8617e053108374fbf821325ffc8e7904 -synced-at: "2026-07-22" -model: claude-opus-4-8 -mode: NEW +source-sha: 4f8bcd60210980084beaae256dde3a302d23f06e +synced-at: "2026-09-20" +model: claude-sonnet-5 +mode: UPDATE section-count: 8 -tool-version: 0.20.0 +tool-version: 0.29.0 diff --git a/.translate/state/long_run_risk_operator.md.yml b/.translate/state/long_run_risk_operator.md.yml index d98cfdb9..3b259b6a 100644 --- a/.translate/state/long_run_risk_operator.md.yml +++ b/.translate/state/long_run_risk_operator.md.yml @@ -1,6 +1,6 @@ -source-sha: b8ed85c7e8b8c17f5f59c74b3cb829470363ca8b -synced-at: "2026-07-22" -model: claude-opus-4-8 -mode: NEW +source-sha: 4f8bcd60210980084beaae256dde3a302d23f06e +synced-at: "2026-09-20" +model: claude-sonnet-5 +mode: UPDATE section-count: 11 -tool-version: 0.20.0 +tool-version: 0.29.0 diff --git a/.translate/state/ross_recovery.md.yml b/.translate/state/ross_recovery.md.yml index b04e56d4..ce539b05 100644 --- a/.translate/state/ross_recovery.md.yml +++ b/.translate/state/ross_recovery.md.yml @@ -1,6 +1,6 @@ -source-sha: 78030a3a27f6527046675bcd8a8d27995ca25af6 -synced-at: "2026-07-22" -model: claude-opus-4-8 -mode: NEW +source-sha: 4f8bcd60210980084beaae256dde3a302d23f06e +synced-at: "2026-09-20" +model: claude-sonnet-5 +mode: UPDATE section-count: 12 -tool-version: 0.20.0 +tool-version: 0.29.0 diff --git a/lectures/_static/quant-econ.bib b/lectures/_static/quant-econ.bib index 1c082c16..9f54e030 100644 --- a/lectures/_static/quant-econ.bib +++ b/lectures/_static/quant-econ.bib @@ -5356,3 +5356,45 @@ @article{ShakedSutton1982 pages = {3--13}, year = {1982} } + +% --- Entries below added automatically by action-translation (#117) --- + +@article{CIR1985, + author = {Cox, John C. and Ingersoll, Jonathan E. and Ross, Stephen A.}, + title = {{A theory of the term structure of interest rates}}, + journal = {Econometrica}, + year = 1985, + volume = {53}, + number = {2}, + pages = {385--407} +} + +@article{Black1995, + author = {Black, Fischer}, + title = {{Interest rates as options}}, + journal = {Journal of Finance}, + year = 1995, + volume = {50}, + number = {5}, + pages = {1371--1376} +} + +@article{FamaBliss1987, + author = {Fama, Eugene F. and Bliss, Robert R.}, + title = {{The information in long-maturity forward rates}}, + journal = {American Economic Review}, + year = 1987, + volume = {77}, + number = {4}, + pages = {680--692} +} + +@article{CampbellShiller1991, + author = {Campbell, John Y. and Shiller, Robert J.}, + title = {{Yield spreads and interest rate movements: A bird's eye view}}, + journal = {Review of Economic Studies}, + year = 1991, + volume = {58}, + number = {3}, + pages = {495--514} +} diff --git a/lectures/affine_risk_prices.md b/lectures/affine_risk_prices.md index 0e5e213d..436cd280 100644 --- a/lectures/affine_risk_prices.md +++ b/lectures/affine_risk_prices.md @@ -32,6 +32,8 @@ translation: Distorted beliefs: 扭曲信念 Distorted beliefs::The subjective measure: 主观测度 Distorted beliefs::Pricing under distorted beliefs: 扭曲信念下的定价 + Distorted beliefs::What bond prices can and cannot reveal: 债券价格能揭示什么,不能揭示什么 + Distorted beliefs::A numerical illustration: 一个数值说明 Concluding remarks: 结束语 --- @@ -60,7 +62,7 @@ $$ m_{t+1} = \exp\left(-r_t - \frac{1}{2}\sigma_c^2 \gamma^2 - \gamma\sigma_c\varepsilon_{t+1}\right) $$ -其中 $r_t = \rho + \gamma\mu - \frac{1}{2}\sigma_c^2\gamma^2$。 +其中 $\rho$ 为时间偏好率,$\gamma$ 为相对风险厌恶系数,对数消费增长为 $g + \sigma_c \varepsilon_{t+1}$,且 $r_t = \rho + \gamma g - \frac{1}{2}\sigma_c^2\gamma^2$。 该模型断言,对总消费增长的随机部分 $\sigma_c\varepsilon_{t+1}$ 的暴露是*唯一*被定价的风险,是各资产预期回报之间差异的唯一来源。 @@ -86,6 +88,10 @@ $$ 3. *风险中性概率*:定价方程的一种测度变换表示。 4. *扭曲信念*:当行为主体持有系统性偏差的预测时,重新解释风险价格估计({cite:t}`piazzesi2015trend`);另见 {doc}`advanced:risk_aversion_or_mistaken_beliefs`。 +本讲座使用的对数正态定价工具也出现在 {doc}`markov_asset` 和 {doc}`hansen_singleton_1983` 中。 + +测度变换的论证依赖于 {doc}`likelihood_ratio_process` 和 {doc}`divergence_measures` 中研究的那类似然比。 + 我们从以下导入开始: ```{code-cell} ipython3 @@ -93,10 +99,13 @@ import numpy as np import matplotlib.pyplot as plt from collections import namedtuple from numpy.linalg import eigvals +from scipy.linalg import solve_discrete_lyapunov +from scipy.stats import norm ``` ## 模型 + ### 状态动态与短期利率 该模型有两个部分。 @@ -270,8 +279,17 @@ $$ 第二个方程表明,SDF 的条件标准差近似等于风险价格向量的大小,这是对整体**市场风险价格**的一种度量。 +这个近似来自一个精确公式:由于 $m_{t+1}$ 是条件对数正态的, + +$$ +\frac{\text{std}_t(m_{t+1})}{\mathbb{E}_t(m_{t+1})} = \sqrt{\exp(\lambda_t^\top\lambda_t) - 1} +$$ + +根据汉森-贾根纳森界 {cite}`Hansen_Jagannathan_1991`,该比率约束了每一种超额收益的条件夏普比率,因此 $\|\lambda_t\|$ 告诉我们夏普比率可以有多大。 + ## 对风险资产定价 + ### 对数正态回报 考虑一种风险资产 $j$,其总回报具有对数正态的条件分布: @@ -354,6 +372,70 @@ $\lambda_t$ 的每个分量对 $\varepsilon_{t+1}$ 的相应分量进行定价 对具有较大风险价格的风险分量有大量载荷的资产会获得相应较高的预期回报。 +```{exercise} +:label: arp_ex3 + +假设一个代表性行为人具有风险厌恶系数为 $\gamma$、贴现因子为 $\beta = e^{-\rho}$ 的 CRRA 效用,并且对数消费增长为 $\log(c_{t+1}/c_t) = g + \sigma_c^\top \varepsilon_{t+1}$,其中 $\sigma_c$ 是一个 $m \times 1$ 向量。 + +1. 证明 $m_{t+1} = \beta (c_{t+1}/c_t)^{-\gamma}$ 具有 {eq}`eq_sdf` 的形式,且具有常数风险价格向量 $\lambda_t = \gamma \sigma_c$,并求出 $r_t$。 +2. 将资产 $j$ 上对数回报的条件夏普比率定义为 $(\nu_t(j) - r_t)/\|\alpha_t(j)\|$。利用 {eq}`eq_excess` 和柯西-施瓦茨不等式证明,该夏普比率的最大值为 $\|\lambda_t\|$,并且此最大值在暴露向量与 $\lambda_t$ 成比例的回报处取得。 +3. 假设 $\|\sigma_c\| = 0.02$(按年计),且某资产的年化夏普比率为 $0.4$。利用精确的界 $\sqrt{\exp(\lambda^\top\lambda) - 1} \geq 0.4$,计算与 CRRA 模型相符的最小 $\gamma$,并将其与一阶近似答案 $\gamma \geq 0.4 / 0.02$ 进行比较。 +``` + +```{solution-start} arp_ex3 +:class: dropdown +``` + +*第 1 部分。* 取对数, + +$$ +\log m_{t+1} = -\rho - \gamma g - \gamma \sigma_c^\top \varepsilon_{t+1} +$$ + +将冲击项与 {eq}`eq_sdf` 相匹配,得到 $\lambda_t = \gamma \sigma_c$。 + +将常数项相匹配,得到 $-r_t - \frac{1}{2}\gamma^2 \sigma_c^\top\sigma_c = -\rho - \gamma g$,因此 + +$$ +r_t = \rho + \gamma g - \frac{1}{2}\gamma^2 \sigma_c^\top \sigma_c +$$ + +这就是概述中的 CRRA 模型,现在被写成 $\lambda_z = 0$ 时仿射模型的一个特例。 + +*第 2 部分。* 由 {eq}`eq_excess`,夏普比率为 $\alpha_t(j)^\top\lambda_t / \|\alpha_t(j)\|$。 + +柯西-施瓦茨不等式给出 $\alpha_t(j)^\top\lambda_t \leq \|\alpha_t(j)\| \, \|\lambda_t\|$,当且仅当 $\alpha_t(j)$ 是 $\lambda_t$ 的正倍数时取等号。 + +下面的检验在许多随机暴露向量上求最大夏普比率。 + +```{code-cell} ipython3 +rng = np.random.default_rng(1234) +λ_example = np.array([0.3, 0.1]) +α_draws = rng.standard_normal((20_000, 2)) +sharpe = α_draws @ λ_example / np.linalg.norm(α_draws, axis=1) +print(f"largest Sharpe ratio over draws: {sharpe.max():.5f}") +print(f"||λ||: {np.linalg.norm(λ_example):.5f}") +``` + +*第 3 部分。* + +```{code-cell} ipython3 +σ_c_norm, target_sr = 0.02, 0.4 +λ_norm_required = np.sqrt(np.log(1 + target_sr**2)) +print(f"required ||λ|| (exact bound): {λ_norm_required:.4f}") +print(f"implied γ (exact bound): {λ_norm_required / σ_c_norm:.1f}") +print(f"implied γ (first order): {target_sr / σ_c_norm:.1f}") +``` + +无论哪种方式,CRRA 模型都需要一个接近 $20$ 的相对风险厌恶系数。 + +这就是用本讲座的语言表述的股权溢价之谜。 + +仿射模型通过将 $\lambda_t$ 视为待由资产回报估计的自由参数,而不是将其与消费增长绑定,从而回避了这一谜题。 + +```{solution-end} +``` + ## 收益率的仿射期限结构 最重要的应用之一是 {cite:t}`AngPiazzesi2003` 研究的**仿射期限结构模型**。 @@ -409,7 +491,7 @@ p_t(n) = \exp \bigl(\bar A_n + \bar B_n^\top z_t\bigr) 初始条件为 $\bar A_1 = -\delta_0$ 和 $\bar B_1 = -\delta_1$。 ```{exercise} -:label: arp_ex3 +:label: arp_ex4 通过将猜想的债券价格 {eq}`eq_bondprice` 代入定价递归 {eq}`eq_bondrecur` 并匹配系数,推导黎卡提差分方程 {eq}`eq_riccati_a` 和 {eq}`eq_riccati_b`。 @@ -420,7 +502,7 @@ p_t(n) = \exp \bigl(\bar A_n + \bar B_n^\top z_t\bigr) $\varepsilon_{t+1}$ 表示,然后使用对数正态矩生成函数求条件期望。 ``` -```{solution-start} arp_ex3 +```{solution-start} arp_ex4 :class: dropdown ``` @@ -569,7 +651,7 @@ 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', 'DejaVu Sans'] # i18n -n_max_1f = 60 +n_max_1f = 200 maturities_1f = np.arange(1, n_max_1f + 1) z_low = np.array([-5.0]) @@ -612,7 +694,7 @@ ax.set_xlim(1, n_max_1f) ax2 = ax.twiny() ax2.set_xlim(ax.get_xlim()) -year_ticks = [4, 20, 40, 60] +year_ticks = [4, 40, 80, 120, 160, 200] ax2.set_xticks(year_ticks) ax2.set_xticklabels([f"{t/4:.0f}y" for t in year_ticks]) ax2.set_xlabel("期限(年)") @@ -624,12 +706,17 @@ plt.show() 当短期利率较低时,收益率曲线是 向上倾斜的,而当短期利率较高时,它是向下倾斜的。 -所有三条曲线在长期限处收敛到同一个长期收益率 $y_\infty$, -并且长期收益率位于平均短期利率 -$\delta_0$ 之上。 +所有三条曲线都趋近于同一个长期收益率 $y_\infty$, +该长期收益率位于平均短期利率 $\delta_0$ 之上。 + +这一趋近过程是缓慢的。 + +由于 $\bar B_n$ 收敛到一个有限极限,状态通过 $\bar B_n^\top z_t / n$ 进入 $y_t(n)$,因此曲线之间的差距仅以 $1/n$ 的速率收窄。 + +这就是为什么我们将期限绘制到 50 年:在 15 年时,三条曲线仍分布在约 3.5% 到 5.0% 之间,而在 50 年时,它们分布在约 4.1% 到 4.6% 之间。 ````{exercise} -:label: arp_ex4 +:label: arp_ex5 证明长期收益率满足 @@ -648,11 +735,12 @@ y_\infty 然后解释为什么在这种参数化下 $y_\infty > \delta_0$。 *提示:* 使用 {eq}`eq_yield` 和黎卡提方程 -{eq}`eq_riccati_a`--{eq}`eq_riccati_b`。对于不等式,分别考虑 -每个被减去的项。 +{eq}`eq_riccati_a`--{eq}`eq_riccati_b`。 + +对于不等式,分别考虑每个被减去的项。 ```` -```{solution-start} arp_ex4 +```{solution-start} arp_ex5 :class: dropdown ``` @@ -675,7 +763,9 @@ y_\infty 这是来自詹森不等式的**凸性效应**,它将 $y_\infty$ 推低到 $\delta_0$ 以下。 -线性项 $\bar B_\infty^\top(\mu - C\lambda_0)$ 是负的,因为 $\bar B_\infty < 0$(由于 $\delta_1 > 0$)而 $\mu - C\lambda_0 > 0$(由于 $\lambda_0 < 0$)。减去这个负量将 $y_\infty$ 提升到 $\delta_0$ 之上。 +线性项 $\bar B_\infty^\top(\mu - C\lambda_0)$ 是负的,因为 $\bar B_\infty < 0$(由于 $\delta_1 > 0$)而 $\mu - C\lambda_0 > 0$(由于 $\lambda_0 < 0$)。 + +减去这个负量将 $y_\infty$ 提升到 $\delta_0$ 之上。 这是**风险溢价效应**:正的期限溢价将平均收益率曲线向上倾斜。 @@ -715,6 +805,21 @@ plt.tight_layout() plt.show() ``` +由于 $r_t$ 是高斯状态的仿射函数,高斯仿射模型会给负的短期利率赋予正概率。 + +在单因子模型的平稳分布下,$r_t$ 服从均值为 $\delta_0$、标准差为 $\delta_1 \sigma_z$ 的正态分布,这使我们能够计算出该概率。 + +```{code-cell} ipython3 +σ_z = model_1f.C[0, 0] / np.sqrt(1 - model_1f.φ[0, 0]**2) +σ_r = model_1f.δ_1[0] * σ_z +print(f"r_t 的平稳标准差: {σ_r * 4 * 100:.2f}% 年化") +print(f"P(r_t < 0): {norm.cdf(-model_1f.δ_0 / σ_r):.2e}") +``` + +在此校准下该概率很小,但在拟合低利率时期的校准中可能会相当可观。 + +诸如 {cite:t}`CIR1985` 的平方根模型和诸如 {cite:t}`Black1995` 的影子利率模型,是保持名义利率非负的两种方法,但代价是牺牲了高斯设定所带来的一些可处理性。 + ### 双因子模型 为了匹配更丰富的收益率曲线动态,从业者通常使用 $m \geq 2$ @@ -830,7 +935,17 @@ plt.tight_layout() plt.show() ``` -我们可以看到,水平因子在长期限处占主导地位。 +右图显示了不同期限的收益率对两个因子的响应方式。 + +水平载荷 $B_{n,1}$ 随期限逐渐下降,从一季度时的 $0.002$ 降到 15 年时约为其一半,因此持续性因子会影响所有期限的收益率。 + +斜率载荷 $B_{n,2}$ 从 $0.001$ 开始,迅速衰减,并在约 30 季度之后转为略微负值。 + +这一符号变化反映了非对角元素 $\phi_{12} = -0.03$:较高的 $z_{2t}$ 会提高当前的短期利率,但会压低水平因子,进而压低未来的短期利率。 + +因此,水平因子在长期限处主导收益率,而斜率因子主要在短端起作用。 + +与单因子情形一样,左图中的曲线在 60 季度时仍在趋近它们共同的长期收益率。 ## 风险溢价 @@ -847,6 +962,16 @@ $$ 期限溢价等于债券冲击暴露 $\bar B_n^\top C$ 与风险价格向量 $\lambda_t$ 的内积。 +该公式以预期总回报的对数来度量溢价。 + +预期对数超额回报由于詹森不等式项而更小: + +$$ +\mathbb{E}_t \log R_{t+1}^{(n+1)} - r_t = \bar B_n^\top C \lambda_t - \tfrac{1}{2}\bar B_n^\top CC^\top \bar B_n +$$ + +只有第一项依赖于状态,因此这两种度量之间的差异是一个特定于期限的常数,不影响期限溢价随时间的变化方式。 + 由于期限溢价等于 $\bar B_n^\top C \lambda_t$,其符号 取决于*当前*风险价格向量 $\lambda_t$,只要 $\lambda_z \neq 0$, 它就是状态依赖的。 @@ -868,12 +993,14 @@ $m_{t+1}$ 对 $\varepsilon_{t+1}$ 正向载荷,即在利率上升 从代数上看,$\bar B_n < 0$ 和 $C\lambda_t < 0$ 结合 得到 $\bar B_n^\top C \lambda_t > 0$。 -然而,在其他状态下,$\lambda_t$ 可能会改变符号(例如,在我们的双状态 -校准的低利率状态下,第一个分量翻转),长期债券期限溢价 -在较长期限处可能变为负值。 +然而,在其他状态下,$\lambda_t$ 的分量可能会改变符号。 + +当 $\lambda_z < 0$ 时,水平因子 $z_{1t}$ 的低值会将 $\lambda_t$ 的第一个分量推至零以上。 + +由于长期债券主要承载水平冲击,因此其期限溢价随之转为负值。 ```{exercise} -:label: arp_ex5 +:label: arp_ex6 通过计算 $(n+1)$ 期债券的单期持有回报并识别其冲击载荷,推导上面的期限溢价公式。 @@ -883,7 +1010,7 @@ $\log p_t(n) = \bar A_n + \bar B_n^\top z_t$,代入状态 {eq}`eq_riccati_a`--{eq}`eq_riccati_b` 进行简化。 ``` -```{solution-start} arp_ex5 +```{solution-start} arp_ex6 :class: dropdown ``` @@ -957,7 +1084,12 @@ mystnb: name: fig-term-premiums-2f --- def term_premiums(model, z, n_max): - """计算期限 1 到 n_max 的期限溢价。""" + """ + 计算期限为 1, ..., n_max 的债券的单期期限溢价。 + + 一份 n 期债券持有一期后变为 (n-1) 期债券, + 因此其溢价为 B_bar_{n-1}^⊤ C λ_t(对 n = 1 则为零)。 + """ A_bar, B_bar = bond_coefficients(model, n_max + 1) λ_t = risk_prices(model, z) return np.array([B_bar[n-1] @ model.C @ λ_t @@ -1020,7 +1152,106 @@ plt.tight_layout() plt.show() ``` -我们看到,在低利率状态下期限溢价在所有期限都为正,但在高利率状态下的较长期限处变为负值。 +左图显示,期限溢价的符号取决于状态。 + +在高利率状态下,$\lambda_t \approx (-0.025, 0.001)$,期限溢价为正且随期限延长而上升,在 15 年期时达到约每年 0.6%。 + +在低利率状态下,$\lambda_t$ 的第一个分量已转为正值,$\lambda_t \approx (0.005, -0.011)$,期限溢价在每个期限都为负,在 15 年期时降至约每年 $-0.15$%。 + +处于低利率状态的投资者接受长期债券相较于滚动短期债券更低的预期回报,因为长期债券在他们最看重的状态下能带来良好回报。 + +右图分解了 $z_t = 0$ 时的期限溢价,此时 $\lambda_t$ 的两个分量均为负。 + +在长期限处,水平因子几乎贡献了全部的溢价。 + +斜率贡献很小,并在约 30 个季度之后转为负值,这与前面所示斜率载荷的符号变化相呼应。 + +```{exercise} +:label: arp_ex7 + +预期假说认为,长期债券的预期超额回报在时间上是恒定的,因此无法通过收益率利差来预测。 + +1. 对双因子模型 `model_2f` 模拟 $T = 200{,}000$ 个季度。 + 将 20 期债券的单季度超额持有回报 + $\log p_{t+1}(19) - \log p_t(20) - r_t$ + 对常数项和利差 $y_t(20) - r_t$ 进行回归。 +2. 使用 $\bar B_n$ 和 $z_t$ 的平稳协方差矩阵 $\Sigma_z$,计算该模型所隐含的总体回归斜率,并与你的估计值进行比较。 +3. 令 $\lambda_z = 0$,重复上述两个步骤,并解释结果。 +4. 在美国数据中,{cite:t}`FamaBliss1987` 和 {cite:t}`CampbellShiller1991` 发现,高利差预示着长期债券*高*的超额回报。 + `model_2f` 能否再现这一模式?如果将 $\lambda_z$ 的符号翻转,会发生什么? +``` + +```{solution-start} arp_ex7 +:class: dropdown +``` + +根据 {eq}`eq_excess` 和期限溢价公式,20 期债券的对数超额持有回报为 + +$$ +x_{t+1} = \bar B_{19}^\top C \lambda_t - \tfrac{1}{2}\bar B_{19}^\top CC^\top \bar B_{19} + \bar B_{19}^\top C \varepsilon_{t+1} +$$ + +其条件均值为一个常数加上 $a^\top z_t$,其中 $a = \lambda_z^\top C^\top \bar B_{19}$。 + +利差为 $s_t = y_t(20) - r_t = \text{常数} + b^\top z_t$,其中 $b = -\bar B_{20}/20 - \delta_1$。 + +由于 $\varepsilon_{t+1}$ 与 $z_t$ 正交,总体斜率为 + +$$ +\beta = \frac{a^\top \Sigma_z b}{b^\top \Sigma_z b} +$$ + +其中 $\Sigma_z$ 满足 $\Sigma_z = \phi \Sigma_z \phi^\top + CC^\top$。 + +```{code-cell} ipython3 +def eh_regression(model, n=20, T=200_000, seed=1): + """超额回报对收益率利差回归的 OLS 斜率和总体斜率。""" + A_bar, B_bar = bond_coefficients(model, n) + z_bar = np.linalg.solve(np.eye(model.m) - model.φ, model.μ) + Z = simulate(model, z_bar, T, rng=np.random.default_rng(seed)) + + r = model.δ_0 + Z[:-1] @ model.δ_1 + log_p = lambda k, z: A_bar[k] + z @ B_bar[k] + excess = log_p(n - 1, Z[1:]) - log_p(n, Z[:-1]) - r + spread = -log_p(n, Z[:-1]) / n - r + + X = np.column_stack([np.ones(T), spread]) + coef = np.linalg.lstsq(X, excess, rcond=None)[0] + resid = excess - X @ coef + se = np.sqrt(resid.var() / (T * spread.var())) + + Σ_z = solve_discrete_lyapunov(model.φ, model.C @ model.C.T) + a = model.λ_z.T @ model.C.T @ B_bar[n - 1] + b = -B_bar[n] / n - model.δ_1 + β_pop = (a @ Σ_z @ b) / (b @ Σ_z @ b) + return coef[1], se, β_pop + +cases = { + "λ_z 按校准值": λ_z_2, + "λ_z = 0": np.zeros((2, 2)), + "λ_z 符号翻转": -λ_z_2, +} +print(f"{'情形':>20} {'OLS 斜率':>10} {'标准误':>7} {'总体斜率':>10}") +for label, lz in cases.items(): + mod = create_affine_model(μ_2, φ_2, C_2, δ_0_2, δ_1_2, λ_0_2, lz) + b_ols, se, b_pop = eh_regression(mod) + print(f"{label:>20} {b_ols:>10.4f} {se:>7.4f} {b_pop:>10.4f}") +``` + +在校准的 $\lambda_z$ 下,OLS 斜率接近约 $-0.17$ 的总体斜率,且与零相差多个标准误,因此在模拟数据中预期假说不成立。 + +当 $\lambda_z = 0$ 时,向量 $a$ 为零,因此预期超额回报是恒定的,总体斜率恰好为零。 + +此时 OLS 估计值在抽样误差范围内接近零。 + +预期假说在仿射模型中成立,当且仅当风险价格不随状态变化。 + +校准模型在符号上与 Fama-Bliss 和 Campbell-Shiller 的发现相反:高利差预示着低的超额回报。 + +翻转 $\lambda_z$ 的符号会反转斜率的符号,这表明该回归证据所反映的是 $\lambda_z$ 的信息,而不仅仅是平均期限溢价的大小。 + +```{solution-end} +``` ## 风险中性概率 @@ -1057,7 +1288,17 @@ $$ 这是一个均值为 1 的对数正态随机变量,因此它是一个有效的 似然比,可用于扭曲 $z_{t+1}$ 的条件分布。 -将物理条件分布乘以这个似然比 +为了了解这种扭曲对冲击的影响,将 $\varepsilon_{t+1}$ 的标准正态密度乘以 {eq}`eq_rn_ratio`: + +$$ +(2\pi)^{-m/2}\exp\!\left(-\tfrac{1}{2}\varepsilon^\top\varepsilon\right) +\exp\!\left(-\tfrac{1}{2}\lambda_t^\top\lambda_t - \lambda_t^\top\varepsilon\right) += (2\pi)^{-m/2}\exp\!\left(-\tfrac{1}{2}(\varepsilon + \lambda_t)^\top(\varepsilon + \lambda_t)\right) +$$ + +因此在 $Q$ 下冲击为 $\varepsilon_{t+1} \sim \mathcal{N}(-\lambda_t, I)$:这种扭曲将其均值平移了 $-\lambda_t$,而协方差矩阵保持不变。 + +将 $\varepsilon_{t+1} = -\lambda_t + \varepsilon^Q_{t+1}$ 代入 {eq}`eq_var` 表明,将物理条件分布乘以这个似然比 将其转换为**风险中性条件分布** $$ @@ -1082,6 +1323,87 @@ $\mu + \phi z_t$ 扭曲为 $\mu - C\lambda_0 + (\phi - C\lambda_z)z_t$。 $\mathbb{E}^P_t m_{t+1} R_{j,t+1} = 1$ 如何针对 对风险 $\varepsilon_{t+1}$ 的暴露调整预期回报。 +```{exercise} +:label: arp_ex8 + +风险中性测度和物理测度有多大差异? + +一个自然的度量是相对熵(Kullback–Leibler 散度),在 {doc}`divergence_measures` 中有所讨论。 + +1. 证明 $Q$ 相对于 $P$ 的条件相对熵 $\mathbb{E}^Q_t\left[\log(\xi^Q_{t+1}/\xi^Q_t)\right]$,以及 $P$ 相对于 $Q$ 的条件相对熵 $\mathbb{E}^P_t\left[-\log(\xi^Q_{t+1}/\xi^Q_t)\right]$,两者都等于 $\tfrac{1}{2}\lambda_t^\top\lambda_t$。 +2. 假设 $z_0$ 是在 $P$ 下从 $z_t$ 的平稳分布中抽取的。证明对于样本 $z_1, \ldots, z_T$,$P$ 相对于 $Q$ 的相对熵等于 $T$ 乘以 + $$ + \tfrac{1}{2}\left(\bar\lambda^\top\bar\lambda + \operatorname{tr}(\lambda_z \Sigma_z \lambda_z^\top)\right) + $$ + 其中 $\bar z = (I - \phi)^{-1}\mu$,$\bar\lambda = \lambda_0 + \lambda_z \bar z$,且 $\Sigma_z$ 满足 $\Sigma_z = \phi\Sigma_z\phi^\top + CC^\top$。 +3. 对 `model_2f` 计算此公式的值,通过模拟进行验证,并使用平斯克不等式来界定基于 100 年季度 $z_t$ 数据的任何检验能多好地区分 $P$ 和 $Q$。 +``` + +```{solution-start} arp_ex8 +:class: dropdown +``` + +*第 1 部分。* 我们在上面表明,在 $Q$ 下 $\varepsilon_{t+1} \sim \mathcal{N}(-\lambda_t, I)$,而在 $P$ 下 $\varepsilon_{t+1} \sim \mathcal{N}(0, I)$。 + +因此 + +$$ +\mathbb{E}^Q_t\left[-\tfrac{1}{2}\lambda_t^\top\lambda_t - \lambda_t^\top\varepsilon_{t+1}\right] += -\tfrac{1}{2}\lambda_t^\top\lambda_t + \lambda_t^\top\lambda_t += \tfrac{1}{2}\lambda_t^\top\lambda_t +$$ + +以及 + +$$ +\mathbb{E}^P_t\left[\tfrac{1}{2}\lambda_t^\top\lambda_t + \lambda_t^\top\varepsilon_{t+1}\right] += \tfrac{1}{2}\lambda_t^\top\lambda_t +$$ + +这两个散度相同,因为这两个条件分布是具有相同协方差矩阵的正态分布。 + +*第 2 部分。* 当 $C$ 可逆时,路径 $z_1, \ldots, z_T$ 和冲击 $\varepsilon_1, \ldots, \varepsilon_T$ 在给定 $z_0$ 的情况下相互确定。 + +因此路径的对数似然比是各单期对数似然比之和,根据迭代期望定律,其在 $P$ 下的期望为 $\sum_{t=0}^{T-1} \mathbb{E}^P\left[\tfrac{1}{2}\lambda_t^\top\lambda_t\right]$。 + +在平稳分布下,$\lambda_t = \bar\lambda + \lambda_z(z_t - \bar z)$,其中 $\mathbb{E}(z_t - \bar z) = 0$ 且 $\text{Var}(z_t) = \Sigma_z$。 + +因此对每个 $t$ 都有 $\mathbb{E}(\lambda_t^\top\lambda_t) = \bar\lambda^\top\bar\lambda + \operatorname{tr}(\lambda_z\Sigma_z\lambda_z^\top)$,这就得到了该公式。 + +*第 3 部分。* 平斯克不等式指出,两个分布之间的全变差距离最多为 $\sqrt{D/2}$,其中 $D$ 是它们的相对熵。 + +在 $P$ 和 $Q$ 具有相等先验概率的情况下,选择错误模型的最小可实现概率为 $(1 - \text{TV})/2$,因此它至少为 $(1 - \sqrt{D/2})/2$。 + +```{code-cell} ipython3 +z_bar_2 = np.linalg.solve(np.eye(2) - model_2f.φ, model_2f.μ) +Σ_z_2 = solve_discrete_lyapunov(model_2f.φ, model_2f.C @ model_2f.C.T) +λ_bar_2 = risk_prices(model_2f, z_bar_2) +entropy = 0.5 * (λ_bar_2 @ λ_bar_2 + + np.trace(model_2f.λ_z @ Σ_z_2 @ model_2f.λ_z.T)) + +Z_sim = simulate(model_2f, z_bar_2, 200_000, rng=np.random.default_rng(7)) +Λ_sim = model_2f.λ_0 + Z_sim @ model_2f.λ_z.T +entropy_sim = 0.5 * np.mean(np.sum(Λ_sim**2, axis=1)) + +T_years = 100 +D = 4 * T_years * entropy +print(f"每季度相对熵(公式): {entropy:.6f}") +print(f"每季度相对熵(模拟): {entropy_sim:.6f}") +print(f"{T_years} 年的相对熵: {D:.4f}") +print(f"错误概率的下界: {(1 - np.sqrt(D / 2)) / 2:.3f}") +``` + +即使有一个世纪的季度数据,任何检验也无法将选择错误模型的平均概率降低到约 37% 以下。 + +然而,这两个难以区分的测度之间的差距,正是上文所绘制的期限溢价的来源。 + +因此,仅靠状态的时间序列数据几乎无法揭示风险价格,这就是为什么对 $\lambda_0$ 和 $\lambda_z$ 的估计在很大程度上依赖于债券收益率的横截面数据。 + +这与 {doc}`advanced:doubts_or_variability` 中的检测误差计算相呼应,在那里,合理程度的模型不确定性也是以相同方式校准的。 + +```{solution-end} +``` + ### 资产定价简述 设 $\mathbb{E}^P$ 表示在自然用于生成数据的物理测度下的期望。 @@ -1124,7 +1446,7 @@ $$ ```{code-cell} ipython3 def bond_price_mc_Q(model, z0, n, n_sims=50_000, rng=None): - """通过 Q 下的蒙特卡洛估计 p_t(n)。""" + """通过 Q 下的蒙特卡洛估计 p_t(n);返回估计值和标准误。""" if rng is None: rng = np.random.default_rng(0) m = len(z0) @@ -1134,28 +1456,34 @@ def bond_price_mc_Q(model, z0, n, n_sims=50_000, rng=None): disc += model.δ_0 + Z @ model.δ_1 ε = rng.standard_normal((n_sims, m)) Z = model.μ_rn + Z @ model.φ_rn.T + ε @ model.C.T - return np.mean(np.exp(-disc)) + payoffs = np.exp(-disc) + return payoffs.mean(), payoffs.std() / np.sqrt(n_sims) z_test = np.array([0.01, 0.005]) p_analytic = bond_prices(model_2f, z_test, 40) rng = np.random.default_rng(0) maturities_check = [4, 12, 24, 40] -mc_prices = [bond_price_mc_Q(model_2f, z_test, n, n_sims=100_000, rng=rng) - for n in maturities_check] +mc_results = [bond_price_mc_Q(model_2f, z_test, n, n_sims=100_000, rng=rng) + for n in maturities_check] -header = (f"{'期限':>10} {'解析解':>12}" - f" {'蒙特卡洛':>12} {'误差 (bps)':>12}") +header = (f"{'期限':>10} {'解析解':>10} {'蒙特卡洛':>11}" + f" {'误差 (bps)':>11} {'标准误 (bps)':>10} {'z 值':>8}") print(header) -print("-" * 52) -for n, mc in zip(maturities_check, mc_prices): +print("-" * len(header)) +for n, (mc, se) in zip(maturities_check, mc_results): analytic = p_analytic[n - 1] - error_bp = abs(analytic - mc) / analytic * 10_000 - print(f"{n:>10} {analytic:>12.6f} {mc:>12.6f} {error_bp:>12.2f}") + error_bp = (mc - analytic) / analytic * 10_000 + se_bp = se / analytic * 10_000 + print(f"{n:>10} {analytic:>10.6f} {mc:>11.6f}" + f" {error_bp:>11.2f} {se_bp:>10.2f} {error_bp / se_bp:>8.2f}") ``` -解析债券价格和蒙特卡洛债券价格紧密一致,验证了 -黎卡提递归 {eq}`eq_riccati_a`–{eq}`eq_riccati_b`。 +该表列出了每个蒙特卡洛误差及其标准误,两者都以解析价格的基点表示。 + +所有 z 值都在 $\pm 2$ 范围内,因此解析价格与模拟价格之间的差异与纯粹的模拟噪声是一致的。 + +这验证了黎卡提递归 {eq}`eq_riccati_a`–{eq}`eq_riccati_b`。 ## 扭曲信念 @@ -1222,25 +1550,39 @@ $$ $S$ 测度下的条件期望,$m^\star_{t+1}$ 是持有这些信念的 行为主体的 SDF。 -具体来说,行为主体的 SDF 为 +为了表示行为主体的 SDF,定义**主观冲击** + +$$ +\varepsilon^S_{t+1} = \varepsilon_{t+1} + \kappa_t +$$ + +由我们用于风险中性测度的同样论证,在 $S$ 下 $\varepsilon^S_{t+1} \sim \mathcal{N}(0, I)$,状态演化为 + +$$ +z_{t+1} = (\mu - C\kappa_0) + (\phi - C\kappa_z) z_t + C\varepsilon^S_{t+1} +$$ + +行为主体的 SDF 在这些主观冲击下是指数二次形式的: $$ -m^\star_{t+1} = \exp\!\left(-r^\star_t +m^\star_{t+1} = \exp\!\left(-r_t - \tfrac{1}{2}\lambda_t^{\star\top}\lambda^\star_t - - \lambda_t^{\star\top}\varepsilon_{t+1}\right) + - \lambda_t^{\star\top}\varepsilon^S_{t+1}\right) $$ -其中 $r^\star_t$ 是短期利率,$\lambda^\star_t$ 是行为主体的 +其中 $\lambda^\star_t = \lambda^\star_0 + \lambda^\star_z z_t$ 是行为主体的 风险价格向量。 +因为 $\mathbb{E}^S_t m^\star_{t+1} = \exp(-r_t)$,这个 SDF 中的短期利率就是我们观测到的市场短期利率 $r_t$。 + 使用 {eq}`eq_srat` 转换到物理测度,主观 定价方程变为 $$ \mathbb{E}^P_t\!\left[ - \exp\!\left(-r^\star_t + \exp\!\left(-r_t - \tfrac{1}{2}\lambda_t^{\star\top}\lambda^\star_t - - \lambda_t^{\star\top}\varepsilon_{t+1} + - \lambda_t^{\star\top}(\varepsilon_{t+1} + \kappa_t) \right) \exp\!\left( - \tfrac{1}{2}\kappa_t^\top\kappa_t @@ -1250,7 +1592,8 @@ $$ \right] = 1 $$ -合并两个指数得到 +合并指数中的常数项为 +$-r_t - \tfrac{1}{2}\lambda_t^{\star\top}\lambda^\star_t - \lambda_t^{\star\top}\kappa_t - \tfrac{1}{2}\kappa_t^\top\kappa_t = -r_t - \tfrac{1}{2}(\lambda^\star_t + \kappa_t)^\top(\lambda^\star_t + \kappa_t)$,因此两个指数恰好合并为 $$ \mathbb{E}^P_t\!\left[ @@ -1261,8 +1604,6 @@ $$ \right] = 1 $$ -其中 $r_t = r^\star_t - \lambda_t^{\star\top}\kappa_t$。 - 将其与理性预期计量经济学家的定价 方程进行比较 @@ -1276,17 +1617,44 @@ $$ $$ 我们看到,计量经济学家解释为 $\lambda_t$ 的实际上是 -$\lambda^\star_t + \kappa_t$。 -因为计量经济学家的估计部分反映了主观信念中的 -系统性扭曲,在这种校准中它们可能高估了代表性 -行为主体真实的风险价格 $\lambda^\star_t$。 +$$ +\hat\lambda_t = \lambda^\star_t + \kappa_t +$$ + +### 债券价格能揭示什么,不能揭示什么 + +这一分解在风险中性测度方面有一个简单的解释。 + +从物理测度出发,计量经济学家通过用 $\hat\lambda_t$ 扭曲达到 $Q$: + +$$ +\mu - C\hat\lambda_0 = (\mu - C\kappa_0) - C\lambda^\star_0, +\qquad +\phi - C\hat\lambda_z = (\phi - C\kappa_z) - C\lambda^\star_z +$$ + +右侧表明,行为主体通过用 $\lambda^\star_t$ 扭曲主观测度也能达到*同一个* $Q$。 -下面我们构造一个数值例子来说明这一点。 +由于债券价格仅取决于 $Q$,计量经济学家与行为主体对每一个债券价格的看法都一致。 -我们保持与上面相同的物理状态动态和短期利率设定,但选择一个单独的真实风险价格过程 $(\lambda_t^\star)$ 和一个扭曲信念计量经济学家过程 $(\hat\lambda_t)$ 来说明这一分解。 +他们不一致的地方在于预期回报。 -然后我们设定主观参数 $\check\mu, \check\phi$ 以匹配 +计量经济学家测得的期限溢价是 $\bar B_n^\top C\hat\lambda_t$,而行为主体预期的溢价是 $\bar B_n^\top C\lambda^\star_t$。 + +两者之差 $\bar B_n^\top C\kappa_t$,是测得的超额回报中行为主体并不预期、因而表现为可预测预测误差的部分。 + +债券价格与 $z_t$ 的数据能识别出 $\hat\lambda_t$,但无法将其拆分为 $\lambda^\star_t$ 和 $\kappa_t$。 + +拆分它需要关于信念的直接证据,例如 {cite:t}`piazzesi2015trend` 所使用的调查预测。 + +同样的识别问题也是 {doc}`ross_recovery` 和 {doc}`misspecified_recovery` 的核心内容,这两讲探讨了仅凭风险中性价格何时能够揭示主观信念。 + +### 一个数值说明 + +我们保持与上面相同的物理状态动态和短期利率设定,选定行为主体的风险价格 $\lambda^\star_t$,并推导出计量经济学家的风险价格 $\hat\lambda_t = \lambda^\star_t + \kappa_t$。 + +我们设定主观参数 $\check\mu, \check\phi$ 以匹配 {cite:t}`piazzesi2015trend` 中的证据,即专家的行为就好像收益率曲线的水平和斜率比物理测度下更持续。 具体来说,我们使用 @@ -1303,43 +1671,63 @@ $$ φ_S = np.array([[0.985, -0.025], [0.00, 0.94]]) μ_S = np.array([0.005, 0.0]) +# κ_t = κ_0 + κ_z z_t 将 P 扭曲为 S κ_z = np.linalg.solve(C_2, φ_P - φ_S) κ_0 = np.linalg.solve(C_2, μ_P - μ_S) +# 行为主体的风险价格,为主观冲击 ε^S 定价 λ_star_0 = np.array([-0.03, -0.015]) λ_star_z = np.array([[-0.006, 0.0], [0.0, -0.004]]) +# 计量经济学家的风险价格,为物理冲击 ε 定价 λ_hat_0 = λ_star_0 + κ_0 λ_hat_z = λ_star_z + κ_z ``` +行为主体的模型将主观动态与 $\lambda^\star_t$ 配对,而计量经济学家的模型将物理动态与 $\hat\lambda_t$ 配对。 + +我们首先确认这两个模型意味着相同的风险中性动态,从而具有相同的债券价格。 + +```{code-cell} ipython3 +# 行为主体:主观动态,风险价格 λ* +model_subj = create_affine_model( + μ_S, φ_S, C_2, δ_0_2, δ_1_2, λ_star_0, λ_star_z) +# 计量经济学家:物理动态,风险价格 λ̂ = λ* + κ +model_econ = create_affine_model( + μ_P, φ_P, C_2, δ_0_2, δ_1_2, λ_hat_0, λ_hat_z) + +print("相同的风险中性动态:", + np.allclose(model_subj.φ_rn, model_econ.φ_rn) + and np.allclose(model_subj.μ_rn, model_econ.μ_rn)) +print("在 z = (1, -1) 处相同的收益率:", + np.allclose(compute_yields(model_subj, np.array([1.0, -1.0]), 60), + compute_yields(model_econ, np.array([1.0, -1.0]), 60))) +``` + +现在我们比较行为主体预期的期限溢价与计量经济学家测得的期限溢价。 + ```{code-cell} ipython3 --- mystnb: figure: - caption: 真实与扭曲信念期限溢价及高估比率 + caption: 主观与测得期限溢价及高估比率 name: fig-distorted-beliefs --- -model_true = create_affine_model( - μ_2, φ_2, C_2, δ_0_2, δ_1_2, λ_star_0, λ_star_z) -model_econ = create_affine_model( - μ_2, φ_2, C_2, δ_0_2, δ_1_2, λ_hat_0, λ_hat_z) - z_ref = np.array([0.0, 0.0]) n_max_db = 60 maturities_db = np.arange(1, n_max_db + 1) -tp_true = term_premiums(model_true, z_ref, n_max_db) * 4 * 100 +tp_subj = term_premiums(model_subj, z_ref, n_max_db) * 4 * 100 tp_econ = term_premiums(model_econ, z_ref, n_max_db) * 4 * 100 fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 5.5)) -ax1.plot(maturities_db, tp_true, lw=2.2, - label=r"真实风险价格 $\lambda^\star_t$") +ax1.plot(maturities_db, tp_subj, lw=2.2, + label=r"行为主体预期溢价,$\lambda^\star_t$") line_econ, = ax1.plot(maturities_db, tp_econ, lw=2.2, ls="--", - label=(r"RE 计量经济学家" + label=(r"RE 计量经济学家测得," r" $\hat\lambda_t = \lambda^\star_t + \kappa_t$")) -ax1.fill_between(maturities_db, tp_true, tp_econ, +ax1.fill_between(maturities_db, tp_subj, tp_econ, alpha=0.15, color=line_econ.get_color(), label="信念扭曲成分") ax1.axhline(0, color="black", lw=0.8, ls=":") @@ -1348,9 +1736,9 @@ ax1.set_ylabel("期限溢价(年化 %)") ax1.legend(fontsize=9.5) ax1.set_xlim(1, n_max_db) -mask = np.abs(tp_true) > 1e-8 -ratio = np.full_like(tp_true, np.nan) -ratio[mask] = tp_econ[mask] / tp_true[mask] +mask = np.abs(tp_subj) > 1e-8 +ratio = np.full_like(tp_subj, np.nan) +ratio[mask] = tp_econ[mask] / tp_subj[mask] ax2.plot(maturities_db[mask], ratio[mask], lw=2.2) ax2.axhline(1, color="black", lw=0.8, ls="--", @@ -1369,14 +1757,35 @@ for ax in (ax1, ax2): plt.tight_layout() plt.show() + +for n in [4, 20, 40, 60]: + print(f"n = {n:>2}: 行为主体 {tp_subj[n-1]:.3f}%," + f"计量经济学家 {tp_econ[n-1]:.3f}%," + f"比率 {tp_econ[n-1] / tp_subj[n-1]:.2f}") +``` + +在 $z_t = 0$ 处,扭曲为 $\kappa_t = \kappa_0 = (-0.005, 0)$,它来自专家在预测水平因子时的向上偏差 $\check\mu_1 = 0.005$。 + +预期未来利率更高的专家,预期长期债券的回报会低于实际平均实现的回报。 + +因此,在这种校准下,计量经济学家将高估行为主体所要求的期限溢价 14% 到 18%。 + +持续性扭曲 $\kappa_z$ 使得这一差距的大小甚至符号都取决于状态。 + +```{code-cell} ipython3 +for label, z in [("高利率", np.array([3.0, -2.0])), + ("低利率", np.array([-3.0, 2.0]))]: + gap = (term_premiums(model_econ, z, n_max_db) + - term_premiums(model_subj, z, n_max_db)) * 4 * 100 + print(f"{label}:5 年和 15 年期的信念扭曲差距 = " + f"{gap[19]:.2f}%,{gap[59]:.2f}%") ``` -当专家信念过度持续($\check\phi$ 的特征值比 $\phi$ -更大)时,理性预期计量经济学家将过多的 -观测到的风险溢价归因于风险厌恶。 +当利率较高时,专家将其过度外推到未来,因此计量经济学家测得的溢价在 15 年期时比行为主体的溢价高出近 2 个百分点。 + +当利率较低时,差距的符号会反转。 -将信念扭曲与真正的风险价格区分开来需要额外的 -数据,例如 {cite:t}`piazzesi2015trend` 使用的调查预测。 +因此,理性预期计量经济学家会将测得超额回报中的变动归因于时变风险价格,而这些变动实际上来自行为主体系统性的预测误差。 我们的 {doc}`advanced:risk_aversion_or_mistaken_beliefs` 讲座 更深入地探讨了这种混淆。 @@ -1397,10 +1806,11 @@ plt.show() 政策、实际活动、波动率等)。 4. **信念扭曲:** 该框架通过对物理测度的似然比扭曲,自然地容纳 非理性信念,如 {cite:t}`piazzesi2015trend` 所示。 +5. **可辨识性的局限:** 债券价格仅揭示风险中性测度,因此要将风险价格与信念扭曲区分开来,需要额外的证据,例如调查预测数据;另请参阅 {doc}`ross_recovery` 和 {doc}`misspecified_recovery`。 该模型还直接连接到 {doc}`advanced:doubts_or_variability` 中研究的 Hansen–Jagannathan 边界,以及 {cite:t}`Ljungqvist2012` 其他章节中描述的 随机贴现因子的稳健控制解释。 关于对本处连续状态框架进行补充的资产定价有限状态方法, -参见 {doc}`资产定价:有限状态模型 `。 \ No newline at end of file +参见 {doc}`资产定价:有限状态模型 `。 diff --git a/lectures/long_run_risk_operator.md b/lectures/long_run_risk_operator.md index 902771bb..2b8d5a9c 100644 --- a/lectures/long_run_risk_operator.md +++ b/lectures/long_run_risk_operator.md @@ -46,6 +46,7 @@ translation: Long-run risk prices::Comparison in the affine model: 仿射模型中的比较 Long-run risk prices::Changing valuation functionals: 改变估值泛函 Long-run risk prices::Changing cash-flow risk: 改变现金流风险 + Long-run risk prices::Where the two frontiers come apart: 两个前沿分离之处 Assumptions behind the scenes: 幕后的假设 'Assumptions behind the scenes::Issue 1: $\hat M$ might fail to be a martingale': 问题 1:$\hat M$ 可能无法成为一个鞅 'Assumptions behind the scenes::Issue 2: the twisted process might fail to be stable': 问题 2:扭曲过程可能无法稳定 @@ -147,6 +148,7 @@ mpl.rcParams['font.family'] = ['Source Han Serif SC'] # i18n ## 乘性泛函 + ### 设定 设 $\{X_t : t \geq 0\}$ 是一个具有状态空间 $\mathcal D_0$ 的连续时间马尔可夫过程,并设 $\mathcal F_t$ 表示由其历史生成的过滤族。 @@ -646,7 +648,9 @@ $$ ```{prf:definition} 扩展生成元 :label: lrr-def-extended-generator -固定一个博雷尔函数 $\psi$,并寻找第二个博雷尔函数 $\chi$,它将扮演 "$M_t \psi(X_t)$ 在当前状态处的瞬时变化率" 的角色。我们询问是否存在 $\chi$ 使得 +固定一个博雷尔函数 $\psi$,并寻找第二个博雷尔函数 $\chi$,它将扮演 "$M_t \psi(X_t)$ 在当前状态处的瞬时变化率" 的角色。 + +我们询问是否存在 $\chi$ 使得 $$ N_t @@ -770,7 +774,9 @@ $$ (eq:generator-eigen) 为什么 $\mathbb A$ 的一个特征函数会给我们乘性分解 {eq}`eq:hs-factorization`? -离散时间类比指明了方向。如果 $K\phi = \lambda\phi$,那么 +离散时间类比指明了方向。 + +如果 $K\phi = \lambda\phi$,那么 $$ \lambda^{-n}\, M_n\, \frac{\phi(X_n)}{\phi(X_0)} @@ -920,7 +926,7 @@ $$ 一个集合可能是可达的,但以趋于零的概率被访问,因此时间平均无法收敛到 $\hat\varsigma$-平均。 -哈里斯常返是有限链中 "常返状态" 的连续状态对应物。 +哈里斯常返是有限链中"常返状态"的连续状态对应物。 收集这三个条件: @@ -1111,7 +1117,7 @@ def stationary_distribution(Q): 状态 2 是*衰退*(较低的短期利率 $r_2=0.02$,以速率 $\lambda_2 = 0.50$ 切换到繁荣)。 -目前我们将跳跃乘子设为零,所以 SDF 只通过状态内衰减率连续变化。 +目前我们将对数跳跃乘子 $\kappa$ 设为零——等价地说,将跳跃乘子 $\exp[\kappa]$ 设为一——所以 SDF 只通过状态内衰减率连续变化。 ```{code-cell} ipython3 λ_1 = 0.30 @@ -1249,36 +1255,53 @@ print("\nφ with jumps:") print(φ_jump) ``` -为看清长期率 $\rho$ 如何响应跳跃风险,我们固定繁荣到衰退的乘子,并随着衰退到繁荣乘子的变化描绘出 $\rho$。 +为看清长期率 $\rho$ 如何响应跳跃风险,我们将繁荣到衰退的对数乘子固定在其校准值上,并随着衰退到繁荣的对数乘子的变化描绘出 $\rho$。 + +因此,用来比较的合适基准是在 $\kappa(\text{衰退} \to \text{繁荣}) = 0$ 处的特征值,此时繁荣到衰退的跳跃仍然开启,黑点标记了这一点。 ```{code-cell} ipython3 --- mystnb: figure: - caption: 跳跃与长期增长率 + caption: 跳跃与长期增长率(固定繁荣到衰退的对数乘子) name: fig-lrr-jumps-eigenvalue --- +κ_boom_to_rec = κ_jump[1, 0] + κ_grid = np.linspace(-0.5, 0.5, 100) ρ_grid = np.empty_like(κ_grid) for n, k in enumerate(κ_grid): κ_temp = np.array([[0.0, k], - [0.30, 0.0]]) + [κ_boom_to_rec, 0.0]]) A_temp = build_generator(U, r, κ_temp) ρ_grid[n], _ = principal_eigenpair(A_temp) +ρ_no_up_jump, _ = principal_eigenpair( + build_generator(U, r, np.array([[0.0, 0.0], + [κ_boom_to_rec, 0.0]])) +) + fig, ax = plt.subplots() ax.plot(κ_grid, ρ_grid, lw=2) -ax.axhline(ρ, color="black", ls="--", lw=1) +ax.plot([0.0], [ρ_no_up_jump], "o", color="black", + label="没有衰退到繁荣的跳跃") ax.axvline(0, color="black", ls=":", lw=1) ax.set_xlabel("衰退到繁荣的跳跃对数乘子") ax.set_ylabel("主特征值") +ax.legend() plt.show() + +print(f"ρ at κ(rec -> boom) = 0 = {ρ_no_up_jump:.6f}") ``` 主特征值关于衰退到繁荣的对数乘子单调递增:随着该乘子上升,$M$ 在好消息时向下跳得更少(或向上跳得更多),这机械地推高了 $\rho$。 -经济上合理的 SDF 区域在零的左侧,那里乘子为负。 +黑点位于 $\rho = 0.022934$ 处。 + +将衰退到繁荣的跳跃在校准值 $\kappa = -0.20$ 处打开后,$\rho$ 下降到 $-0.019067$,即上面打印出的值。 + +对随机贴现因子而言,经济上合理的区域在零的左侧,那里对数乘子为负,$M$ 在好消息时向下跳跃。 ## 仿射扩散例子 @@ -1622,7 +1645,11 @@ $$ (eq:kp-sdf-params) 让我们设定参数并求解主特征对。 -我们使用标准长期风险邻域中的参数:一个均值回归波动率因子 $X^f$,均值为 $0.04$,一个移动更慢的可预测增长因子 $X^o$,均值为 $0.02$,风险厌恶 $a=4$,以及时间贴现率 $b=0.03$。 +我们使用大致处于长期风险族的示例参数:一个均值回归波动率因子 $X^f$,均值为 $0.04$,一个更为持久的可预测增长因子 $X^o$,均值为 $0.02$,风险厌恶 $a=4$,以及时间贴现率 $b=0.03$。 + +选取这些参数是为了使算子计算清晰明了,而非为了匹配资产价格矩。 + +在时间可分 CRRA 偏好且 $a=4$ 的情况下,它们意味着在状态均值处的瞬时无风险利率约为 $10.6\%$,长期零息收益率为 $9.6\%$(结果打印如下),这体现的是熟悉的无风险利率之谜,而不是对它的解决。 ```{code-cell} ipython3 params_state = { @@ -1929,7 +1956,7 @@ plt.show() 但在有随机波动率、非线性动态或跳跃风险时它们可能不同。 -我们将在下面的仿射模型中详细讨论这两种类型的例子。 +我们将在下面的仿射模型中详细讨论这两种类型的例子:在 $B^o$ 方向上这两个前沿完全一致,而在 $B^f$ 方向上随机波动率使它们分开。 ### 随机贴现因子分解 @@ -2188,24 +2215,42 @@ $$ (eq:growth-functional) 最后一行是使 $\exp(A_t^g-\delta t) = \hat G_t$ 成为一个*局部*鞅的伊藤补偿子,其中 $\delta$ 是常数趋势增长率。 -增长-扭曲过程的随机稳定性需要三个条件。 +在这个仿射设定中,{prf:ref}`lrr-def-stochastic-stability` 中的三个抽象条件——平稳分布、不可约骨架和哈里斯常返性——一旦扭曲后的 $X^f$ 均值回归且不触及零,就会全部自动满足。 + +与它们并列的是一个独立的要求,即 $\hat G$ 本身必须是一个鞅,即增长扭曲的假设 6.1 的类比。 -**Feller 型不可达**不等式 +先看不可达性。 + +在扭曲下,$X^f$ 的漂移变为 $$ - 2(\xi_f+\sigma_f\gamma_f^g)\bar x_f \geq \sigma_f^2 + \xi_f \bar x_f + - \bigl[\xi_f-\sigma_f(\gamma_f+c_f\sigma_f)\bigr] x^f , + \qquad + \gamma_f = \gamma_f^s+\gamma_f^g , $$ -使扭曲的 $X^f$ 不触及零。 +而 Girsanov 变换不改变扩散系数 $\sqrt{x^f}\sigma_f$。 -扭曲的 $X^f$ 的*均值回归*由我们对 SDF 在 {eq}`eq:cf-roots` 中使用的同样的选根论证挑选。 +将该漂移写成规范的平方根形式 $\hat\kappa(\hat\theta-x^f)$,扭曲会重新调整均值回归速度 +$\hat\kappa$ 和长期均值 $\hat\theta$,但保持它们的*乘积* $\hat\kappa\hat\theta=\xi_f\bar x_f$ 不变。 -$\hat G$ 本身必须是一个鞅,即增长扭曲的假设 6.1 的类比。 +由于**Feller 型不可达**不等式只涉及该乘积,它与支配原过程的不等式相同, -Feller 不等式是必要的但本身不充分。 +$$ + 2\xi_f\bar x_f \geq \sigma_f^2 , +$$ + +其中根本不含任何暴露参数。 + +扭曲后的 $X^f$ 的*均值回归*,即 $\hat\kappa>0$,是一个真正独立的要求,它由我们对 SDF 在 {eq}`eq:cf-roots` 中使用的同样的选根论证挑选。 + +这两个条件单独都不充分。 ```{note} -这个 Feller 限制是我们之前标示的一个一般观点的具体实例:改变增长风险可能违反稳定性并使长期近似失效,所以 $(\gamma_f^g, \gamma_o^g)$ 的选择不是自由的。 +不可达性在这里是自动满足的,但整体稳定性并非如此:改变增长风险仍可能违反稳定性并使长期近似失效,所以 $(\gamma_f^g, \gamma_o^g)$ 的选择不是自由的。 + +例如,在此校准下,一个很大的负值 $\gamma_f^g$ 会使 {eq}`eq:cf-roots` 中的判别式变为负数,从而根本不存在真实的指数-仿射特征函数。 ``` 为给现金流 $D_t=D_0G_t\psi(X_t)$ 定价,使用由 $M=GS$ 生成的半群。 @@ -2288,6 +2333,39 @@ print(f"finite-difference slope = {finite_difference:.6f}") print(f"formula = {long_run_price_o:.6f}") ``` +### 两个前沿分离之处 + +我们在上面承诺过,估值泛函前沿和现金流前沿可能不同。 + +在 $B^o$ 方向上它们没有不同:刚刚计算的两个有限差分在小数点后六位一致,因为 $\gamma_o$ 在特征值 {eq}`eq:affine-rho` 中是线性出现的。 + +$B^f$ 方向才是有趣的,因为在那里该暴露通过 $c_f$ 起作用,而 $c_f$ 是求解二次方程 {eq}`eq:cf-eq` 的根。 + +```{code-cell} ipython3 +def central_difference(f, h=1e-5): + return (f(h) - f(-h)) / (2 * h) + +valuation_price_f = central_difference( + lambda g: valuation_eigenvalue_for_exposure(0.0, g) +) +cashflow_price_f = central_difference( + lambda g: required_return_for_growth_exposure(0.0, g) +) +local_price_f = -params_sdf["γ_f"] * params_sdf["xbar_f"] + +print(f"B^f local price (at x^f = xbar_f) = {local_price_f:.6f}") +print(f"B^f valuation-functional frontier = {valuation_price_f:.6f}") +print(f"B^f cash-flow frontier = {cashflow_price_f:.6f}") +``` + +这三个数字在小数点后第三位有所不同。 + +在 $x^f=\bar x_f$ 处评估的局部价格最小,估值泛函前沿略大一些,而现金流前沿更大。 + +原因在于,$B^f$ 暴露以非线性方式移动 $c_f$,而这两个前沿以不同方式承载这种非线性:估值前沿还会通过局部定价约束 {eq}`eq:valuation-local-restriction-affine` 调整 $\beta_f^v$,而现金流前沿则通过 {eq}`eq:growth-functional` 中的伊藤补偿子调整 $\beta_f$。 + +这正是我们在上文讨论两个前沿时所预期的差异,而在 $B^o$ 方向上不存在这一差异,正是因为 $X^o$ 具有恒定的波动率。 + ## 幕后的假设 上面的例子使特征函数计算看起来很常规。 @@ -2370,7 +2448,9 @@ $F_\alpha$ 是由*重新缩放的*乘性泛函 $M_t V(X_t)/V(X_0)$ 生成的半 | 长期极限 {eq}`eq:long-run-limit` | 扭曲过程的随机稳定性 | | 一个唯一的主特征函数 | 稳定性在正特征函数中选择 | -在有限状态情形中,所有四个都从一次佩龙-弗罗贝尼乌斯计算得出;在仿射模型中,它们约化为挑选一个二次方程的正确根。一般而言,每个都必须单独检查。 +在有限状态情形中,所有四个都从一次佩龙-弗罗贝尼乌斯计算得出;在仿射模型中,它们约化为挑选一个二次方程的正确根。 + +一般而言,每个都必须单独检查。 {cite:t}`HansenScheinkman2009` 中的完整理论还提供了更强的 $L^p$ 近似结果和随机稳定性的 Lyapunov 判据,我们在这里不复现。 @@ -2384,7 +2464,7 @@ Hansen-Scheinkman 方法通过研究估值半群的正特征函数来研究长 2. 建立半群 $\mathbb M_t\psi(x)=\mathbb{E}[M_t\psi(X_t)\mid X_0=x]$。 -3. 当 $M = VS$ 是一个估值泛函和一个 SDF 的乘积时,施加 $VS$ 是一个鞅的局部定价约束;对于现金流估值半群 $\mathbb Q_t = GS$,定价约束仅施加于 $S$,而 $G$ 只作为一个增长扭曲进入。 +3. 当 $V$ 是一个估值泛函时,利用 $VS$ 是一个鞅的局部定价约束,根据其布朗和跳跃暴露来确定 $V$ 的漂移项,然后将特征值问题应用于 $M = V$;对于现金流估值,取 $M = Q = GS$,即生成半群 $\{\mathbb Q_t\}$ 的泛函,其中定价约束仅施加于 $S$,而 $G$ 只作为一个增长扭曲进入。 4. 求解主特征值问题 $\mathbb A\phi=\rho\phi$。 @@ -2507,30 +2587,33 @@ $$ ```{exercise} :label: lrr_ex2 -在仿射模型中,为 - -$$ - \xi_o \in \{0.1, 0.2, 0.5, 1, 2, 5\}. -$$ +{numref}`fig-lrr-persistence-risk-prices` 展示了当均值回归速度 $\xi_o$ 上升时,$B^o$ 暴露的长期价格向局部价格下降的过程。 -计算 $B^o$ 暴露的局部和长期价格。 +本练习要求你确定它下降的*速率*。 -使用公式 +定义**持久性楔子** $$ - \text{局部价格} = -\gamma_o^s + w(\xi_o) + = + B^o \text{ 的长期价格} + - + B^o \text{ 的局部价格} . $$ -和 +1. 结合 {eq}`eq:long-run-price-o` 与布里登系数 {eq}`eq:breeden-sdf-params`,用解析方法证明 $$ - \text{长期价格} - = - -\gamma_o^s - - \frac{\beta_o^s}{\xi_o}\sigma_o . + w(\xi_o) = \frac{a\sigma_o}{\xi_o} , $$ -解释为什么当 $\xi_o \to \infty$ 时两个价格收敛。 +所以该楔子恰好正比于 $1/\xi_o$,特别地,它不依赖于消费荷载 $\vartheta_o$。 + +2. 在网格 +$\xi_o \in \{0.1, 0.2, 0.5, 1, 2, 5\}$ 上通过检验乘积 +$\xi_o\, w(\xi_o)$ 在整个网格上恒定并等于 $a\sigma_o$ 来数值验证这一结果。 + +3. 在双对数坐标轴上绘制 $w$ 关于 $\xi_o$ 的图形,并确认拟合斜率为 $-1$,这是精确双曲衰减的标志。 ``` ```{solution-start} lrr_ex2 @@ -2539,30 +2622,48 @@ $$ 这是一个解答: +*1.* 局部价格是 $-\gamma_o^s$,根据 {eq}`eq:long-run-price-o`,长期价格是 $-\gamma_o^s - (\beta_o^s/\xi_o)\sigma_o$。 + +作差后,共同项 $-\gamma_o^s$ 抵消,只剩下持久性修正项: + +$$ + w(\xi_o) = -\frac{\beta_o^s}{\xi_o}\sigma_o . +$$ + +布里登系数 {eq}`eq:breeden-sdf-params` 设定 $\beta_o^s = -a$,这给出 $w(\xi_o) = a\sigma_o/\xi_o$。 + +因为 $\vartheta_o$ 仅通过 $\gamma_o^s = -a\vartheta_o$ 进入,而它在两个价格中以相同的方式出现,所以它相互抵消,不会影响该楔子。 + +*2.* 和 *3.* 数值验证: + ```{code-cell} ipython3 ξ_vals = np.array([0.1, 0.2, 0.5, 1.0, 2.0, 5.0]) -local_vals = np.full_like(ξ_vals, -params_sdf["γ_o"]) -long_vals = (-params_sdf["γ_o"] - - (params_sdf["β_o"] / ξ_vals) * params_sdf["σ_o"]) +wedge = -(params_sdf["β_o"] / ξ_vals) * params_sdf["σ_o"] + +print(f"a * σ_o = {a * params_sdf['σ_o']:.6f}\n") +for ξ, w in zip(ξ_vals, wedge): + print(f"ξ_o = {ξ:3.1f}: wedge = {w:.6f}, ξ_o * wedge = {ξ * w:.6f}") -for ξ, lp, lrp in zip(ξ_vals, local_vals, long_vals): - print(f"ξ_o = {ξ:3.1f}: local = {lp:.4f}, long-run = {lrp:.4f}") +slope, _ = np.polyfit(np.log(ξ_vals), np.log(wedge), 1) +print(f"\nlog-log slope = {slope:.6f}") fig, ax = plt.subplots() -ax.plot(ξ_vals, local_vals, "--", lw=2, label="局部") -ax.plot(ξ_vals, long_vals, "o-", lw=2, label="长期") -ax.set_xscale("log") +ax.loglog(ξ_vals, wedge, "o-", lw=2, label="持久性楔子 $w$") +ax.loglog(ξ_vals, a * params_sdf["σ_o"] / ξ_vals, "--", lw=2, + label="$a\\sigma_o/\\xi_o$") ax.set_xlabel("$\\xi_o$") -ax.set_ylabel("风险价格") +ax.set_ylabel("楔子") ax.legend() plt.show() ``` -随着 $\xi_o$ 增加,$X^o$ 更快地均值回归。 +在每个网格点上,乘积 $\xi_o\, w(\xi_o)$ 都打印为 $0.040000$,与 $a\sigma_o = 4 \times 0.01$ 相符,拟合的双对数斜率为 $-1.000000$。 -一个对 $B^o$ 的冲击于是对未来期望增长有一个寿命更短的影响。 +所以这两个价格不仅仅是收敛:该楔子以精确的双曲速率 $a\sigma_o/\xi_o$ 衰减。 -持久性项 $(\beta_o^s/\xi_o)\sigma_o$ 收敛到零,所以长期价格收敛到局部价格。 +这一速率背后的经济学原理是:一个 $B^o$ 冲击在冲击发生时使 $X^o$ 偏移 $\sigma_o$,该偏移以速率 $\xi_o$ 衰减,因此它对预期增长的累积影响为 $\sigma_o/\xi_o$。 + +该累积影响的每一单位都由 SDF 对 $X^o$ 的荷载 $a$ 定价。 ```{solution-end} ``` @@ -2581,7 +2682,9 @@ U = \end{bmatrix}, $$ -衰减率向量 $r = (0.06, 0.04, 0.01)$,乘性泛函中无跳跃。设 $\psi=(3,1,2)$。 +衰减率向量 $r = (0.06, 0.04, 0.01)$,乘性泛函中无跳跃。 + +设 $\psi=(3,1,2)$。 1. 计算主特征对 $(\rho,\phi)$ 和扭曲平稳分布 $\hat\varsigma$,并报告理论极限 @@ -2646,13 +2749,23 @@ ax.semilogy(t_vals, errors, lw=2) ax.set_xlabel("$t$") ax.set_ylabel("误差") plt.show() +``` + +对于第 3 部分,我们通过在主导修正项占主导地位的窗口内对 $\log(\text{误差})$ 拟合一条直线来估计经验衰减率,并将拟合斜率与谱隙进行比较。 + +```{code-cell} ipython3 +mask = (t_vals > 20) & (t_vals < 40) +fitted_slope, _ = np.polyfit(t_vals[mask], np.log(errors[mask]), 1) -print(f"spectral gap = {gap:.6f}") +print(f"empirical decay rate = {-fitted_slope:.6f}") +print(f"spectral gap = {gap:.6f}") ``` 归一化半群以由主特征值与其余特征值之间的分离所控制的指数率收敛。 -在这个有限状态例子中,那个分离就是上面计算的谱隙。 +在这个有限状态例子中,那个分离就是谱隙,上面打印的两个数字精确到小数点后三位是一致的。 + +剩余的微小差异来自第三个特征值的贡献,它尚未完全消失;在更晚的窗口上拟合可以进一步减小这一差异。 ```{solution-end} ``` @@ -2777,7 +2890,9 @@ $$ N_t = M_t\phi(X_t) - \phi(X_0) - \int_0^t M_s \chi(X_s)\, ds $$ -是一个局部鞅,则 $\mathbb A\phi = \chi$。因此任务有两部分:识别 $M_t\phi(X_t)$ 的可预测漂移以读出候选 $\chi$,并验证残差 $N_t$ 确实是一个局部鞅。 +是一个局部鞅,则 $\mathbb A\phi = \chi$。 + +因此任务有两部分:识别 $M_t\phi(X_t)$ 的可预测漂移以读出候选 $\chi$,并验证残差 $N_t$ 确实是一个局部鞅。 (1) 将伊藤公式应用于跳跃之间的 $Y_t = \exp(A_t)\phi(X_t)$ 并证明 $dY_t$ 的连续部分具有漂移 @@ -2832,7 +2947,9 @@ $$ = N^c_t + N^j_t , $$ -这是一个局部鞅。通过 {prf:ref}`lrr-def-extended-generator` 得出结论 $\mathbb A \phi = \chi$。 +这是一个局部鞅。 + +通过 {prf:ref}`lrr-def-extended-generator` 得出结论 $\mathbb A \phi = \chi$。 ``` ```{solution-start} lrr_ex4 @@ -2945,4 +3062,4 @@ $$ 这恰好是 {prf:ref}`lrr-def-extended-generator` 所要求的性质,所以 $\chi = \mathbb A \phi$。 ```{solution-end} -``` \ No newline at end of file +``` diff --git a/lectures/ross_recovery.md b/lectures/ross_recovery.md index 2b9a1773..40fefddd 100644 --- a/lectures/ross_recovery.md +++ b/lectures/ross_recovery.md @@ -81,7 +81,7 @@ translation: 它有几个重要的含义: -* 它展示了当假设成立时,状态价格转移数据如何能够识别市场的前瞻性自然分布 +* 它展示了当假设成立时,状态价格转移数据如何能够识别市场的前瞻性自然分布。 * 它提供了对有效市场假说的检验。 * 它揭示了金融领域的"暗物质":市场价格中所蕴含的罕见灾难性事件的概率。 @@ -89,8 +89,8 @@ translation: * 将状态价格、风险中性概率、定价核和自然概率联系起来的阿罗-德布鲁框架, * 罗斯的恢复定理及其通过佩龙-弗罗贝尼乌斯定理的证明, -* 一个从模拟的状态价格矩阵中恢复自然分布的实现,以及 -* 如何利用期权价格和前向方程来估计转移状态价格, +* 一个从模拟的状态价格矩阵中恢复自然分布的实现, +* 如何利用期权价格和前向方程来估计转移状态价格,以及 * 风险中性密度与恢复的自然密度之间的比较。 让我们导入所需的包。 @@ -109,6 +109,7 @@ mpl.rcParams['font.family'] = ['Source Han Serif SC'] # i18n ## 模型设置 + ### 阿罗-德布鲁状态价格 考虑一个离散时间、离散状态的经济。 @@ -257,6 +258,7 @@ $$ ## 恢复定理 + ### 化归为特征值问题 由于 $F$ 是随机矩阵,其行和为一:$F e = e$,其中 $e$ 是全为一的向量。 @@ -293,7 +295,6 @@ $$ 应用于恢复问题:佩龙根是 $\beta$(主观贴现因子),而佩龙向量 $z$ 通过 $D_{ii} = 1/z_i$ 确定 $D$。 - ### 罗斯的恢复定理 定理中的三个假设各自承担着特定的角色。 @@ -424,12 +425,16 @@ $$ 其中 $Z \geq 0$ 捕获风险调整所引起的向下移动,$\epsilon$ 是满足 $E[\epsilon \mid R-Z]=0$ 的残差。 -取期望得 +由于 $R^*$ 是风险中性测度下的市场收益,其期望即为无风险收益:$E[R^*] = R_f$。 + +因此,对上述表示取期望可得 $$ -E[R] = R_f + E[Z] > R_f. +E[R] = E[R^*] + E[Z] = R_f + E[Z], $$ +只要 $Z$ 以正概率取正值——即当两个密度确实存在差异时——该值就严格超过 $R_f$。 + ## 数值示例 我们现在从数值上演示恢复定理。 @@ -517,7 +522,7 @@ f_{ij} \propto p_{ij} = e^{-\rho T} e^{-\gamma(s_j - s_i)} f_{ij}, $$ -其中 $s_i = \ln S_i$,$s_j = \ln S_j$,$n(\cdot)$ 是标准正态密度,离散化概率 $f_{ij}$ 按行标准化。 +其中 $s_i = \ln (S_i/S_0)$ 和 $s_j = \ln (S_j/S_0)$ 是相对于今天指数水平度量的对数状态,$n(\cdot)$ 是标准正态密度,离散化概率 $f_{ij}$ 按行标准化。 下一个代码单元构造这个有限网格并构建 $P$。 @@ -576,6 +581,12 @@ print(f"Middle-state risk-free rate: {-np.log(P[5].sum()):.4f}") 它们在边界附近变化,因为有限网格截断并重新标准化了条件转移概率。 +上面打印的中间状态利率恰好等于 $\rho$,仅仅是因为这个校准满足 +$\mu = \tfrac{1}{2}\sigma^2(1+\gamma)$,而在 $\mu = 0.08$、$\sigma = 0.2$ 和 +$\gamma = 3$ 时该式成立。 + +这是此处所选数字的一个巧合,并非对代码的检验,也不是一般性质。 + ### 应用恢复定理 恢复定理要求计算 $P$ 的**佩龙特征向量**。 @@ -608,7 +619,12 @@ def recover_natural_distribution(P, tol=1e-10): if np.mean(z_candidate) < 0: z_candidate = -z_candidate - if β_candidate > 0 and np.all(z_candidate > tol): + # eig返回单位欧几里得范数的特征向量,因此一个合法的正z的最小元素 + # 可能远低于任何绝对阈值(此处其量级为e^{-2γ n_σ σ√T})。 + # 因此我们重新标定并检验符号,这使得检验对特征向量的尺度不敏感。 + z_candidate = z_candidate / np.max(np.abs(z_candidate)) + + if β_candidate > 0 and np.all(z_candidate > 0): β_recovered = β_candidate z = z_candidate break @@ -691,7 +707,7 @@ print(f"max |P - recovered kernel times F| = " 因为定价核是递减的(投资者害怕不好的结果),风险中性概率相对于自然测度过度加权坏状态而低估好状态。 -我们首先绘制自然分布与风险中性分布以及恢复的相对定价核 +我们首先绘制自然分布与风险中性分布以及恢复的相对定价核。 ```{code-cell} ipython3 mid = len(states) // 2 @@ -722,7 +738,7 @@ axes[1].set_title('恢复的相对定价核') plt.show() ``` -累积分布函数清楚地显示了一阶随机占优 +累积分布函数清楚地显示了一阶随机占优。 ```{code-cell} ipython3 cdf_nat = np.cumsum(f_nat) @@ -752,6 +768,10 @@ print(f"Natural CDF <= Risk-neutral CDF at all states: " 我们通过绘制相对定价核 $1/z$ 以及自然密度和风险中性密度之间的差距(对于一系列 $\gamma$ 值)来说明这一点。 +左图使用对数纵轴,因为在这些 $\gamma$ 值范围内 $1/z$ 跨越了大约七个数量级,所以在线性坐标轴上,较小 $\gamma$ 对应的曲线会紧贴横轴而无法看清。 + +在对数坐标轴上,其经济含义一目了然:由于 $1/z_j = e^{-\gamma s_j}$ 精确成立,$\log (1/z_j)$ 是对数状态 $s_j$ 的线性函数,斜率为 $-\gamma$,因此恢复出的核是对数线性的,$\gamma$ 就是它的斜率。 + ```{code-cell} ipython3 γs = [1.0, 2.0, 3.0, 5.0, 8.0] colors = cm.viridis(np.linspace(0.1, 0.9, len(γs))) @@ -774,6 +794,7 @@ for γ_val, color in zip(γs, colors): axes[1].plot(gross, f_nat_g - f_rn_g, color=color, lw=2, label=f'$\\gamma={γ_val:.0f}$') +axes[0].set_yscale('log') axes[0].set_xlabel('总回报率') axes[0].set_ylabel('相对核 $1/z$') axes[0].set_title('相对定价核与风险厌恶') @@ -792,6 +813,12 @@ plt.show() 较高的 $\gamma$ 放大了这个楔子。 +需要注意大 $\gamma$ 情形的一点:在中间状态下,一期债券价格在 $\gamma = 5$ 时升至 $1.1972$,在 $\gamma = 8$ 时升至 $2.1815$,对应的隐含无风险利率分别为 $-18\%$ 和 $-78\%$,而 $P$ 的最大行和达到了 $3.63$。 + +这是常见的 CRRA 预防性储蓄放大效应,而不是恢复计算本身的缺陷,因为对任何 $\gamma$,其佩龙根始终保持为 $e^{-\rho T}$。 + +我们纳入这些数值是为了在较宽的范围内展示定价核形状的变化,而并非作为对实际经济的合理校准。 + ## 恢复贴现率 恢复定理的一个有用副产品是*恢复的主观贴现因子* $\beta$,它等于 $P$ 的佩龙-弗罗贝尼乌斯特征值。 @@ -830,7 +857,7 @@ np.column_stack([true_ρs, recovered_ρs]) 恢复定理最引人注目的应用之一是它能够将市场恢复的灾难自然概率与附加于这些灾难的风险溢价分离开来。 -{cite:t}`barro2006rare` 和 {cite:t}`MehraPrescott1985` 讨论了罕见灾难如何可能解释股权溢价之谜。 +{cite:t}`MehraPrescott1985` 提出了股权溢价之谜,而 {cite:t}`barro2006rare` 认为罕见宏观经济灾难的小概率可能有助于解释这一谜题。 大幅下跌的风险中性概率之所以升高,既是因为(a)市场对此类事件赋予了高的自然概率,也是因为(b)定价核上调了坏结果的权重。 @@ -940,15 +967,15 @@ $$ 如果一个交易策略有非常高的夏普比率,那么某个定价核必须足够波动才能对该收益定价。 -汉森-贾格纳坦界 {cite}`Hansen_Jagannathan_1991` 指出,对于任何均值为 $\mu_\text{excess}$、标准差为 $\sigma_\text{asset}$ 的超额收益, +汉森-贾格纳坦界 {cite}`Hansen_Jagannathan_1991` 指出,对于任何均值为 $\mu_\text{excess}$、标准差为 $\sigma_\text{excess}$ 的超额收益, $$ -\frac{|\mu_\text{excess}|}{\sigma_\text{asset}} \leq e^{rT}\, \sigma(M), +\frac{|\mu_\text{excess}|}{\sigma_\text{excess}} \leq e^{rT}\, \sigma(\phi), $$ -其中 $M$ 是单期随机贴现因子,$r$ 是视界 $T$ 上的连续复利无风险利率。 +其中 $\phi$ 是 {eq}`eq:canon_ge` 中的单期定价核,$r$ 是视界 $T$ 上的连续复利无风险利率。 -罗斯的观点是,恢复给出了相关波动率 $\sigma(M)$ 的估计。 +罗斯的观点是,恢复给出了相关波动率 $\sigma(\phi)$ 的估计。 因此它给出了基于恢复中使用的相同股市信息的任何策略的夏普比率的上界。 @@ -967,7 +994,7 @@ $$ 那么基于 $I_t$ 的预测回归的 $R^2$ 上界为恢复核的方差: $$ -R^2 \leq e^{2rT} \, \sigma^2(M). +R^2 \leq e^{2rT} \, \sigma^2(\phi). $$ 只有投影到这个信息集上的核成分是相关的。 @@ -980,7 +1007,9 @@ $$ *有限状态空间:* -罗斯的定理是针对有限状态不可约马尔可夫链证明的;有界连续状态恢复需要 {doc}`misspecified_recovery` 中的额外结果。 +罗斯的定理是针对有限状态不可约马尔可夫链证明的。 + +在连续状态空间上的恢复需要有界性或紧致性限制:下文讨论的 {cite:t}`CarrYu2012` 为有界扩散建立了恢复结果。 在连续、无界的状态空间中(例如对数正态扩散),唯一性失效,因为任何指数 $e^{\alpha x}$ 都满足特征方程。 @@ -1020,6 +1049,12 @@ $$ 我们在后续讲座 {doc}`misspecified_recovery` 中讨论这一点。 +```{seealso} +{doc}`long_run_risk_operator` 对这一问题给出了更一般的算子处理方法,其中定价算子的主特征函数以及由此产生的随机贴现因子的乘性鞅分解,正是转移独立性所排除掉的内容。 + +请注意,在本讲座中符号 $\phi$ 表示定价核,而在那篇讲座中它表示主特征函数;本讲座中的特征向量 $z$ 才对应那篇讲座中 $\phi$ 所扮演的角色。 +``` + *经验估计:* 从观察到的期权价格中提取可靠的状态价格需要仔细的插值和外推。 @@ -1225,4 +1260,4 @@ plt.show() 恢复将市场估计的自然崩盘概率与附加于崩盘状态的定价核溢价分离开来。 ```{solution-end} -``` \ No newline at end of file +```