两个矩阵之间的Matlab相关性

7

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

  > Matrix A (100 rows x 2 features)

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

还有一个矩阵B(维度与矩阵A相同,但值不同,当然)

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


1
我们在谈论“统计相关性”吗?如果是这种情况,我所知道的唯一相关性是使用随机变量,而不是具有不同(可能相互依赖)变量的矩阵。如果不是这样,请问您想要检查矩阵之间的什么样的联系? - Thilo
1
另一个想法:你是否假设了某种关系,比如 Weight = a*Height(就像线性模型中一样),并且想比较两个矩阵是否包含类似的模型,例如,如果矩阵A的a大致等于矩阵B的a - Thilo
1
在这种情况下,我建议您查看线性模型,检查相应的假设(例如,Weight vs. Height图是否呈线性?),然后尝试拟合线性模型(请参见http://en.wikipedia.org/wiki/Linear_regression)。如果您没有Matlab的统计工具箱许可证,R是解决这类问题的好工具。 - Thilo
@Thilo:如果我只想知道一个矩阵之间的相关性怎么办?类似这样的:http://www.socialresearchmethods.net/kb/statcorr.php Matlab可以做到吗?corrcoef返回的是一个数组而不是一个数字。 - dynamic
我不明白什么是“某种相关性”,你可能有更确切的想法,对吧? - bla
显示剩余3条评论
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函数还有许多其他输出。我不确定自己是否聪明到足以在此提供令人满意且简洁的解释,因此我要推荐您在多元分析教材中阅读相关章节 - 大多数多元分析教材都会有一整章专门介绍典型相关。
最后,如果您没有统计工具箱,则快速搜索显示以下FEX submission,声称提供典型相关分析 - 请注意,我自己没有测试过。

+1 - 每天都有新的东西可以学习。今天,你就是我的学习导师 ;) - Thilo

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是对称的)。

在二维情况下,人们可能会对这种度量的有用性提出质疑 - 在我看来,通过查看图表通常可以获得更多的见解。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接