计算两个或多个向量之间的相关性(Matlab 实现)

这篇具有很好参考价值的文章主要介绍了计算两个或多个向量之间的相关性(Matlab 实现)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文首次在公众号【零妖阁】上发表,为了方便阅读和分享,我们将在其他平台进行自动同步。由于不同平台的排版格式可能存在差异,为了避免影响阅读体验,建议如有排版问题,可前往公众号查看原文。感谢您的阅读和支持!

corr:Pearson 线性相关系数矩阵

两个随机变量 x x x y y yPearson 线性相关系数的计算公式为
ρ = E { ( x − E [ x ] ) ( y − E [ y ] ) } E [ ( x − E [ x ] ) ] 2 E [ ( y − E [ y ] ) ] 2 = E { ( x − μ x ) ( y − μ y ) } σ x σ y \begin{aligned} \rho &= \frac{ E\left\{( x - E[ x]) ( y - E[ y])\right\} } { \sqrt{ E[( x - E[ x])]^2 E[( y - E[ y])]^2 } } \\ &= \frac{ E\left\{( x - \mu_x) ( y - \mu_y)\right\} } { \sigma_x \sigma_y } \end{aligned} ρ=E[(xE[x])]2E[(yE[y])]2 E{(xE[x])(yE[y])}=σxσyE{(xμx)(yμy)}

corr 用于计算 Pearson 线性相关系数,其语法如下:

rho = corr(X)   % = corr(X, X)
rho = corr(X, Y)

X \bf X X Y \bf Y Y 为观测值矩阵,矩阵大小分别为 n × k 1 n\times k_1 n×k1 n × k 2 n\times k_2 n×k2

Pearson 线性相关系数矩阵 rho 的第 ( a , b ) (a, b) (a,b) 个元素为 X \bf X X a a a 个列向量( X a \mathbf X_a Xa)和 Y \bf Y Y b b b 个列向量( Y b \mathbf Y_b Yb)之间的 Pearson 线性相关系数,对应的计算公式为
KaTeX parse error: Expected group after '_' at position 26: … = \frac{ \sum_̲\limits{i=1}^{n…

相关系数的值的范围是从 –1 到 +1。 –1 表示完全负相关,而 +1 表示完全正相关。 0 表示列之间没有相关性。

  • corr 的功能也可用下面的代码实现
X = rand(5, 3) + 1j*rand(5, 3);
Y = rand(5, 3) + 1j*rand(5, 3);
rho1 = corr(X, Y)
rho2 = my_corr(X, Y)
function rho = my_corr(X, Y)
N = size(X, 1);
X1 = (X - mean(X)) ./ std(X);
Y1 = (Y - mean(Y)) ./ std(Y);
rho = (X1'*Y1)./(N-1);

corrcoef:Pearson 线性相关系数

当 corrcoef 的输入只有一个矩阵时,其结果与 corr 一致。

X = randn(5, 3);
rho1 = corr(X)
rho2 = corrcoef(X)    % rho1 = rho2

当 corrcoef 的输入有两个矩阵时,计算这两个矩阵对应的列向量的相关系数矩阵,返回矩阵大小为 2 × 2 2\times 2 2×2

X = randn(5, 3);
Y = randn(5, 3);
rho3 = corr(X(:), Y(:))
rho4 = corrcoef(X, Y)
rho5 = corrcoef([X(:), Y(:)])   % rho4 = rho5

rho4 的非对角线元素等于 rho3,对角线元素为 1 。

xcorr:计算互相关或自相关

r = xcorr(x, y)
r = xcorr(x)

xcorr 的结果可以解释为两个随机序列之间的相关性估计,也可以解释为两个确定性信号之间的确定相关性。

两个联合平稳随机过程 x n x_n xn y n y_n yn互相关序列由下式给出
R x y ( m ) = E { x n + m y n ∗ } = E { x n y n − m ∗ } R_{xy}(m) = E\{x_{n+m}y_n^*\} = E\{x_{n}y_{n-m}^*\} Rxy(m)=E{xn+myn}=E{xnynm}

一般情况下,相关性函数需要归一化来生成准确的估计,可以通过使用输入参数 scaleopt 来控制相关性的归一化。

  • xcorr 的功能也可用下面的代码实现
x = rand(5, 1) + 1j*rand(5, 1);
[c1, lags1] = xcorr(x)
[c2, lags2] = my_xcorr(x)
function [c, lags] = my_xcorr(x)
N = size(x, 1);
c = zeros(2*N-1, 1);
for idx = -N+1:N-1
    y = circshift(x, idx);
    c(idx+N) = y'*x;
end
lags = -N+1:N-1;

cov:计算协方差矩阵

两个随机变量 A A A B B B 的协方差定义为
c o v ( A , B ) = 1 N − 1 ∑ i = 1 N ( A i − μ A ) ∗ ( B i − μ B ) \mathrm{cov}(A, B) = \frac{1}{N-1} \sum\limits_{i=1}^{N} (A_i-\mu_A)^* (B_i-\mu_B) cov(A,B)=N11i=1N(AiμA)(BiμB)

当 cov 的输入只有一个矩阵( M × N M\times N M×N)时,返回矩阵中不同列向量之间的协方差矩阵,大小为 N × N N\times N N×N

当 cov 的输入有两个矩阵时,计算这两个矩阵对应的列向量之间的协方差矩阵,返回矩阵大小为 2 × 2 2\times 2 2×2文章来源地址https://www.toymoban.com/news/detail-441163.html

X = rand(5, 3); 
Y = rand(5, 3);
C1 = cov(X, Y)
C2 = cov([X(:), Y(:)])   % C1 和 C2 结果相同
  • cov 的功能也可用下面的代码实现
X = rand(5, 3) + 1j*rand(5, 3);
C1 = cov(X)
C2 = my_cov(X)
function C = my_cov(X)
N = size(X, 1);
X1 = X - mean(X);
C = (X1'*X1)./(N-1);

到了这里,关于计算两个或多个向量之间的相关性(Matlab 实现)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包