从给定数据集中获得最高相关系数

时间:2016-09-07 07:50:39

标签: matlab for-loop correlation

我想比较以下给定的数据集

a = '235 148 89 19 222';
b = '112 128 144 160 176';
c = '192 192 192 192 192';
d = '64 64 64 64 64';

y = [230 138 79 15 212];

然后通过将给定数据集中的每一个与y进行比较来计算相关系数。然后,显示找到的具有最高相关系数的字符串。 我可以通过命令

找到它来计算两个值
c = corrcoef( a, y );   
c = abs(c(2,1)); 

但如何使用for循环遍历每个数据集并显示最高corrcoef的结果?

以下是我编写的代码段,但我不知道如何继续使用' for循环'

a = '235 148 89 19 222';
b = '112 128 144 160 176';
c = '192 192 192 192 192';
d = '64 64 64 64 64';

y = '230 138 79 15 212';

s = {a;b;c;d};
s = cellfun(@strsplit, s, 'UniformOutput', false);
s = vertcat(s{:});

for i = 1:size(s,1)

end

2 个答案:

答案 0 :(得分:0)

是否有使用字符串和单元格而不是整数值和矩阵的特殊原因?

以下解决方案如何:

a = [235 148 89 19 222;...
    112 128 144 160 176;...
    192 192 192 192 192;...
    64 64 64 64 64];

b = zeros(size(a));

y = [230 138 79 15 212];

for i=1:length(a(:,1))
    b(i,:) = a(i,:)- y;
end;

[~, minLine] = min(sum(abs(b')));

disp(minLine);

通过计算差异并将值存储在第二个矩阵a中,将给定数据集y(矩阵)中的每一行与给定向量b进行比较。 在循环之后,计算最小总和并为您提供a中的行,该行与y

最相关

答案 1 :(得分:0)

首先,将数字字符串转换为数组的简单方法是使用 str2num是这样的:

>> an = str2num(a)

an =

   235   148    89    19   222

在矩阵中连接stings,因为行使用char然后将其转换为矩阵:

>> S = char(a,b,c,d)

S =

235 148 89 19 222  
112 128 144 160 176
192 192 192 192 192
64 64 64 64 64     

>> N = str2num(S)

N =

   235   148    89    19   222
   112   128   144   160   176
   192   192   192   192   192
    64    64    64    64    64

那么你唯一需要的就是去制作矩阵:

>> [rows,columns] = size(N)

rows =

     4


columns =

     5

我们需要迭代所有行

>> N(1,:)

ans =

   235   148    89    19   222

在matlab帮助中:

R = corrcoef(A,B) returns coefficients between two random variables A and B.

>> R = corrcoef(N(1,:),y)

R =

    1.0000    0.9995
    0.9995    1.0000

然后将您的度量应用于循环

>> for i = 1:rows
R = corrcoef(N(i,:),y);
rr(i) = abs(R(2,1));
end
>> rr

rr =

    0.9995    0.2789       NaN       NaN

最后,该向量的最大值是您想要的行

>> [value,position] = max(rr)

value =

    0.9995


position =

     1

>> N

N =

   235   148    89    19   222
   112   128   144   160   176
   192   192   192   192   192
    64    64    64    64    64

>> N(position,:)

ans =

   235   148    89    19   222