我有以下两个时间序列:
x轴超过10000个值。现在,如果我将它们分解为滑动窗口,那么我就不会得到相关性,因为它们并不是相关的。但是,您可以看到,在更大的图片中,它们确实相关。我需要表明这种相关性。谁能指点一下如何做到这一点?
我在Matlab& Python,但我主要需要一个概述。谢谢!
答案 0 :(得分:1)
我建议用两个方法来显示整体相关性,在 Matlab 中。让x1
,x2
向量表示您的数据。
c = corrcoef(x1,x2)
并观察c(2,1)
。这是整个向量的correlation coefficient。它测量在-1和1之间归一化的相关性。plot(x1,x2,'.','markersize',3)
。这绘制了一个点云,您可以从中直观地评估相关性。对于相关x1
和x2
,这些点往往沿着直线形成或多或少的薄云(参见example shapes and its associated correlation coefficient)如果你的矢量包含NaN
,你应该先删除它们:
ind = ~(isnan(x1)|isnan(x2));
x1 = x1(ind);
x2 = x2(ind);
例如:以下两个示例向量给出c=0.91
,云形状明显表明存在显着的相关性:
答案 1 :(得分:0)
以下是使用numpy.corrcoef
的Python中的相关性示例,它使用以下公式:
其中Cij是变量xi和xj的协方差(每个变量都是随机变量)。 Pij变量告诉我们使用xi和xj有多相似,如果两个信号相似,它们接近1或-1,如果它们不相关,它们将接近0。
>>> import numpy as np
>>> n = 100
>>> x = np.linspace(0, 10, n)
>>> y1 = np.sin(x) + np.random.randn(n) * 0.3 + 2
>>> y2 = np.sin(x) + np.random.randn(n) * 0.5
>>> np.corrcoef(y1,y2)
[[ 1. 0.79680839]
[ 0.79680839 1. ]]
顺便说一下,有两个我们已经相关的信号
>>> import matplotlib.pyplot as plt
>>> plt.plot(x,y1, x, y2)
>>> plt.show()