0

我在 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 中,仅使用 co-rated value 来计算它。(见粗体值)

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 ];

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

谢谢之前:)

4

2 回答 2

3

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

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

pearson = corr(A(goodData),B(goodData));
于 2011-10-27T02:51:19.587 回答
0

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

B ~= 0如果相应的条目不为零,则创建一个大小size(B)为的二进制矩阵,否则。您还可以使用相同大小的二进制矩阵对矩阵进行索引,因此如果.1B0size(A) == size(B)

于 2011-10-27T02:23:37.127 回答