Spearman Rank(斯皮尔曼等级)相关系数及MATLAB实现
转自: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计算,使用上面的公式一)
- function coeff = mySpearman(X , Y)
- % 本函数用于实现斯皮尔曼等级相关系数的计算操作
- %
- % 输入:
- % X:输入的数值序列
- % Y:输入的数值序列
- %
- % 输出:
- % coeff:两个输入数值序列X,Y的相关系数
- if length(X) ~= length(Y)
- error('两个数值数列的维数不相等');
- return;
- end
- N = length(X); %得到序列的长度
- Xrank = zeros(1 , N); %存储X中各元素的排行
- Yrank = zeros(1 , N); %存储Y中各元素的排行
- %计算Xrank中的各个值
- for i = 1 : N
- cont1 = 1; %记录大于特定元素的元素个数
- cont2 = -1; %记录与特定元素相同的元素个数
- for j = 1 : N
- if X(i) < X(j)
- cont1 = cont1 + 1;
- elseif X(i) == X(j)
- cont2 = cont2 + 1;
- end
- end
- Xrank(i) = cont1 + mean([0 : cont2]);
- end
- %计算Yrank中的各个值
- for i = 1 : N
- cont1 = 1; %记录大于特定元素的元素个数
- cont2 = -1; %记录与特定元素相同的元素个数
- for j = 1 : N
- if Y(i) < Y(j)
- cont1 = cont1 + 1;
- elseif Y(i) == Y(j)
- cont2 = cont2 + 1;
- end
- end
- Yrank(i) = cont1 + mean([0 : cont2]);
- end
- %利用差分等级(或排行)序列计算斯皮尔曼等级相关系数
- fenzi = 6 * sum((Xrank - Yrank).^2);
- fenmu = N * (N^2 - 1);
- coeff = 1 - fenzi / fenmu;
- 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
Spearman Rank(斯皮尔曼等级)相关系数及MATLAB实现的更多相关文章
- 学习笔记78—三大统计相关系数:Pearson、Spearman秩相关系数、kendall等级相关系数
****************************************************** 如有谬误,请联系指正.转载请注明出处. 联系方式: e-mail: heyi9069@gm ...
- 三大统计相关系数:Pearson、Spearman秩相关系数、kendall等级相关系数
统计相关系数简介 由于使用的统计相关系数比较频繁,所以这里就利用几篇文章简单介绍一下这些系数. 相关系数:考察两个事物(在数据里我们称之为变量)之间的相关程度. 如果有两个变量:X.Y,最终计算出的相 ...
- Spearman Rank(斯皮尔曼等级)相关系数
转自:http://blog.csdn.net/wsywl/article/details/5859751 1.简介 在统计学中,斯皮尔曼等级相关系数以Charles Spearman命名,并经常用希 ...
- Kendall's tau-b(肯德尔)等级相关系数
Kendall's tau-b(肯德尔)等级相关系数:用于反映分类变量相关性的指标,适用于两个分类变量均为有序分类的情况.对相关的有序变量进行非参数相关检验:取值范围在-1-1之间,此检验适合于正方形 ...
- 基音周期提取2-基于线性相关系数的Matlab实现
基音周期提取2-基于线性相关系数的Matlab实现 基音周期提取结果 图1 基音提取结果 算法说明 线性相关系数 也称"皮尔逊积矩相关系数"(Pearson product-mom ...
- 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 ...
- Spearman(斯皮尔曼) 等级相关
Spearman相关系数又称秩相关系数,是利用两变量的秩次大小作线性相关分析,对原始变量的分布不作要求,属于非参数统计方法,适用范围要广些.对于服从Pearson相关系数的数据亦可计算Spearman ...
- Pearson(皮尔逊)相关系数及MATLAB实现
转自:http://blog.csdn.net/wsywl/article/details/5727327 由于使用的统计相关系数比较频繁,所以这里就利用几篇文章简单介绍一下这些系数. 相关系数:考察 ...
- Spark Mllib里的如何对单个数据集用斯皮尔曼计算相关系数
不多说,直接上干货! import org.apache.spark.mllib.stat.Statistics 具体,见 Spark Mllib机器学习实战的第4章 Mllib基本数据类型和Mlli ...
随机推荐
- iOS沙盒路径变化的说明详解
最近用沙盒存储文件的时候发现了一个奇怪的现象,由于业务需要,我会将保存的文件绝对路径保存以便下次读取. 于是发现一个找不到的现象,即上一次保存下的绝对路径,再第二次打开app去查找的时候,发现找不到. ...
- Linux IPC socket编程基础
头文件 #include<unistd.h> #include <sys/types.h> #include <sys/socket.h> #include< ...
- day 2远程连接Linux系统管理
IP端口-协议等基本概念 互联网上的计算机,都会有一个唯一的32位的地址,IP地址. 我们访问服务器.就必须通过这个IP地址. 局域网也有预留的IP地址 192/10/172开头.局域网的 I ...
- linux rpm 安装和卸载
[root@wang Packages]# mount /dev/cdrom /mnt 挂载 [root@wang Packages]# rpm -ivh zip-3.0-1.el6.x86_64.r ...
- 客户访问站点将bbs/链接 跳转至forum/链接下的两种方式
显性 302 暂时重定向跳转 server { listen 80 ; server_name localhost; index index.html index.htm index.php; roo ...
- windows下nodejs环境配置
一.下载 去nodejs下载node.msi安装文件包,里面包含了node.js和npm: 双击node.msi就行了,选择安装路径和npm: 二.设置环境变量 [新版本都不需要设计环境变量了,软件会 ...
- [转]Stop Sharing Session State between Multiple Tabs of Browser
本文转自:http://jinaldesai.net/stop-sharing-session-state-between-multiple-tabs-of-browser/ Scenario: By ...
- hihocoder #1388 : Periodic Signal NTT&FFT
传送门:hihocoder #1388 : Periodic Signal 先来几个大牛传送门: (模板) NTT long long 版 解法一:因为我们知道FFT会精度不够,所以坚持用NTT,但 ...
- Strcmp(字符串1,字符串2)函数 Sizeof && strlen() Substr(a,b)
Strcmp(字符串1,字符串2)函数 { strcmp函数是比较两个字符串的大小,返回比较的结果.一般形式是: i=strcmp(字符串,字符串); 其中,字符串1.字符串2均可为字符串常量或变量 ...
- Maven学习(一)安装 配置
安装环境 windowXP 32 下载地址 http://maven.apache.org/download.cgi 安装包 apache-maven-3.2.3.zip 一.安装 Step1 解压缩 ...