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

斯皮尔曼等级相关称名数据_等级相关系数中的等级怎么算转自: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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 观察float BIT

    观察float BIT

    2021年9月14日
    54
  • Pycharm 恢复到默认设置

    Pycharm 恢复到默认设置有时候我们想将软件的主题配色、插件等配置初始化,可是会发现卸载并重新安装Pycharm后,软件会默认使用卸载前的个性化设置。解决方案如下:点击Pycharm的“文件”菜单,里面有一个“管理IDE设置”的选项,然后点击“恢复默认设置”。……

    2022年8月28日
    2
  • centos7系统更新命令_centos 更新

    centos7系统更新命令_centos 更新1.查看网络IP ifconfig2.下载命令 wget+网址3.安装 yum-y install + 目标4.删除文件 sudo rm 文件所在目录/目标强制删除文件 rm -f删除目录 rm -rf5.复制一个文件到另一个文件夹sudo cp /文件夹/文件 /另一个文件夹6.对一些文件进行读写sudo vim 文件名7….

    2022年8月19日
    4
  • EC20 AT指令

    EC20 AT指令由文档Quectel_WCDMA&LTE_Linux_USB_Driver_User_Guide_V1.8.pdf由上可知,ttyUSB2是用来发送AT指令的,ttyUSB3是用来发送ppp

    2022年7月4日
    23
  • [转]EntityFramework的多种记录日志方式,记录错误并分析执行时间过长原因(系列4)…[通俗易懂]

    [转]EntityFramework的多种记录日志方式,记录错误并分析执行时间过长原因(系列4)…

    2022年3月12日
    42
  • Origin简单绘图

    Origin简单绘图一、从cadence导出数据仿真生成波形之之后,鼠标选中波形,右击—>SendTo—>Export,进行csv数据的保存。打开该csv文件,删掉第一行,第一行是是横纵坐标的标识,左侧第一列是横坐标值,右侧列是纵坐标值。二、origin简单绘图双击图标打开origin导入csv数据可选中多个csv文件导入为了让两个csv的数据同时显示,在弹出的对话框进行以下操作(默认第二个csv数据会覆盖第一个csv数据)。设置好之后点击“确定”,两个csv数据均被导入到了o

    2022年6月1日
    35

发表回复

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

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