如何计算两个列表的协整?

7 投票
3 回答
3182 浏览
提问于 2025-04-15 23:04

提前感谢你的帮助!

我有两个股票价格的列表,比如:

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]

但是,我没有找到计算这两个列表的协整的方法。

你能给我一些建议吗?

非常感谢!

3 个回答

0

这里有一个很不错的关于检验协整的例子,你可以在这个链接找到:http://nbviewer.jupyter.org/github/mapsa/seminario-doc-2014/blob/master/cointegration-example.ipynb

0

请查看这个关于statsmodels的请求:http://github.com/statsmodels/statsmodels/pull/453

8

我觉得在scipy里没有实现协整测试。你可以考虑使用rpy2来让Python和R进行连接。R里面有提供协整测试的功能,属于urca

比如说:

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

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

调用R的cor(相关性)函数:

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

调用R的ca.po(Phillips & 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 

撰写回答