【冰糖Python】Pearson Spearman Kendall 相关系数(numpy pandas scipy 库)

常用的相关系数为 Pearson、Spearman、Kendall,在 python 中有多种计算相关系数的方法,

numpy,pandas,scipy 库中均可以计算相关系数,但用法存在较大区别,通过以下例子说明

假设有以下两个矩阵 data_temp1、data_temp2,两个向量 data_vector1、data_vector2

1、numpy.corrcoef()

numpy.corrcoef(x, y=None, rowvar=True, dtype=None)

返回 Pearson 相关系数矩阵

x:一维数组或者二维矩阵。x的每一行代表一个变量,每一列代表变量的观察值,不可省略

y:默认 None,额外的变量和观察值,形状与 x 相同,可省

rowvar:默认 True,为 Ture 时表示“每一行代表一个变量”,为 False 时表示“每一列代表一个变量”,可省

dtype:默认 None,结果的数据类型,默认至少为 numpy.float64 的精度,可省

注意:由于浮点舍入,结果可能不是Hermitian矩阵,结果对角线元素可能不是1,元素可能不满足 abs(a) <= 1。为试图改变这种情况,实部和虚部被裁减到区间[-1, 1],但在复杂情况下可能没什么作用。

结果可见,numpy.corrcoef() 始终返回的是变量之间相关系数的矩阵,

比如,对于同时传入矩阵 data_temp1、data_temp2,计算任意一对变量间的 Pearson 相关系数

比如,对于同时传入向量 data_vector1、data_vector2,返回 2 * 2 的矩阵

缺点:仅能计算 Pearson 相关系数,且不提供p值

2、pandas.DataFrame.corr()pandas.DataFrame.corrwith() 和 pandas.Series.corr()

(1)pandas.DataFrame.corr(method='pearson', min_periods=1)

计算 DataFrame 对象列之间的相关性,返回相关系数矩阵,排除NA和缺失值

method:默认 pearson,需要计算的相关系数类型,可选 kendall,spearman;或可选 callable,当输入两个1d数组并返回一个float就可以选择调用,是版本0.24.0中的新功能,请注意,corr返回的矩阵在对角线上有1,并且无论可调用的行为如何,都是对称的

min_periods:默认1,为获得有效结果,每对列所需的最小观察数,目前只适用于 Pearson 和 Spearman 相关系数

(2)pandas.DataFrame.corrwith(other, axis=0, drop=False, method='pearson')

计算成对的相关性,返回的是Series

即计算 DataFrame 的行或列与 其他Series 或 DataFrame 对象的行或列的成对相关性;计算之前 DataFrame 会先沿轴对齐

other:用于计算相关的其他 Series 或 DataFrame 对象

axis:默认0,表示计算列之间的相关系数;可选0或‘index’以计算列之间的相关性,1或‘columns’以计算行之间的相关性

drop:默认 False,从结果删除缺失的索引

method:默认 pearson,需要计算的相关系数类型,可选 kendall,spearman;或可选 callable,当输入两个1d数组并返回一个float就可以选择调用,是版本0.24.0中的新功能

以上例子计算的是 data_temp1、data_temp2 对应列的相关性

(3)pandas.Series.corr(other, method='pearson', min_periods=None)

计算与其他 Series 对象的相关系数,排除缺失值

other:用于计算相关系数的 Series 对象

method:默认 pearson,需要计算的相关系数类型,可选 kendall,spearman;或可选 callable,当输入两个1d数组并返回一个float就可以选择调用,是版本0.24.0中的新功能,请注意,corr返回的矩阵在对角线上有1,并且无论可调用的行为如何,都是对称的

min_periods:默认 None,为获得有效结果所需的最小观察数,可选参数

缺点:不提供p值

3、scipy.stats.pearsonr()scipy.stats.spearmanr() scipy.stats.kendalltau()

(1)scipy.stats.pearsonr(x, y)

计算 Pearson 相关系数和对应p值,返回 相关系数和p值组成的元组

x:输入array,不可省

y:输入array,不可省

(2)scipy.stats.spearmanr(a, b=None, axis=0, nan_policy='propagate')

计算 Spearman 相关系数和对应p值,返回 Spearman 相关系数矩阵或单个值

a:一维或二维数组,不可省

b:一维或二维数组,可省

axis:默认0,表示每一列是一个变量;如果为1,表示每一行是一个变量;如果为None,都包含

nan_policy:默认 propagate,还可选raise或omit,表示对输入nan值的处理策略;propagate返回nan,raise报错,omit则计算前忽略nan值

计算任意两个变量间的相关性,传入 data_temp1、data_temp2 也是如此

(3)scipy.stats.kendalltau(x, y, nan_policy='propagate', method='auto', variant='b')

计算 Kendall 相关系数及对应p值

x: 表示排序的array,如果不是一维,则会先扁平化到一维

y:表示排序的array,如果不是一维,则会先扁平化到一维

nan_policy:默认 propagate,还可选raise或omit,表示对输入nan值的处理策略;propagate返回nan,raise报错,omit则计算前忽略nan值

method:默认 auto,还可选asymptotic或exact,确定如何计算p值;auto自动选择方法,折中考虑速度和准确率;asymptotic使用面向大样本的逼近方法;exact计算精确p值,随着样本增加计算时间可能会增加,精度会下降

variant:默认b,还可选c,确定返回tau值的哪种变体

缺点:三种相关性接口不统一,且 Pearson 和 Kendall 不能接受矩阵输入

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰糖不在家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值