Spearmen相关系数和Pearson相关系数及其MATLAB实现
Spearmen相关系数,Spearman秩相关系数是一种无参数(与分布无关)检验方法,用于
度量变量之间联系的强弱。在没有重复数据的情况下,如果一个变量是另外一个变量的严格单调函数,则Spearman秩相关系数就是+1或-1,称变量完全Spearman秩相关。
表达式如下:
式中,n为样方数,对原始数据xi,yi按从大到小排序,记xi',yi'为原始xi,yi在排序后列表中的位置,xi',yi'称为xi,yi的秩次,秩次差di?xi'-yi'。
使用Pearson线性相关系数有2个局限:
1) 必须假设数据是成对地从正态分布中取得的。 2) 数据至少在逻辑范围内是等距的。
位置n 1 2 3 4 5 6 原始X 12 546 13 45 32 2 排序后 546 45 32 13 12 2 秩次 5 1 4 2 3 6 原始Y 1 78 2 46 6 45 排序后 78 46 45 6 2 1 秩次 6 1 5 2 4 3 秩次差 1 0 1 0 1 -3 对于上表数据,算出Spearman秩相关系数为:r=1-6*(1+1+1+9)/(6*35)=0.6571 图1 秩相关系数检验的临界值表 上图为秩相关系数检验的临界值表。
对相关系数r(-1 A.当|r|越接近1则表示样本之间的相关程度越高; B.当|r|越接近0则表示样本之间的相关程度越低。 因为n=6,若|r|>0.829,则样本之间存在相关性,反之则不存在显著相关性,若|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; %记录大于特定元素的元素个数 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 %利用差分等级(或排行)序列计算斯皮尔曼等级相关系数 coeff = 1 - (6 * sum((Xrank - Yrank).^2)) /(N * (N^2 - 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自带程序coeff = corr(X , Y , 'type' , 'Spearman'); Pearson相关系数(Pearson correlation coefficient)也叫皮尔森积差相关系数(Pearson product-moment correlation coefficient),是用来反应两个变量相似程度的统计量。或者说可以用来计算两个向量的相似度(在基于向量空间模型的文本分类、用户喜好推荐系统中都有应用)。 当两个变量的标准差都不为零时,相关系数才有定义,皮尔逊相关系数适用于: (1)、两个变量之间是线性关系,都是连续数据。 (2)、两个变量的总体是正态分布,或接近正态的单峰分布。 (3)、两个变量的观测值是成对的,每对观测值之间相互独立。 . %%%%%%%%%%%%将以下程序存为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) - 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(-1 A.当|p|越接近1则表示样本之间的相关程度越高; B.当|p|越接近0则表示样本之间的相关程度越低。 得到Pearson相关系数p后与0.829比较。与上一个方式类似。