两个不同大小的变量之间的MATLAB相关性

时间:2014-11-29 10:11:48

标签: matlab correlation

我有两个变量都是double类 X = 11x3矩阵(显示每行中的负数,中性,正元素数)

Y = 11x1(显示价格)

如何显示这两个变量之间的相关性,并将其与线性回归模型相匹配。

我试过了:

  
    

corrcoef([X,Y])

  

ans =

1.0000    0.3119    0.6753    0.0996
0.3119    1.0000    0.4582   -0.0565
0.6753    0.4582    1.0000   -0.0627
0.0996   -0.0565   -0.0627    1.0000

但不确定这是否正确

非常感谢

1 个答案:

答案 0 :(得分:0)

您的代码的具体问题是,在您的行corrcoef([X,Y])中,您只是将XY归为一个变量。你绝对可以从这个矩阵中得到你想要的答案(非对角线的术语是X和Y的列之间的相关性),但这可能不是你所期望的那样。

如果您不确定,我总是建议将问题分解为最小的步骤。在这种情况下,事情可能会让您感到困惑,因为X有三列,而Y只有一列。 corrcoef在这种情况下做了什么?如果你不确定,我建议把它分解成更小的步骤......

对于您感兴趣的操作(与Y的关联和线性回归),X的三列之间没有相互依赖关系。因此,一个很好的简化步骤是独立处理3列。您可以在for循环中执行此操作(是的,您可以立即执行所有向量化操作,但在for循环中执行此操作可以更容易理解何时不确定)...

%see the correation between the two variables
for I=1:3
   x_foo = X(:,I)

   %http://www.mathworks.com/help/matlab/ref/corrcoef.html
   c = corrcoeff(x_foo,Y)
end

然后,您可以执行下一步...线性回归。使用polyfit函数拟合一条线。

figure;
for I=1:3
   x_foo = X(:,I);

   %http://www.mathworks.com/help/matlab/ref/polyfit.html
   N = 1;  % order of the desired polynominal.  N=1 means a line
   p = polyfit(x_foo,Y,N);  %N=1 will fit a line

   %plot
   subplot(3,1,I)
   plot(x_foo,Y,'o',x_foo,polyval(p,x_foo),'s');
   legend('Data','Linear Fit');
end