22

次の方法よりも、2 つの変数が共和分されているかどうかをテストするためのより良い方法があるかどうか疑問に思っています。

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) 1 年間の Facebook と Apple 株のデータを取得します 3) 日付列に従ってデータをマージします 4) 終値を選択します 5) 共和分テストを実施します 6)変数 coin_result には共和分検定の統計があります

于 2016-08-18T08:36:48.017 に答える