互相关和相关系数问题

9
当我在MATLAB中交叉相关两个数据集a和b(每个数据集长73点)并绘制图形时,它看起来像一个有145个点的三角形。我对相关系数和这个三角形状的图表之间的关系感到困惑,该图表的范围为+/-1。这是否与Matlab Cross correlation vs Correlation Coefficient question有关?Matlab Cross correlation vs Correlation Coefficient question
2个回答

46

我认为你需要阅读一些关于交叉相关函数和相关系数的统计学书籍,因为你的困惑比与MATLAB有关的更基本。除非你知道自己在处理什么,否则即使你正确编写程序也无法理解MATLAB给出的结果。

交叉相关:

以下是在交叉相关中的步骤。考虑数据AB如下:

    A                   B

    x                   
x   |       x           x   
|   |       |       x   |   
|   |   x   |       |   |   x
|   |   |   |       |   |   |
---------------     -----------
0   1   2   3       0   1   2 

然后你把B滑到最后,使得B的最后一个点和A的第一个点对齐:

                x                   
            x   |       x 
            |   |       |   
            |   |   x   |       
            |   |   |   |
----x---x------------------
   -2  -1   0   1   2   3

        x   
    x   |   
    |   |   x
    |   |   |
----------------x---x---x--
   -2  -1   0   1   2   3

在数据不完整的地方填充0,例如在这种情况下,B 在0之后需要填充0,而A在0之前需要填充0。然后对它们进行逐点相乘并相加,得到 0 + 0 + 3 + 0 + 0 + 0 = 3,这是你在交叉相关性中的第一个点。

然后将B向右滑动一步并重复上述过程。

            x                   
        x   |       x 
        |   |       |   
        |   |   x   |       
        |   |   |   |
----x------------------
   -1   0   1   2   3

        x   
    x   |   
    |   |   x
    |   |   |
----------------x---x--
   -1   0   1   2   3

A 沿着 B 滑动,以A的起点为0,计算交叉相关性的第二个点是 0 + 9 + 4 + 0 + 0 = 13 。一直这样做,直到将B滑到A的另一端。

结果向量长度为length(A)+length(B)-1, 减去1是因为我们从0开始有一个重叠,所以少一个点。因此,在这里您应该得到3 + 4 - 1=6个交叉相关点,而在您的情况下,您应该得到73 + 73 -1 = 145个点。

正如您所看到的,任何点处的交叉相关向量值都不一定在±1之间。当两个数据向量“最相似”时,交叉相关性达到最大值。峰值与零之间的“偏移”给出了两个数据集之间的“滞后”指示。

相关系数

相关系数(我假设是皮尔逊相关系数)仅是一个数字,定义为

            Covariance(A,B)
r = --------------------------------
    ________________________________
  \|Covariance(A,A)*Covariance(B,B)

其中Covariance(A,A)更为人所知的是Variance(A)。这是一个可以在-11之间变化的量(为什么它必须在±1之间,可以查看Cauchy-Schwartz不等式)。

注意:

虽然你可以计算两个数据向量的交叉相关性,即使有不同数量的数据点,但是你不能计算它们的相关系数。协方差的概念是用来衡量两个变量/数据集如何一起变化的,对于不相等的数据集无法定义。


1
那么它只是展示了两个图形的相似程度吗? 顺便说一下,感谢您详尽的信息回答。 - user772225
2
@Tyler31:更好的说法是,它作为滞后时间的函数来衡量两个向量/数据集/时间序列之间的相似性... - user616736
1
@Tyler31:顺便说一下,在MATLAB中进行的交叉相关仅在使用“'coeff'”选项时返回-1到1之间的值。 - user616736
谢谢你帮助我澄清术语上的困惑。 - user772225
6
非常感谢你,Lorem,对于如何进行交叉相关的清晰解释。我知道这是一个旧的帖子(而且还是一个重复的帖子),但是这个答案可能是我看过的最好的答案。 - rj2700
非常好的和有用的解释!仅仅通过阅读理论,我无法理解为什么会发生这种情况! - user3503711

0

你读过那个函数返回的内容了吗? http://www.mathworks.com/help/toolbox/signal/xcorr.html

c = xcorr(x,y) 返回一个长度为 2*N-1 的向量,其中 xy 是长度为 N 的向量 (N>1),表示交叉相关序列。

2*73-1=145,所以这是正确的。下面的公式也解释了原因。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接