两个矩阵之间的Matlab相关性

时间:2012-12-19 19:59:26

标签: matlab matrix correlation

基本上我有两个矩阵,类似这样:

  > Matrix A (100 rows x 2 features)

  Height - Weight
  1.48      75
  1.55      65
  1.60      70
  etc...

和矩阵B(矩阵A的相同维度,但当然具有不同的值)

我想了解Matrix A和Matrix B之间是否存在某种相关性,您建议我使用哪种策略?

2 个答案:

答案 0 :(得分:8)

您正在寻找的概念称为canonical correlation。它是多变量分析领域中发展良好的理论。本质上,我们的想法是找到第一个矩阵中列的线性组合和第二个矩阵中列的线性组合,以便最大化两个线性组合之间的相关性。

这可以使用特征向量和特征值手动完成,但是如果你有统计工具箱,那么Matlab已经将它打包并准备好为你服务。该函数名为canoncorr,文档为here

使用此功能的简短示例如下:

%# Set up some example data
CovMat = randi(5, 4, 4) + 20 * eye(4); %# Build a random covariance matrix
CovMat = (1/2) * (CovMat + CovMat'); %# Ensure random covriance matrix is symmetrix
X = mvnrnd(zeros(500, 4), CovMat); %# Simulate data using multivariate Normal

%# Partition the data into two matrices
X1 = X(:, 1:2);
X2 = X(:, 3:4);

%# Find the canonical correlations of the two matrices
[A, B, r] = canoncorr(X1, X2);

第一个规范相关是r的第一个元素,第二个规范相关是r的第二个元素。

canoncorr函数还有很多其他输出。我不确定我是否足够聪明,可以在这里提供一个令人满意而简洁的解释,所以相反我会跛脚并建议你在多元分析教科书中阅读 - 大多数多元分析教科书都会有一个完整的专门讨论规范关联的章节。

最后,如果您没有统计工具箱,那么快速谷歌会透露以下FEX submission声称提供规范相关性分析 - 请注意,我自己没有测试过。

答案 1 :(得分:4)

好的,我们来一试:

A = [1:20; rand(1,20)]'; % Generate some data...

检查二维关系的最佳方法是查看数据图:

plot(A(:,1), A(:,2), 'o') % In the random data you should not see some pattern...

如果我们真的想要计算一些相关系数,我们可以使用corrcoef执行此操作,如您所述:

B = corrcoef(A)
ans =

    1.0000   -0.1350
   -0.1350    1.0000

此处,B(1,1)是第1列和第1列之间的相关性,第1列和第2列之间是B(2,1)(反之亦然,因此B是对称的)。

有人可能会争论这种衡量标准在二维背景下的用处 - 在我看来,你通常会通过观察这些情节获得更多的见解。

相关问题