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

Getting the highest correlation coefficient from the given data set

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

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 loop'

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

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

下面的解决方案呢:

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

最相关

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

>> an = str2num(a)

an =

   235   148    89    19   222

连接矩阵中的字符串,因为行使用 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