📑 查看全课大纲(第 20 / 20 节)
- 1.时间序列分析简介
- 2.平稳性检验与特征
- 3.纯随机性检验(白噪声检验)
- 4.时间序列预处理代码实战
- 5.自回归模型(AR 模型)
- 6.自相关系数与偏自相关系数
- 7.移动平均模型(MA)与自回归移动平均模型(ARMA)
- 8.平稳时序模型识别与参数估计
- 9.模型显著性检验、优化与序列预测
- 10.平稳时间序列建模代码实战
- 11.确定性序列分解与趋势分析
- 12.季节效应分析与综合波动分析
- 13.确定性时序分析代码实战
- 14.差分平稳化与 ARIMA 模型
- 15.残差自回归模型
- 16.ARCH / GARCH 模型及其衍生
- 17.异方差检验:Portmanteau Q 检验与 LM 检验
- 18.随机性非平稳建模与 GARCH 实战
- 19.ARIMAX 模型与单位根(DF/ADF)检验
- 20.协整检验与误差修正模型(ECM)
协整检验与误差修正模型(ECM)
约 60 分钟
小象实战讲义 · 时间序列分析
在现实经济与金融数据中,许多时间序列本身是非平稳的(如GDP、股价、消费支出),但它们之间往往存在长期的均衡关系。传统的多元回归要求所有变量平稳,否则会出现“虚假回归”问题。本节将介绍如何检验非平稳序列间的长期均衡关系(协整),并建立能够同时刻画长期均衡与短期动态调整的误差修正模型,为分析非平稳多元时间序列提供严谨的统计框架。
💡 核心导读
- 从单整到协整:理解“单整”概念(序列需几阶差分才平稳),掌握协整的核心思想——多个非平稳序列的线性组合可能是平稳的,这揭示了它们之间的长期均衡关系。
- Engle-Granger 两步法:学习最经典的协整检验与建模方法:第一步建立长期静态回归,第二步检验其残差是否平稳。若平稳,则协整关系成立,并可得到长期均衡方程。
- 误差修正模型(ECM):在协整关系基础上,构建能够描述变量如何围绕长期均衡进行短期动态调整的模型。理解误差修正项的经济含义及其系数(必须为负)的调整机制。
- Python 实战全流程:使用
statsmodels库完整实现从单整检验、协整检验到 ECM 模型构建与解释的实证分析流程。
从单整到协整:长期均衡关系的统计定义
单整(Integration)的概念
在深入协整之前,我们需要明确描述一个序列“非平稳程度”的工具——单整阶数。
- 零阶单整 I(0):如果序列 本身是平稳的,则称其为零阶单整序列,记为 。这意味着序列不存在单位根。
- 一阶单整 I(1):如果序列 本身不平稳,但其一阶差分序列 是平稳的,则称其为一阶单整序列,记为 。这意味着序列存在一个单位根。
- d 阶单整 I(d):推广而言,如果序列 需要进行 阶差分后才能变为平稳序列,则称其为 阶单整序列,记为 。这意味着序列存在 个单位根。
单整的性质(线性组合的阶数):
- 若 ,则对任意非零实数 ,有 。
- 若 ,则对任意非零实数 ,有 。
- 若 ,则对任意非零实数 ,有 。
- 若 ,令 ( 为非零实数):若 ,则 通常为 ,即 ;当 时,一般 ,仅当存在协整向量(特定的 )时 才可能小于 。
第四条性质是协整思想的萌芽:两个同阶单整的非平稳序列,它们的某个线性组合可能变成更低阶(甚至零阶)的单整序列,即平稳序列。
协整(Cointegration)的定义
协整概念由 Engle 和 Granger 于1987年正式提出,解决了非平稳序列建模的难题。
定义:考虑 个时间序列 。如果满足:
- 它们都是 阶单整序列,即 ;
- 存在一个非零向量 ,使得线性组合 是一个 阶单整序列,且 (通常 )。
则称序列 与 之间存在 (d, b) 阶协整关系,向量 称为协整向量。 称为均衡误差,它衡量了系统在 期偏离长期均衡的程度。
最常用的情形:当 时,即所有序列都是 ,但它们的某个线性组合是 (平稳)。这表明,尽管各个序列独自有随机游走的趋势,但它们被一种内在的“经济引力”捆绑在一起,长期内不会偏离太远。例如,居民消费 和可支配收入 都是 ,但 是平稳的,意味着消费与收入存在长期稳定的比例关系。
协整的意义:
- 避免了虚假回归:传统回归对非平稳序列建模时,即使变量间毫无关系,也可能得到显著的回归结果(高 、显著的 统计量),这是因为趋势主导了回归。协整关系确保了回归残差是平稳的,从而回归结果反映了真实的长期均衡关系,而非共同趋势的伪相关。
- 拓宽了建模范围:允许对非平稳序列直接建立有意义的回归模型,只要它们之间存在协整关系。
Engle-Granger 协整检验与建模两步法
Engle-Granger 两步法(EG 两步法)是检验并建立双变量协整关系最直观的方法。
第一步:长期静态回归与残差提取
假设我们怀疑 序列 和 之间存在协整关系。首先,用最小二乘法(OLS)估计长期静态回归方程: 其中, 为误差项。
估计后得到协整向量的估计值 ,并计算均衡误差的估计序列(即回归残差):
第二步:对均衡误差进行平稳性检验
协整关系成立的核心是均衡误差 是平稳的 ()。因此,第二步就是对第一步得到的残差序列 进行单位根检验(如 ADF 检验)。
- 原假设 (): 非平稳(即存在单位根)。这意味着 与 不存在协整关系。
- 备择假设 (): 平稳。这意味着 与 存在协整关系。
注意:由于 是估计出来的残差,而非真实的 ,其分布与标准的 ADF 检验不同。因此,EG 检验有自己专用的临界值表。在实践中,我们通常直接使用 statsmodels.tsa.stattools.coint 函数,它内部已经考虑了这一点,直接返回基于 EG 检验原理的统计量和 p 值。
如果检验拒绝原假设(p 值小于显著性水平,如 0.05),则认为协整关系成立。第一步估计出的方程 即为长期均衡关系。
误差修正模型(ECM):从长期均衡到短期动态
协整关系刻画了变量间的长期均衡,但经济系统在短期常会偏离均衡。误差修正模型(Error Correction Model, ECM)正是用来描述变量如何围绕长期均衡进行短期动态调整的模型。它由长期均衡方程(协整关系)衍生而来。
ECM 模型的推导与形式
从长期均衡方程 出发,考虑一阶差分形式并加入动态调整: 其中:
- , 分别是 和 的短期波动。
- ,是上一期的均衡误差,代表了系统对长期均衡的偏离。
- 称为误差修正系数,是模型的核心。它衡量了系统对上一期偏离的纠正速度。
- 反映了 的当期波动对 当期波动的即时影响。
- 为白噪声扰动项,。
更一般的 ECM 模型可包含常数项和更多的滞后差分项:
误差修正系数的经济解释
误差修正系数 的符号和大小具有关键的经济含义:
- 符号必须为负:。这构成了 ECM 的“负反馈”机制。
- 若上一期 高于均衡值 (),负的 会使 ,从而对当期的 产生向下的拉力,促使 向均衡水平回落。
- 若上一期 低于均衡值 (),负的 会使 ,从而对当期的 产生向上的推力,促使 向均衡水平回升。
- 绝对值大小反映调整速度: 越大,系统对偏离的纠正速度越快,回归均衡的能力越强。 越小,调整越缓慢。若 ,则不存在误差修正机制,长期均衡关系对短期动态没有约束力。
因此,一个有效的 ECM 要求 显著小于 0。
Python 实战:从协整检验到 ECM 建模
以下代码完整演示了如何用 Python 实现 EG 两步法协整检验并构建 ECM 模型。
import numpy as np
import pandas as pd
import statsmodels.api as sm
from statsmodels.tsa.stattools import coint, adfuller
# 固定随机种子,确保结果可复现
np.random.seed(42)
n = 250
# ========== 1. 模拟生成具有协整关系的两个 I(1) 序列 ==========
# X_t: 一阶单整随机游走 I(1)
u_x = np.random.normal(0, 1.0, n)
x = np.cumsum(u_x) + 100.0 # 带漂移的随机游走
# 构造平稳的均衡误差 e_t: AR(1) 过程,I(0)
e = np.zeros(n)
u_e = np.random.normal(0, 0.8, n)
for t in range(1, n):
e[t] = 0.5 * e[t-1] + u_e[t]
# Y_t: 与 X_t 具有长期均衡关系 Y_t = 1.8 * X_t + e_t + 常数
# 因此 Y_t 也是 I(1),但与 X_t 协整
y = 1.8 * x + e + 20.0
# ========== 2. 单整阶数检验 (ADF检验) ==========
print("=== 单整阶数检验 (ADF检验) ===")
adf_x = adfuller(x)[1]
adf_y = adfuller(y)[1]
adf_dx = adfuller(np.diff(x))[1]
adf_dy = adfuller(np.diff(y))[1]
print(f"X 序列: 原始p值={adf_x:.4f} (I(1): {adf_x > 0.05}), 一阶差分后p值={adf_dx:.4e}")
print(f"Y 序列: 原始p值={adf_y:.4f} (I(1): {adf_y > 0.05}), 一阶差分后p值={adf_dy:.4e}")
print("结论:X 和 Y 均为 I(1) 序列。\n")
# ========== 3. Engle-Granger 协整检验 ==========
print("=== Engle-Granger 协整检验 ===")
# 使用 statsmodels 的 coint 函数,它基于 EG 原理
coint_stat, coint_pval, coint_crit_vals = coint(y, x, trend='c', autolag='AIC')
print(f"协整检验统计量 = {coint_stat:.4f}")
print(f"协整检验 p 值 = {coint_pval:.4e}")
print(f"存在显著协整关系 (p < 0.05): {coint_pval < 0.05}\n")
# ========== 4. EG 第一步:估计长期静态回归(协整方程) ==========
print("=== EG 第一步:长期均衡方程估计 ===")
# 添加常数项
X_static = sm.add_constant(x)
static_model = sm.OLS(y, X_static)
static_res = static_model.fit()
beta_0 = static_res.params[0]
beta_1 = static_res.params[1]
ecm_residuals = static_res.resid # 均衡误差估计序列 ê_t
print(f"长期均衡方程: Y_t = {beta_0:.4f} + {beta_1:.4f} * X_t")
print(f"回归 R-squared: {static_res.rsquared:.4f}\n")
# ========== 5. EG 第二步:对均衡误差进行平稳性检验 (ADF) ==========
print("=== EG 第二步:均衡误差平稳性检验 ===")
adf_resid = adfuller(ecm_residuals, autolag='AIC')
print(f"均衡误差序列的 ADF 检验 p 值 = {adf_resid[1]:.4e}")
print(f"均衡误差平稳 (p < 0.05): {adf_resid[1] < 0.05}\n")
# ========== 6. 构建误差修正模型 (ECM) ==========
print("=== 构建误差修正模型 (ECM) ===")
# 准备数据:差分序列和滞后一期的均衡误差
dy = np.diff(y) # ΔY_t
dx = np.diff(x) # ΔX_t
ecm_lag1 = ecm_residuals[:-1] # ê_{t-1},误差修正项
# 构建 ECM 回归数据框
ecm_df = pd.DataFrame({
'dy': dy,
'dx': dx,
'ecm_lag1': ecm_lag1
})
# 估计 ECM 模型: ΔY_t = α_0 + λ * ê_{t-1} + γ * ΔX_t + u_t
ecm_X = sm.add_constant(ecm_df[['ecm_lag1', 'dx']])
ecm_model = sm.OLS(ecm_df['dy'], ecm_X).fit()
alpha_0 = ecm_model.params['const']
lambda_ecm = ecm_model.params['ecm_lag1'] # 误差修正系数 λ
gamma_ecm = ecm_model.params['dx'] # 短期弹性系数 γ
print("ECM 模型回归结果:")
print(ecm_model.summary().tables[1])
print(f"\n误差修正系数 λ = {lambda_ecm:.4f} (p值: {ecm_model.pvalues['ecm_lag1']:.4e})")
print(f"短期影响系数 γ = {gamma_ecm:.4f} (p值: {ecm_model.pvalues['dx']:.4e})")
print(f"误差修正机制有效 (λ 显著为负): {lambda_ecm < 0 and ecm_model.pvalues['ecm_lag1'] < 0.05}")运行结果:
=== 单整阶数检验 (ADF检验) ===
X 序列: 原始p值=0.3953 (I(1): True), 一阶差分后p值=2.3582e-29
Y 序列: 原始p值=0.3570 (I(1): True), 一阶差分后p值=3.7793e-30
结论:X 和 Y 均为 I(1) 序列。
=== Engle-Granger 协整检验 ===
协整检验统计量 = -8.6720
协整检验 p 值 = 5.9902e-13
存在显著协整关系 (p < 0.05): True
=== EG 第一步:长期均衡方程估计 ===
长期均衡方程: Y_t = 22.0976 + 1.7780 * X_t
回归 R-squared: 0.9996
=== EG 第二步:均衡误差平稳性检验 ===
均衡误差序列的 ADF 检验 p 值 = 1.3143e-12
均衡误差平稳 (p < 0.05): True
=== 构建误差修正模型 (ECM) ===
ECM 模型回归结果:
==============================================================================
coef std err t P>|t| [0.025 0.975]
------------------------------------------------------------------------------
const 0.0085 0.050 0.169 0.866 -0.091 0.108
ecm_lag1 -0.4703 0.055 -8.602 0.000 -0.578 -0.363
dx 1.7792 0.019 92.087 0.000 1.741 1.817
==============================================================================
误差修正系数 λ = -0.4703 (p值: 9.8983e-16)
短期影响系数 γ = 1.7792 (p值: 1.8814e-94)
误差修正机制有效 (λ 显著为负): True结果解读:
- 单整检验:X 和 Y 原始序列的 ADF p 值均大于 0.05,无法拒绝“存在单位根”的原假设,说明它们是非平稳的 序列。而它们的一阶差分序列 p 值极小,是平稳的,验证了 的判断。
- 协整检验:EG 协整检验的 p 值约为 ,远小于 0.05,强烈拒绝“不存在协整关系”的原假设。表明 X 和 Y 之间存在显著的长期均衡关系。
- 长期均衡方程:估计结果为 。这与我们模拟数据时设定的真实关系 () 非常接近,且 高达 0.9996。
- 误差修正模型:
- 误差修正系数 ,显著为负,符合理论预期。这意味着当上一期 偏离长期均衡()时,系统会在本期以约 47% 的速度进行反向调整,使其回归均衡。
- 短期弹性系数 ,显著为正。表明 的当期波动 () 会对 的当期波动 () 产生几乎等比例的即时影响。
- 常数项不显著,这与许多 ECM 的设定相符。
📝 动手练一练
理论理解:假设检验发现居民消费 和可支配收入 都是 序列,且存在协整关系 。如果某期 (即上一期消费比长期均衡水平高出2个单位),且 ECM 模型中的误差修正系数 。请问,在其他条件不变的情况下,这一偏离会对本期的消费变动 产生多大的影响?方向是增加还是减少?
代码实践:修改上面实战代码中生成数据的部分,将长期均衡关系从 改为 ,同时将均衡误差 的 AR(1) 系数从 0.5 改为 0.8。重新运行整个分析流程,观察: a) 协整检验的 p 值是否依然显著? b) 长期均衡方程的估计值 是否接近 0.9? c) 误差修正系数 的绝对值是变大了还是变小了?这反映了系统调整速度的何种变化?
参考答案:
- 根据 ECM 模型, 会受到 项的影响。代入 ,,得到影响为 。由于 ,且上一期消费偏高 (),所以本期消费变动会受到向下的拉力,减少约 0.6 个单位,促使消费向均衡水平回调。
- a) 协整检验应依然显著,因为改变了系数但未破坏协整关系。b) 应接近 0.9。c) 均衡误差 的持久性增强 (AR系数从0.5到0.8),意味着偏离需要更长时间才能消除,因此误差修正系数 的绝对值可能会变小,反映系统调整速度变慢。
本章小结
本节深入探讨了多元非平稳时间序列分析的核心工具——协整与误差修正模型。
- 核心概念:单整 描述了序列的非平稳程度;协整 揭示了多个非平稳序列间存在的长期统计均衡关系,是避免虚假回归的关键。
- 核心方法:Engle-Granger 两步法 是检验和建立协整关系的经典方法:第一步用 OLS 估计长期静态回归,第二步检验其残差是否平稳。
- 核心模型:误差修正模型 (ECM) 在协整关系的基础上建立,它巧妙地将长期均衡信息 () 引入到短期差分模型 () 中。误差修正系数 (必须显著为负)量化了系统向长期均衡回调的速度与力度。
- 实战流程:完整的分析流程包括:1) 单整阶数检验;2) 协整关系检验;3) 估计长期均衡方程;4) 构建并解释 ECM 模型。
行动清单:
- 检验你的数据:拿到一组可能存在关联的经济时间序列(如汇率、利率、股价指数),首先用 ADF 检验判断其单整阶数。
- 寻找长期关系:如果序列同阶单整(如都是 ),立即使用
statsmodels.tsa.stattools.coint函数进行协整检验,探寻它们之间是否隐藏着长期均衡。 - 建模短期动态:一旦确认协整关系,尝试构建 ECM 模型。重点关注误差修正项系数的符号和显著性,这是模型是否有效的“试金石”。
— 小象教研组
领取《小象 11GB VIP 课件资料包与大厂真题手册》
包含全套实战 Jupyter 源码、清洗后数据集、大厂高频面试真题与专属学员答疑交流群。
- ✔完整 Python / 数据分析 Jupyter 实战源码
- ✔大厂真实业务数据集与练习题
- ✔微信扫码添加顾问免费领取;想学什么,直接告诉顾问
微信扫码添加顾问