【python协整检验】在时间序列分析中,协整检验是判断多个非平稳时间序列之间是否存在长期稳定关系的重要工具。尤其在金融、经济等领域,协整关系的识别有助于构建有效的回归模型和预测系统。Python 提供了多种方法进行协整检验,如 Engle-Granger 两步法、Johansen 协整检验等。以下是对 Python 中常用协整检验方法的总结与对比。
一、协整检验简介
协整(Cointegration)是指两个或多个非平稳的时间序列之间存在线性组合,使得该组合变为平稳序列。这种关系表明这些变量在长期中具有某种均衡关系。协整检验的核心目标就是验证这种关系是否存在。
二、Python 中常用的协整检验方法
| 方法名称 | 适用场景 | 是否需要确定滞后阶数 | 是否支持多变量 | 检验结果类型 | 依赖库 |
| Engle-Granger 法 | 两变量协整关系检验 | 是 | 否 | 回归系数、残差检验 | statsmodels |
| Johansen 检验 | 多变量协整关系检验 | 是 | 是 | 特征值、迹统计量 | statsmodels |
| ADF 检验(单变量) | 检验单个序列是否平稳 | 是 | 否 | p 值 | statsmodels |
三、Python 实现示例
1. Engle-Granger 法(两变量)
```python
import pandas as pd
from statsmodels.tsa.stattools import adfuller
from statsmodels.regression.linear_model import OLS
假设 df 包含两个时间序列变量:x, y
df = pd.DataFrame({
'x': [1, 2, 3, 4, 5],
'y': [1.1, 2.2, 3.1, 4.0, 5.2
})
第一步:拟合回归模型
model = OLS(df['y'], df['x']).fit()
residuals = model.resid
第二步:对残差进行ADF检验
result = adfuller(residuals)
print("ADF Statistic:", result[0])
print("p-value:", result[1])
```
2. Johansen 检验(多变量)
```python
from statsmodels.tsa.vector_ar.vecm import coint_johansen
假设 data 是一个二维数组,每行代表一个观测点,每列代表一个变量
data = [[1, 1.1], [2, 2.2], [3, 3.1], [4, 4.0], [5, 5.2]
进行 Johansen 检验
johansen_test = coint_johansen(data, 0, 1) 0 表示无常数项,1 表示最大滞后阶数
print("Trace statistic:", johansen_test.lr1)
print("Critical values:", johansen_test.cvt)
```
四、协整检验的应用建议
- 数据预处理:确保时间序列是平稳的,否则需先进行差分处理。
- 选择合适的方法:若变量为两组,推荐使用 Engle-Granger;若为多组,使用 Johansen 更为合适。
- 关注检验结果的显著性:通过 p 值判断是否拒绝“无协整”的原假设。
- 结合经济意义分析:即使统计上显著,也应结合实际背景判断其合理性。
五、总结
| 项目 | 内容说明 |
| 协整定义 | 多个非平稳序列间存在长期稳定关系 |
| 主要方法 | Engle-Granger、Johansen、ADF 等 |
| Python 工具 | statsmodels 库提供完整实现 |
| 检验步骤 | 通常包括回归拟合 + 残差平稳性检验(ADF)或特征值分析(Johansen) |
| 应用领域 | 经济学、金融学、计量经济学等 |
通过合理使用协整检验,可以更准确地理解变量之间的长期关系,为建模和预测提供坚实基础。


