我们人为地构造两组数据,由此直观地看一下协整关系。
import numpy as np
import pandas as pd
import seaborn
import statsmodels
import matplotlib.pyplot as plt
from statsmodels.tsa.stattools import coint
首先,我们构造两组数据,每组数据长度为100。第一组数据为100加一个向下趋势项再加一个标准正态分布。第二组数据在第一组数据的基础上加30,再加一个额外的标准正态分布。有:
$$X_t = 100 + \gamma_t + \epsilon_t$$$$Y_t = X_t + 30 + \mu_t$$其中$\gamma_t$为趋势项,$\epsilon_t$和$\mu_t$为无相关性的正态随机变量。
代码如下:
np.random.seed(100)
x = np.random.normal(0, 1, 500)
y = np.random.normal(0, 1, 500)
X = pd.Series(np.cumsum(x)) + 100
Y = X + y + 30
for i in range(500):
X[i] = X[i] - i/10
Y[i] = Y[i] - i/10
T.plot(pd.DataFrame({'X':X, 'Y':Y}), chart_type='line', title='Price')
显然,这两组数据都是非平稳的,因为均值随着时间的变化而变化。但这两组数据是具有协整关系的,因为他们的差序列$Y_t−X_t$是平稳的:
T.plot(pd.DataFrame({'Y-X':Y-X,'Mean':np.mean(Y-X)}),chart_type='line', title='Price')
上图中,可以看出蓝线$Y_t−X_t$一直围绕均值波动。而均值不随时间变化(其实方差也不随时间变化)。