转自:http://blog.csdn.net/wsywl/article/details/5859751

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计算,使用上面的公式一)

  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中已有的函数计算斯皮尔曼等级相关系数(使用上面的公式二)

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

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

  1. fenzi = 6 * sum((Xrank - Yrank).^2);
  2. fenmu = N * (N^2 - 1);
  3. coeff = 1 - fenzi / fenmu;

改为

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

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

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

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

4、参考内容

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

Spearman Rank(斯皮尔曼等级)相关系数及MATLAB实现的更多相关文章

  1. 学习笔记78—三大统计相关系数:Pearson、Spearman秩相关系数、kendall等级相关系数

    ****************************************************** 如有谬误,请联系指正.转载请注明出处. 联系方式: e-mail: heyi9069@gm ...

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

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

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

    转自:http://blog.csdn.net/wsywl/article/details/5859751 1.简介 在统计学中,斯皮尔曼等级相关系数以Charles Spearman命名,并经常用希 ...

  4. Kendall's tau-b(肯德尔)等级相关系数

    Kendall's tau-b(肯德尔)等级相关系数:用于反映分类变量相关性的指标,适用于两个分类变量均为有序分类的情况.对相关的有序变量进行非参数相关检验:取值范围在-1-1之间,此检验适合于正方形 ...

  5. 基音周期提取2-基于线性相关系数的Matlab实现

    基音周期提取2-基于线性相关系数的Matlab实现 基音周期提取结果 图1 基音提取结果 算法说明 线性相关系数 也称"皮尔逊积矩相关系数"(Pearson product-mom ...

  6. spark MLlib 概念 1:相关系数( PPMCC or PCC or Pearson's r皮尔森相关系数) and Spearman's correlation(史匹曼等级相关系数)

    皮尔森相关系数定义: 协方差与标准差乘积的商. Pearson's correlation coefficient when applied to a population is commonly r ...

  7. Spearman(斯皮尔曼) 等级相关

    Spearman相关系数又称秩相关系数,是利用两变量的秩次大小作线性相关分析,对原始变量的分布不作要求,属于非参数统计方法,适用范围要广些.对于服从Pearson相关系数的数据亦可计算Spearman ...

  8. Pearson(皮尔逊)相关系数及MATLAB实现

    转自:http://blog.csdn.net/wsywl/article/details/5727327 由于使用的统计相关系数比较频繁,所以这里就利用几篇文章简单介绍一下这些系数. 相关系数:考察 ...

  9. Spark Mllib里的如何对单个数据集用斯皮尔曼计算相关系数

    不多说,直接上干货! import org.apache.spark.mllib.stat.Statistics 具体,见 Spark Mllib机器学习实战的第4章 Mllib基本数据类型和Mlli ...

随机推荐

  1. 关于《Windows程序设计(第五版)》中一个实例程序的疑问

    最近一直在看Charlse Petzold的<Windows程序设计>,作为一个新得不能再新的新手,只能先照着书的抄抄源码了,之前的例子一直都很正常,但昨天遇到一个很诡异的BUG. 先看实 ...

  2. z-index学习知识小结

    一.z-index七阶层叠顺序表 1.层叠顺序的大小比较: background/border < 负z-index < block块状水平盒子 < float浮动盒子 < i ...

  3. 【2016-10-13】【坚持学习】【Day4】【模板方法模式】

    今天学习模板方法模式 例子代码; 模板抽象类,定义了一套流程,有一些方法已经实现,有一些抽象方法需要继承它的子类实现 abstract class DataViewer { //抽象方法:获取数据 p ...

  4. 3-2-1-0-GO

    正式开始第3份工作,入职第2天,午饭后与Team Leader谈了1个多小时,很有收获. 首先,不同的公司有不同的企业文化和规章制度,需要尊重且入乡随俗,尽快学习并适应,争取早日融入公司和团队当中去, ...

  5. Hibernate中的inverse

    inverse inverse的英文意思是反向的,倒转的 Hibernate配置文件中的inverse正是这一真实反映,inverse属性只在Hibernate配置文件的集合元素上(list,set, ...

  6. iOS中的存储方式

    1.Plist 1.1 了解沙盒 每个iOS应用都有自己的应用沙盒(应用沙盒就是文件系统目录),与其它文件系统隔离.应用必须呆在自己的沙盒里.其它应用不能访问该沙盒. 一个程序中所有的非代码文件都可以 ...

  7. mysql下mysqladmin日常管理命令总结

    mysqladmin 工具的使用格式:mysqladmin [option] command [command option] command ......参数选项:-c number 自动运行次数统 ...

  8. ubuntu14.04安装sipp3.2

    本来在centos里不好装的软件,往往ubuntu里会很好装,但sipp恰恰相反,ubuntu里能装死你. 做VOIP测试的话,有时候为了模拟通话中更好的抓包,在环境简陋,又不想使用集线器引起广播风暴 ...

  9. Xcode基本操作

    2.偏好设置 通过“command+,”快捷键或”Xcode|Preferences”菜单呼出偏好设置. (1)主题及字体(Preferences->Fonts & Colors) 选中 ...

  10. P3381 【模板】最小费用最大流

    P3381 [模板]最小费用最大流 题目描述 如题,给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用. 输入输出格式 输入格式: 第一行 ...