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