1、这里需要注意:当变量的两个值相同时,它们的排行是通过对它们位置进行平均而得到的。2、适用范围斯皮尔曼等级相关系数对数据条件的要求没有皮尔逊相关系数严格,只要两个变量的观测值是成对的等级评定资料,或者是由连续变量观测资料转化得到的等级资料,不论两个变量的总体分布形态、样本容量的大小如何,都可以用斯皮尔曼等级相关系数来进行研究。3、Matlab实现源程序一:斯皮尔曼等级相关系数的Matlab实现(依据排行差分集合d计算,使用上面的公式一)cppview plaincopy1. functioncoeff=mySpearman(X,Y)2. %本函数用于实现斯皮尔曼等级相关系数的计算操作3. %4.
2、 %输入:5. %X:输入的数值序列6. %Y:7. %8. %输出:9. %coeff:两个输入数值序列X,Y的相关系数10. 11. 12. iflength(X)=length(Y)13. error(两个数值数列的维数不相等);14. return;15. end16. 17. Nlength(X);%得到序列的长度18. Xrankzeros(1N);%存储X中各元素的排行19. Yrank%存储Y中各元素的排行20. 21. %计算Xrank中的各个值22. fori1:N23. cont11;%记录大于特定元素的元素个数24. cont2-1;%记录与特定元素相同的元素个数25.
3、 forj26. ifX(i)X(j)27. +28. elseif=29. 30. end31. 32. Xrank(i)mean(0cont2);33. end34. 35. %计算Yrank中的各个值36. for37. 38. 39. 40. Y(i)Y(j)41. 42. 43. 44. 45. 46. Yrank(i)47. end48. 49. %利用差分等级(或排行)序列计算斯皮尔曼等级相关系数50. fenzi6*sum(Xrank-Yrank).2);51. fenmu(N21);52. coefffenzi/fenmu;53. 54. end%函数mySpearman结束
4、源程序二:使用Matlab中已有的函数计算斯皮尔曼等级相关系数(使用上面的公式二)1. coeffcorr(XYtypeSpearman注意:使用Matlab自带函数计算斯皮尔曼等级相关系数时,需要保证X、Y均为列向量;Matlab自带的函数是通过公式二计算序列的斯皮尔曼等级相关系数的。一般情况下,使用上面给出的源程序一是可以得到所要的结果的,但是当序列X或Y中出现具有相同值的元素时,源程序一给出的结果就会与Matlab中corr函数计算的结果不同,这是因为当序列X或Y中有相同的元素时,公式一和公式二计算的结果会有偏差。这里可以通过将源程序一中的以下三行1. fenzi2. fenmu3. coeff改为corr(XrankYrank%皮尔逊相关系数这样便可以使源程序一在计算包含相同元素值的变量(至少有一个变量的取值集合中存在相同的元素)间的斯皮尔曼等级相关系数时,得到与Matlab自带函数一样的结果。程序一经过修改过后同样可以用来计算一般变量(两个变量的取值集合中均不存在相同的元素)等级相关间的斯皮尔曼等级系数。