22

我想知道是否有比以下方法更好的方法来测试两个变量是否协整:

import numpy as np
import statsmodels.api as sm
import statsmodels.tsa.stattools as ts

y = np.random.normal(0,1, 250)
x = np.random.normal(0,1, 250)

def cointegration_test(y, x):
    # Step 1: regress on variable on the other 
    ols_result = sm.OLS(y, x).fit() 
    # Step 2: obtain the residual (ols_resuld.resid)
    # Step 3: apply Augmented Dickey-Fuller test to see whether 
    #        the residual is unit root    
    return ts.adfuller(ols_result.resid)

上述方法有效;但是,它不是很有效。当我运行时sm.OLS,会计算很多东西,而不仅仅是残差,这当然会增加运行时间。我当然可以编写自己的代码来计算残差,但我认为这也不会非常有效。

我正在寻找一个直接测试协整的内置测试。我在想Pandas,但似乎找不到任何东西。或者,也许有一个聪明的方法可以在不运行回归的情况下测试协整,或者一些有效的方法。

我必须运行很多协整测试,并且改进我当前的方法会很好。

4

3 回答 3

11

您可以尝试以下方法:

import statsmodels.tsa.stattools as ts 
result=ts.coint(x, y)

编辑:

import statsmodels.tsa.stattools as ts
import numpy as np
import pandas as pd
import pandas.io.data as web

data1 = web.DataReader('FB', data_source='yahoo',start='4/4/2015', end='4/4/2016')


data2 = web.DataReader('AAPL', data_source='yahoo',start='4/4/2015', end='4/4/2016')


data1['key']=data1.index

data2['key']=data2.index

result = pd.merge(data1, data2, on='key')


x1=result['Close_x']


y1=result['Close_y']


coin_result = ts.coint(x1, y1) 

代码不言自明:- 1)导入必要的包 2)获取 Facebook 和 Apple 股票一年的数据 3)根据日期列合并数据 4)选择收盘价 5)进行协整检验 6)变量 coin_result 有协整检验的统计量

于 2016-08-18T08:36:48.017 回答
2

您要求的“更好的测试方法”是 johansens 测试。

Johansens 检验消除了为协整检验变量对的需要,因为您可以一次检验所有变量对。

这将显着加快您的程序,因为根据定义,循环是 N 阶复杂度,通过删除循环,它变为 1 阶复杂度,这意味着缩放到许多变量不是问题(从而能够更快地计算协整的内容)。

欲了解更多信息,关于测试的原始文章是:Estimation and Hypothesis Testing of Cointegration Vectors in Gaussian Vector Autoregressive Models Søren Johansen Econometrica Vol. 59, No. 6 (Nov., 1991), pp. 1551-1580 Published by: The Econometric Society DOI: 10.2307/2938278 Stable URL: http://www.jstor.org/stable/2938278页数: 30

statsmodels 有 vecm 模块,其中包括 johansens 协整检验。要得到它,你必须 git 它。

于 2018-02-22T12:49:43.853 回答
0

残差可以很容易 地用 线性代数y计算n x 1Xn x mresiduals = y-X(X'X)^-1X'y

但更有效的方法是使用 Johansen 测试https://en.m.wikipedia.org/wiki/Johansen_test

我在这里找到了一个 python 实现: https ://github.com/iisayoo/johansen

我还没有测试过。

于 2018-02-20T03:57:10.817 回答