Pearson相关系数

考察两个事物(在数据里我们称之为变量)之间的相关程度,简单来说就是衡量两个数据集合是否在一条线上面。其计算公式为:

N表示变量取值的个数。

相关系数r的值介于–1与+1之间,即–1≤r≤+1。其性质如下:

  1. 当r>0时,表示两变量(当X的值增大(减小),Y值增大(减小))正相关,r<0时,两变量为负相关(当X的值增大(减小),Y值减小(增大))。
  2. 当|r|=1时,表示两变量为完全线性相关,即为函数关系。
  3. 当r=0时,表示两变量间无线性相关关系。
  4. 当0<|r|<1时,表示两变量存在一定程度的线性相关。且|r|越接近1,两变量间线性关系越密切;|r|越接近于0,表示两变量的线性相关越弱。

一般可按三级划分:|r|<0.4为低度线性相关;0.4≤|r|<0.7为显著性相关;0.7≤|r|<1为高度线性相关。

当两个变量的标准差都不为零时,相关系数才有定义,皮尔逊相关系数适用于:

  1. 两个变量之间是线性关系,都是连续数据。
  2. 两个变量的总体是正态分布,或接近正态的单峰分布。
  3. 两个变量的观测值是成对的,每对观测值之间相互独立。

一个具体的计算例子:

X Y 1 2 2 5 3 6

而利用matlab计算的话则可以使用函数 corrcoef或corr

先看一下help corrcoef的内容:

再看一下help corr的内容

对于前面提到的具体的计算例子,可以在matlab中实现如下:

x=[1;2;3];
y=[2;5;6];
r1=corr(x,y,'type','pearson');
r2=corrcoef(x,y);

最后可以看到

r1=0.9608

r2=

1.0000 0.9608

0.9608 1.0000

均与前面的计算结果相符。需要注意的是,使用corr函数时默认计算皮尔逊相关系数

Spearman相关系数

斯皮尔曼相关系数用来估计两个变量X、Y之间的相关性,其中变量间的相关性可以使用单调函数来描述。如果两个变量取值的两个集合中均不存在相同的两个元素,那么,当其中一个变量可以表示为另一个变量的很好的单调函数时(即两个变量的变化趋势相同),两个变量之间的相关系数可以达到+1或-1。

假设两个随机变量分别为X、Y(也可以看做两个集合),它们的元素个数均为N,两个随机变量取的第i(1<=i<=N)个值分别用Xi、Yi表示。对X、Y进行排序(同时为升序或降序),得到两个元素排行集合x、y,其中元素xi、yi分别为Xi在X中的排行以及Yi在Y中的排行。将集合x、y中的元素对应相减得到一个排行差分集合d,其中di=xi-yi,1<=i<=N。随机变量X、Y之间的斯皮尔曼相关系数可以由x、y或者d计算得到,其计算方式如下所示:

由排行差分集合d计算而得(公式一):

由排行集合x、y计算而得(斯皮尔曼相关系数同时也被认为是经过排行的两个随机变量的皮尔逊相关系数,以下实际是计算x、y的皮尔逊相关系数)(公式二):

以下是一个计算集合中元素排行的例子(仅适用于斯皮尔曼相关系数的计算)

这里需要注意:当变量的两个值相同时,它们的排行是通过对它们位置进行平均而得到的。

斯皮尔曼相关系数对数据条件的要求没有皮尔逊相关系数严格,只要两个变量的观测值是成对的,或者是由连续变量观测资料转化得到的,不论两个变量的总体分布形态、样本容量的大小如何,都可以用斯皮尔曼相关系数来进行研究。

使用matlab计算spearman相关系数则比较简单,也是使用corr函数,如下:

r= corr(x, y, 'type' , 'Spearman');

对于上面的例子,则可以计算出r=1。

注意:使用Matlab自带函数计算斯皮尔曼相关系数时,需要保证X、Y均为列向量;Matlab自带的函数是通过公式二计算序列的斯皮尔曼相关系数的。

matlab 相关性分析的更多相关文章

  1. 使用R进行相关性分析

    基于R进行相关性分析 一.相关性矩阵计算: [1] 加载数据: >data = read.csv("231-6057_2016-04-05-ZX_WD_2.csv",head ...

  2. 多普勒失真信号采样Matlab模拟分析

    多普勒失真信号采样Matlab模拟分析 方案 水声通信指的是使用声信号在水中数据传输. 相对而言.电磁信号在水中吸收严重衰减过快,光信号受水中悬浮颗粒的影响,也无法完毕远距离传输. 这两种信号的传播距 ...

  3. Python文章相关性分析---金庸武侠小说分析

    百度到<金庸小说全集 14部>全(TXT)作者:金庸 下载下来,然后读取内容with open('names.txt') as f: data = [line.strip() for li ...

  4. python数据相关性分析 (计算相关系数)

    #-*- coding: utf-8 -*- #餐饮销量数据相关性分析 计算相关系数 from __future__ import print_function import pandas as pd ...

  5. 基于R进行相关性分析--转载

    https://www.cnblogs.com/fanling999/p/5857122.html 一.相关性矩阵计算: [1] 加载数据: >data = read.csv("231 ...

  6. 试题 H: 人物相关性分析 第十届蓝桥杯

    试题 H: 人物相关性分析时间限制: 1.0s 内存限制: 512.0MB 本题总分: 20 分[问题描述]小明正在分析一本小说中的人物相关性.他想知道在小说中 Alice 和 Bob有多少次同时出现 ...

  7. Python文章相关性分析---金庸武侠小说分析-2018.1.16

    最近常听同事提及相关性分析,正巧看到这个google的开源库,并把相关操作与调试结果记录下来. 输出结果: 比较有意思的巧合是黄蓉使出打狗棒,郭靖就用了降龙十八掌,再后测试了名词的解析. 小说集可以百 ...

  8. Spark MLlib基本算法【相关性分析、卡方检验、总结器】

    一.相关性分析 1.简介 计算两个系列数据之间的相关性是统计中的常见操作.在spark.ml中提供了很多算法用来计算两两的相关性.目前支持的相关性算法是Pearson和Spearman.Correla ...

  9. R_Studio(学生成绩)数据相关性分析

    对“Gary.csv”中的成绩数据进行统计量分析 用cor函数来计算相关性,method默认参数是用pearson:并且遇到缺失值,use默认参数everything,结果会是NA 相关性分析 当值r ...

随机推荐

  1. 【笔记】让DIV水平垂直居中的两种方法

    今天写的了百度前端学院春季班的任务:定位和居中问题  由于距离上次学习CSS有点久远了,加上以前木有记笔记的习惯,方法忘得只剩下一种,今天通过网上查阅资料总结了以下两种简单的方法让DIV水平垂直居中. ...

  2. Java SE 8 for the Really Impatient读书笔记——Java 8 Lambda表达式

    1. lambda表达式的语法 lambda表达式是一种没有名字的函数,它拥有函数体和参数. lambda表达式的语法十分简单:参数->主体.通过->来分离参数和主体. 1.1 参数 la ...

  3. java之从字符串比较到==和equals方法区别

    我们先看代码 String str1 = new String("hello"); String str2 = "hello"; System.out.prin ...

  4. 开发环境配置--Ubuntu+Qt4+OpenCV(三)

    同系列文章 1. 开发环境配置--Ubuntu+Qt4+OpenCV(一) 2. 开发环境配置--Ubuntu+Qt4+OpenCV(二) 3. 开发环境配置--Ubuntu+Qt4+OpenCV(三 ...

  5. Centos 配置ASP.Net Core 运行环境

    一:ASP.Net Core跨平台运行,需要在Linux安装运行环境.本机器使用的Centos,下载安装地址为:https://www.microsoft.com/net/core#centos su ...

  6. 多主一从mysql replication同步表的大胆尝试.

    能否将不同机器上的不同库中的表同步到同一个机器的同一个库中?表是不同的.而且对于slave这台机子来说,这些表只用来读.   同步不同库的表很简单了,用 replicate-do-table=db_n ...

  7. A Byte of Python 笔记(3)运算符和表达式

    第5章 运算符与表达式 大多数语句(逻辑行)都包含表达式.例子,如 2 + 3.一个表达式可以分解为运算符和操作数. 运算符 运算符 名称 说明 例子 + 加 两个对象相加 3 + 5得到8.'a' ...

  8. vim下高级操作以及文本替换命令

    关于vim的一些基本和高级的操作 可参考下面的链接. http://coolshell.cn/articles/5426.html 在使用vim编辑文本的时候涉及到批量替换文本内容 :s/vivian ...

  9. 关于 java.io.IOException: open failed: EACCES (Permission denied)

    今天解决了一个问题,不得不来和大家分享.就是关于 java.io.IOException: open failed: EACCES (Permission denied)的问题,网上也有很多人把这个问 ...

  10. 在表单(input)中id和name的区别

    但是name在以下用途是不能替代的:1. 表单(form)的控件名,提交的数据都用控件的name而不是id来控制.因为有许多name会同时对应多个控件,比如checkbox和radio,而id必须是全 ...