【20220623】【信号处理】深入理解Pearson相关系数和Matlab corr()、corrcoef()仿真

article/2025/10/8 6:23:46

目录

一、定义

二、特性

三、适用条件

四、Matlab 仿真

1. 时间序列

2. 矩阵


一、定义

        相关系数(correlation of coefficient)是统计学中的概念,是由统计学家卡尔·皮尔逊设计的一个统计指标,也称作 Pearson 相关系数。相关系数用于描述两个连续型变量之间的线性相关程度及相关方向,它的取值在 [-1, 1] 之间。

        总体的 Pearson 相关系数用 \rho 表示,计算公式为:

\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}

        样本的 Pearson 相关系数用 r 表示,计算公式为:

\begin{align} r(\textbf{x}, \textbf{y})&=\frac{cov(\textbf{x}, \textbf{y})}{\sqrt{var(\textbf{x})var(\textbf{y})}}\nonumber\\ &=\frac{E[(\textbf{x}-\mu_\textbf{x})(\textbf{y}-\mu_\textbf{y})]\nonumber}{\sigma_\textbf{x}\sigma_\textbf{y}}\nonumber\\ &=\frac{E[\textbf{x}\textbf{y}]-E[\mu_\textbf{x}\textbf{y}]-E[\mu_\textbf{y}\textbf{x}]+E[\mu_\textbf{y}\mu_\textbf{x}]}{\sigma_\textbf{x}\sigma_\textbf{y}}\nonumber\\ &=\frac{E[\textbf{x}\textbf{y}]-E[\textbf{x}]E[\textbf{y}]-E[\textbf{y}]E[\textbf{x}]+E[\textbf{y}]E[\textbf{x}]}{\sigma_\textbf{x}\sigma_\textbf{y}}\nonumber\\ &=\frac{E[\textbf{x}\textbf{y}]-E[\textbf{x}]E[\textbf{y}]}{\sigma_\textbf{x}\sigma_\textbf{y}}\nonumber\\ &=\frac{E[\textbf{xy}]-E[\textbf{x}]E[\textbf{y}]}{\sigma_\textbf{x}\sigma_\textbf{y}}\nonumber \end{align}

        Pearson 相关系数 = 两个变量的协方差除以标准差的乘积。

        (参考:统计知识扫盲:相关系数)

        (参考:协方差)

        (参考:协方差公式推导)

二、特性

  1. 相关系数可以衡量两个变量之间的相关性大小;
  2. 相关系数的绝对值越接近1,表明两个变量之间的线性相关性越强;相关系数的绝对值越接近0,表明两个变量之间几乎不存在线性相关关系但可能存在其他关系)
  3. 在两个变量的位置、尺度单独变化下是不变的。即X和Y的相关系数和 aX+b 和 cY+d 的相关系数相等。

三、适用条件

  1. 两变量都是连续型变量;
  2. 两变量成对出现,且相互独立;
  3. Pearson是积差相关系数,它只能说明变量之间的线性相关关系,只适用于线性相关的场景。对于非线性相关等复杂场景,Pearson相关系数无法描述两个变量的相关性程度;
  4. Pearson相关系数是在原始数据的方差和协方差基础上计算得到的,所以对离群值很敏感,样本中存在的极端值/异常值对Pearson相关系数的影响很大,因此要慎重处理,必要时要进行剔除,或者加以变量转换,避免得出因一两个数值导致结果错误的结论;
  5. Pearson积差相关系数要求相应的变量呈双变量正态分布,既要求两个变量各自服从正态分布,有要求两个变量服从一个联合的双变量正态分布。

        以上三条,前两条要求最严,第三条比较宽松,违反时系数的结果也是比较稳健的。

        (参考:Matlab 相关系数的计算与作图)

        (参考:统计学习--三种常见的相关系数)

        (参考:相关系数的数值范围及其判断标准是什么)

四、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) 会将其转换为序列再进行计算。

1. 时间序列

%% 时间序列的 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);  % 可以是行向量,也可以是列向量,结果一致

运行结果:

​     ​    ​

 理论计算:

\begin{align} \rho_{\textbf{x}, \textbf{y}}&=\frac{cov(\textbf{x}, \textbf{y})}{\sigma_\textbf{x}\sigma_\textbf{y}}\nonumber\\ &=\frac{\frac{1}{N}\sum_{i=1}^N\textbf{x}_i\textbf{y}_i-\frac{1}{N}\sum_{i=1}^N\textbf{x}_i\frac{1}{N}\sum_{i=1}^N\textbf{y}_i}{\sqrt{\frac{\sum_{i=1}^N(\textbf{x}_i-\mu_\textbf{x})^{2}}{N}\frac{\sum_{i=1}^N(\textbf{y}_i-\mu_\textbf{y})^{2}}{N}}}\nonumber\\ &=\frac{\frac{15+80+225+480+875}{5}-\frac{15+20+25+30+35}{5}\frac{1+4+9+16+25}{5}}{\frac{\sqrt{(100+25+0+25+100)(100+49+4+25+196)}}{5}}\nonumber\\ &=0.9811\nonumber \end{align}

 结论:

  1. r2(1, 2) = r2(2, 1) = r1;
  2. p2(1, 2) = p2(2, 1) = p1;
  3. 其中 r 为两个向量之间的相关系数,p 为非零相关的假设检验值(位置和 r 对应),p < 0.05 表示相关性显著;
  4. Matlab 中的方差函数 var()、标准差函数 std()、相关系数函数 corr()、corrcoef() 都是用的样本的有偏估计计算的(即分别对应的样本的有偏方差、有偏标准差、用有偏标准差计算的相关系数)。

         (参考:Matlab计算相关系数)

        (参考:皮尔逊相关分析的MATLAB实现,corr(),corrcoef()函数使用) 

2. 矩阵

%% 矩阵的 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的结果一致

运行结果:

         

       

      

     


http://chatgpt.dhexx.cn/article/u0KtrXmg.shtml

相关文章

python计算两组数据的相关性_关于python:使用.corr获取两列之间的相关性

我有以下熊猫数据框Top15&#xff1a; 我创建了一个列来估计每个人的可引用文档数&#xff1a; 1 2Top15[PopEst] Top15[Energy Supply] / Top15[Energy Supply per Capita] Top15[Citable docs per Capita] Top15[Citable documents] / Top15[PopEst] 我想知道人均可引用…

df.corr和df.describe()

1&#xff1a;df.corr&#xff08;&#xff09; df.corr()函数的作用是返回列与列之间的相关系数 corr_matrix df.corr() sns.heatmap(corr_matrix, annotTrue, cmapcoolwarm) 2:df.describe() 得到数字列的一些特殊值。如果是df.describe(includeO) &#xff0c;则描述obje…

Oracle MySQL Hive sql 求相关性系数 corr

MySQL所有版本&#xff1a; CREATE TABLE sample (x float NOT NULL,y float NOT NULL,user_name varchar(255) ) ;INSERT INTO sample VALUES (1, 10, zs); INSERT INTO sample VALUES (2, 4, zs); INSERT INTO sample VALUES (3, 5, zs); INSERT INTO sample VALUES (6, 17…

CORR函数 看不明白

CORR聚集函数来计算相关系数 CORR&#xff1a;皮尔逊相关系数&#xff0c;是用于度量两个变量X和Y之间的相关&#xff08;线性相关&#xff09;&#xff0c;其值介于-1与1之间。 CORR_S&#xff1a;斯皮尔曼等级相关 SELECT CORR(SYSDATE - hiredate, sal) AS corr_val, CORR…

COSI-Corr安装教程

hello,各位好久不见。最近要处理数据了&#xff0c;一步步学习COSI-Corr软件。安装很简单的&#xff0c;大家一起来学习吧。 1、在COSI-Corr官网点击并注册&#xff0c;官方会给你提供的邮箱发送软件安装包&#xff1b;COSI-Corr: Measuring Ground Deformation from Optical …

matlab corr2原码,matlab中corr2函数的错误

我想通过使用corr2函数的模板匹配来读取输入图像中的字母 . 为此,我创建了数字和符号模板 . 在运行读取信件的代码时,我收到以下错误: Error using corr2 Expected input number 1, A, to be two-dimensional. 用于模板创建的MAtlab代码 %CREATE TEMPLATES one=imread(1.png…

pandas——相关系数函数corr()

计算DataFrame列之间的相关系数 a np.arange(1,10).reshape(3,3)data DataFrame(a,index["a","b","c"],columns["one","two","three"])print(data)one two threea 1 2 3b 4 5 6c 7 …

回归分析中的相关度(Corr)和R^2

一、.皮尔逊相关系数&#xff08;Pearson Correlation Coefficient&#xff09; 1.可以用来衡量两个数值之间的线性相关程度 2.对应的取值范围为[-1,1],即存在正相关&#xff0c;负相关和不相关 3.计算公式&#xff1a; 二、R^2 1.定义&#xff1a;决定系数&#xff0c;反应…

Python机器学习:corr()分析变量之间的相关关系

变量之间存在多重共线性的情况下会影响模型的精度&#xff0c;这里用相关矩阵corr()和热力图heatmap()可以直观地观察变量之间的相关关系&#xff0c;进而判断是否要对自变量进行删除&#xff0c;或者降维的操作。 首先用corr()构造相关矩阵研究变量之间的相关关系&#xff1a…

理解页面置换算法

对页面置换算法的理解&#xff1a; 在进程运行时&#xff0c;若其访问的页面不在内存&#xff0c;而需将其调入&#xff0c;但内存已无空闲空间时&#xff0c;就需要从内存中调出一页程序或数据&#xff0c;送入磁盘的对换区。选择调出页面的算法就称为页面置换算法。好的页面置…

Python实现页面置换算法

Python实现页面置换算法 FIFO LRU OPT 页面置换——FIFO、LRU、OPT Python实现页面置换算法页面置换算法&#xff1a;一、FIFO&#xff08;先进先出置换算法&#xff09;1.算法解析算法原理&#xff1a;当需要淘汰一个页面时&#xff0c;总是选择驻留主存时间最长的页面进行淘…

页面置换算法java_页面置换算法之Clock算法

1.前言 缓冲池是数据库最终的概念&#xff0c;数据库可以将一部分数据页放在内存中形成缓冲池&#xff0c;当需要一个数据页时&#xff0c;首先检查内存中的缓冲池是否有这个页面&#xff0c;如果有则直接命中返回&#xff0c;没有则从磁盘中读取这一页&#xff0c;然后缓存到内…

一文看懂页面置换算法

页面置换算法分为两类 1、局部页面置换算法 最优页面置换算法&#xff08;OPT、optimal&#xff09;先进先出算法&#xff08;FIFO&#xff09;最近最久未使用算法&#xff08;LRU,Least Recently Used&#xff09;时钟页面置换算法&#xff08;Clock&#xff09;最不常用算法…

虚拟内存页面置换算法

虚拟内存页面置换算法 虚拟地址空间页表分页式分段式段页式 页面置换算法最优置换算法( OPT)先进先出算法&#xff08;FIFO)最近最久未使用算法(LRU) 虚拟内存是计算机系统内存管理的一种技术。 它使得应用程序认为它拥有连续的可用的内存&#xff08;一个连续完整的地址空间&a…

OS之页面置换算法

之前几篇博客记录了OS内存管理的一些知识和技术&#xff0c;接下来将继续深入&#xff0c;介绍一些页面置换算法&#xff0c;这里包括一些我们大家都略有耳闻的算法。 置换算法 当出现缺页故障时&#xff0c;需要从外存调入新的页面到内存中去&#xff0c;而如果此时内存已满…

os 页面置换算法

在进程运行过程中&#xff0c;若其所要访问的页面不在内存&#xff0c;而需把它们调入内存&#xff0c;但内部无空闲空间时&#xff0c;为了保证该进程能正常运行&#xff0c;系统必须从内存中调出一页程序或数据送到磁盘的对换区中。但应将哪个页面调出&#xff0c;须根据一定…

内存页面置换算法

前面我们说过了进程的调度算法&#xff0c;今天我们继续来盘内存页面的置换算法&#xff0c;给你整的明明白白的&#x1f92a;&#x1f92a;&#x1f92a;。 内存页面置换算法主要有下面这么几种&#xff1a; 最佳页面置换算法&#xff08;OPT&#xff09;先进先出置换算法&a…

三种页面置换算法(详解)

地址映射过程中&#xff0c;若在页面中发现所要访问的页面不在内存中&#xff0c;则产生缺页中断。当发生缺页中断时&#xff0c;如果操作系统内存中没有空闲页面&#xff0c;则操作系统必须在内存选择一个页面将其移出内存&#xff0c;以便为即将调入的页面让出空间。而用来选…

计算机操作系统——页面置换算法

声明&#xff1a;本篇博客参考书籍《计算机操作系统》&#xff08;西安电子科技大学出版社&#xff09; 文章目录 一、最佳页面置换算法1、基本知识2、算法思想 二、先进先出&#xff08;FIFO&#xff09;页面置换算法1、基本知识2、算法思想 三、最近最久未使用&#xff08;L…

页面置换算法

文章目录 一、什么是页面置换算法&#xff1f;二、常用的页面置换算法1. FIFO(先进先出算法)2. OPT(最佳置换算法)3. LRU(最近最少使用算法)4. Clock(时钟置换算法)5. LFU(最不常用算法)6. MFU(最常使用算法) 三、程序设计 一、什么是页面置换算法&#xff1f; 进程运行时&…