我在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,然后最后计算相似度。 这花费了太多时间。
之前感谢:)
答案 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)
,这应该始终有效。