Pearson Correlation在Matlab中不使用零元素

时间:2011-10-27 02:17:29

标签: matlab matrix correlation pearson

我在Matlab中有2个示例向量:

A = [5,3,3,0,4,1,5,0,2,5,5,0,5,3,4,0,1,4,4,0,4,2]; B = [1,0,0,0,1,0,4,0,0,0,0,4,4,0,1,0,0,0,0,0,0,0];

何时,我尝试用手动方法计算皮尔森相关性,并用excel进行 我有相同的结果( 0.667

1 0,667 0,667 1

但是当我用简单的代码在MatLab中尝试时:

pearson = corr(A',B');

它返回不同分数的结果( 0,2139 )。

1 0,2139  0,2139 1

也许它的发生是因为零分(0)用于计算它。因为缺失的值将在matlab中替换为零(0)。

在Pearson Correlation中,仅使用合并值来计算它。 (见粗体值)

A = [ 5 ,3,3,0, 4 ,1, 5 ,0,2,5,5,0 , 5 下,3, 4 中,0,1,4,4,0,4,2]。 B = [ 1 ,0,0,0, 1 ,0, 4 ,0,0,0,0,4, 4 中,0, 1 中,0,0,0,0,0,0,0];

或者它可以变得简单:

A = [ 5 4 5 5 4 ]。 B = [ 1 1 4 4 1 ; < / p>

有谁知道,如何为此制作简单的代码? 我在程序代码中尝试了它: 首先,使函数涂层,average_corated,然后最后计算相似度。 这花费了太多时间。

之前感谢:)

2 个答案:

答案 0 :(得分:3)

您必须先获取好数据所在位置的索引:

goodData = A~=0 & B~=0; %# true wherever there's data for both A and B

pearson = corr(A(goodData),B(goodData));

答案 1 :(得分:0)

我认为这是一个单行程:pearson = corr(A(B ~= 0)', B(B ~= 0)')

B ~= 0创建大小为size(B)的二进制矩阵,如果1中的相应条目不为零,则为B,否则为0。您也可以使用相同大小的二进制矩阵索引到矩阵,因此如果size(A) == size(B),这应该始终有效。