斯皮尔曼等级相关称名数据_等级相关系数中的等级怎么算

斯皮尔曼等级相关称名数据_等级相关系数中的等级怎么算转自:http://blog.csdn.net/wsywl/article/details/58597511、简介在统计学中,斯皮尔曼等级相关系数以CharlesSpearman命名,并经常用希

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

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

 

 

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

 

[cpp] 
view plain
 copy

 

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


3、Matlab实现
源程序一:

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

 

源程序二:

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

 

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

 

改为

 

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

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

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

4、参考内容
(1)、http://en.wikipedia.org/wiki/Spearman’s_rank_correlation_coefficient

(2)、http://wiki.mbalib.com/wiki/%E6%96%AF%E7%9A%AE%E5%B0%94%E6%9B%BC%E7%AD%89%E7%BA%A7%E7%9B%B8%E5%85%B3
———————
作者:wsywl
来源:CSDN
原文:https://blog.csdn.net/wsywl/article/details/5859751
版权声明:本文为博主原创文章,转载请附上博文链接!

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/167345.html原文链接:https://javaforall.net

(0)
上一篇 2022年8月5日 上午6:16
下一篇 2022年8月5日 上午6:16


相关推荐

  • 深度图转换成点云[通俗易懂]

    深度图转换成点云[通俗易懂]一、概述最近由于课题需要数据源,但是没有直接获取的方法,所以只能在周老师http://www.qianyi.info/的网站上自己下载深度图转换成点云数据,大概花了三点的时间,终于弄得差不多了,这里做个记录。二、数据准备和环境配置1、数据下载在http://redwood-data.org/indoor/dataset.html上下载CleanDepthSequence和Groun…

    2022年5月30日
    50
  • web服务基础及web服务器搭建过程「建议收藏」

    web服务基础及web服务器搭建过程「建议收藏」当我们打开一个浏览器输入一个网站时,它会先找缓存再找hosts文件,如果缓存和hosts文件有相对应的地址的时候,就会直接拿到IP地址,(在互联网上计算机与计算机通信用的是IP,但IP地址太难记住为了方便我们人浏览网站就采用了字符串注入了域名的方式所以我们在打开网站输入地址的时候它首先就会做一个域名的解析工作)DNS架构:从后往前看…

    2022年5月8日
    59
  • Gridview漂亮的样式

    Gridview漂亮的样式  linkhref=”StyleSheet.css”rel=”stylesheet”type=”text/css”/>linkhref=”GamerGridView.css”rel=”stylesheet”type=”text/css”/> StandardGridViewdeclaration:/par??/cf0/

    2026年3月4日
    5
  • 原生HTML+CSS+JS制作自己的导航主页(前端大作业,源码+步骤详解)

    原生HTML+CSS+JS制作自己的导航主页(前端大作业,源码+步骤详解)文章目录前言插入背景一、头部1.导航栏2.优化导航栏3时间前言插入背景首先设置我们的背景。在body中插入背景即可。index.html<!doctypehtml><htmllang=”en”><head><metacharset=”UTF-8″><metaname=”Designer”content=”LiWei”><metaname=”Description”cont

    2022年7月22日
    20
  • PHP获取客户端IP

    functiongetIP(){if(getenv(‘HTTP_CLIENT_IP’)){$ip=getenv(‘HTTP_CLIENT_IP’);}elseif(getenv(‘HTTP_X_FORWARDED_FOR’)){$ip=getenv(‘HTTP_X_FORWARDED_FOR’);}…

    2022年4月4日
    37
  • Escape/Unescape,HTML实体编码,敲击码(Tap code),摩尔斯电码(Morse Code)

    1.Escape/Unescape加密解码/编码解码,又叫%u编码,采用UTF-16BE模式,Escape编码/加密,就是字符对应UTF-1616进制表示方式前面加%u。Unescape解码/解密,就是去掉”%u”后,将16进制字符还原后,由utf-16转码到自己目标字符。如:字符“中”,UTF-16BE是:“6d93”,因此Escape是“%u6d93”。2.敲击码(Tapcode)敲击码(Tapcode)是一种以非常简单的方式对文本信息进行编码的方法。因该编码对信息通过使用一系列的点击声音

    2022年4月4日
    133

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号