跳到正文

协整:Engle-Granger 两步法

两个都非平稳的序列,什么时候可以放心做水平回归?讲协整的定义、Engle-Granger 两步法、残差单位根检验的临界值坑,以及虚假回归为什么至今还在毁掉实证工作。

第 5 篇 · 共 12 篇 约 12 分钟

先看一个在宏观计量论文里横行了几十年的操作。把美国实际 GNP 对货币供给做回归,取一段几十年的样本,两个都是一路向上的趋势序列。R2R^2 跑出来 0.95,斜率的 tt 统计量 12.4,于是你写一篇论文,宣称货币供给驱动产出。今天再交出去,审稿人会直接退稿——不是因为结论不讨喜,而是这个回归本身什么都证明不了。

这个关系是胡扯。两个序列都带趋势,而任何两个趋势序列在有限样本里都会显得高度相关,哪怕它们由完全独立的随机游走生成。Granger & Newbold (1974) 证明了这一点:在”无关系”的零假设下,只要两个序列非平稳,tt 统计量就不服从 tt 分布,它发散到无穷大;R2R^2 也不收敛到零,而是收敛到一个非退化分布。这就是虚假回归,几十年来毁掉实证工作最多的一类计量错误。

不信的话自己跑一遍。生成两个完全独立的随机游走,把一个对另一个回归:

import numpy as np
import statsmodels.api as sm

rng = np.random.default_rng(42)
T = 200
x = np.cumsum(rng.standard_normal(T))
y = np.cumsum(rng.standard_normal(T))

X = sm.add_constant(x)
res = sm.OLS(y, X).fit()
print(f"R²: {res.rsquared:.3f}")
print(f"Slope t-stat: {res.tvalues[1]:.3f}")
print(f"Slope p-value: {res.pvalues[1]:.4f}")

换不同的种子多跑几次,大约 30% 的情况下你会看到 R2>0.5R^2 > 0.5、tt 统计量两位数——而 xx 和 yy 完全独立。这不是笔误也不是 bug,是带趋势变量回归的基本性质。以后看到一篇论文把一个 I(1) 变量对另一个 I(1) 变量做回归、又没先检验协整或差分,那篇论文多半是错的。

那水平回归是不是永远不能做?不是。Engle & Granger (1987) 给出了例外成立的条件,这是现代计量经济学最有用的思想之一,也是最常被误用的之一。核心洞见:如果两个或多个 I(1) 序列共享一个长期均衡关系,那么它们的某个特定线性组合是 I(0),即便每个序列在水平上非平稳。回到上面的例子:如果货币供给和 GNP 都被一个共同的长期趋势驱动(经济增长,两者都跟着长),那么”对数货币供给减对数 GNP”这样的线性组合就可能平稳。那个平稳组合叫协整关系,它给你一个平稳的误差修正项,可以放进动态模型——正确建模之后,推断就是有效的。

这篇文章详细讲 Engle-Granger 两步法,包括它出名的弱点。教科书出处是 Hamilton (1994, 第 19 章)、Tsay (2010, 第 7-8 章)、Campbell, Lo & MacKinlay (1997, 第 6 章),下文用到哪条引到哪条。

协整的正式定义

KK 个时间序列 yt=(y1t,…,yKt)′\mathbf{y}_t = (y_{1t}, \ldots, y_{Kt})' 是协整的,如果同时满足:

  1. 每个 yity_{it} 是 I(1),也就是水平非平稳、一阶差分平稳。
  2. 存在非零向量 β=(β1,…,βK)′\boldsymbol{\beta} = (\beta_1, \ldots, \beta_K)' 使得 β′yt\boldsymbol{\beta}' \mathbf{y}_t 是 I(0),也就是平稳。

向量 β\boldsymbol{\beta} 叫协整向量,组合 β′yt\boldsymbol{\beta}' \mathbf{y}_t 就是协整关系。经济上把它读作长期均衡:对它的偏离是平稳的,所以偏离必须最终回到零附近。

一个系统里可以有不止一个这样的组合。如果存在多个协整关系,系统的协整秩 r>1r > 1。对 KK 个变量,秩可以从 0(无协整)取到 K−1K - 1;秩为 KK 意味着所有变量本身平稳,跟条件 1 矛盾。记住这个秩的概念——Engle-Granger 方法最深的局限就埋在这里,后面会讲到。

第一步:用 OLS 估计协整向量

把 y1ty_{1t} 对 (y2t,…,yKt)(y_{2t}, \ldots, y_{Kt}) 做回归(或者你喜欢的任何归一化):

y1t=β1+β2y2t+⋯+βKyKt+uty_{1t} = \beta_1 + \beta_2 y_{2t} + \cdots + \beta_K y_{Kt} + u_t

注意右边没有 y1ty_{1t}:必须有一个变量被归一化(这里是 y1ty_{1t} 作为因变量),对应系数设为 1。这只是一个归一化选择,你也可以选别的变量放左边——这个选择后面会回来咬人,先记下。OLS 估计 β^EG\hat{\boldsymbol{\beta}}_{EG} 就是协整向量的估计。

这个估计有一个不寻常的性质:超一致。β^EG−β=Op(1/T)\hat{\boldsymbol{\beta}}_{EG} - \boldsymbol{\beta} = O_p(1/T),比通常的 Op(1/T)O_p(1/\sqrt{T}) 收敛快得多,原因是 OLS 目标函数在协整下有非标准极限,Stock (1987) 给了证明。直觉是这样的:因变量和自变量都在发散,但被协整关系绑在一起,所以 β^\hat{\boldsymbol{\beta}} 里的噪声被低阶项主导。超一致性是整个两步法能成立的支柱——第一步的估计误差衰减够快,第二步才能把 u^t\hat{u}_t 当作真残差的合格替身。

第二步:对残差做单位根检验

算出 OLS 残差 u^t=y1t−β^1−β^2y2t−⋯−β^KyKt\hat{u}_t = y_{1t} - \hat{\beta}_1 - \hat{\beta}_2 y_{2t} - \cdots - \hat{\beta}_K y_{Kt},对它跑 ADF 检验:

Δu^t=ρu^t−1+∑j=1kγjΔu^t−j+et\Delta \hat{u}_t = \rho \hat{u}_{t-1} + \sum_{j=1}^k \gamma_j \Delta \hat{u}_{t-j} + e_t

零假设 H0:ρ=0H_0: \rho = 0,残差里有单位根,即无协整;备择 ρ<0\rho < 0,残差平稳,即协整。ADF 统计量比临界值更负,就拒绝无协整。

整个方法的成败都压在这一步上,而这一步恰恰是被用错最多的地方。最常见的错:拿标准 ADF 的临界值来判残差。不行。u^t\hat{u}_t 不是观测到的序列,是第一步估出来的,β^\hat{\boldsymbol{\beta}} 的估计误差会让残差”看起来更平稳”,所以残差基检验的临界值绝对值必须更大。Engle & Yoo (1987) 给残差基 ADF 制了表:K=3K = 3 时 5% 临界值大约 −3.37-3.37,而标准 ADF 是 −2.86-2.86。用 −2.86-2.86 去判,你会拒绝得太频繁,把不协整的系统判成协整。MacKinnon (1996) 后来用响应面回归给出了更精确的临界值,大多数软件实现的就是它;一般规律是临界值随 KK 增大而更负,但幅度不大。

还有三个容易踩的坑,都出在检验的设定上。其一,滞后差分个数 kk 必须选到让残差白化,通常按 AIC 或 Schwert 规则;滞后不够,残差有自相关,检验的规模就是错的。其二,如果变量本身带确定性趋势,协整回归里要加趋势项,不加则残差设定错误,检验对象就不对。其三,别拿第一步回归的高 R2R^2 当协整证据——开头已经演示过,趋势变量之间没有任何关系 R2R^2 也能很高,能算数的只有残差上的 ADF。

另外注意,这一切都建立在”每个变量都是 I(1)“的前提上。这个前提 Engle-Granger 自己不检验,你得先对每个变量单独跑单位根检验。混进一个 I(0) 变量,检验就无效了。

如果你正确地拒绝了零假设,就有证据表明变量协整,协整向量近似 β^EG\hat{\boldsymbol{\beta}}_{EG},可以进入下一步:建动态模型。

代码:statsmodels 里的 Engle-Granger

statsmodels 把两步都包好了,coint 直接用 MacKinnon 响应面的临界值:

import pandas as pd
import statsmodels.api as sm
from statsmodels.tsa.stattools import adfuller, coint


X = sm.add_constant(y['log_gnp'])
eg_reg = sm.OLS(y['log_money'], X).fit()
print(eg_reg.summary())

residuals = eg_reg.resid

# 来自 MacKinnon 响应面的 Engle-Granger 临界值
eg_stat, eg_p, eg_crit = coint(y['log_money'], y['log_gnp'], trend='c', autolag='aic')[:3]
print(f"Engle-Granger test stat: {eg_stat:.3f}, p-value: {eg_p:.3f}")

# 备选:带自定义临界值的残差 ADF
adf_stat, _, _, _, adf_crit, _ = adfuller(residuals, regression='c', autolag='aic')
print(f"ADF on residuals: {adf_stat:.3f}")
print(f"Standard ADF crit values: {adf_crit}")
# 跟 Engle-Granger 临界值比较(例如 K=3 在 5% 下 -3.37)

手动跑 adfuller 那条路要自己换临界值——adfuller 打印的是标准 ADF 临界值,正是上一节说不能用的那套。留着它是为了让你看清两套临界值差多少。

确立协整之后:误差修正模型

协整确立后,把动态写成 VECM:

Δy1t=α1u^t−1+∑j=1p−1Γ1jΔyt−j+error1t\Delta y_{1t} = \alpha_1 \hat{u}_{t-1} + \sum_{j=1}^{p-1} \Gamma_{1j} \Delta \mathbf{y}_{t-j} + \text{error}_{1t} Δy2t=α2u^t−1+∑j=1p−1Γ2jΔyt−j+error2t\Delta y_{2t} = \alpha_2 \hat{u}_{t-1} + \sum_{j=1}^{p-1} \Gamma_{2j} \Delta \mathbf{y}_{t-j} + \text{error}_{2t}

以此类推。滞后残差 u^t−1\hat{u}_{t-1} 上的系数 αi\alpha_i 是调整速度:上期偏离均衡一个单位,yity_{it} 在 tt 期修正多少。稳定的误差修正机制要求:对负责修正、恢复均衡的变量(协整回归里的因变量),调整系数应该为负;更一般地,各 αi\alpha_i 的合力必须把偏离往回推,而不是推得更远。只要协整成立,Granger 表示定理就保证至少有一个 αi\alpha_i 非零——误差修正形式不是建模选择,是协整的必然结果(Engle & Granger, 1987)。

外生性:谁在做调整

把 VECM 的前两个方程再摆出来,这次只盯着 α\alpha:

Δy1t=α1u^t−1+∑Γ1jΔyt−j+error1t\Delta y_{1t} = \alpha_1 \hat{u}_{t-1} + \sum \Gamma_{1j} \Delta \mathbf{y}_{t-j} + \text{error}_{1t} Δy2t=α2u^t−1+∑Γ2jΔyt−j+error2t\Delta y_{2t} = \alpha_2 \hat{u}_{t-1} + \sum \Gamma_{2j} \Delta \mathbf{y}_{t-j} + \text{error}_{2t}

如果 α1=0\alpha_1 = 0,那么 y1ty_{1t} 相对于协整参数是弱外生的:它不对均衡偏离做任何调整,均衡全靠别的变量恢复。这时你可以把 y1ty_{1t} 建模为单变量过程(比如 ARIMA),不损失任何关于 β\boldsymbol{\beta} 的信息。

弱外生性重要在哪?注意它对一致性其实不是必需的——协整回归的 OLS 估计在有内生回归子时仍然超一致(Stock, 1987)。它换来的是有效性:若 α1=0\alpha_1 = 0,你可以在排除 y1ty_{1t} 动态方程的更小系统里估计 VECM,标准误更小。检验方法直接:在 VECM 里对 αi=0\alpha_i = 0 做 tt 检验或 Wald 检验,不能拒绝就把 yity_{it} 当弱外生处理。

还有一个更强的概念叫强外生性:αi=0\alpha_i = 0,且 yity_{it} 方程里所有滞后 Δyt\Delta \mathbf{y}_t 的系数也为零。满足强外生性时整个系统可以拆成一串独立方程来估计,没有跨方程相关。实践中很少见,知道它存在即可。

这个方法哪里不结实

Engle-Granger 概念干净、计算简单——一个 OLS 加一个 ADF,任何软件都能跑。但便宜是有代价的,而且每一条代价都有文献记录在案。

最根本的局限在协整秩上。方法只检验单个协整关系,还记得前面说过 KK 个变量的系统秩可以到 K−1K - 1——如果真有多个协整向量,Engle-Granger 的检验功效会下降,而且第一步那个”选谁放左边”的归一化选择就不再无害了。对唯一的协整关系,不同归一化估出的向量只差一个标量倍数,推断不变;有多个向量时,不同归一化会落到协整空间里不同的方向上,向量不再成比例,结果实质性地依赖于你把哪个变量放左边。二元情形调换变量只是给你一个成比例的向量,变量一多就没这个保障了。处理多个向量要用 Johansen 方法,下一篇文章讲。

小样本也是个实际问题。超一致是渐近性质,Banerjee, Dolado, Hendry & Smith (1986) 表明 T<100T < 100 时 β^\hat{\boldsymbol{\beta}} 的偏差可能很大,而且这个偏差会传进 VECM,把调整速度的估计也带得不一致。月度数据三十年才 360 个点,日度数据倒是容易过百,但金融日度数据又有别的毛病——总之样本量要心里有数。

功效方面,Phillips & Ouliaris (1990) 记录了检验对带弱长期系数的协整功效低:关系真实存在但绑得松时,检验经常看不见。前面提过的积分阶数问题在这里再算一笔账:方法假设所有变量 I(1),混进 I(2) 或 I(0) 渐近理论就崩了,而预检验本身也有出错概率,等于给整个流程再加一层噪声。

最后是内生性。协整回归右边的变量在 VECM 里是内生的。这对长期系数没关系——超一致救了你——但动态方程的标准误必须处理内生性,直接用 OLS 标准误是不一致的。

一个金融例子:利率期限结构

看一个协整假设有真实经济含义的例子:短期利率 rtr_t(比如 3 个月国债)和长期利率 RtR_t(比如 10 年期国债收益率)。两者都高度持续,都被货币政策和通胀预期驱动。如果它们协整,利差 Rt−rtR_t - r_t(或某个缩放版本)就是平稳的。这在经济上说得通:利差是期限溢价,应该随货币政策和通胀预期的调整而随时间均值回归。

流程照前面走:把 RtR_t 对 rtr_t 回归,Rt=α+βrt+utR_t = \alpha + \beta r_t + u_t;算残差 u^t\hat{u}_t;对 u^t\hat{u}_t 跑 ADF,用 MacKinnon (1996) 的临界值。残差平稳,RtR_t 和 rtr_t 就协整,协整向量 (α,β)(\alpha, \beta) 描述短期和长期利率的长期关系。

拿美国国债的长月度样本自己跑一遍这个流程,典型结果是:Engle-Granger 检验在 5% 下拒绝无协整,估出的 β^\hat{\beta} 小于 1——长期利率的变动小于一对一跟随短期利率;残差 u^t\hat{u}_t 高度持续、自相关很高,但平稳。具体数字随样本期变化,别把它们当常数背。翻译成人话:短期和长期利率共享一个长期均衡,利差会偏离,但偏离会回来。

对交易的含义很直接。利差远离均衡值(∣u^t∣|\hat{u}_t| 大)时,预期它回归,可以构造均值回归交易:利差过低做多利差、过高做空,用 β^\hat{\beta} 作对冲比率。但要清楚这笔交易赌的是什么:协整关系在状态变化时可能整个崩掉,比如美联储改政策框架。Engle-Granger 检验是纯样本内的,抓不到这种断裂。监控这笔交易,别盲目信检验。

金融里还有哪些协整关系

理论上有均衡关系的地方,就有协整检验的用武之地,而且理论往往直接预测出协整向量长什么样。国际金融里有三个经典:购买力平价(PPP)说实际汇率平稳,等价于名义汇率、国内物价水平、外国物价水平三者协整,检验就是把对数名义汇率对国内价格和外国价格回归、再对残差跑 ADF;无抛补利率平价(UIP)说汇率预期变化等于利率差,意味着对数汇率和利率差协整——但经验证据很弱,UIP 的违反持续存在;费雪效应说名义利率等于实际利率加预期通胀,意味着名义利率和通胀协整。

货币经济学里,对数货币、对数价格、对数收入协整,协整向量就是货币需求函数,这个关系几十年来一直稳定。利率这边有刚讲过的期限结构。资产定价里,在稳定的股息贴现模型下,对数股价和对数股息协整,这是现值模型的检验形式。而对交易者最实际的一条:两个协整的资产就是配对交易策略的基础——上面期限结构例子里那套”偏离做反向、β^\hat{\beta} 当对冲比率”的逻辑,搬到任何协整资产对上都成立。

这批例子的价值在于每一个都有理论预测的具体协整向量,实证检验于是变成对理论的表决:PPP、货币需求、期限结构被证实,UIP 和简单费雪被拒绝。

什么时候 Engle-Granger 够用

看完弱点清单,你可能觉得这方法不能用了。不是。两个变量(K=2K = 2)加单个协整关系,它没有秩的问题,归一化也无害,用它完全合理。探索性分析里只想快速知道协整存不存在,它是成本最低的答案。理论驱动的模型里协整向量有自然解读——比如货币需求方程 log⁡M−log⁡P−log⁡Y=\log M - \log P - \log Y = 常数——它给出的估计直接可读。

超出这个范围就该换工具了:多于两个变量、可能存在多个协整向量、或者要对协整参数做形式推断,用 Johansen 方法。下一篇文章讲它。

参考文献

  • Banerjee, A., Dolado, J. J., Hendry, D. F., & Smith, G. W. (1986). Exploring equilibrium relationships in econometrics through static models: Some Monte Carlo evidence. Oxford Bulletin of Economics and Statistics, 48(3), 253-277.
  • Campbell, J. Y., Lo, A. W., & MacKinlay, A. C. (1997). The Econometrics of Financial Markets. Princeton University Press. Ch. 6.
  • Engle, R. F., & Granger, C. W. J. (1987). Co-integration and error correction: Representation, estimation, and testing. Econometrica, 55(2), 251-276.
  • Engle, R. F., & Yoo, B. S. (1987). Forecasting and testing in co-integrated systems. Journal of Econometrics, 35(1), 143-159.
  • Granger, C. W. J., & Newbold, P. (1974). Spurious regressions in econometrics. Journal of Econometrics, 2(2), 111-120.
  • Hamilton, J. D. (1994). Time Series Analysis. Princeton University Press. Ch. 19.
  • MacKinnon, J. G. (1996). Numerical distribution functions for unit root and cointegration tests. Journal of Applied Econometrics, 11(6), 601-618.
  • Phillips, P. C. B., & Ouliaris, S. (1990). Asymptotic properties of residual based tests for cointegration. Econometrica, 58(1), 165-193.
  • Stock, J. H. (1987). Asymptotic properties of least squares estimators of cointegrating vectors. Econometrica, 55(5), 1035-1056.
  • Tsay, R. S. (2010). Analysis of Financial Time Series (3rd ed.). Wiley. Ch. 7-8.