协整关系

协整(Cointegration)理论是恩格尔(Engle)和格兰杰(Granger)在1978年提出的。平稳性是进行时间序列分析的一个很重要的前提,很多模型都是基于平稳下进行的,而现实中,很多时间序列都是非平稳的,所以协整是从分析时间序列的

非平稳性

入手的。

协整的内容是:

设序列

X

是 d 阶单整的,记为

X

I

(

d

)

,如果存在一个非零向量

β

使得

Y

=

β

X

t

I

(

d

b

)

,则称

X

t

具有 d, b 阶协整关系,记为

X

t

C

I

(

d

,

b

)

,则

β

称为协整向量。

特别当

X

Y

都是一阶单整时,一般而言,

X

Y

的线性组合仍然是一阶单整的,但是对于某些非零向量

β

,会使得

Y

β

X

I

(

0

)

,此时非零向量

β

称作协整向量,其中

β

中的每一项为 t 时刻的协整系数。通俗点说,如果两组序列都是非平稳的,但是经过一阶差分后是平稳的,且这两组序列经过某种线性组合也是平稳的,则它们之间就存在协整关系。

协整理论的意义在于:

1、首先,因为或许单个序列是非平稳的,但是通过协整我们可以建立起两个或者多个序列之间的平稳关系,进而充分应用平稳性的性质。

2、其次,可以避免伪回归。如果一组非平稳的时间序列不存在协整关系,那么根据它们构造的回归模型就可能是伪回归。

3、区别变量之间长期均衡关系和短期波动关系。

非平稳序列很容易出现伪回归,而协整的意义就是

检验它们的回归方程所描述的因果关系是否是伪回归的

,所以常用的协整检验有两种:Engel-Granger 两步协整检验法和 Johansen 协整检验法,它们二者的区别在于 Engler-Granger 采用的是一元方程技术,而 Johansen 则是多元方程技术,所以Johansen 协整检验法受限更小。

Engel-Granger 两步协整检验法

EG检验的方法实际上就是对回归方程的残差进行

单位根检验

因为从协整的角度来看,因变量能被自变量的线性组合所解释,说明二者之间具有稳定的均衡关系;因变量不能被自变量解释的部分就构成了一个残差序列,这个残差序列不应该是序列相关的,也就是说残差应该是平稳的。所以EG检验一组变量是否具有协整关系也就是检验残差序列是否是平稳的。

Engle-Granger提出的两步法的步骤如下:

1、用 OLS 估计协整回归方程,从而得到协整系数:

2、检验残差项的平稳性,如果残差平稳,则说明 X 和 Y 是协整的,否则不成立。对残差项的平稳性的检验通常用 ADF 检验。

Johansen Test 协整检验法

当协整检验的VAR模型中如果含有多个滞后项时,如下:

采用EG检验就不能找出两个以上的协整向量了,此时可以用Johansen Test 来进行协整检验,它的思想是采用极大似然估计来检验多变量之间的协整关系。

用 python 代码进行协整检验

我们从 rb 期货中选择两个品种进行分析,具体的品种根据相关性选择,后期会另外补充。

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

a_price = pd.read_csv('./CloseA.csv')[:200]

b_price = pd.read_csv('./CloseB.csv')[:200]

fig = plt.figure()

ax = fig.add_subplot(111)

ax.plot(range(len(a_price)), a_price)

ax.plot(range(len(b_price)), b_price)

ax.legend(['a','b'])

plt.show()

从图中看,两个品种具有很强的相关性,并且都是不稳定的。

下面,我们通过ADF检验来看一下,两个序列是否是一阶单整的:

from statsmodels.tsa.stattools import adfuller

a_price = np.reshape(a_price.values, -1)

a_price_diff = np.diff(a_price)

b_price = np.reshape(b_price.values, -1)

b_price_diff = np.diff(b_price)

print(adfuller(a_price_diff))

print(adfuller(b_price_diff))

(-15.436034211511204, 2.90628134201655e-28, 0, 198, {'1%': -3.4638151713286316, '5%': -2.876250632135043, '10%': -2.574611347821651}, 1165.1556545612445)

(-14.259156751414892, 1.4365811614283181e-26, 0, 198, {'1%': -3.4638151713286316, '5%': -2.876250632135043, '10%': -2.574611347821651}, 1152.4222884399824)

从结果来看,两个序列都满足一阶单整,下面来判断两者是否存在协整关系。statsmodels 模块中有

coint

函数可以用来检测协整关系,它的内部实现就是基于 EG 协整检验的。

coint 函数如下:

def coint(y0, y1, trend='c', method='aeg', maxlag=None, autolag='aic',

return_results=None):

"""Test for no-cointegration of a univariate equation

The null hypothesis is no cointegration. Variables in y0 and y1 are

assumed to be integrated of order 1, I(1).

This uses the augmented Engle-Granger two-step cointegration test.

Constant or trend is included in 1st stage regression, i.e. in

cointegrating equation.

**Warning:** The autolag default has changed compared to statsmodels 0.8.

In 0.8 autolag was always None, no the keyword is used and defaults to

'aic'. Use `autolag=None` to avoid the lag search.

Parameters

----------

y1 : array_like, 1d

first element in cointegrating vector

y2 : array_like

remaining elements in cointegrating vector

trend : str {'c', 'ct'}

trend term included in regression for cointegrating equation

* 'c' : constant

* 'ct' : constant and linear trend

* also available quadratic trend 'ctt', and no constant 'nc'

method : string

currently only 'aeg' for augmented Engle-Granger test is available.

default might change.

maxlag : None or int

keyword for `adfuller`, largest or given number of lags

autolag : string

keyword for `adfuller`, lag selection criterion.

* if None, then maxlag lags are used without lag search

* if 'AIC' (default) or 'BIC', then the number of lags is chosen

to minimize the corresponding information criterion

* 't-stat' based choice of maxlag.  Starts with maxlag and drops a

lag until the t-statistic on the last lag length is significant

using a 5%-sized test

return_results : bool

for future compatibility, currently only tuple available.

If True, then a results instance is returned. Otherwise, a tuple

with the test outcome is returned.

Set `return_results=False` to avoid future changes in return.

Returns

-------

coint_t : float

t-statistic of unit-root test on residuals

pvalue : float

MacKinnon's approximate, asymptotic p-value based on MacKinnon (1994)

crit_value : dict

Critical values for the test statistic at the 1 %, 5 %, and 10 %

levels based on regression curve. This depends on the number of

observations.

Notes

-----

from statsmodels.tsa.stattools import coint

print(coint(a_price, b_price))

(-3.9532731584015215, 0.008362293067615467, array([-3.95232129, -3.36700631, -3.06583125]))

从返回结果可以看出 t-statistic 值要小于1%的置信度,所以有99%的把握拒绝原假设,而且p-value的值也比较小,所以说存在协整关系。

Ref :

《统计套利:理论与实战》金志宏

python统计套利_基于python的统计套利实战(二)之协整检验相关推荐

  1. 基于python的气象数据分析统计服_基于Python的风向风速数据分析的设计与实现

    基于 Python 的风向风速数据分析的设计与实现 李文倩 ; 刘婕 [期刊名称] < <信息通信> > [年 ( 卷 ), 期] 2019(000)009 [摘要] Pyth ...

  2. python 英语分词_基于Python NLTK库进行英文文本预处理

    文本预处理是要文本处理成计算机能识别的格式,是文本分类.文本可视化.文本分析等研究的重要步骤.具体流程包括文本分词.去除停用词.词干抽取(词形还原).文本向量表征.特征选择等步骤,以消除脏数据对挖掘分 ...

  3. python词频作图_基于Python的词频分析与云图生成

    近期,学校对呼和浩特市第二中学学生特质进行了调查,具体题目为"用关键词描述一下二中学生的特质(尽量在20字以内)". 为了更好的展示调查结果,我们基于Python的jieba库和w ...

  4. python 量化交易_基于Python的量化交易工具清单(上)

    -- Python量化工具清单 -- 以下内容来源于Wilson Freitas的Github项目"Awesome Quant".原文中包含了丰富的语言类别,但是后续介绍主要针对P ...

  5. 大学计算机基础python学多久_基于Python 的“大学计算机基础”课程教学设计

    基于Python 的"大学计算机基础"课程教学设计 日期:2018-04-11 04:32 摘要 培养非计算机专业大学生的计算思维能力,在"大学计算机基础"课程 ...

  6. python空间数据处理_基于Python的空间数据批量处理方法

    第 34 卷 第 4 期 2011 年 8 月 测绘与空间地理信息 GEOMATICS & SPATIAL INFORMATION TECHNOLOGY Vol. 34,No. 4 Aug. ...

  7. python信息采集管理系统_基于Python的求职信息采集分析系统设计与实现

    基于 Python 的求职信息采集分析系统设计与实现 关鑫洁 ; 黄思奇 ; 位磊 [期刊名称] <计算机时代> [年 ( 卷 ), 期] 2020(000)003 [摘要] 为了便于求职 ...

  8. python气象数据分析_基于Python的气象观测数据的解析与存储

    基于 Python 的气象观测数据的解析与存储 师利霞, 黄元媛 [摘 要] 为了达到"一次解析,各处使用"的目的,根据工作的实际需要,使 用 Python 技术对以文本格式存放的 ...

  9. python cut函数_基于python cut和qcut的用法及区别详解

    我就废话不多说了,直接上代码吧: from pandas import Series,DataFrame import pandas as pd import numpy as np from num ...

  10. 基于python的步态分析_基于python实现RFM分析

    CREATED BY TAO 一 .先了解一下什么是RFM分析,RFM分析是根据客户活跃程度和交易金额贡献,进行客户价值细分的一种客户细分方法. RFM由R(Recency)进度,F(Frequenc ...

最新文章

  1. 大公司病(太现实了!)
  2. 音频数据文件格式(PCM,WAV,MIDI)简记
  3. 洛谷P1373 小a和uim之大逃离
  4. 自制公众平台Web Api(微信)
  5. ios 7.1.2 拍照声音
  6. 8类网线利弊_CAT8 八类网线是何方神器?
  7. 深扒Mobileye—与特斯拉分手,被英特尔收购,现在又成了蔚来的救星?
  8. blender初学实用快捷键
  9. 搜索算法的感悟——解空间
  10. BLE设备地址类型笔记
  11. wpa.b.qq.com/cgi/wpa.php,营销QQ在线客服代码生成的方法(支持手机和PC)
  12. Windows和Xyplorer的完美结合
  13. Parameter Sniffing
  14. android设置页面转场特效
  15. 百度地图根据经纬度获取该地点所在城市信息
  16. MSTSC 自动登录
  17. 在cmd命令窗口安装Python模块
  18. 游戏系列之无限弹窗游戏
  19. java的package与class与public
  20. 鸿蒙如何连接电视,鸿蒙系统的电视怎么安装第三方软件,荣耀智慧屏X1装软件教程...

热门文章

  1. 文献笔记(9)(2019ISSCC)
  2. 从国家大剧院古典音乐频道下载音乐
  3. 小米路由器青春版R1CL刷入OpenWrt
  4. Devexpress ASP.NET最新版开发.NET环境配置Visual Studo和SQL Server对应版本
  5. android 屏幕坐标系,android 屏幕坐标总结
  6. png图像保存为yuv格式以及yuv格式转为png
  7. TCP报文段中的序号和确认号
  8. 数据结构—顺序表基本操作的实现(C语言)
  9. 基于Arduino的蓝牙电子秤
  10. matlab汉明窗dft,谱分析中窗的选取