微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

具有单个输出的 2 个时间序列之间的互相关

如何解决具有单个输出的 2 个时间序列之间的互相关

大家好,感谢阅读。

我试图找出金融时间序列的赫斯特指数及其相关性之间是否存在某种关系。其实已经知道有一些关系了。我试图检查它的论文,我发现当我选择“配对交易的最佳配对”时,我找不到任何关系。我正在计算它们与广义 Hurst 指数算法之间的皮尔逊相关系数:

def genHurstExponent(serie,q=1):
  serie=serie.values if hasattr(serie,'values') else serie
  kmax=int(np.log2(len(serie))-2)
  regx=[]
  regy=[]#Inicializamos las listas
  for k in range(kmax) :
    T=2**k
    mT=np.mean(np.abs(serie[T:]-serie[:-T])**q)
    regx.append(np.log(T))
    regy.append(np.log(mT)) 
  stats.linregress(regx,regy)
  return stats.linregress(regx,regy).slope/q 

我已经尝试过这个算法 合成系列,它工作正常,所以我认为我的问题在于相关性。我正在尝试互相关,但是当我使用 scipy.signal.correlate 时,它​​会返回一个向量。我正在寻找一个单一的价值作为回报,但我不知道如何实现它,我也没有通过互联网找到任何线索。

你知道我该如何实现它吗?我是一个该死的编程初学者,我真的很迷茫。

解决方法

scipy.correlate 返回向量的原因是因为它正在计算考虑信号移位版本的相关性。如果您可能对要在另一个中观察到的一个信号的影响有延迟,这将非常有用。如果您想要时移的最佳相关性,您可以执行以下操作

import numpy as np
import scipy.signal
x = np.random.randn(100)
y = np.random.randn(100)
y[37:] += x[:-37] # interference of x observed in y
Z = scipy.signal.correlate(x,y)
lag = np.arange(-99,100);
print(lag[np.argmax(abs(Z))]) # should show you -37

当你绘制它时,你应该在观察到效果的地方看到一个峰值。

import matplotlib.pyplot as plt;
plt.plot(lag,abs(Z))
plt.ylabel('correlation')
plt.xlabel('lag')

我希望在金融数据中看到一个广泛的峰值,因为一个市场对另一个市场的影响是渐进的。

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。