量化交易中文教材

第 02b 章 单位根、季节模型与带时间序列误差的回归

对应 Tsay 第 2 章后半部分(2.7–2.11 节)。第 02a 章处理的是平稳序列;本章先处理"没有固定水平"的单位根序列(价格、利率、汇率)以及如何检验单位根,再讨论季节序列、回归误差有序列相关时的正确做法(包括 HC/HAC 标准误),最后介绍介于平稳与单位根之间的长记忆过程。本章的回归部分是量化研究中出错最频繁、也最值得下功夫的地方。

学习目标

读完本章,你应当能够:

  1. 解释随机游走(含漂移)的预测性质与"冲击永久影响",区分差分平稳与趋势平稳,并知道各自该如何去除趋势。
  2. 写出 DF/ADF 检验回归,说明为什么其统计量服从非标准分布,并能正确选择确定性项(无、常数、常数加趋势)。
  3. 用常规差分与季节差分处理季节序列,推导航空模型的 ACF,知道何时改用虚拟变量(如一月效应)。
  4. 识别伪回归,按"回归—检查残差—差分或为残差建 ARMA—联合估计"的流程建立带时间序列误差的回归。
  5. 写出 White(HC)与 Newey–West(HAC)协方差估计量,理解它们为何能修正被夸大的 t 值,并能在重叠收益回归中正确选择截断参数。
  6. 说出分数差分过程的 ACF 衰减速度与谱特征,识别长记忆现象。

读前导读

这一章在解决什么问题

第 02a 章的工具都建立在"序列平稳"之上。可金融里最常见的原始数据——价格、利率、汇率、GDP——都不平稳。这一章处理三个由此引出的实际问题。

第一,怎么判断一个序列是不是"随机游走"型的不平稳。 CFA 二级时间序列一节讲过单位根、Dickey–Fuller 检验和"有单位根就差分"。本章补上两件 CFA 没讲透的事:为什么 DF 统计量不能用普通 t 临界值(它的分布被"累积求和"扭曲了);以及"带漂移的随机游走"和"围绕直线趋势波动"这两种外观相似的序列为什么要用不同方法处理。

第二,回归误差有序列相关时怎么办。 这是本章对量化工作最重要的部分。CFA 二级讲过:误差序列相关会让 OLS 标准误偏小、t 值虚高,可以用 Newey–West 修正。本章给出 Newey–West 的公式和它为什么成立("三明治"结构),并用一个模拟说明:用持续性高的信号预测未来 20 日累计收益时,一个毫无预测力的信号可以得到 t=6 的"显著"结果。另外,两个互不相关的随机游走做回归,常常得到很高的 \(R^2\) 和显著的 t 值,这就是伪回归,也是配对交易里最常见的陷阱。

第三,季节性和长记忆。 季度 EPS 的季节模式(你在财报分析中天天看到 Q4 高、Q1 低)可以用"季节差分 + 季节 MA"建模;小盘股的一月效应可以用虚拟变量回归。长记忆讲的是一种介于"平稳"和"单位根"之间的序列,它的自相关衰减得很慢,收益的绝对值(波动率的代理)就有这种性质。

需要先想起来的数学

1. 方差的累加与 \(\sqrt t\) 法则。 独立冲击相加,方差相加:\(\operatorname{Var}(a_1+\cdots+a_t)=t\sigma^2\),标准差按 \(\sqrt t\) 增长。这就是 CFA 里"年化波动 = 日波动 × \(\sqrt{252}\)"的来源,也是随机游走预测误差线性增长的原因。见 第 00 册第 07 章 概率中的分析工具。

2. 矩阵形式的 OLS。 \(\hat{\boldsymbol\beta}=(X'X)^{-1}X'\mathbf y\),其中 \(X'X=\sum_t\mathbf x_t\mathbf x_t'\)。你需要会读"矩阵 × 向量"和"矩阵的逆",不必会手算。核心是把 \(\hat{\boldsymbol\beta}-\boldsymbol\beta\) 写成 \((X'X)^{-1}X'\mathbf e\),再求它的方差。见 第 00 册第 06 章 线性代数速成。

3. 和的方差 = 所有协方差之和。 \(\operatorname{Var}(\sum_tz_t)=\sum_t\sum_s\operatorname{Cov}(z_t,z_s)\)。若 \(z_t\) 互不相关,只剩对角项 \(\sum_t\operatorname{Var}(z_t)\);若正相关,非对角项为正,方差更大。这一条是理解 HAC 的全部关键。例:两个方差为 1、相关 0.5 的变量相加,方差是 \(1+1+2\times0.5=3\),不是 2。

4. 二项式展开推广到非整数幂。 \((1+x)^d=1+dx+\frac{d(d-1)}{2!}x^2+\cdots\),对非整数 \(d\) 也成立(\(|x|<1\) 时)。例:\((1-x)^{0.5}\approx1-0.5x-0.125x^2\)。分数差分 \((1-B)^d\) 就是这样定义的。\(\Gamma\) 函数是阶乘的推广,\(\Gamma(n+1)=n!\)。见 第 00 册第 04 章 级数与收敛。

5. 大 O 与衰减速度。 "\(\rho_k\sim k^{2d-1}\)"表示 \(k\) 很大时 \(\rho_k\) 与 \(k^{2d-1}\) 成比例。多项式衰减(如 \(k^{-0.4}\))比指数衰减(如 \(0.9^k\))慢得多:\(k=100\) 时 \(100^{-0.4}\approx0.16\),而 \(0.9^{100}\approx0.00003\)。见 第 00 册第 07 章 概率中的分析工具。

怎么读这一章

核心必读:2.9.1–2.9.3(随机游走、漂移、趋势平稳的区别)、2.9.5 的 ADF 检验用法(会选确定性项、会读结论即可)、2.11 整节、2.12 整节。2.11 和 2.12 是量化研究中最容易出错的地方,建议配合量化实战 B、C 两部分的代码结果一起读。2.10 季节模型如果你不做季度基本面预测,可以只读 2.10.3 的一月效应例子。2.13 长记忆第一次只需记住"绝对收益的 ACF 衰减极慢"这个实证事实,Hosking 的五条性质可以跳过。DF 统计量为什么服从"布朗运动的泛函"不必深究,记住"临界值比正态更负"即可。建议顺序:2.9 → 2.11 → 2.12 → 2.10 → 2.13。


2.9 单位根非平稳

利率、汇率、资产价格往往是非平稳的:价格没有一个固定的水平可以回归。这类序列在时间序列文献中称单位根非平稳(unit-root nonstationary)序列,最典型的例子是随机游走。

2.9.1 随机游走

\[p_t=p_{t-1}+a_t, \tag{2.35}\]

\(p_0\) 为初值(例如股票 IPO 当日的对数价格),\(a_t\) 为白噪声。若 \(a_t\) 关于 0 对称,则给定 \(p_{t-1}\),\(p_t\) 上涨和下跌的概率各为 50%。把它看作 AR(1),系数恰为 1,不满足平稳条件 \(|\phi_1|<1\),故称单位根非平稳。

随机游走被广泛用作对数股价的模型。此时股价不可预测、不均值回复:对所有步长,

\[\hat p_h(\ell)=E(p_{h+\ell}\mid F_h)=p_h,\]

点预测就是当前值,没有实际价值。把 (2.35) 反复代入得 MA 表示

\[p_t=a_t+a_{t-1}+a_{t-2}+\cdots,\]

它有三点重要含义:

  1. 预测误差方差线性增长:\(e_h(\ell)=a_{h+\ell}+\cdots+a_{h+1}\),\(\operatorname{Var}[e_h(\ell)]=\ell\sigma_a^2\to\infty\)。预测区间宽度随步长无限增大,点预测的用处越来越小。
  2. 无条件方差无界,\(p_t\) 理论上可以取任意实数。对个股的对数价格这可以接受;但对市场指数,负的对数价格(指数小于 1)极为罕见,所以随机游走对指数是否合适值得怀疑。
  3. 冲击影响不衰减:对所有 \(i\),\(\psi_i=1\)。过去的每一个冲击都永久地留在序列里,经济学称之为冲击的永久效应(permanent effect),序列有强记忆。相应地,随机游走的样本 ACF 在任何固定滞后上都随样本增大趋于 1。

2.9.2 带漂移的随机游走

市场指数的对数收益有小的正均值,所以更合适的对数价格模型是

\[p_t=\mu+p_{t-1}+a_t, \tag{2.36}\]

\(\mu=E(p_t-p_{t-1})\) 称漂移(drift),代表对数价格的时间趋势。迭代得

\[p_t=t\mu+p_0+\sum_{i=1}^ta_i,\]

即一条斜率为 \(\mu\) 的时间趋势 \(t\mu\) 加上一个纯随机游走。条件标准差 \(\sqrt t\sigma_a\) 的增长慢于条件期望 \(t\mu\),所以时序图上呈现明显的斜率为 \(\mu\) 的趋势;\(\mu>0\) 时对数价格最终趋于 \(+\infty\)。

例(3M 月对数收益)。第 02a 章已知其无显著序列相关,模型为

\[r_t=0.0103+a_t,\qquad\hat\sigma_a=0.0637, \tag{2.37}\]

均值的标准误 0.0023,\(t=4.44\),1% 水平显著。构造 \(p_t=\sum_{i=1}^tr_i\)(设 1946 年 1 月的对数价格为 0)与去均值版本 \(p_t^*=\sum_{i=1}^ta_i\)(\(a_t=r_t-0.0103\))。原书图 2.10 中,\(p_t\) 有明显的上升趋势,斜率正是 0.0103;\(p_t^*\) 则没有趋势。这直观地显示了漂移项的重要性:一个看起来只有 1% 的月均值,经过几百个月的累加,决定了价格路径的整体形状。

常数项的含义因模型而异——这是动态模型与普通回归的一个重要区别:

模型 常数项的含义
MA(\(q\)) 序列均值
平稳 AR(\(p\)) / ARMA(\(p,q\)) 与均值的关系 \(\mu=\phi_0/(1-\phi_1-\cdots-\phi_p)\)
带漂移随机游走 对数价格的时间斜率

另一个区别:AR(1) 中 \(\phi_1\) 有意义的范围是 \(|\phi_1|\le1\),而普通回归 \(y_t=\beta_0+\beta_1x_t+a_t\) 中 \(\beta_1\) 可以取任意实数。

2.9.3 趋势平稳序列

\[p_t=\beta_0+\beta_1t+r_t,\]

\(r_t\) 为平稳序列(例如平稳 AR(\(p\)))。它与带漂移随机游走外观相似,本质却不同:

  • 带漂移随机游走:\(E(p_t)=p_0+\mu t\),\(\operatorname{Var}(p_t)=t\sigma_a^2\),均值和方差都随时间变化;
  • 趋势平稳:\(E(p_t)=\beta_0+\beta_1t\) 随时间变化,但 \(\operatorname{Var}(p_t)=\operatorname{Var}(r_t)\) 有限且不变。

处理方法也不同:趋势平稳序列可以通过对时间做线性回归去掉趋势而变平稳(方法见 2.11 节);单位根序列则需要差分。用错方法会出问题:对单位根序列去线性趋势,残差仍然非平稳;对趋势平稳序列差分,会引入不可逆的 MA 单位根(过度差分)。

金融直觉:两种模型对"一次大跌之后会怎样"给出完全不同的答案。 趋势平稳:价格围绕一条固定的直线波动。大跌后价格低于趋势线,之后会涨回去,冲击是暂时的。长期预测就是那条直线,预测误差有上限。 带漂移随机游走:没有固定的趋势线,大跌后新的起点就是现在的价格,之后从这里继续按漂移 \(\mu\) 增长,跌掉的不会补回来,冲击是永久的。长期预测误差按 \(\sqrt\ell\) 无限增长。 这对资产配置意义很大:如果股市是趋势平稳的,长期持有的风险会因均值回复而降低("时间分散化");如果是随机游走,长期风险按 \(\sqrt T\) 增长,没有这种好处。 推导拆解:过度差分为什么产生 MA 单位根。设 \(p_t=\beta_0+\beta_1t+r_t\),\(r_t\) 为白噪声。差分得 \(\Delta p_t=\beta_1+r_t-r_{t-1}\),这是 \(\theta_1=1\) 的 MA(1),正好落在不可逆的边界上,残差无法从数据中还原(见第 02a 章可逆性)。

2.9.4 一般的单位根模型:ARIMA

若 ARMA 模型的 AR 多项式以 1 为特征根,就得到自回归求和移动平均模型 ARIMA(autoregressive integrated moving-average)。它和随机游走一样有强记忆:MA 表示中的 \(\psi_i\) 不衰减,冲击有永久影响。

传统处理方法是差分:若 \(c_t=y_t-y_{t-1}=(1-B)y_t\) 服从平稳可逆的 ARMA(\(p,q\)),则称 \(y_t\) 服从 ARIMA(\(p\),1,\(q\))。金融中价格非平稳而对数收益平稳,所以对数价格可以看作 ARIMA 过程。若 \(y_t\) 与一阶差分 \(c_t\) 都非平稳,而二阶差分 \(s_t=c_t-c_{t-1}=y_t-2y_{t-1}+y_{t-2}\) 平稳,则 \(y_t\) 有双单位根;若 \(s_t\) 服从 ARMA(\(p,q\)),则 \(y_t\) 为 ARIMA(\(p\),2,\(q\))。若 \(s_t\) 的均值非零,\(y_t\) 含二次时间趋势。原书指出美国季度 GDP 隐含价格平减指数可能有双单位根,但其二阶差分的均值不显著(见原书习题 2.15)。

2.9.5 单位根检验:DF 与 ADF

要检验对数价格是随机游走还是带漂移随机游走,考虑

\[p_t=\phi_1p_{t-1}+e_t, \tag{2.38}\]
\[p_t=\phi_0+\phi_1p_{t-1}+e_t, \tag{2.39}\]

检验 \(H_0:\phi_1=1\) 对 \(H_a:\phi_1<1\)。这就是 Dickey & Fuller(1979)的单位根检验。对 (2.38),最小二乘估计为

\[\hat\phi_1=\frac{\sum_{t=1}^Tp_{t-1}p_t}{\sum_{t=1}^Tp_{t-1}^2},\qquad\hat\sigma_e^2=\frac{\sum_{t=1}^T(p_t-\hat\phi_1p_{t-1})^2}{T-1}\]

(取 \(p_0=0\))。Dickey–Fuller 统计量就是通常的 t 比:

\[DF\equiv t=\frac{\hat\phi_1-1}{\operatorname{std}(\hat\phi_1)}=\frac{\sum_{t=1}^Tp_{t-1}e_t}{\hat\sigma_e\sqrt{\sum_{t=1}^Tp_{t-1}^2}}.\]

关键在于它的分布不是通常的 t 分布或正态分布。若 \(e_t\) 是矩略高于 2 阶有限的白噪声,在原假设下 DF 统计量收敛到标准布朗运动的一个泛函(Chan & Wei 1988;Phillips 1987)。直观原因:在单位根下 \(p_{t-1}\) 本身是累积的随机游走,\(\sum p_{t-1}^2\) 的量级是 \(T^2\) 而不是 \(T\),通常的大数定律和中心极限定理不再适用。若真实 \(\phi_0=0\) 却用 (2.39) 估计,t 统计量收敛到另一种非标准分布;两种情况的临界值都要靠模拟得到(Fuller 1976 第 8 章)。若真实 \(\phi_0\ne0\) 且用 (2.39),t 统计量渐近正态,但需要非常大的样本。

补充:常用的 5% 渐近临界值大约为:无确定性项 −1.95,含常数 −2.86,含常数与线性趋势 −3.41。它们远比正态的 −1.645 更负,用正态临界值会过度拒绝单位根。

白话解释:为什么普通 t 检验在这里失灵。 普通回归里,解释变量是"稳定"的,\(\sum x_t^2\) 大约按 \(T\) 增长,于是 \(\hat\beta\) 的误差按 \(1/\sqrt T\) 缩小,中心极限定理让 t 统计量趋于正态。 单位根下,解释变量 \(p_{t-1}\) 本身是累积的随机游走,它的方差按 \(t\) 增长,所以 \(\sum p_{t-1}^2\) 按 \(T^2\) 增长,\(\hat\phi_1\) 收敛到 1 的速度是 \(1/T\)(称为"超一致"),比通常快得多。但代价是分布不再是正态:\(\hat\phi_1\) 系统性地偏向小于 1,t 统计量整体左移、左偏。"布朗运动的泛函"(布朗运动可以理解为随机游走在时间切得无限细时的连续版本;泛函是"以整条路径为输入、输出一个数的函数")只是这个极限分布的数学名字,实际使用只需查临界值表。 实操要点:原假设是"有单位根"。ADF 不显著只说明"数据不足以拒绝单位根",不等于"证明了有单位根"。当真实的 \(\phi_1\) 是 0.98 这种接近 1 的值时,ADF 在常见样本量下功效很低(练习 9)。

ADF 检验(augmented Dickey–Fuller)。实际序列的差分往往有序列相关,需要在回归中加入差分滞后项。对 AR(\(p\)) 序列 \(x_t\),回归

\[x_t=c_t+\beta x_{t-1}+\sum_{i=1}^{p-1}\phi_i\Delta x_{t-i}+e_t, \tag{2.40}\]

\(c_t\) 为确定性的时间函数(0、常数,或 \(\omega_0+\omega_1t\)),\(\Delta x_j=x_j-x_{j-1}\)。检验 \(H_0:\beta=1\) 对 \(H_a:\beta<1\),统计量

\[\text{ADF}=\frac{\hat\beta-1}{\operatorname{std}(\hat\beta)}.\]

(2.40) 只是带确定性项的 AR(\(p\)) 的重新参数化。也常写成差分形式

\[\Delta x_t=c_t+\beta_cx_{t-1}+\sum_{i=1}^{p-1}\phi_i\Delta x_{t-i}+e_t,\qquad\beta_c=\beta-1,\]

检验 \(H_0:\beta_c=0\) 对 \(H_a:\beta_c<0\)。确定性项的选择要与备择假设对应:价格有明显趋势时,要区分"带漂移的单位根"与"趋势平稳",就该用含常数与趋势的版本。

推导拆解:(2.40) 为什么"只是 AR(\(p\)) 的重新参数化"。以 AR(2) \(x_t=\phi_1x_{t-1}+\phi_2x_{t-2}+e_t\) 为例: 第一步:在右边加减 \(\phi_2x_{t-1}\):\(x_t=(\phi_1+\phi_2)x_{t-1}-\phi_2(x_{t-1}-x_{t-2})+e_t\)。 第二步:记 \(\beta=\phi_1+\phi_2\),\(\Delta x_{t-1}=x_{t-1}-x_{t-2}\),就得到 \(x_t=\beta x_{t-1}-\phi_2\Delta x_{t-1}+e_t\),正是 (2.40) 的形式。 第三步:单位根意味着特征方程 \(1-\phi_1z-\phi_2z^2=0\) 有解 \(z=1\),即 \(1-\phi_1-\phi_2=0\),也就是 \(\beta=1\)。所以检验 \(\beta=1\) 就是检验单位根。 加入差分滞后项的作用是"吸收"短期的序列相关,让 \(e_t\) 成为白噪声,否则 DF 的临界值不成立。

例 2.2 美国季度对数 GDP(1947Q1–2008Q4)。对数 GDP 呈上升趋势、样本 ACF 很高;一阶差分(增长率)围绕固定均值波动(近年波动变小)。按差分序列的 PACF 取 \(p=10\),ADF 统计量 −1.701,p=0.4297,不能拒绝单位根;\(\hat\beta=1+\hat\beta_c=1-0.0008=0.9992\)。(R 的 fUnitRoots::adfTest(gdp,lags=10,type="c") 得 −1.6109,p=0.4569。)

例:S&P 500 日对数指数(1950-01-03—2008-04-16,14,462 个观测)。检验它是否为带漂移随机游走,取 \(c_t=\omega_0+\omega_1t\),按差分序列 PACF 取 \(p=15\):ADF=−1.998,p=0.602,不能拒绝单位根;常数项显著(0.0019,t=2.39),时间趋势项在 5% 水平不显著(t=1.85,10% 显著)。结论:该期间 S&P 500 对数指数含单位根与正漂移,没有强的确定性时间趋势证据。(R 中 ar(diff(sp5),method='mle') 选 2 阶,adfTest(sp5,lags=2,type="ct") 得 −2.0179,p=0.5708;lags=15 得 −1.9946,p=0.5807——结论对滞后阶数不敏感。)

2.10 季节模型

有些金融序列呈周期性,例如公司季度每股收益(EPS),称季节时间序列。原书图 2.13 是 Johnson & Johnson 1960Q1–1980Q4 的季度 EPS(数据来自 Shumway & Stoffer 2000):指数增长、强季节性、波动随时间增大,周期为 4(月度数据如沃尔玛月销售额,周期为 12)。季节模型也用于天气衍生品和能源期货定价,因为环境序列季节性很强。

季节调整(seasonal adjustment):如果季节性是次要的,可以先去掉(美国政府发布的 GDP 增长率、失业率多为季调数据);但在预测中季节性与其他特征同等重要,应直接建模。本节采用后一思路。

2.10.1 季节差分

先取对数,理由有二:(1) 处理指数增长,对数尺度下增长变成线性;(2) 稳定方差,原书图 2.13(b) 中波动递增的模式在对数尺度下消失。对数变换在金融经济序列中很常用;若序列有非正值,可先加一个正常数。

设 \(x_t\) 为对数 EPS。原书图 2.14 显示:(a) \(x_t\) 的 ACF 很强、衰减很慢(单位根迹象);(b) 一阶差分 \(\Delta x_t=(1-B)x_t\) 的 ACF 在周期 4 的倍数处很强——这是季节序列的典型表现。按 Box–Jenkins–Reinsel(1994,第 9 章)再做季节差分:

\[\Delta_4(\Delta x_t)=(1-B^4)\Delta x_t=\Delta x_t-\Delta x_{t-4}=x_t-x_{t-1}-x_{t-4}+x_{t-5}.\]

一般周期 \(s\) 的季节差分为 \(\Delta_sy_t=y_t-y_{t-s}=(1-B^s)y_t\);与之相对,\(\Delta y_t=(1-B)y_t\) 称常规差分(regular differencing)。原书图 2.14(d) 中 \(\Delta_4\Delta x_t\) 的 ACF 在滞后 1 有显著负相关,在滞后 4 有边缘负相关。

2.10.2 乘积季节模型与航空模型

上述 ACF 形态在季节序列中很常见,由此产生了著名的航空模型(airline model):

\[(1-B^s)(1-B)x_t=(1-\theta B)(1-\Theta B^s)a_t, \tag{2.41}\]

\(|\theta|<1\),\(|\Theta|<1\)。AR 部分就是常规差分与季节差分,MA 部分只有两个参数。

ACF 推导。记 \(w_t=(1-B^s)(1-B)x_t\),展开右边:

\[w_t=a_t-\theta a_{t-1}-\Theta a_{t-s}+\theta\Theta a_{t-s-1}\qquad(s>1).\]

\(E(w_t)=0\),逐项计算协方差:

  • \(\operatorname{Var}(w_t)=(1+\theta^2+\Theta^2+\theta^2\Theta^2)\sigma_a^2=(1+\theta^2)(1+\Theta^2)\sigma_a^2\);
  • \(\operatorname{Cov}(w_t,w_{t-1})=-\theta(1+\Theta^2)\sigma_a^2\);
  • \(\operatorname{Cov}(w_t,w_{t-s+1})=\operatorname{Cov}(w_t,w_{t-s-1})=\theta\Theta\sigma_a^2\);
  • \(\operatorname{Cov}(w_t,w_{t-s})=-\Theta(1+\theta^2)\sigma_a^2\);
  • 其余滞后为 0。

于是

\[\rho_1=\frac{-\theta}{1+\theta^2},\qquad\rho_s=\frac{-\Theta}{1+\Theta^2},\qquad\rho_{s-1}=\rho_{s+1}=\rho_1\rho_s=\frac{\theta\Theta}{(1+\theta^2)(1+\Theta^2)},\]

其他 \(\ell>0\) 的 ACF 为 0。季度数据 \(s=4\) 时,只有滞后 1、3、4、5 非零。

推导拆解:以 \(\operatorname{Cov}(w_t,w_{t-1})\) 为例,演示"找共同冲击"的方法。 \(w_t=a_t-\theta a_{t-1}-\Theta a_{t-s}+\theta\Theta a_{t-s-1}\), \(w_{t-1}=a_{t-1}-\theta a_{t-2}-\Theta a_{t-s-1}+\theta\Theta a_{t-s-2}\)。 两式中同时出现的冲击只有 \(a_{t-1}\)(系数 \(-\theta\) 和 \(1\))和 \(a_{t-s-1}\)(系数 \(\theta\Theta\) 和 \(-\Theta\))。不同时刻的冲击不相关,所以协方差 \(=[(-\theta)(1)+(\theta\Theta)(-\Theta)]\sigma_a^2=-\theta(1+\Theta^2)\sigma_a^2\)。 其余各项完全一样:把两个表达式写出来,找共同下标,系数相乘再相加。这和第 02a 章 (2.6) 的思路相同。 金融直觉:\(\theta\) 刻画"本季度的意外有多少在下季度被修正",\(\Theta\) 刻画"今年 Q4 的意外有多少在明年 Q4 被修正"。乘积项 \(\rho_{s\pm1}\) 是两种修正交叉产生的。

与 MA(1) \(y_t=(1-\theta B)a_t\) 和季节 MA \(z_t=(1-\Theta B^s)a_t\) 比较:\(\rho_1=\rho_1(y)\),\(\rho_s=\rho_s(z)\),\(\rho_{s\pm1}=\rho_1(y)\rho_s(z)\)。滞后 \(s\pm1\) 处的 ACF 正是滞后 1 相依与滞后 \(s\) 相依的"交互作用",所以称乘积季节 MA 模型(multiplicative seasonal MA)。实践含义是:常规成分与季节成分的动态近似相互正交。

非乘积季节 MA:\(w_t=(1-\theta B-\Theta B^s)a_t\) (2.42),此时 \(\rho_{s+1}=0\)。参数个数相同,但乘积模型能产生更多非零 ACF,因此更节约。

例 2.3 J&J 对数 EPS 的航空模型(精确似然):

\[(1-B)(1-B^4)x_t=(1-0.678B)(1-0.314B^4)a_t,\qquad\hat\sigma_a=0.089,\]

两个 MA 参数的标准误为 0.080、0.101;残差 \(Q(12)=10.0\),p=0.44,模型充分。用前 76 个观测重估、保留最后 8 个检验:原点 \(h=76\)(1978Q4)做 1–8 步预测,再用第 01 章正态与对数正态的关系反变换回 EPS(注意 \(\sigma^2/2\) 修正)。原书图 2.15 显示预测呈强季节模式、接近实际值,95% 区间覆盖良好。

2.10.3 确定性季节性与虚拟变量

若季节模式稳定、近似确定性,可以用虚拟变量(dummy variables)。确定性季节性其实是乘积季节模型的特例:(2.41) 中 \(\Theta=1\) 时,季节 MA 因子 \((1-B^s)\) 与季节差分抵消,模型含确定性季节成分,此时虚拟变量与乘积季节模型的预测相同。但若季节模式不是确定性的,虚拟变量的预测会较差。Tsay 建议用精确似然估计乘积季节模型,尤其在样本小或可能存在确定性季节成分时。

例 2.4 CRSP Decile 1(最小市值组)指数月简单收益(1970-01—2008-12,468 个观测)。时序图看不出季节性,但样本 ACF 在滞后 1、12、24、36 显著。识别为季节 ARMA

\[(1-\phi_1B)(1-\phi_{12}B^{12})R_t=(1-\theta_{12}B^{12})a_t .\]

条件似然估计:\((1-0.18B)(1-0.87B^{12})R_t=(1-0.74B^{12})a_t\),\(\tilde\sigma_a=0.069\); 精确似然估计:\((1-0.188B)(1-0.951B^{12})R_t=(1-0.997B^{12})a_t\),\(\tilde\sigma_a=0.063\)。

精确似然下季节 AR 因子与季节 MA 因子几乎完全抵消(0.951 对 0.997),这既显示了精确似然法的价值,也提示季节行为可能是确定性的。于是构造一月虚拟变量 \(\text{Jan}_t\)(一月为 1,否则为 0),回归

\[R_t=\beta_0+\beta_1\text{Jan}_t+e_t\ \Rightarrow\ R_t=0.0029+0.1253\,\text{Jan}_t+e_t,\]

标准误 0.0033、0.0115(\(t=10.85\)),\(R^2=0.2016\)。残差 ACF 在 12、24、36 处的相关基本消失。结论:Decile 1 月收益的季节性主要来自一月效应(January effect),小盘股在一月平均多赚约 12.5%。

(R 中可用 jan=rep(c(1,rep(0,11)),39)、lm(d1~jan);季节 ARMA 用 arima(d1,order=c(1,0,0),seasonal=list(order=c(1,0,1),period=12)),注意 R 的 MA 系数取加号约定。Python 中对应 statsmodels 的 SARIMAX(..., seasonal_order=(1,0,1,12))。)

2.11 带时间序列误差的回归

很多应用关心两个时间序列之间的关系,例如市场模型(个股超额收益对指数超额收益的回归)、利率期限结构。考虑

\[y_t=\alpha+\beta x_t+e_t. \tag{2.43}\]

若 \(e_t\) 是白噪声,最小二乘估计是一致的;但 \(e_t\) 常有序列相关,此时 LS 估计可能不一致,标准误也不对。Tsay 直言这个模型应用广泛,却也是最常被误用的计量模型之一,原因就是误差的序列相依常被忽略。

2.11.1 美国周度利率的例子

\(r_{1t}\) 为 1 年期、\(r_{3t}\) 为 3 年期国债固定期限利率(1962-01-05—2009-04-10,2467 个周度观测,百分比)。严格说两者应用第 08a 章的多元方法联合建模,这里先忽略联立性。两者高度相关。

第一步:朴素回归

\[r_{3t}=0.832+0.930r_{1t}+e_t,\qquad\hat\sigma_e=0.523,\quad R^2=96.5\%, \tag{2.44}\]

系数标准误 0.024、0.004。看起来极好,但残差 ACF(原书图 2.19)高度显著且缓慢衰减,呈单位根非平稳特征。用现代术语:若两个利率都是单位根序列,残差仍非平稳说明它们不协整(not cointegrated,第 08b 章),数据不支持二者存在稳定的长期均衡关系——样本期内确实出现过收益率曲线倒挂(inverted yield curve)。

第二步:改用变化量。\(c_{1t}=(1-B)r_{1t}\),\(c_{3t}=(1-B)r_{3t}\),回归

\[c_{3t}=0.792c_{1t}+e_t,\qquad\hat\sigma_e=0.0690,\quad R^2=82.5\%, \tag{2.45}\]

标准误 0.0073。残差 ACF 仍有显著但小得多的序列相关。

第三步:为残差建模。由残差 ACF 设定 MA(1) 误差:

\[c_{3t}=\beta c_{1t}+e_t,\qquad e_t=a_t-\theta_1a_{t-1}. \tag{2.46}\]

计算机普及前需要 Cochrane–Orcutt 等专门方法(Greene 2003);如今只要误差模型平稳可逆,就可以用极大似然联合估计:

\[c_{3t}=0.794c_{1t}+e_t,\qquad e_t=a_t+0.1823a_{t-1},\qquad\hat\sigma_a=0.0678,\quad R^2=83.1\%, \tag{2.47}\]

标准误 0.0075、0.0196。滞后 1 的残差 ACF 不再显著;滞后 4、6、7 仍有小相关,但再加 MA 项改进很小。

比较结论:(1) (2.44) 的高 \(R^2\) 和系数 0.930 都有误导性——残差强序列相关,属于伪回归;(2) 对变化量,(2.45) 与 (2.47) 的 \(R^2\) 和系数很接近,加 MA(1) 只是边际改进(MA 系数数值小但高度显著);(3) 回归分析中检查残差的序列相依至关重要。把 (2.47) 写回水平形式:

\[r_{3t}=r_{3,t-1}+0.794(r_{1t}-r_{1,t-1})+a_t+0.182a_{t-1},\]

说明两个利率既同期相关,又各自序列相关。

白话解释:为什么 (2.44) 的 \(R^2=96.5\%\) 不可信。两个各自有趋势、各自漂移的序列,即使毫无经济联系,只要在样本期内碰巧都往上走(或都往下走),回归就会给出很高的 \(R^2\) 和巨大的 t 值。量化实战 B 部分的模拟显示:两条独立的随机游走,87% 的情况下 t 值"显著"。 识别信号就是残差:如果两个变量真有稳定的长期关系(协整),残差应该围绕 0 平稳波动;如果残差本身像随机游走(ACF 接近 1、缓慢衰减),说明回归只是拟合了两个趋势的偶然重合。 金融直觉:配对交易里,两只同行业股票的价格回归 \(R^2\) 高达 95% 是常态,但这本身说明不了任何事;能交易的是"价差会回来",即残差平稳。所以先看残差的 ADF,再谈对冲比例。

2.11.2 一般建模步骤

  1. 拟合线性回归,检查残差的序列相关;
  2. 若残差单位根非平稳,对因变量和解释变量都做一阶差分,回到第 1 步;若残差平稳,为残差识别一个 ARMA 模型,相应修改回归模型;
  3. 用极大似然联合估计,检查拟合模型,必要时改进。

检查残差序列相关时,用 Ljung–Box 而不是 Durbin–Watson。DW 统计量

\[DW=\frac{\sum_{t=2}^T(e_t-e_{t-1})^2}{\sum_{t=1}^Te_t^2}\approx2(1-\hat\rho_1)\]

只考虑滞后 1,而残差相依可能出现在更高阶,特别是有季节性时。

2.12 一致协方差矩阵估计:HC 与 HAC

有时我们的主要目的只是推断回归系数,而在误差有序列相关和/或条件异方差的情况下,OLS 系数估计本身仍然一致。这时不必为误差建完整模型,只要把系数的标准误算对即可。工具是异方差一致(heteroscedasticity consistent, HC;Eicker 1967,White 1980)和异方差与自相关一致(heteroscedasticity and autocorrelation consistent, HAC;Newey & West 1987)的协方差估计。

把回归写成

\[y_t=\mathbf x_t'\boldsymbol\beta+e_t,\qquad t=1,\dots,T, \tag{2.48}\]

\(\mathbf x_t\) 为含常数项的 \(k\) 维解释变量。LS 估计及其"通常"的协方差为

\[\hat{\boldsymbol\beta}=\Big(\sum_{t=1}^T\mathbf x_t\mathbf x_t'\Big)^{-1}\sum_{t=1}^T\mathbf x_ty_t,\qquad\operatorname{Cov}(\hat{\boldsymbol\beta})=\sigma_e^2\Big(\sum_{t=1}^T\mathbf x_t\mathbf x_t'\Big)^{-1}.\]

为什么后者会出错?写出 \(\hat{\boldsymbol\beta}-\boldsymbol\beta=(\sum\mathbf x_t\mathbf x_t')^{-1}\sum\mathbf x_te_t\),所以

\[\operatorname{Cov}(\hat{\boldsymbol\beta})=\Big(\sum\mathbf x_t\mathbf x_t'\Big)^{-1}\operatorname{Var}\Big(\sum_t\mathbf x_te_t\Big)\Big(\sum\mathbf x_t\mathbf x_t'\Big)^{-1}.\]

只有当 \(e_t\) 同方差且无序列相关时,中间的 \(\operatorname{Var}(\sum\mathbf x_te_t)\) 才化简为 \(\sigma_e^2\sum\mathbf x_t\mathbf x_t'\)。否则通常的公式不一致,并且在实践中(正相关的回归元与正相关的误差)往往夸大 t 值。HC 与 HAC 就是用不同方式估计中间这块"肉"(这类估计量因此被称为"三明治"估计量)。

推导拆解:用只有一个回归元、无常数项的情形看清楚(此时矩阵都退化成数)。 第一步:\(\hat\beta-\beta=\dfrac{\sum_tx_te_t}{\sum_tx_t^2}\)。分母视为给定,所以 \(\operatorname{Var}(\hat\beta)=\dfrac{\operatorname{Var}(\sum_tx_te_t)}{(\sum_tx_t^2)^2}\)。这就是"面包 × 肉 × 面包":两片面包是 \(1/\sum x_t^2\),肉是 \(\operatorname{Var}(\sum x_te_t)\)。 第二步:记 \(z_t=x_te_t\),和的方差等于所有协方差之和:\(\operatorname{Var}(\sum z_t)=\sum_t\operatorname{Var}(z_t)+2\sum_{j\ge1}\sum_t\operatorname{Cov}(z_t,z_{t-j})\)。 第三步:普通 OLS 公式假设 \(\operatorname{Var}(z_t)=\sigma_e^2x_t^2\)(同方差)且所有交叉项为零(无序列相关),于是肉 \(=\sigma_e^2\sum x_t^2\),约掉一片面包得 \(\sigma_e^2/\sum x_t^2\)。 第四步:White 只修正第一项(用 \(\hat e_t^2x_t^2\) 代替 \(\sigma_e^2x_t^2\));Newey–West 再把交叉项 \(\operatorname{Cov}(z_t,z_{t-j})\) 用 \(x_t\hat e_t\hat e_{t-j}x_{t-j}\) 估计出来、乘权重 \(w_j\) 后加上。 数值感觉:如果 \(z_t\) 的一阶自相关是 0.5 且只到一阶,那么真实方差约是普通公式的 \(1+2\times0.5=2\) 倍,标准误被低估约 \(\sqrt2\) 倍,t 值被夸大约 41%。20 日重叠收益相当于 19 阶都高度相关,t 值可以被夸大三四倍(量化实战 C 部分)。

White 估计量(HC):只容许异方差,用 \(\hat e_t^2\) 代替各期方差:

\[\operatorname{Cov}(\hat{\boldsymbol\beta})_{HC}=\Big(\sum\mathbf x_t\mathbf x_t'\Big)^{-1}\Big(\sum\hat e_t^2\mathbf x_t\mathbf x_t'\Big)\Big(\sum\mathbf x_t\mathbf x_t'\Big)^{-1}, \tag{2.49}\]

\(\hat e_t=y_t-\mathbf x_t'\hat{\boldsymbol\beta}\)。

Newey–West 估计量(HAC):再加上各滞后的交叉项:

\[\operatorname{Cov}(\hat{\boldsymbol\beta})_{HAC}=\Big(\sum\mathbf x_t\mathbf x_t'\Big)^{-1}\hat{\mathbf C}_{HAC}\Big(\sum\mathbf x_t\mathbf x_t'\Big)^{-1}, \tag{2.50}\]
\[\hat{\mathbf C}_{HAC}=\sum_{t=1}^T\hat e_t^2\mathbf x_t\mathbf x_t'+\sum_{j=1}^\ell w_j\sum_{t=j+1}^T\big(\mathbf x_t\hat e_t\hat e_{t-j}\mathbf x_{t-j}'+\mathbf x_{t-j}\hat e_{t-j}\hat e_t\mathbf x_t'\big),\]

\(\ell\) 为截断参数(bandwidth),\(w_j\) 为权函数,例如 Bartlett 权 \(w_j=1-j/(\ell+1)\),它保证估计出的矩阵正定(正定矩阵是"方差"概念在矩阵上的推广:用它算出的任何线性组合的方差都为正。不加权直接截断,估出来的"方差"可能是负数)。Newey–West 建议 \(\ell\) 取 \(4(T/100)^{2/9}\) 的整数部分。本质上,HAC 是用非参数方法估计 \(\sum_t\hat e_t\mathbf x_t\) 的长期方差(long-run variance)。

例(利率变化回归 (2.45) 中 \(c_{1t}\) 的 t 值):忽略序列相关和异方差时为 107.91;HC 修正后为 48.44(标准误 0.0163);HAC 修正后为 39.92(标准误 0.0198)。t 值缩小到不足原来的四成。另一个办法是在回归中加入滞后项来吸收残差序列相关:

\[c_{3t}=0.7971c_{1t}+0.1766c_{3,t-1}-0.1580c_{1,t-1},\qquad R^2=0.8312,\quad DW=1.9865,\]

还可以对它再用 HC/HAC 修正 t 值。

单个系数的 HC 方差:辅助回归法。\(k>1\) 时,令 \(\mathbf x_{-j,t}\) 为去掉 \(x_{jt}\) 后的 \((k-1)\) 维向量,做辅助回归

\[x_{jt}=\mathbf x_{-j,t}'\boldsymbol\gamma+v_t, \tag{2.51}\]

得残差 \(\hat v_t\),则

\[\operatorname{Var}(\hat\beta_j)_{HC}=\frac{\sum_{t=1}^T\hat e_t^2\hat v_t^2}{\big(\sum_{t=1}^T\hat v_t^2\big)^2}.\]

辅助回归使 \(\hat v_t\) 与其他回归元正交(Frisch–Waugh 定理),\(\hat\beta_j=\sum\hat v_ty_t/\sum\hat v_t^2\),从而 (2.49) 中第 \(j\) 个对角元化简为上式。

2.13 长记忆模型

平稳 ARMA 的 ACF 指数衰减;单位根序列的样本 ACF 对任何固定滞后都随样本增大趋于 1(Chan & Wei 1988;Tiao & Tsay 1983)。介于两者之间,有些序列的 ACF 以多项式速率缓慢衰减,称长记忆(long-memory)序列。典型例子是分数差分过程(fractionally differenced process):

\[(1-B)^dx_t=a_t,\qquad-0.5<d<0.5, \tag{2.52}\]

\(\{a_t\}\) 为白噪声。分数差分算子用非整数幂的二项展开定义:

\[(1-B)^d=\sum_{k=0}^\infty(-1)^k\binom dkB^k,\qquad\binom dk=\frac{d(d-1)\cdots(d-k+1)}{k!}.\]

Hosking(1981)给出的性质:

  1. \(d<0.5\) 时 \(x_t\) 弱平稳,有 MA(∞) 表示 \(x_t=a_t+\sum_{k\ge1}\psi_ka_{t-k}\),
    \[\psi_k=\frac{d(1+d)\cdots(k-1+d)}{k!}=\frac{(k+d-1)!}{k!(d-1)!}.\]
  2. \(d>-0.5\) 时可逆,有 AR(∞) 表示 \(x_t=\sum_{k\ge1}\pi_kx_{t-k}+a_t\),
    \[\pi_k=\frac{-d(1-d)\cdots(k-1-d)}{k!}=\frac{(k-d-1)!}{k!(-d-1)!}.\]
  3. \(-0.5<d<0.5\) 时 ACF 为
    \[\rho_k=\frac{d(1+d)\cdots(k-1+d)}{(1-d)(2-d)\cdots(k-d)},\qquad\rho_1=\frac{d}{1-d},\qquad\rho_k\approx\frac{(-d)!}{(d-1)!}k^{2d-1}\ (k\to\infty).\]
    (这里的阶乘按 Gamma 函数理解:\((-d)!=\Gamma(1-d)\),\((d-1)!=\Gamma(d)\)。)
  4. PACF 为 \(\phi_{k,k}=d/(k-d)\)。
  5. 谱密度(ACF 的 Fourier 变换)在零频附近满足
    \[f(\omega)\sim\omega^{-2d},\qquad\omega\to0, \tag{2.53}\]
    \(\omega\in[0,2\pi]\) 为角频率。

白话解释:这五条性质读起来很重,抓住两点就够。 第一,\(d\) 是"介于 0 和 1 之间的差分次数"。\(d=0\) 是白噪声(不差分),\(d=1\) 是随机游走的一阶差分(整数差分),\(0<d<0.5\) 是"差分了一部分",序列平稳但记性很长。 第二,记性有多长:取 \(d=0.3\),\(\rho_k\approx0.43\times k^{-0.4}\),于是 \(\rho_{10}\approx0.17\)、\(\rho_{100}\approx0.07\)。对比 \(\rho_1\) 相同(0.43)的 AR(1):\(\rho_{10}=0.43^{10}\approx0.0002\)。长记忆过程在 100 期后仍保留可观的相关,AR(1) 十期后就几乎忘光了。 "谱密度"(把序列分解成不同频率的波动、看每个频率贡献多少方差)在零频(即极长周期)处发散,说的是同一件事:极长期的成分占了很大的方差比重。

关键在于第 3、5 条:\(\rho_k\sim k^{2d-1}\) 是多项式衰减,比 ARMA 的指数衰减慢得多;\(d>0\) 时谱密度在零频处发散,而平稳 ARMA 的谱密度在 \([0,2\pi]\) 上有界。若 \((1-B)^dx_t\) 服从 ARMA(\(p,q\)),则称 \(x_t\) 为 ARFIMA(\(p,d,q\)),即允许非整数 \(d\) 的广义 ARIMA。

识别:样本 ACF 数值不大、衰减却很慢,提示长记忆。原书图 2.22 是 CRSP VW 与 EW 指数日简单收益的绝对值序列(1970-01-02—2008-12-31)的 ACF:数值小但衰减极慢,300 阶后仍在 5% 水平显著(参见 Ding, Granger & Engle 1993)。注意是收益的绝对值(波动的代理)而非收益本身有长记忆——这为第 03b 章的长记忆随机波动率模型埋下伏笔。纯分数差分模型的 \(d\) 可以用极大似然或低频对数周期图回归(log-periodogram regression)估计。长记忆在金融中受关注,部分源于连续时间模型中分数布朗运动的研究。


量化实战

本章内容在量化中的用途

  1. 配对交易与统计套利的前置检验。两条价格序列的回归高 \(R^2\) 毫无意义(伪回归),必须检查价差(回归残差)是否平稳。ADF 检验可以直接用在价差上,但要注意:用估计出的对冲比例构造的残差做 ADF,临界值要用 Engle–Granger 的协整临界值而不是普通 ADF 临界值(第 08b 章)。
  2. 预测回归的 t 值。用估值、动量等持续性高的变量预测未来 \(h\) 日累计收益时,因变量是重叠的,误差天然有 MA(\(h-1\)) 结构,OLS t 值会严重夸大;Fama–MacBeth 的时间序列 t、alpha 检验、事件研究里的累计异常收益检验都有同样问题。标准做法是 Newey–West HAC,截断参数至少取 \(h-1\)——Newey–West 的默认规则 \(4(T/100)^{2/9}\) 是为一般弱相关设计的,面对 20 日重叠远远不够。
  3. 日历效应。一月效应、星期效应(原书习题 2.7–2.9)、月末效应等的标准检验就是"虚拟变量回归 + HAC 标准误 + 残差序列相关检查"。
  4. 差分与否的工程决策。价格、利率、波动率指数等建模前先做单位根检验:价格用收益(差分),利率是否差分取决于检验结果和用途;单纯为平稳而过度差分会丢掉水平信息并引入不可逆 MA。
  5. 波动的长记忆。绝对收益的长记忆意味着短窗口的历史波动估计"忘得太快";HAR 型已实现波动模型、FIGARCH 等都是对此的回应。

Python 示例:ADF、伪回归、重叠收益与 HAC、一月效应、长记忆

import numpy as np
import pandas as pd
import statsmodels.api as sm
from statsmodels.tsa.stattools import adfuller, acf
from statsmodels.stats.diagnostic import acorr_ljungbox
from statsmodels.tsa.arima.model import ARIMA

rng = np.random.default_rng(2024)

# ---------- A. 单位根检验:带漂移随机游走 vs 趋势平稳 ----------
T = 2000
rw = np.cumsum(0.0004 + rng.normal(0, 0.01, T))            # 对数价格:带漂移随机游走
ts = 0.0004 * np.arange(T) + np.zeros(T)
e = np.zeros(T)
for t in range(1, T):                                      # 趋势 + 平稳 AR(1) 偏离
    e[t] = 0.9 * e[t-1] + rng.normal(0, 0.01)
ts = ts + e
for name, x in [("带漂移随机游走", rw), ("趋势平稳", ts)]:
    stat, p, lags, *_ = adfuller(x, regression="ct", autolag="AIC", result_object=False)
    print("%-8s ADF=%.3f p=%.3f (滞后 %d)" % (name, stat, p, lags))

# ---------- B. 伪回归:两条相互独立的随机游走 ----------
x = np.cumsum(rng.normal(size=T)); y = np.cumsum(rng.normal(size=T))
lev = sm.OLS(y, sm.add_constant(x)).fit()
dif = sm.OLS(np.diff(y), sm.add_constant(np.diff(x))).fit()
print("\n水平回归: beta=%.3f t=%.1f R2=%.3f 残差ACF(1)=%.3f"
      % (lev.params[1], lev.tvalues[1], lev.rsquared, acf(lev.resid, nlags=1)[1]))
print("差分回归: beta=%.3f t=%.2f R2=%.4f" % (dif.params[1], dif.tvalues[1], dif.rsquared))
tl, r2 = [], []
for _ in range(500):                                       # 重复 500 次看分布
    x = np.cumsum(rng.normal(size=500)); y = np.cumsum(rng.normal(size=500))
    f = sm.OLS(y, sm.add_constant(x)).fit(); tl.append(abs(f.tvalues[1]) > 1.96); r2.append(f.rsquared)
print("水平回归 |t|>1.96 的比例 = %.2f, R2 中位数 = %.2f, R2>0.3 的比例 = %.2f"
      % (np.mean(tl), np.median(r2), np.mean(np.array(r2) > 0.3)))

# ---------- C. 重叠收益的预测回归:OLS t vs HC vs HAC ----------
n, h = 3000, 20
sig = rng.normal(size=n)                                   # 无预测力的"信号"
sig = pd.Series(sig).rolling(20).mean().bfill().values     # 信号本身持续(像估值、动量类变量)
ret = rng.normal(0, 0.01, n + h)                           # 日收益:白噪声
fwd = np.array([ret[t+1:t+1+h].sum() for t in range(n)])  # 未来 20 日累计收益(重叠)
X = sm.add_constant(sig)
L = int(4 * (n / 100) ** (2 / 9))                          # Newey-West 建议的截断参数
res = {"OLS": sm.OLS(fwd, X).fit(),
       "HC(White)": sm.OLS(fwd, X).fit(cov_type="HC0"),
       "HAC(L=%d)" % L: sm.OLS(fwd, X).fit(cov_type="HAC", cov_kwds={"maxlags": L}),
       "HAC(L=%d)" % (2*h): sm.OLS(fwd, X).fit(cov_type="HAC", cov_kwds={"maxlags": 2*h})}
for k, v in res.items():
    print("%-12s beta=%.5f se=%.5f t=%.2f" % (k, v.params[1], v.bse[1], v.tvalues[1]))
print("残差 ACF(1,5,10,15,25):", acf(res["OLS"].resid, nlags=25)[[1, 5, 10, 15, 25]].round(3))

# 用蒙特卡洛看"虚假显著"的比例
rej = {"OLS": 0, "HAC(2h)": 0}
for _ in range(300):
    s = pd.Series(rng.normal(size=n)).rolling(20).mean().bfill().values
    rr = rng.normal(0, 0.01, n + h)
    f = np.convolve(rr[1:], np.ones(h), "valid")[:n]
    Xs = sm.add_constant(s)
    rej["OLS"] += abs(sm.OLS(f, Xs).fit().tvalues[1]) > 1.96
    rej["HAC(2h)"] += abs(sm.OLS(f, Xs).fit(cov_type="HAC", cov_kwds={"maxlags": 2*h}).tvalues[1]) > 1.96
print("名义 5% 检验的实际拒绝率:", {k: v / 300 for k, v in rej.items()})

# ---------- D. 一月效应:虚拟变量回归 ----------
months = np.tile(np.arange(1, 13), 39)                     # 39 年月度数据
jan = (months == 1).astype(float)
R = 0.003 + 0.125 * jan + rng.normal(0, 0.06, months.size)
m = sm.OLS(R, sm.add_constant(jan)).fit()
print("\n一月效应: b0=%.4f b1=%.4f t=%.2f R2=%.3f" % (*m.params, m.tvalues[1], m.rsquared))
print("原始序列 ACF(12,24):", acf(R, nlags=24)[[12, 24]].round(3),
      " 残差 ACF(12,24):", acf(m.resid, nlags=24)[[12, 24]].round(3))

# ---------- E. 长记忆:分数差分过程与 GPH 估计 ----------
d, N, K = 0.3, 6000, 3000
k = np.arange(1, K)
psi = np.r_[1, np.cumprod((k - 1 + d) / k)]                # psi_k = psi_{k-1}(k-1+d)/k
eps = rng.normal(size=N + K)
xlm = np.convolve(eps, psi, "valid")[:N]                   # MA(∞) 截断近似
print("\nFI(d=0.3) 样本 ACF(1,10,50,100):", acf(xlm, nlags=100)[[1, 10, 50, 100]].round(3))
print("理论 rho1=d/(1-d)=%.3f" % (d / (1 - d)))
# GPH 低频对数周期图回归:ln I(w_j) = c - 2d ln(2 sin(w_j/2)) + 误差
m_ = int(N ** 0.5)
I = np.abs(np.fft.fft(xlm - xlm.mean())) ** 2 / (2 * np.pi * N)
w = 2 * np.pi * np.arange(1, m_ + 1) / N
reg = sm.OLS(np.log(I[1:m_ + 1]), sm.add_constant(-2 * np.log(2 * np.sin(w / 2)))).fit()
print("GPH 估计 d = %.3f (se %.3f)" % (reg.params[1], reg.bse[1]))

关键输出:

带漂移随机游走  ADF=-1.715 p=0.744 (滞后 2)
趋势平稳     ADF=-10.533 p=0.000 (滞后 0)

水平回归: beta=0.012 t=1.6 R2=0.001 残差ACF(1)=0.986
差分回归: beta=-0.007 t=-0.30 R2=0.0000
水平回归 |t|>1.96 的比例 = 0.87, R2 中位数 = 0.15, R2>0.3 的比例 = 0.30
OLS          beta=0.02112 se=0.00355 t=5.95
HC(White)    beta=0.02112 se=0.00350 t=6.04
HAC(L=8)     beta=0.02112 se=0.00902 t=2.34
HAC(L=40)    beta=0.02112 se=0.01175 t=1.80
残差 ACF(1,5,10,15,25): [0.951 0.746 0.493 0.262 0.092]
名义 5% 检验的实际拒绝率: {'OLS': np.float64(0.61), 'HAC(2h)': np.float64(0.07)}

一月效应: b0=0.0037 b1=0.1295 t=12.98 R2=0.265
原始序列 ACF(12,24): [0.2   0.296]  残差 ACF(12,24): [-0.081  0.046]

FI(d=0.3) 样本 ACF(1,10,50,100): [0.404 0.111 0.057 0.006]
理论 rho1=d/(1-d)=0.429
GPH 估计 d = 0.359 (se 0.076)

解读:

  • ADF:带漂移随机游走 p=0.74,不能拒绝单位根;趋势平稳序列 ADF=−10.5,远低于含趋势版本的 5% 临界值约 −3.41,拒绝单位根。两条序列的时序图看上去都是"一条向上的线",只有检验能区分。
  • 伪回归:两条相互独立的随机游走做水平回归,87% 的情况下 \(|t|>1.96\),\(R^2\) 中位数 0.15,三成情况 \(R^2>0.3\);残差 ACF(1) 接近 1 是最直接的警报。差分后回归给出正确的"无关系"。
  • 重叠收益:信号对未来收益毫无预测力,OLS t 值却是 5.95,HC 只修正异方差、对此无能为力(6.04);Newey–West 默认截断 \(L=8\) 只修正了一半(2.34,仍"显著"),\(L=40\ge h\) 时 t=1.80,回到不显著。蒙特卡洛显示 OLS 的名义 5% 检验实际拒绝率高达 61%,HAC(\(L=2h\)) 降到 7%。残差 ACF 从 0.95 线性衰减到 20 阶附近,正是 MA(19) 的特征。这是本章对量化研究最重要的一课。
  • 一月效应:虚拟变量吸收了滞后 12、24 的自相关(0.20、0.30 → −0.08、0.05),与原书例 2.4 的逻辑一致。
  • 长记忆:理论 ACF 在滞后 1、10、50、100 处为 0.429、0.173、0.091、0.069;样本 ACF 偏低(长记忆过程的样本 ACF 有明显的向下偏差),但衰减远慢于任何低阶 AR。GPH 估计 \(\hat d=0.36\),标准误 0.08,覆盖真值 0.3。

本章小结

单位根序列(随机游走、ARIMA)的冲击有永久影响,预测误差方差随步长线性增长,样本 ACF 趋于 1;带漂移随机游走的常数项是趋势斜率,与趋势平稳序列外观相似但需要不同处理(差分对去趋势)。DF/ADF 检验的 t 统计量在单位根下服从非标准分布,临界值靠模拟得到,确定性项的设定要与备择假设对应。季节序列用常规差分加季节差分,航空模型 \((1-B)(1-B^s)x_t=(1-\theta B)(1-\Theta B^s)a_t\) 的 ACF 只在 \(1,s-1,s,s+1\) 非零;季节模式确定时用虚拟变量(一月效应)。带时间序列误差的回归必须检查残差:残差非平稳则差分,平稳则为残差建 ARMA 并联合估计,诊断用 Ljung–Box 而非 DW。只关心系数推断时,用 HC/HAC 三明治估计修正标准误,重叠收益要把截断参数取到至少 \(h-1\)。分数差分过程的 ACF 以 \(k^{2d-1}\) 多项式衰减、谱在零频发散,收益绝对值序列表现出这种长记忆。

概念 公式 / 要点
随机游走 \(p_t=p_{t-1}+a_t\);\(\hat p_h(\ell)=p_h\);\(\operatorname{Var}[e_h(\ell)]=\ell\sigma_a^2\)
带漂移随机游走 \(p_t=\mu+p_{t-1}+a_t=t\mu+p_0+\sum a_i\)
趋势平稳 \(p_t=\beta_0+\beta_1t+r_t\),方差有限不变
ARIMA(\(p\),1,\(q\)) \((1-B)y_t\) 为平稳可逆 ARMA(\(p,q\))
ADF 回归 \(\Delta x_t=c_t+\beta_cx_{t-1}+\sum_{i=1}^{p-1}\phi_i\Delta x_{t-i}+e_t\),\(H_0:\beta_c=0\),非标准分布
季节差分 \(\Delta_sy_t=(1-B^s)y_t\)
航空模型 ACF \(\rho_1=-\theta/(1+\theta^2)\),\(\rho_s=-\Theta/(1+\Theta^2)\),\(\rho_{s\pm1}=\rho_1\rho_s\)
DW \(\approx2(1-\hat\rho_1)\),只看一阶,不如 Ljung–Box
White HC \((X'X)^{-1}(\sum\hat e_t^2\mathbf x_t\mathbf x_t')(X'X)^{-1}\)
Newey–West HAC 中间项加 \(\sum_jw_j\sum_t(\mathbf x_t\hat e_t\hat e_{t-j}\mathbf x_{t-j}'+\text{转置})\),\(w_j=1-j/(\ell+1)\),\(\ell\approx4(T/100)^{2/9}\)
分数差分 \((1-B)^dx_t=a_t\);\(\rho_1=d/(1-d)\);\(\rho_k\sim k^{2d-1}\);\(f(\omega)\sim\omega^{-2d}\);\(\phi_{kk}=d/(k-d)\)

练习

基础

  1. 对随机游走 \(p_t=p_{t-1}+a_t\)(\(p_0=0\)),证明 \(\operatorname{Corr}(p_t,p_{t-\ell})=\sqrt{(t-\ell)/t}\),并据此解释为什么样本 ACF 在固定滞后处随样本增大趋于 1。 提示:\(\operatorname{Cov}(p_t,p_{t-\ell})=(t-\ell)\sigma_a^2\)。
  2. 带漂移随机游走中 \(\mu=0.0103\)、\(\sigma_a=0.0637\)(原书 3M 例)。求 120 个月后对数价格的条件均值与条件标准差,并说明"趋势在图上可见"的原因。 答案要点:均值 \(1.236\),标准差 \(0.0637\sqrt{120}\approx0.698\);均值随 \(t\) 线性增长而标准差随 \(\sqrt t\) 增长。
  3. 写出季度数据(\(s=4\))航空模型 \(w_t\) 的前 6 阶理论 ACF,取 \(\theta=0.678\)、\(\Theta=0.314\)(原书例 2.3)。 答案要点:\(\rho_1=-0.678/1.460\approx-0.464\),\(\rho_4=-0.314/1.099\approx-0.286\),\(\rho_3=\rho_5\approx0.133\),\(\rho_2=\rho_6=0\)。
  4. 说明 DW≈2 能否保证回归残差无序列相关,举一个反例。 答案要点:不能;例如残差为季节 MA \(e_t=a_t-0.8a_{t-4}\),\(\rho_1=0\),DW≈2,但滞后 4 相关很强。

进阶

  1. 推导 Bartlett 权下、仅含一个回归元(无常数)的 HAC 方差公式,并说明当 \(x_t\) 与 \(e_t\) 都有正的一阶自相关时为何 OLS 标准误偏小。 提示:\(\operatorname{Var}(\sum x_te_t)=\sum_t\sum_s E(x_tx_se_te_s)\),正相关使交叉项为正。
  2. 证明辅助回归公式 \(\operatorname{Var}(\hat\beta_j)_{HC}=\sum\hat e_t^2\hat v_t^2/(\sum\hat v_t^2)^2\)。 提示:Frisch–Waugh 定理给出 \(\hat\beta_j=\sum\hat v_ty_t/\sum\hat v_t^2\)。
  3. 用 \(\psi_k\) 的递推 \(\psi_k=\psi_{k-1}(k-1+d)/k\) 证明 \(\psi_k\sim k^{d-1}/\Gamma(d)\),并解释为什么 \(d<0.5\) 保证平稳。 提示:\(\sum\psi_k^2<\infty\iff2(d-1)<-1\)。
  4. 修改本章代码 C 部分:把预测期 \(h\) 依次取 5、20、60,记录 OLS、HAC(\(L=8\))、HAC(\(L=h\))、HAC(\(L=2h\)) 的实际拒绝率,给出截断参数选择的经验规则。
  5. 修改代码 A 部分:把趋势平稳序列的 AR 系数从 0.9 逐步提高到 0.99、0.999,观察 ADF 检验的功效如何下降,并讨论"不能拒绝单位根"在有限样本中的含义。

原书推荐习题:2.5(IBM 日收益绝对值的长程相依);2.6(季节模型与 1–24 步预测);2.7–2.9(星期效应:虚拟变量回归 + HAC + 带时间序列误差的回归,最贴近量化实务);2.12(Aaa 对 Baa 的带时间序列误差回归);2.14(期现货 1 分钟数据的回归,指数套利背景);2.15(GDP 平减指数的 ARIMA 建模与双单位根判断)。


原书对照

本章小节 原书章节 PDF 页码(书页)
2.9.1–2.9.2 随机游走、漂移 2.7.1 Random Walk;2.7.2 Random Walk with Drift p.91–95(书页 71–75)
2.9.3–2.9.4 趋势平稳、ARIMA 2.7.3 Trend-Stationary Time Series;2.7.4 General Unit-Root Nonstationary Models p.95–96(书页 75–76)
2.9.5 单位根检验 2.7.5 Unit-Root Test p.96–101(书页 76–81)
2.10 季节模型 2.8 Seasonal Models p.101–110(书页 81–90)
2.11 带时间序列误差的回归 2.9 Regression Models with Time Series Errors p.110–117(书页 90–97)
2.12 HC 与 HAC 2.10 Consistent Covariance Matrix Estimation p.117–121(书页 97–101)
2.13 长记忆 2.11 Long-Memory Models p.121–123(书页 101–103)
软件附录与习题 Appendix: Some SCA Commands;Exercises p.123–127(书页 103–107)