【问题标题】:Crosscorrelation between 2 time series with a single output具有单个输出的 2 个时间序列之间的互相关
【发布时间】:2021-05-04 05:48:38
【问题描述】:

大家好,感谢阅读。

我试图找出金融时间序列的赫斯特指数及其相关性之间是否存在某种关系。实际上已经知道存在某种关系。我试图检查它的论文,我发现当我选择“最适合配对交易的配对”时,我找不到任何关系。我正在计算它们之间的 pearson 相关系数和广义 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 它返回一个向量。我正在寻找一个单一的值作为回报,但我不知道如何实现它,我还没有通过互联网找到任何线索。

您知道我该如何实现它吗?我是编程的血腥初学者,我真的很迷茫。

【问题讨论】:

    标签: python scipy time-series correlation cross-correlation


    【解决方案1】:

    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')
    

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

    【讨论】:

      猜你喜欢
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 2021-11-06
      • 1970-01-01
      • 1970-01-01
      • 2019-07-18
      • 2014-04-11
      • 1970-01-01
      相关资源
      最近更新 更多