2012-07-06 245 views
11

我想知道是否有更好的方法來測試,如果兩個變量是比下面的方法協整的:高效的協整檢驗在Python

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,但似乎無法找到任何東西。或者,也許有一個聰明的辦法來測試協整,而不需要運行迴歸或一些有效的方法。

我必須運行大量的協整測試,並且很好的改進我現有的方法。

+2

嗨,大家好 - 自從上次回覆以來已經有幾年了。我想知道這裏有任何進展嗎?我認爲statsmodels還沒有一個協整檢驗方法,對嗎? – WillZ 2015-11-23 09:40:27

回答

5

你可以嘗試以下方法:

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和蘋果的股票數據持續一年 3)根據日期欄合併數據 4)選擇收盤價 5)進行協整檢驗 6)可變coin_result具有

+0

請將解釋添加到*爲什麼*可以嘗試此代碼(可能使用OP的示例)。 – 2016-08-18 08:55:07

+1

用這個coint方法我得到了不同的結果比ts.adfuller在殘差上,因此我對ts.coint – BigChief 2017-03-10 19:58:48

+0

的可用性有很高的懷疑。如果你粘貼你的代碼會很有幫助。 – 2017-03-18 09:39:25

-1

根據您的要求,「更好的測試方式」是johansens測試。

Johansens測試消除了爲協整測試變量對的需求,因爲您可以一次測試所有變量對。

這將顯着加快你的程序,因爲一個循環的定義是N階複雜度,通過消除循環它變成1階的複雜度,這意味着對許多變量的擴展不是問題(從而能夠更快計算什麼是協整的)。

欲瞭解更多信息,關於測試的原始文章是:高斯向量自迴歸模型中協整向量的估計和假設檢驗SørenJohansen Econometrica Vol。 59,第6號(11月,1991年),第1551至1580年出版:計量經濟學會DOI:10.2307/2938278穩定URL:http://www.jstor.org/stable/2938278頁計數:30

statsmodels具有VECM模塊,其包括用於測試Johansens的協整。爲了得到它,你必須去控制它。