数学建模方法——皮尔逊相关系数及其显著性检验 (Pearson correlation coefficient)
目录:
- 皮尔逊相关系数简介
- 皮尔逊相关系数
1.1. 皮尔逊相关系数注意事项——要配合散点图- 皮尔逊相关系显著性检验的条件
2.1. Jarque-Bera检验 JB检验
2.2. shapior-wilk 检验(matlab实现)
2.3. Q-Q图- 皮尔逊相关系数显著性检验方法
- 总结
0. 皮尔逊相关系数简介
相关系数是衡量两个数据相关关系的指标,两个数据相关在某种程度上可以帮助人们理解事物的变化规律。例如在商品推荐中,我们已知一个用户A的购买喜好,同时发现另一个用户B的购买数据和A相关性很高,那么我们可以根据A的喜好去给B推荐相关的产品,等等。皮尔逊相关系数(Pearson correlation coefficient)就是最为常用的用来衡量两个变量线性相关关系的指标,有了指标就有评分的依据,然而评分多高代表二者相关,评分多低代表二者无关呢?为了回答这个问题,我们常把皮尔逊相关系数和显著性检验共同使用以评价是不是二者有明显的相关性。
1. 皮尔逊相关系数
对皮尔逊相关系数的理解可以从很多个角度来进行,有人从协方差矩阵的角度思考,有人从向量cosine夹角的角度思考,这几种方式只要能让你对皮尔逊相关有感性的理解就可以。我们假设两组数据X和Y,每个都包含n个元素,计算二者协方差的方法就可以记为

其中E(X)和E(Y)分别代表二者的期望,也就是平均值。我们看分子部分,在分子中,当总体的一个值小x比X的平均值大,而且小y也比Y的平均值大的时候,分子就是正的,或者二者都小于平均值的时候,分子也是正的。当二者不都大于或者小于平均值的时候,分子就是负的。这里我们就可以感性的理解,如果数据杂乱,正负抵消,那么这个协方差就很小,就谈不上二者相关;如果两个变量相关,整个协方差就是很大的正值或者负值。然而从这里,我们也看出一些问题,就是这里面二者都是带有量纲的数据,假如说x都是0.01左右的数据,y都是1000左右的数据,那么整个的协方差就很容易被这么大的y带跑偏,为了解决这个量纲的问题,我们就消除量纲,从而得到一个无量纲的量,也就是皮尔逊相关系数了。方法就是除以二者的方差(可以看作每个x和y都经历了减均值除方差的归一化操作,消除了量纲)

在matlab中只需要一行代码即可搞定,即:
r1=corr(x,y,'type','pearson');
得到的皮尔逊相关系数都是在-1到1之间的,其中接近于1说明二者正相关,接近于-1说明二者负相关,越接近于0就说明二者越不相关。为了感性的理解皮尔逊相关系数,我们有如下的图示,来说明不同的数据分布对应的皮尔逊相关系数的大小:

1.1. 皮尔逊相关系数注意事项——一定要配合散点图
为了说明皮尔逊相关系数的一些注意事项,我这里看下图,在下图的四个例子中,他们的相关系数都是一样的,左上角是一个正常的图,右上角明显符合二次函数的相关不符合线性相关,左下角存在一个噪声点,如果没有噪声点的存在将是很完美的相性相关,右下角同样存在离群点。这四个例子的皮尔逊相关系数完全一致,然而相关性千差万别,所以说我们在应用皮尔逊相关系数进行相关性判断的时候,一定要注意以下的几点:

- 皮尔逊相关系数是用于衡量线性相关关系的,因此,在数据的分布不清楚的情况下,直接比较皮尔逊相关系数不能说明任何问题,就算是皮尔逊相关系数大(非线性相关也会使皮尔逊相关系数很大),也不能说明两个变量线性相关,我们必须画出散点图进行比较。
- 如果二者确实是线性关系,则皮尔逊相关系数大,就说明了确实更加的线性相关。
- 离群点对于皮尔逊相关系数的影响很大,可以根据情况思考是否要将其剔除。
- 就算皮尔逊相关系数是0也不能说明其完全不相关,可能是非线性相关的。
(啥也说明不了,要你有何用!!!)所以我们要强调的是,在进行相关性的分析时一定要配合散点图,否则是无效的(扪心自问一下,是不是你也曾经犯过错误)。皮尔逊相关系数可以给我们提供一个数值,有一些做法是将其分级,比如说大小在多少之间就代表其是相关的(比如0.7到1及-0.7到-1代表很相关),等等。然而这样的比较虽然有一定的说服力但是始终有些主观。所以在一些应用中,比起直接比较相关性大小,往往我们更关注皮尔逊相关系数的显著性,所以这里就踏上了显著性检验之旅。
回顾一下,我们这里主要讲解了皮尔逊相关系数的计算方法和一种理解方法,同时强调了皮尔逊相关系一定要和散点图共使用。
2. 皮尔逊相关系显著性检验的条件
皮尔逊相关系数的假设检验部分用到的是t检验的方法,而t检验的方法需要样本满足一定的前提条件,所以为了检验皮尔逊相关系数是否说明了显著性的相性相关,我们首先要检验数据是否满足了可以进行显著性检验的条件,这里条件有三条
- 实验数据是成对的来自正态分布的总体。正态性是很多需要假设检验的前提条件,但是在很多的应用中并没有被严格的验证数据是否满足正态分布。
- 实验数据之间的差距不能太大。我们之前降到了一些噪声点,离群的点是会对其相关系数造成较大影响的,所以说需要对噪声点进行修正或者剔除
- 每组样本都是独立抽样的。独立抽样也是很多假设检验的前提条件。
2.1. Jarque-Bera检验 JB检验
JB检验是依靠偏度(skewness)和峰度(kurtosis)进行正态性检验的,需要注意的是JB检验适合大样本的情况,即我们的样本数量大于30的时候才可以使用。我们知道标准的正态分布是一个草帽形状的(或者叫啥墨西哥什么帽形状的)当草帽的尖尖向x轴负方向偏就叫做正偏斜,x轴正方向就叫做负偏斜。草帽在y方向被压扁了就叫做平峰,草帽被拉长了就叫做尖峰。这就是偏度和峰度的粗糙解释。其中偏度的定义是:

在matlab中用
skewness(x);
来计算,其中正态分布的偏度为0。峰度的定义为:

在matlab中用kurtosis(x); 来计算,其中正太分布的峰度根据公式的不同,值分别为3或者0。Matlab是用第一种方法来计算的。
为了检验是否是满足正态分布,我们同样使用假设检验的方法,第一步就是构建统计量,JB统计量的构造方法如下:

有人证明出当我们的被验证数据是正态分布的话,那么我们的JB检验结果应该服从自由度为2的卡方分布。在这里,我们首先进行原假设和备择假设的设定,原假设H0:被检测数据符合正态分布,备择假设是H1:被检测数据不符合正态分布。在matlab中,我们使用jbtest命令来对进行jb检测,语句为
[h,p] = jbetst(x,alpha);
其中阿尔法的常见用值为0.05。所以大家也不需要自己计算偏度和峰度啥的。当结果h为1的时候,我们拒绝原假设的说法,接受备择假设的说法;当h为0的时候,我们没有理由拒绝原假设。也就是说当h为0的时候我们就认为整个的数据还是满足正态分布的。
鉴于假设检验是数理统计中单独的一个大章节,一句话两句话讲不明白,我们这里就主要强调如何正确的使用,就不详细讲如何进行假设检验了。
2.2. shapior-wilk 检验(matlab实现)
Shapior 检验主要应用于小样本的情况下,即在样本量在3到50之间的时候进行的检验。同样的也是一个假设检验的过程,在matlab中需要调用统计学工具箱才可以进行进一步的验证,没有直接的指令。matlab中可以使用以下的方法进行shapior-wilk检验,首先要在命令行汇总输入如下的代码,其中A就是要检测的数据,可以自由变更,注意是命令窗口,command window:
A = [1,2,2.5,3,3.5,4];
S = sym(A);
note = mupad % 在这里会跳出一个mupad窗口,先最小化,然后输入下面的setVar
setVar(note, 'S', S)
上面四行输入后,在mupad里面输入如下的指令即可得到最终的结果
S2:=coerce(S,DOM_LIST)
B:=stats::swGOFT(S2[1])

在结果中p值就是我们的求得的p值,如果p值小于0.05,则说明拒绝原假设,也就是数据不符合正态分布,而如果大于0.05就说明没有理由拒绝数据符合正态分布。
注:这里的mupad其实和mathematica类似(我之前的博客写过mathematica的教程,说实话写这个博客之前我真的不知道有mupad的存在,好惭愧),每条指令前面都有一个系统给的方括号(不要自己打方括号),如果方括号不小心被自己删除了可以点击菜单栏中的insert->calculation添加,一行写完打回车,命令就会自动执行,一次貌似只能一行,如果执行有问题(一般不会有问题),也可以点击菜单栏中的Notebook->evaluate 运行。
2.3. Q-Q图
Q-Q图也是一种检验方法,但是较为主观,而且要求数据量很大,通常可能需要有大于一百个数据,做出的图像才好看。Q-Q图的使用方法很简单就是qqplot(x); 其中x为你要进行检验的数据。画出图像如大部分点都在对角线上就可以说明数据符合正态分布。
回顾一下,在进行皮尔逊相关系数的显著性检验之前,我们需要验证数据是否满足正态性(除非和正太分布差距特别大,否则一般都是满足的)。我们这里讲解了三种正态性的验证方法,一个是Jarque-Bera检验 JB检验,一个是shapior-wilk 检验,一个是Q-Q图检验,值得注意的是,当样本量在3-50之间对的时候,应当使用shapior-wilk检验,当数据量大于30可以使用JB检验,当数据量更大可以使用JB检验或者Q-Q图检验,但还是更加推荐使用JB检验。
3. 皮尔逊相关系数显著性检验方法
当被检测样本基本满足皮尔逊相关检测的条件的时候,我们就可以皮尔逊相关系数进行显著性检验了。这里又有很多数学家证明了皮尔逊相关系数可以构建一个统计量t,构造方式如下:

其中n为样本的数量,r就是我们计算得到的皮尔逊相关系数,这个统计量被证明是符合自由度为t-2的t分布的。这里我们就可以使用t分布进行相关性的检验。
在t检验中,我们的原假设H0:r=0,即没有线性相关关系,备择假设H1:r不等于0,即存在线性相关关系。
我们首先计算出上面构造出来的t值,之后在matlab中使用如下的公式计算p值,即
p = (1-tcdf(t,n-2))*2 %双侧需要乘2
其中n为样本数量。当p值小于0.01,在99%的置信水平上拒绝原假设,接受备择假设,(即,样本有线性相关性,而且非常显著);当p小于0.05的时候,在95%的置信水平上拒绝原假设,接受备择假设(即,样本有线性相关性,较为显著)。当然,在一些时候也可以将p值放宽到0.1,毕竟对于这个阈值的界定方式还存在着一定的争议,但是绝大部分的研究还是以0.05为分界的。
回顾一下,这里介绍了在满足正态性条件的情况下,如何对皮尔逊系数进行显著性的检验。
4. 总结
皮尔逊系数很常用,如何用对要留心,用时搭配散点图,不能随便比数值。假设检验服人心,用前一定要小心,满足条件再进行,否则用错哭唧唧。
智能推荐
数学建模之pearson、spearman相关系数
相关系数 用来衡量两个变量之间 的相关性大小。 根据数据满足的不同条件,选择不同的相关系数来计算分析。 总体和样本 总体:考察对象的全部个体 样本:从总体数据中抽取一部分个体 皮尔逊pearson相关系数(线性+近似正态分布) 注意:只是用来衡量两个变量线性相关程度,在说明相关性时,必须绘制散点图,加上该系数的值才能说明相关性的程度,原因如下: (1)非线性相关也可能导致pearson相关系数很大...
Pearson相关系数
Pearson相关系数 [(Pearson CorrelationCoefficient)是用来衡量两个数据集合是否在一条线上面,它用来衡量定距变量间的线性关系 探究Pearson相关系数和数据分布...
皮尔逊(Pearson)相关系数 - 公式和代码实现
文章目录 1. 简介 2. 公式 3. 代码实现 4. 其他参考资料 代码来源于:https://github.com/yaleimeng/Final_word_Similarity 我将其单独抽取、组合出来做讲解。 1. 简介 相关系数:考察两个变量之间的相关程度。相关系数越大,相关性越强。 皮尔逊相关也称为积差相关,是英国统计学家皮尔逊于20世纪提出的一种计算直线相关的方法。 2. 公式 三个...
CV笔记03:自监督GAN(ss-gan)
无需标注数据,利用辅助性旋转损失的自监督GANs,-- 对抗+自监督的无监督方式 《通过辅助旋转损失进行的自监督GAN》CVPR 2019 论文速看 0.摘要 目前自然图像合成主要是条件GAN,但是其缺点是需要标注数据。 我们利用两种流行的无监督学习技术,对抗训练和自我监督,并朝着缩小有条件GAN和无条件GAN之间的差距迈出了一步。 我们允许网络在代表学习的任务上进行协作,同时相对于经典GAN博弈...
猜你喜欢
Retrofit(三)上传文件
想了想,觉得还是把自定义的东西放到最后再讲,所以讲下用Retrofit上传文件,就拿上传图片来说,因为上传图片我是想写一个专题的,包括以下: 1.上传图片操作 2.展示图片操作 3.选择图片操作 上传图片这篇讲,用Retrofit,之后我还想写一篇是用httpurlconnection的,因为用它会有个拼接的操作,只有经历过拼接才会更深刻的了解使用Http上传文件的过程。展示图片我其实已经写完了,...
Linux安装SQL2019
官方文档 导入公共存储库 GPG **: 为 SQL Server 2019 注册 Microsoft SQL Server Ubuntu 存储库: 使用以下命令进行安装 SQL2019: 包安装完成后,运行 mssql-conf setup,按照提示设置 SA 密码并选择版本,并执行以下命令: 完成配置后,验证服务是否正在运行:...
vue-cli使用vscode编辑器如何自动eslint检测
VSCode 保存时自动ESlint格式化 Eslint 自动格式化 首先安装ESLint插件 2.安装完成后,每次修改完代码都需要执行 "npm run lint"之后才能格式化 打开设置选项 编辑代码settings.json 新建.eslintrc.js文件 根据eslint官网规则(eslint官网),编写eslintrc.js文件 保存之后,今后在保存时就能自动ESL...
搭建VUE脚手架(二)---修改完善cli3
光创建完cli3脚手架只是成功了一半,现在还无法直接使用(确切地说还不好用),还需要继续改造 这是本文修改后项目的目录结构,创建文件时可以参考。 1.创建vue.config.js 2.创建常量配置文件(.env.development和.env.production),用于存放常量 .env.development .env.production 3.ESLink配置(别问为什么,问就是我严格语...
