1、Spearmen 相关系数和 Pearson 相关系数及其 MATLAB 实现Spearmen 相关系数,Spearman 秩相关系数是一种无参数(与分布无关)检验方法,用于度量变量之间联系的强弱。在没有重复数据的情况下,如果一个变量是另外一个变量的严格单调函数,则 Spearman 秩相关系数就是+1 或-1,称变量完全 Spearman 秩相关。表达式如下: )( 161r32ndnis式中,n 为样方数,对原始数据 , 按从大到小排序,记 , 为原始 ,ixyixyix在排序后列表中的位置, , 称为 , 的秩次,秩次差 。iyii ii-d使用 Pearson 线性相关系数有 2 个局
2、限:1) 必须假设数据是成对地从正态分布中取得的。2) 数据至少在逻辑范围内是等距的。位置 n 原始 X 排序后 秩次 原始 Y 排序后 秩次 秩次差1 12 546 5 1 78 6 12 546 45 1 78 46 1 03 13 32 4 2 45 5 14 45 13 2 46 6 2 05 32 12 3 6 2 4 16 2 2 6 45 1 3 -3对于上表数据,算出 Spearman 秩相关系数为:r=1-6*(1+1+1+9)/(6*35)=0.6571图 1 秩相关系数检验的临界值表上图为秩相关系数检验的临界值表。对相关系数 r(-10.829,则样本之间存在相关性,反之
3、则不存在显著相关性,若|r|0.943,则样本之间存在极显著相关性。程序:%将以下程序存为 mySpearman.m 文件%function coeff = mySpearman(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; %记录大于特定元
4、素的元素个数 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; els
5、eif Y(i) = Y(j) cont2 = cont2 + 1; end end Yrank(i) = cont1 + mean(0 : cont2); end %利用差分等级(或排行) 序列计算斯皮尔曼等级相关系数 coeff = 1 - (6 * sum(Xrank - Yrank).2) /(N * (N2 - 1); end%函数 mySpearman 结束%运行下面这个程序%X=12,546,13,45,32,2;Y=1,78,2,46,6,45;S=mySpearman(X,Y);%根据以上程序可以算出 Spearman 秩相关系数为 0.6571%matlab 自带程序 co
6、eff = corr(X , Y , type , Spearman); Pearson 相关系数(Pearson correlation coefficient)也叫皮尔森积差相关系数(Pearson product-moment correlation coefficient),是用来反应两个变量相似程度的统计量。或者说可以用来计算两个向量的相似度(在基于向量空间模型的文本分类、用户喜好推荐系统中都有应用)。当两个变量的标准差都不为零时,相关系数才有定义,皮尔逊相关系数适用于:(1)、两个变量之间是线性关系,都是连续数据。(2)、两个变量的总体是正态分布,或接近正态的单峰分布。(3)、两个
7、变量的观测值是成对的,每对观测值之间相互独立。 NiNiiiNii iiiiYX YXYr 1212112, )(-)(-matlb程 序 :用 以 下 公 式 为 例 子 编 写.%将以下程序存为 myPearson.m 文件%function coeff = myPearson(X , Y) % 本函数实现了皮尔逊相关系数的计算操作 if length(X) = length(Y) error(两个数值数列的维数不相等); return; end N=length(X);f1 = sum(X .* Y) - (sum(X) * sum(Y)/N; f2 = sqrt(sum(X .2) -
8、 sum(X)2/N) * (sum(Y .2) - sum(Y)2 /N); coeff = f1 / f2; end %函数 myPearson 结束 %X=12,546,13,45,32,2;Y=1,78,2,46,6,45; %X Y 自己定义P=myPearson(X,Y);%matlab 自带程序 coeff = corr(X , Y); 图 1 秩相关系数检验的临界值表上图为秩相关系数检验的临界值表。对相关系数 p(-1p1):A.当|p|越接近 1 则表示样本之间的相关程度越高;B.当|p|越接近 0 则表示样本之间的相关程度越低。得到 Pearson 相关系数 p 后与 0.829 比较。与上一个方式类似。