2010-05-24 51 views
7

預先感謝您的幫助!如何計算兩個列表的協整?

我有兩個名單有些股票的價格,例如:

a = [10.23, 11.65, 12.36, 12.96] 

b = [5.23, 6.10, 8.3, 4.98] 

我可以計算出相關性這兩個列表的,具有:

import scipy.stats 

scipy.stats.pearsonr(a, b)[0] 

但是,我沒發現一種計算兩個列表的協整的方法。

你能給我一些建議嗎?

非常感謝!

+0

http://stackoverflow.com/questions一個很好的例子/ 12186994/johansen-cointegration-test-in-python – gliptak 2013-12-12 02:23:15

回答

8

我不相信scipy已經實施了協整檢驗。您可能更願意使用using rpy2來將Python與R接口。R提供urca package中的協整測試。

例如:

ro.globalEnv['a']=ro.FloatVector(a) 
ro.globalEnv['b']=ro.FloatVector(b) 

呼叫將R cor(相關性)功能:

import rpy2.robjects as ro 
r=ro.r 

a = [10.23, 11.65, 12.36, 12.96] 
b = [5.23, 6.10, 8.3, 4.98] 

中的R定義ab

print(r('cor(a,b,method="pearson")')) 
# [1] 0.2438518 

呼叫將R ca.po(菲利普斯& Ouliaris協整檢驗)

r('library(urca)') 
print(r('ca.po(cbind(a,b))')) 
# ######################################################## 
# # Phillips and Ouliaris Unit Root/Cointegration Test # 
# ######################################################## 

# The value of the test statistic is: 0 

我不熟悉的協整關係,然而,道歉,如果我使用的ca.po是完全無能。

另請注意,R是編程語言本身,(至少目前)具有比scipy更豐富的統計函數庫。可以直接運行R(不使用Python)。在接聽的話看起來有點簡單:

> a = c(10.23, 11.65, 12.36, 12.96) 
> b = c(5.23, 6.10, 8.3, 4.98) 
> z = cbind(a,b) 
> z 
     a b 
[1,] 10.23 5.23 
[2,] 11.65 6.10 
[3,] 12.36 8.30 
[4,] 12.96 4.98 
> ca.po(z) 

######################################################## 
# Phillips and Ouliaris Unit Root/Cointegration Test # 
######################################################## 

The value of the test statistic is: 0 
+0

請問,你能舉個例子嗎? – Damiano 2010-05-24 11:03:13