目录
相关系数(correlation of coefficient)是统计学中的概念,是由统计学家卡尔·皮尔逊设计的一个统计指标,也称作 Pearson 相关系数。相关系数用于描述两个连续型变量之间的线性相关程度及相关方向,它的取值在 [-1, 1] 之间。
总体的 Pearson 相关系数用
表示,计算公式为:
![\begin{align} \rho_{\textbf{x},\textbf{y}}&=\frac{cov(\textbf{x}, \textbf{y})}{\sigma_\textbf{x}\sigma_\textbf{y}}\nonumber\\ &=\frac{E[(\textbf{x}-E[\textbf{x}])(\textbf{y}-E[\textbf{y})]}{\sigma_\textbf{x}\sigma_\textbf{y}} \nonumber\end{align}](https://1000bd.com/contentImg/2022/06/26/024242401.gif)
样本的 Pearson 相关系数用
表示,计算公式为:
Pearson 相关系数 = 两个变量的协方差除以标准差的乘积。
(参考:统计知识扫盲:相关系数)
(参考:协方差)
(参考:协方差公式推导)
以上三条,前两条要求最严,第三条比较宽松,违反时系数的结果也是比较稳健的。
(参考:Matlab 相关系数的计算与作图)
(参考:统计学习--三种常见的相关系数)
(参考:相关系数的数值范围及其判断标准是什么)
- % Matlab 中计算相关系数的命令
- [r, p] = corr(x, y[, 'type', 'Pearson']) % 等号右边的[]为可缺省项
- [r, p] = corrcoef(x, y[, 'alpha', 0.95])
-
- % 如果 X 和 Y 是序列,corr(X, Y) 和 corrcoef(X, Y) 都可以计算两个序列相关;如果是序列,使用 corr() 必须得是列向量!
- % 如果 X 和 Y 是矩阵,corr(X, Y) 可以计算矩阵相关,但 corrcoef(X, Y) 会将其转换为序列再进行计算。
- %% 时间序列的 Pearson 相关系数
- clear; clc; close all; warning off;
-
- % 序列
- x = [15, 20, 25, 30, 35]';
- y = [1, 4, 9, 16, 25]';
- [r1, p1] = corr(x, y); % 必须是列向量,行向量计算出来的结果不对!
- [r2, p2] = corrcoef(x, y); % 可以是行向量,也可以是列向量,结果一致
运行结果:
理论计算:
结论:
(参考:Matlab计算相关系数)
(参考:皮尔逊相关分析的MATLAB实现,corr(),corrcoef()函数使用)
- %% 矩阵的 Pearson 相关系数
- clear; clc; close all; warning off;
- rng('default');
-
- % 矩阵
- X = randn(10, 3); % m列
- Y = randn(10, 3); % n列
- Y(:, end) = sum(X, 2);
- Z = X - Y; % m列
- [r1, p1] = corr(X, Y); % 分别计算矩阵X和矩阵Y每列的相关系数,结果是m*n大小的相关系数矩阵
- [r2, p2] = corrcoef(X, Y); % 错误的写法!出来结果是错的,corrcoef不能传入两个矩阵进行相关系数计算!
- [r3, p3] = corr(Z); % 分别计算z每列之间的相关系数,结果是m*m大小的相关系数矩阵
- [r4, p4] = corrcoef(Z); % 和r3/p3的结果一致
运行结果:



