python 利用Scipy计算person 和spearman相关系数

本文介绍了如何使用Python的Scipy库计算皮尔逊和斯皮尔曼相关系数。皮尔逊系数适用于连续数据且正态分布,而斯皮尔曼系数则适合非线性或非正态分布的数据以及顺序变量。通过代码示例展示了计算过程,并解释了两者之间的关系和适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python 利用Scipy计算person 和spearman相关系数

觉得有用的话,欢迎一起讨论相互学习~

我的微博我的github我的B站

  • 学习以下两位大佬的讲解

(Pearson)皮尔逊相关系数和spearman相关系数(附python实现)

相关性系数及其python实现

皮尔逊相关系数

  • 下面是皮尔逊相关系数的计算公式,只需要将(X和Y的协方差)/(X的标准差*Y的标准差)

spearman相关系数

简单的相关系数的分类

那么对于这两个系数,怎样的值才是好的呢,遵循下面的关系

0.8-1.0:极强相关
0.6-0.8:强相关
0.4-0.6:中等强度相关
0.2-0.4:弱相关
0.0-0.2:极弱或者无相关

区别

  • 那么有个问题,是所有的变量都可以用这两个系数吗,这两个变量当然是有区别的,区别如下。
  1. 连续数据,正态分布,线性关系,用pearson相关系数是最恰当,当然用spearman相关系数也可以,效率没有pearson相关系数高。
  2. 上述任一条件不满足,就用spearman相关系数,不能用pearson相关系数。
  3. 两个定序测量数据(顺序变量)之间也用spearman相关系数,不能用pearson相关系数。
  4. Pearson相关系数的一个明显缺陷是,作为特征排序机制,他只对线性关系敏感。如果关系是非线性的,即便两个变量具有一一对应的关系,Pearson相关性也可能会接近0。

Code

import scipy.stats

# Create two lists of random values
x = [1, 2, 3, 4, 5, 6, 7, 8, 9]
y = [2, 1, 2, 4.5, 7, 6.5, 6, 9, 9.5]
print(scipy.stats.pearsonr(x, y)[0])
# 0.9412443251336238
print(scipy.stats.spearmanr(x, y)[0])
# 0.903773601456181

Code-检验spearman和pearson之间的关系

# Create two lists of random values
x = [1, 2, 3, 4, 5, 6, 7, 8, 9]
y = [2, 1, 2, 4.5, 7, 6.5, 6, 9, 9.5]


# Calculate Spearman’s Rank Correlation
# Spearman’s rank correlation is the Pearson’s correlation coefficient of the ranked version of the variables.

# Create a function that takes in x's and y's
def spearmans_rank_correlation(xs, ys):
    # Calculate the rank of x's
    xranks = pd.Series(xs).rank()

    # Caclulate the ranking of the y's
    yranks = pd.Series(ys).rank()

    # Calculate Pearson's correlation coefficient on the ranked versions of the data
    return scipy.stats.pearsonr(xranks, yranks)  # 计算pearson系数


print(spearmans_rank_correlation(x, y)[0])
# 0.9037736014561808

# Calculate Spearman’s Correlation Using SciPy
# 计算spearman秩相关系数
# Just to check our results, here it Spearman's using Scipy
print(scipy.stats.spearmanr(x, y)[0])
# 0.903773601456181

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值