Spearmen相关系数和Pearson相关系数及其MATLAB实现

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比较。与上一个方式类似。

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4