首页 文章

Pearson Correlation在Matlab中不使用零元素

提问于
浏览
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中,仅使用共同评估值来计算它 . (见粗体值)

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 = [ 54554 ]; B = [ 11441 ];

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

谢谢之前:)

2 回答

  • 3

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

    goodData = A~=0 & B~=0; %# true wherever there's data for both A and B
    
    pearson = corr(A(goodData),B(goodData));
    
  • 0

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

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

相关问题