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

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
    
    
    物联沃分享整理
    物联沃-IOTWORD物联网 » python 利用Scipy计算person 和spearman相关系数

    发表评论