7

基本上我有两个矩阵,如下所示:

  > Matrix A (100 rows x 2 features)

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

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

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

4

2 回答 2

9

您正在寻找的概念称为典型相关。它是多变量分析领域中一个成熟的理论。本质上,这个想法是找到第一个矩阵中的列的线性组合和第二个矩阵中的列的线性组合,以使两个线性组合之间的相关性最大化。

这可以使用特征向量和特征值手动完成,但如果您有统计工具箱,那么 Matlab 已经将其打包并准备好使用。该函数被调用canoncorr,文档在这里

使用此函数的简要示例如下:

%# 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函数还有很多其他的输出。我不确定我是否足够聪明,无法在这里对它们提供令人满意但简洁的解释,所以我会跛脚并建议您在多元分析教科书中阅读它 - 大多数多元分析教科书都会有完整的专门讨论典型相关的章节。

最后,如果您没有统计工具箱,那么快速 google 显示了以下FEX 提交,声称提供典型相关分析 - 注意,我自己没有测试过。

于 2012-12-20T06:18:59.090 回答
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 列B(2,1)之间、第 1 列和第 2 列之间的相关性(反之亦然,因此B是对称的)。

有人可能会争论这种度量在二维环境中的有用性——在我看来,您通常通过查看图表获得更多见解。

于 2012-12-19T20:57:09.403 回答