原文地址:http://blog.sina.com.cn/s/blog_4a0824490100ync4.html


Pearson相关系数用来衡量两个数据集合是否在一条线上面。其计算公式为:

一个具体的计算的例子:

X Y1 22 53 6

而利用matlab计算:函数 corrcoef

例如:

help corrcoef

x =randn(30,4);    % Uncorrelated data
x(:,4) =sum(x,2);   %Introduce correlation.
[r,p] = corrcoef(x)  % Compute samplecorrelation and p-values.
[i,j] = find(p<0.05);  %Find significant correlations.
[i,j]               % Display their (row,col) indices.

r =
   1.0000  -0.3566   0.1929   0.3457
  -0.3566   1.0000  -0.1429   0.4461
   0.1929  -0.1429   1.0000   0.5183
   0.3457   0.4461   0.5183   1.0000

p =
   1.0000   0.0531   0.3072   0.0613
   0.0531   1.0000   0.4511   0.0135
   0.3072   0.4511   1.0000   0.0033
   0.0613   0.0135   0.0033   1.0000

ans =
    4    2
    4    3
    2    4
    3    4

r(i,j)就表示x(:,i)和x(:,j)的相关系数.

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

当r>0时,表示两变量正相关,r<0时,两变量为负相关。
当|r|=1时,表示两变量为完全线性相关,即为函数关系。
当r=0时,表示两变量间无线性相关关系。
当0<|r|<1时,表示两变量存在一定程度的线性相关。且|r|越接近1,两变量间线性关系越密切;|r|越接近于0,表示两变量的线性相关越弱。
一般可按三级划分:|r|<0.4为低度线性相关;0.4≤|r|<0.7为显著性相关;0.7≤|r|<1为高度线性相关。

=================================================================================

由于使用的统计相关系数比较频繁,所以这里就利用几篇文章简单介绍一下这些系数。

相关系数:考察两个事物(在数据里我们称之为变量)之间的相关程度。

如果有两个变量:X、Y,最终计算出的相关系数的含义可以有如下理解:

(1)、当相关系数为0时,X和Y两变量无关系。

(2)、当X的值增大(减小),Y值增大(减小),两个变量为正相关,相关系数在0.00与1.00之间。

(3)、当X的值增大(减小),Y值减小(增大),两个变量为负相关,相关系数在-1.00与0.00之间。

相关系数的绝对值越大,相关性越强,相关系数越接近于1或-1,相关度越强,相关系数越接近于0,相关度越弱。

通常情况下通过以下取值范围判断变量的相关强度:
相关系数    0.8-1.0     极强相关
                0.6-0.8    强相关
                0.4-0.6    中等程度相关
                0.2-0.4    弱相关
                0.0-0.2    极弱相关或无相关

Pearson(皮尔逊)相关系数

1、简介

皮尔逊相关也称为积差相关(或积矩相关)是英国统计学家皮尔逊于20世纪提出的一种计算直线相关的方法。

假设有两个变量X、Y,那么两变量间的皮尔逊相关系数可通过以下公式计算:

公式一:

公式二:

公式三:

公式四:

以上列出的四个公式等价,其中E是数学期望,cov表示协方差,N表示变量取值的个数。

2、适用范围

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

(1)、两个变量之间是线性关系,都是连续数据。

(2)、两个变量的总体是正态分布,或接近正态的单峰分布。

(3)、两个变量的观测值是成对的,每对观测值之间相互独立。

3、Matlab实现

皮尔逊相关系数的Matlab实现(依据公式四实现):

function coeff = myPearson(X , Y)  
  1. % 本函数实现了皮尔逊相关系数的计算操作
  2. %
  3. % 输入:
  4. %   X:输入的数值序列
  5. %   Y:输入的数值序列
  6. %
  7. % 输出:
  8. %   coeff:两个输入数值序列X,Y的相关系数
  9. %
  10. if length(X) ~= length(Y)
  11. error('两个数值数列的维数不相等');
  12. return;
  13. end
  14. fenzi = sum(X .* Y) - (sum(X) * sum(Y)) / length(X);
  15. fenmu = sqrt((sum(X .^2) - sum(X)^2 / length(X)) * (sum(Y .^2) - sum(Y)^2 / length(X)));
  16. coeff = fenzi / fenmu;
  17. end %函数myPearson结束

也可以使用Matlab中已有的函数计算皮尔逊相关系数:

coeff = corr(X , Y);  

4、参考内容

http://zh.wikipedia.org/zh-cn/相关

=================================================================================

Spearman Rank(斯皮尔曼等级)相关系数

1、简介

在统计学中,斯皮尔曼等级相关系数以Charles Spearman命名,并经常用希腊字母ρ(rho)表示其值。斯皮尔曼等级相关系数用来估计两个变量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的皮尔逊相关系数)(公式二):

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

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

2、适用范围

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

3、Matlab实现

源程序一:

斯皮尔曼等级相关系数的Matlab实现(依据排行差分集合d计算,使用上面的公式一)

viewplaincopy toclipboardprint?
  1. function coeff = mySpearman(X , Y)
  2. % 本函数用于实现斯皮尔曼等级相关系数的计算操作
  3. %
  4. % 输入:
  5. %   X:输入的数值序列
  6. %   Y:输入的数值序列
  7. %
  8. % 输出:
  9. %   coeff:两个输入数值序列X,Y的相关系数
  10. if length(X) ~= length(Y)
  11. error('两个数值数列的维数不相等');
  12. return;
  13. end
  14. N = length(X); %得到序列的长度
  15. Xrank = zeros(1 , N); %存储X中各元素的排行
  16. Yrank = zeros(1 , N); %存储Y中各元素的排行
  17. %计算Xrank中的各个值
  18. for i = 1 : N
  19. cont1 = 1; %记录大于特定元素的元素个数
  20. cont2 = -1; %记录与特定元素相同的元素个数
  21. for j = 1 : N
  22. if X(i) < X(j)
  23. cont1 = cont1 + 1;
  24. elseif X(i) == X(j)
  25. cont2 = cont2 + 1;
  26. end
  27. end
  28. Xrank(i) = cont1 + mean([0 : cont2]);
  29. end
  30. %计算Yrank中的各个值
  31. for i = 1 : N
  32. cont1 = 1; %记录大于特定元素的元素个数
  33. cont2 = -1; %记录与特定元素相同的元素个数
  34. for j = 1 : N
  35. if Y(i) < Y(j)
  36. cont1 = cont1 + 1;
  37. elseif Y(i) == Y(j)
  38. cont2 = cont2 + 1;
  39. end
  40. end
  41. Yrank(i) = cont1 + mean([0 : cont2]);
  42. end
  43. %利用差分等级(或排行)序列计算斯皮尔曼等级相关系数
  44. fenzi = 6 * sum((Xrank - Yrank).^2);
  45. fenmu = N * (N^2 - 1);
  46. coeff = 1 - fenzi / fenmu;
  47. end %函数mySpearman结束

源程序二:

使用Matlab中已有的函数计算斯皮尔曼等级相关系数(使用上面的公式二)

coeff = corr(X , Y , 'type' , 'Spearman');  

注意:使用Matlab自带函数计算斯皮尔曼等级相关系数时,需要保证X、Y均为列向量;Matlab自带的函数是通过公式二计算序列的斯皮尔曼等级相关系数的。一般情况下,使用上面给出的源程序一是可以得到所要的结果的,但是当序列X或Y中出现具有相同值的元素时,源程序一给出的结果就会与Matlab中corr函数计算的结果不同,这是因为当序列X或Y中有相同的元素时,公式一和公式二计算的结果会有偏差。这里可以通过将源程序一中的以下三行

fenzi = 6 * sum((Xrank - Yrank).^2);  

fenmu = N * (N^2 - 1);

coeff = 1 - fenzi / fenmu;

改为

coeff = corr(Xrank' , Yrank'); %皮尔逊相关系数  

这样便可以使源程序一在计算包含相同元素值的变量(至少有一个变量的取值集合中存在相同的元素)间的斯皮尔曼等级相关系数时,得到与Matlab自带函数一样的结果。程序一经过修改过后同样可以用来计算一般变量(两个变量的取值集合中均不存在相同的元素)等级相关间的斯皮尔曼等级系数。

关于皮尔逊相关系数的计算可参考以下文章:

统计相关系数(1)——Pearson(皮尔逊)相关系数及MATLAB实现

4、参考内容

(1)、http://en.wikipedia.org/wiki/Spearman's_rank_correlation_coefficient

(2)、http://wiki.mbalib.com/wiki/斯皮尔曼等级相关

================================================================================

Kendall Rank肯德尔等级相关系数

具体见:http://blog.csdn.net/wsywl/article/details/5889419

【matlab】matlab相关系数计算公式(Pearson和Spearman,以及Kendall Rank)相关推荐

  1. 相关系数pearson、spearman、kendall和R语言中的cor/or.test()

    相关系数pearson.spearman.kendall和R语言中的cor/cor.test 1. 相关系数pearson.spearman.kendall 2. R语言cor函数和cor.test函 ...

  2. 三大相关系数:Pearson、Spearman秩相关系数、kendall等级相关系数的联系与区别

    三大统计相关系数:Pearson.Spearman秩相关系数.kendall等级相关系数 统计相关系数简介 Pearson(皮尔逊)相关系数 1.简介 2.适用范围 3.使用方法 Spearman R ...

  3. 相关分析-如何选用Pearson、Spearman、Kendall三大相关系数

    说到相关分析,很多人会马上拿出皮尔逊Pearson相关系数,从不论数据是不是符合适用条件,甚至完全不了解Pearson相关系数还有假设条件这回事. 常见的相关系数有三种,它们分别是Pearson.Sp ...

  4. 统计学之三大相关性系数简介(pearson、spearman、kendall)

    三个相关性系数(pearson, spearman, kendall)反应的都是两个变量之间变化趋势的方向以及程度,其值范围为-1到+1,0表示两个变量不相关,正值表示正相关,负值表示负相关,值越大表 ...

  5. 统计学之三大相关性系数(pearson、spearman、kendall)

    (转自 微信公众号克里克学苑) 三个相关性系数(pearson, spearman, kendall)反应的都是两个变量之间变化趋势的方向以及程度,其值范围为-1到+1,0表示两个变量不相关,正值表示 ...

  6. 机器学习——统计学三大相关性系数(pearson、spearman、kendall)

    应用场景 当想要比较变量间变化趋势时,可以先做出散点图从视觉上判断是否存在相关性(趋势一致).然后再采用相关性分析从统计角度衡量. 1. pearson correlation coefficient ...

  7. pandas计算特征与所有数值特征的相关性并排序可视化:包含pearson、spearman、kendall

    pandas计算特征与所有数值特征的相关性并排序可视化:包含pearson.spearman.kendall 目录

  8. 三大统计相关系数:Pearson、Spearman秩相关系数、kendall等级相关系数

    统计相关系数简介 由于使用的统计相关系数比较频繁,所以这里就利用几篇文章简单介绍一下这些系数. 相关系数:考察两个事物(在数据里我们称之为变量)之间的相关程度. 如果有两个变量:X.Y,最终计算出的相 ...

  9. 统计学三大相关性系数:pearson,spearman,kendall

    目录 person correlation coefficient(皮尔森相关性系数-r) spearman correlation coefficient(斯皮尔曼相关性系数-p) kendall ...

  10. 统计基础:4.2_相关分析之Pearson、Spearman、Kendall

    常用的相关分析系数 一.Spearman Rank相关系数 1.1 Pearson相关系数的定义 1.2 python实现pearson相关系数 二.Spearman秩相关系数 2.1 Spearma ...

最新文章

  1. 【ACM】杭电OJ 2090
  2. 网络地址转换(PAT)
  3. MSSQL 访问Mysql
  4. DAL,IDAL,BLL,Factory作用
  5. 在IIS中部署Asp.net Mvc
  6. ASP.NET MVC 的多国语系支持
  7. python 自动上报json信息_python接口自动化5-Json数据处理
  8. Icon+启动图尺寸
  9. mysql在windows配置多节点_mysql基础--windows下的多实例配置
  10. KNN(六)--LSH算法
  11. mysql修改记录_MySQL中如何创建、查看、删除、修改表记录
  12. Ubuntu WPS字体缺失
  13. ubuntu虚拟机全屏显示问题
  14. CodeForces 1009D Relatively Prime Graph 贪心+枚举
  15. 如何用深度学习来写歌词(神经网络实现)
  16. mysql配置报错thread_MySQL错误Forcing close of thread的两种解决方法
  17. HTML5 游戏开发快速提升
  18. 三流Java撸代码,二流Java搞框架,一流Java…
  19. Unity 相机 2D视角 与3D 视角 自由动态 切换
  20. ftp服务启动之后拖文件失败,返回code550的错误之一

热门文章

  1. CODY Contest 2020 MATLAB Onramp Practice 全15题
  2. 《数字图像处理(第三版)》 第二章 数字图像基础 笔记1(视觉与电磁波谱)
  3. 更便捷的二维码报修系统
  4. 本科生晋升GM记录 Kaggle比赛进阶技巧分享
  5. Android自定义控件--仿安全卫士中的一键加速【圆形进度条】
  6. Python TensorFlow框架 实现手写数字识别系统
  7. 《麦田里的守望者》--[美]杰罗姆·大卫·塞林格
  8. android 电视怎么投屏,安卓手机怎么投屏到电视
  9. 关于百分位数(percentile)
  10. 给文档加密,你懂多少?