matlab 相关性分析

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自带的函数是通过公式二计算序列的斯皮尔曼相关系数的。

时间: 2024-12-26 01:39:39

matlab 相关性分析的相关文章

matalb相关分法,案例:餐饮销量数据相关性分析

%% 餐饮销量数据相关性分析 clear; % 初始化参数 catering_sale = '../data/catering_sale_all.xls'; % 餐饮数据,含有其他属性 index = 1; % 销量数据所在列 %% 读入数据 [num,txt] = xlsread(catering_sale);%读取num %% 相关性分析 corr_ = corr(num);%corr_=线性相关(num) %% 打印结果 rows = size(corr_,1);%行数=取长度(corr_

相关性分析方法(Pearson、Spearman)

有时候我们根据需要要研究数据集中某些属性和指定属性的相关性,显然我们可以使用一般的统计学方法解决这个问题,下面简单介绍两种相关性分析方法,不细说具体的方法的过程和原理,只是简单的做个介绍,由于理解可能不是很深刻,望大家谅解. 1.Pearson相关系数  最常用的相关系数,又称积差相关系数,取值-1到1,绝对值越大,说明相关性越强.该系数的计算和检验为参数方法,适用条件如下: (适合做连续变量的相关性分析) (1)两变量呈直线相关关系,如果是曲线相关可能不准确. (2)极端值会对结果造成较大的影

【地理空间数据挖掘】相关性分析

主要从普通的相关性和空间的自相关性分析.普通的相关性如变量之间的相关性,特别是目标变量与因子变量之间的相关性分析,本身也是预处理中特征选择的重要方法:而空间的相关性分析则分析则相关性,其中空间关联是其显著的特点:时间序列之间也存在空间相关性,对其进行探索性分析可考察空间数据(栅格)的时间联动性. 1普通相关性分析 就是分析变量之间的相关性,包括以下5个方面 1. Pearson相关系数探索连续变量相关性 Pearson相关性系数是最基本的相关系数,它考查两个事物之间的关联程度,也就是说,当一个变

空气质量相关性分析

corrcoef x=linspace(0,10); y=x+rand(size(x)); scatter(x,y) h=lsline; set(h,'LineWidth',3,'LineStyle','--','Color',[1 0 1]) pm10=[352,179,383,463,670,451,426,302,566] pm25=[251,93,189,262,427,284,264,177,346] plot(pm10,pm25,'+');//绘出散点图 lsline;//根据散点图

相关性分析代码片段

ldcca_tms = img_To_4D_array('C:\Users\Administrator\Desktop\contrast\2014-05-20-17-10.img'); spm_tms = img_To_4D_array('C:\Users\Administrator\Desktop\contrast\no_phycaa.img'); % x = size(spm_tms,1); % y = size(spm_tms,2); % z = size(spm_tms,3); % %

相关性分析代码片段2

%% 参考BLOCK reference_stimulus =[ 0 0 0 0 0 0 0 0 0 0 ... 1 1 1 1 1 1 1 1 1 1 ... 0 0 0 0 0 0 0 0 0 0 ... 1 1 1 1 1 1 1 1 1 1 ... 0 0 0 0 0 0 0 0 0 0 ... 1 1 1 1 1 1 1 1 1 1 ... 0 0 0 0 0 0 0 0 0 0 ]; %% 原始数据 datacell_4d = load_untouch_nii('C:\Users\A

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

最近常听同事提及相关性分析,正巧看到这个google的开源库,并把相关操作与调试结果记录下来. 小说集可以百度<金庸小说全集 14部>全(TXT)作者:金庸 下载下来.需要整理好格式,门派和武功名称之间需要有换行符,留意删除掉最后一行的空白区域.下载完成后可以用自己习惯的工具或程序做相应调整,因语料内容太长,博客里面不允许"堆砌",所以没复制上来,有需要的可以再联系. with open('names.txt') as f: data = [line.strip() for

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

在公司晨会对称过程中,好几次问到了了相关性分析,正巧看到这个google的开源库,并把相关操作与调试结果记录下来. 小说集可以百度<金庸小说全集 14部>全(TXT)作者:金庸 下载下来.需要整理好格式,门派和武功名称之间需要有换行符,留意删除掉最后一行的空白区域.下载完成后可以用自己习惯的工具或程序做相应调整,因语料内容太长,博客里面不允许"堆砌",所以没复制上来,有需要的可以再联系. with open('names.txt') as f: data = [line.s

数据特征分析:5.相关性分析

相关性分析 三点图矩阵初判多变量间关系,两两数据之间的,比如说4个数据ABCD,就有12个比较,第一个参数和第二个参数,第一个参数和第三个参数,.......这个图就是正态分布的接个参数,就没有任何的相关性 相关性分析 分析连续变量之间的线性相关程度的强弱 图示初判 / Pearson相关系数(皮尔逊相关系数) / Sperman秩相关系数(斯皮尔曼相关系数) import numpy as np import pandas as pd import matplotlib.pyplot as p