diff --git a/lectures/ar1_turningpts.md b/lectures/ar1_turningpts.md index 4526c466..98489567 100644 --- a/lectures/ar1_turningpts.md +++ b/lectures/ar1_turningpts.md @@ -18,9 +18,9 @@ kernelspec: !pip install arviz pymc ``` -本讲座介绍了用于预测单变量自回归过程未来值函数的统计方法。 +本讲座介绍了用于预测一元自回归过程未来值函数的统计方法。 -这些方法旨在考虑这些统计数据的两个可能的不确定性来源: +这些方法旨在考虑这些统计量的两个可能的不确定性来源: - 影响转换规律的随机冲击 @@ -28,15 +28,16 @@ kernelspec: 我们考虑两类统计量: -- 由AR(1)过程控制的随机过程{y_t}的预期值y_{t+j} +- 由AR(1)过程控制的随机过程 $\{y_t\}$的预期值 $y_{t+j}$ -- 在时间t定义为未来值{y_{t+j}}_{j ≥ 1}的非线性函数的样本路径特性 +- 在时间 $t$ 被定义为未来值 $\{y_{t+j}\}_{j ≥ 1}$ 的非线性函数的样本路径特性 **样本路径特性**是指诸如"到下一个转折点的时间"或"到下一次衰退的时间"之类的特征。 为研究样本路径特性,我们将使用Wecker {cite}`wecker1979predicting`推荐的模拟程序。 为了考虑参数的不确定性,我们将使用`pymc`构建未知参数的贝叶斯联合后验分布。 + 让我们从一些导入开始。 ```{code-cell} ipython3 @@ -45,14 +46,13 @@ import arviz as az import pymc as pmc import matplotlib.pyplot as plt import matplotlib as mpl -FONTPATH = "fonts/SourceHanSerifSC-SemiBold.otf" -mpl.font_manager.fontManager.addfont(FONTPATH) -plt.rcParams['font.family'] = ['Source Han Serif SC'] - import seaborn as sns sns.set_style('white') colors = sns.color_palette() +FONTPATH = "fonts/SourceHanSerifSC-SemiBold.otf" +mpl.font_manager.fontManager.addfont(FONTPATH) +plt.rcParams['font.family'] = ['Source Han Serif SC'] import logging logging.basicConfig() @@ -67,60 +67,58 @@ $$ y_{t+1} = \rho y_t + \sigma \epsilon_{t+1}, \quad t \geq 0 $$ (ar1-tp-eq1) -其中标量$\rho$和$\sigma$满足$|\rho| < 1$和$\sigma > 0$; -$\{\epsilon_{t+1}\}$是一个均值为$0$、方差为$1$的独立同分布正态随机变量序列。 +其中标量 $\rho$ 和 $\sigma$ 满足 $|\rho| < 1$ 和 $\sigma > 0$; +$\{\epsilon_{t+1}\}$ 是一个均值为 $0$、方差为 $1$ 的独立同分布正态随机变量序列。 -初始条件$y_{0}$是一个已知数。 +初始条件 $y_{0}$ 是一个已知数。 -方程{eq}`ar1-tp-eq1`表明对于$t \geq 0$,$y_{t+1}$的条件密度为 +方程{eq}`ar1-tp-eq1`表明对于 $t \geq 0$,$y_{t+1}$ 的条件密度为 $$ f(y_{t+1} | y_{t}; \rho, \sigma) \sim {\mathcal N}(\rho y_{t}, \sigma^2) \ $$ (ar1-tp-eq2) -此外,方程{eq}`ar1-tp-eq1`还表明对于$t \geq 0$,$y_{t+j}$(其中$j \geq 1$)的条件密度为 +此外,方程{eq}`ar1-tp-eq1`还表明对于$t \geq 0, j \geq 1$,$y_{t+j}$ 的条件密度为 $$ f(y_{t+j} | y_{t}; \rho, \sigma) \sim {\mathcal N}\left(\rho^j y_{t}, \sigma^2 \frac{1 - \rho^{2j}}{1 - \rho^2} \right) $$ (ar1-tp-eq3) -预测分布{eq}`ar1-tp-eq3`假设参数$\rho, \sigma$是已知的,我们表示 -通过对它们进行条件化。 +预测分布{eq}`ar1-tp-eq3`假设参数 $\rho, \sigma$ 是已知的,我们通过以它们为条件来表达。 -我们还想计算一个不对$\rho,\sigma$进行条件化,而是考虑到它们的不确定性的预测分布。 +我们还想计算一个不以 $\rho,\sigma$ 为条件,而是考虑到它们的不确定性的预测分布。 -我们通过将{eq}`ar1-tp-eq3`对联合后验分布$\pi_t(\rho,\sigma | y^t)$进行积分来形成这个预测分布,该后验分布基于观测历史$y^t = \{y_s\}_{s=0}^t$: +根据一个观测历史 $y^t = \{y_s\}_{s=0}^t$,我们有联合后验分布 $\pi_t(\rho,\sigma | y^t)$。我们通过对 {eq}`ar1-tp-eq3`关于 $\pi_t(\rho,\sigma | y^t)$ 进行积分来形成这个预测分布: $$ f(y_{t+j} | y^t) = \int f(y_{t+j} | y_{t}; \rho, \sigma) \pi_t(\rho,\sigma | y^t ) d \rho d \sigma $$ (ar1-tp-eq4) -预测分布{eq}`ar1-tp-eq3`假设参数$(\rho,\sigma)$是已知的。 +预测分布{eq}`ar1-tp-eq3`假设参数 $(\rho,\sigma)$ 是已知的。 -预测分布{eq}`ar1-tp-eq4`假设参数$(\rho,\sigma)$是不确定的,但有已知的概率分布$\pi_t(\rho,\sigma | y^t )$。 +预测分布{eq}`ar1-tp-eq4`假设参数 $(\rho,\sigma)$ 是不确定的,但有已知的概率分布 $\pi_t(\rho,\sigma | y^t)$。 我们还想计算一些"样本路径统计量"的预测分布,这可能包括 - 到下一次"衰退"的时间, -- 未来8个周期内Y的最小值, +- 未来8个周期内 $Y$ 的最小值, - "严重衰退",以及 - 到下一个转折点(正或负)的时间。 -为了在我们不确定参数值的情况下实现这一点,我们将按以下方式扩展Wecker的{cite}`wecker1979predicting`方法。 +为了在我们对参数值不确定的情况下实现这一目标,我们将按以下方式扩展Wecker的{cite}`wecker1979predicting`方法。 -- 首先模拟一个长度为$T_0$的初始路径; -- 对于给定的先验分布,在观察初始路径后从参数$\left(\rho,\sigma\right)$的后验联合分布中抽取大小为$N$的样本; -- 对于每个抽样$n=0,1,...,N$,用参数$\left(\rho_n,\sigma_n\right)$模拟长度为$T_1$的"未来路径",并计算我们的三个"样本路径统计量"; -- 最后,将$N$个样本的所需统计量绘制为经验分布。 +- 首先,模拟一个长度为$T_0$的初始路径; +- 对于给定的先验分布,在观察初始路径后从参数 $\left(\rho,\sigma\right)$ 的后验联合分布中抽取大小为 $N$ 的样本; +- 对于每个抽样 $n=0,1,...,N$,用参数 $\left(\rho_n,\sigma_n\right)$ 模拟长度为 $T_1$ 的"未来路径",并计算我们的三个"样本路径统计量"; +- 最后,将 $N$ 个样本的所需统计量绘制为经验分布。 ## 实现 -首先,我们将模拟一个样本路径,从这个路径开始进行预测。 +首先,我们将模拟一个样本路径,并以此为基础进行我们的预测。 -除了绘制样本路径外,在假设已知真实参数值的情况下,我们将使用条件分布绘制$.9$和$.95$的覆盖区间 -上述{eq}`ar1-tp-eq3`所描述的。 +除了绘制样本路径外,在假设已知真实参数值的情况下,我们将使用上述{eq}`ar1-tp-eq3`所描述的条件分布绘制 $.9$ 和 $.95$ 的覆盖区间。 -我们还将绘制一系列未来值序列的样本,并观察它们相对于覆盖区间的分布情况。 +我们还将绘制一系列未来值序列的样本,并观察它们相对于覆盖区间落在何处。 ```{code-cell} ipython3 def AR1_simulate(rho, sigma, y0, T): @@ -184,15 +182,15 @@ plot_initial_path(initial_path) ## 路径属性的预测分布 -Wecker {cite}`wecker1979predicting` 提出使用模拟技术来表征某些统计量的预测分布,这些统计量是 $y$ 的非线性函数。 +Wecker {cite}`wecker1979predicting` 提出使用模拟技术来表征某些统计量的预测分布,这些统计量是 $y$ 的非线性函数。 -他将这些函数称为"路径属性",以区别于单个数据点的属性。 +他将这些函数称为"路径属性",以区别于单个数据点的属性。 -他研究了给定序列 $\{y_t\}$ 的两个特殊的前瞻性路径属性。 +他研究了给定序列 $\{y_t\}$ 的两个特殊的未来路径属性。 第一个是**到下一个转折点的时间**。 -* 他将**"转折点"**定义为 $y$ 连续两次下降中的第二个时间点。 +* 他将 **"转折点"** 定义为 $y$ 连续两次下降中的第二个时间点。 为了研究这个统计量,让 $Z$ 作为一个指示过程 @@ -218,7 +216,7 @@ $$ W_t(\omega):= \inf \{ k\geq 1 \mid Z_{t+k}(\omega) = 1\} $$ -Wecker {cite}`wecker1979predicting`还研究了**未来8个季度$Y$的最小值**,可以定义为随机变量: +Wecker {cite}`wecker1979predicting`还研究了**未来8个季度 $Y$ 的最小值**,可以定义为随机变量: $$ M_t(\omega) := \min \{ Y_{t+1}(\omega); Y_{t+2}(\omega); \dots; Y_{t+8}(\omega)\} @@ -271,7 +269,8 @@ $$ - "在一次或两次下降之后,$Y$ 将连续两个季度增长" 根据{cite}`wecker1979predicting`,我们可以通过模拟来计算每个时期 $t$ 的 $P_t$ 和 $N_t$ 的概率。 -## 类韦克算法 + +## 一个类似Wecker的算法 该过程包含以下步骤: @@ -392,9 +391,9 @@ def next_turning_point(omega): return up_turn, down_turn ``` -## 原始韦克方法 +## 原始Wecker方法 -现在我们通过模拟未来路径并计算预测分布来应用韦克的原始方法,这些预测分布以数据生成模型相关的真实参数为条件。 +现在我们应用Wecker的原始方法,以与数据生成模型相关的真实参数为条件,通过模拟未来路径并计算预测分布。 ```{code-cell} ipython3 def plot_Wecker(initial_path, N, ax): @@ -458,9 +457,9 @@ plt.show() ``` ## 扩展 Wecker 方法 -现在我们应用基于 {eq}`ar1-tp-eq4` 定义的 $y$ 的预测密度的"扩展" Wecker 方法,该方法考虑了参数 $\rho, \sigma$ 的后验不确定性。 +现在,我们应用我们的的"扩展" Wecker 方法。该方法基于 {eq}`ar1-tp-eq4` 定义的 $y$ 的预测密度,考虑了参数 $\rho, \sigma$ 的后验不确定性。 -为了近似 {eq}`ar1-tp-eq4` 右侧的积分,我们每次从联合后验分布中重复抽取参数,同时从模型 {eq}`ar1-tp-eq1` 中模拟未来值序列。 +为了近似 {eq}`ar1-tp-eq4` 右侧的积分,我们每次从模型 {eq}`ar1-tp-eq1` 中模拟未来值序列时,都重复地从联合后验分布中抽取参数。 ```{code-cell} ipython3 def plot_extended_Wecker(post_samples, initial_path, N, ax):