皮尔逊相关系数与数据中心化处理
皮尔逊相关系数用于度量两变量序列之间的线性相关度,其值在[-1,1]的区间。1代表线性相关度很好,并且为正相关。-1代表线性相关度很好,并且为负相关。
图一
如何理解皮尔逊相关系数线性相关度的概念?可以看图一中三排(x,y)的点集,在第一排中映射的正是线性相关度的关系,可以看到有的点集散作一团,那么他的相关系数是0或者接近于0的。左右两侧点集的线性相关度分别等于1和-1。另外,通过第二排的点集可以看出来皮尔逊相关系数不是斜率,他最多只能反映出正相关和负相关的关系。第三排数据表明非线性关系的点集用皮尔逊相关系数是没意义的。
皮尔逊相关系数学定义式
两个变量序列的整体的位置和尺度的变化并不会引起该系数的改变。
皮尔逊相关系数的在坐标系上的使用
对于中心化的数据,相关系数也可以被视作由两个变量向量夹角的余弦值。
对于没有中心化的数据, 相关系数与两条可能的回归线和夹角的余弦值一致。
什么是数据的中心化?
简单来说就是所有数据点集来做一个平移,平移后所有数据的中心都是(0,0)。方法:每个变量减去它的序列的均值。
图二
在图二中,左一是原始数据,中间的是中心化后数据,右边的是标准化后的数据。
下面是一个使用皮尔逊相关系数的例子
可以看到未中心化的数据不能使用两个变量向量夹角的余弦值作为相关系数。
下面是中心化的数据找出两条可能的回归线求夹角的余弦值来得到相关系数的示意图。
利用皮尔逊相关系数可以解决很多实际问题,比如之前我在调试一个DAC输出电压控制压控恒流源来输出电流时,我需要调试出一个线性度很好的电路才能减小系统的误差。利用皮尔逊相关系数就可以评判电压与电流两个变量序列的线性度。
下附MATLAB计算两个序列之间的皮尔逊相关系数的代码:
```markup
%%%
function r=CC(x,y)
% 计算两个序列之间的 皮尔逊(Pearson)相关系数
% 输入 x,y 都要为行向量
% 输出 r 为相关系数,标量
%
nx=size(x);
if nx(1)>1
x=x';
end
ny=size(y);
if ny(1)>1
y=y';
end
n=length(x);
mx=mean(x); %求得平均
my=mean(y);
ex=x-mx; ey=y-my;
sx=sqrt(ex*ex'/n);
sy=sqrt(ey*ey'/n);
r=ex*ey'/(n*sx*sy);
if n<=30 % 如果样本数小于30,修正为无偏相关系数
r=r*(1+(1-r*r)/(2*n-8));
end
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210522214511288.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ2MTU5ODUx,size_16,color_FFFFFF,t_70)
皮尔逊相关系数反应的是两组数列同时高于均值或低于均值的情况。而不是同时变大变小的情况,不是同向或反向的程度!!