皮尔逊相关系数简介
wiki介绍
皮尔逊积矩相关系数(英语:Pearson product-moment correlation coefficient,缩写:PPMCC,或PCCs,有时简称相关系数)用于度量两组数据的变量X和Y之间的线性相关的程度。它是两个变量的协方差(Cov)与其标准差(std)的乘积之比; 因此,它本质上是协方差的归一化度量,因此结果始终具有介于-1和1之间的值。
我们在数学建模中经常用样本值去估计总体数值,所以有些时候会运用样本协方差去作为总体协方差。
皮尔逊系数的计算公式
皮尔逊相关系数的目的是剔除了自变量和因变量的量纲影响,而且是X,Y标准化之后的协方差。
补充
协方差
协方差主要用于看X和Y之间的变化程度,即为如果两者在一定区间内变化趋势为相同或者相近的时候,cov(x,y)取正,相反取负。而且协方差一般用于研究趋势,不用于比较。
标准差
标准差主要是方差的平方根,而且主要用于去除量纲的影响,而且标准差能反映一个数据集的离散程度。
方法局限性
与协方差本身一样,该度量只能反映变量的线性相关性,而忽略了许多其他数据类型的关系或相关性。
皮尔逊系数应用条件
- 线性相关性
首先我们应该先确定自变量因变量之间具有线性相关性,之后我们再去根据皮尔逊系数去估计他们的先行相关性的程度。我们这里的线性相关性主要指的是广义的线性相关性。而不是
(x,y之间的简单相关性),
(取对数之后也认为具有线性相关性)
我们一般还会通过t检验等进行皮尔逊相关系数检验,然而t检验等方法需要数据符合正态分布,所以我们第二个条件为符合正态分布。
- 数据符合正态分布
正态分布检验主要分JB检验(大样本 n>30)和Shapiro-wilk夏皮洛-威尔克检验(小样本3<=n<=50),后续会讲到
- 数据需要成对存在
因变量和自变量一般要求一一对应,不能有缺失值
- 无异常值
数据不应该出现极端值或者异常值
- 数据为连续类型变量
这里的意思即为数据必须是区间或比例变量,简言之即为可以直接比较数据大小的变量(比如温度,15摄氏度比10摄氏度大)。而且比如(甲乙丙丁)(
)不属于区间或者比例数据。
皮尔逊系数计算实现代码
import pandas
import pandas as pd
from scipy.stats import pearsonr
# 计算皮尔逊相关系数矩阵
def calculate_pearson_correlation(data):
data = pandas.DataFrame(data)
correlations = data.corr(method='pearson')
return correlations
def GetPvalue_Pearson(x,y):
return pearsonr(x,y)[1]
# 返回的是相关系数检验P值矩阵
def calculate_person_correlation_P(data):
data = pd.DataFrame(data)
return data.corr(method=GetPvalue_Pearson)
皮尔逊系数检验
常规方法
皮尔逊系数r的检验我们主要分为以下三步,
- 首先提出原假设H0和备择假设H1(而且H1和H0为互斥关系)
H0:皮尔逊相关系数为0,H1:皮尔逊相关系数不为0。
- 假设原假设成立(条件),我们构造符合自由度为(n(样本数)-2)的t分布统计量,而且t的公式如图所示。
备注:r为计算得知的皮尔逊系数,n为样本数,t为检验值
- 我们画出分布的概率密度函数pdf,而且给定默认置信水平(一般为95%),确定接受域和拒绝域,而且一般默认为双侧检验,最后我们根据查T分布表得知临界值(上网找T分布的临界值即可)
网址如下:t分布表:https://wenku.baidu.com/view/d94dbd116bd97f192279e94a.html
P值检验法
我们用scipy方法取得P值矩阵,之后我们根据置信水平(95%)得知是否能够拒绝原假设即可。
结论:若P值大于0.05,证明不能够拒绝原假设,即为皮尔逊系数为0。与此同理可得P值小于0.05,能够拒绝原假设,即为皮尔逊系数不为0。
文中采取的方法为此种,代码如下。
def GetPvalue_Pearson(x, y):
# pearsonr()返回的第一个皮尔逊系数,第二个为皮尔逊系数在执行水平为0.95条件之下的P值
return pearsonr(x, y)[1]
# 返回的是相关系数检验P值矩阵
def calculate_person_correlation_P(data):
data = pd.DataFrame(data)
return data.corr(method=GetPvalue_Pearson)