2022年 11月 10日

python 相关性分析原理及代码详细介绍

一、相关性分析简介

相关性分析(correlation analysis)是指对两个或多个具备相关关系的变量进行线性相关分析,从而衡量变量间的相关程度或密切程度。相关性程度即为相关性系数R,R的取值范围是[-1, 1]。相关性不等于因果。

二、相关性分析原理及方法

方法 别称 原理 公式 优点 数据要求
Pearson(皮尔逊)相关系数 皮尔逊积矩相关系数 反映两个变量线性相关程度的统计量 相关系数用r表示,其中n为样本量,。r的取值在-1与+1之间,若r>0,表明两个变量是正相关,即一个变量的值越大,另一个变量的值也会越大;若r<0,表明两个变量是负相关,即一个变量的值越大另一个变量的值反而会越小。r 的绝对值越大表明相关性越强。 速度快、定位准、效率高 连续性、正态分布性、线性关系
Spearman(斯皮尔曼)相关系数 斯皮尔曼秩相关系数 首先得到两组数据X和Y的秩(U,V),,然后计算相关系数

首先对两个变量(X, Y)的数据进行排序,然后记下排序以后的位置(X’, Y’),(X’, Y’)的值就称为秩次,秩次的差值就是上面公式中的di,n就是变量中数据的个数,最后带入公式就可求解结果

适用的范围广,异常值影响小 适用于定序变量或不满足正态分布假设的等间隔数据
Kendall(肯德尔)相关系数 肯德尔秩相关系数 首先将X,Y按秩自然排序,计算一致顺序个数U和非一致顺序个数V,然后计算相关系数。所计算的对象是分类变量,包括有序(例如成绩等级优中差)和无序(例如性别男、女)的分类

Nc表示主客观评价值中一致的值的个数,Nd则表示了主观评估值和客观评估值不一样的个数

适用的范围广 适用于定序变量或不满足正态分布假设的等间隔数据

三、python代码

  1. # ======================== 皮尔逊相关系数计算 ============================
  2. # 方法1:
  3. """dataframe"""
  4. import pandas as pd
  5. df = pd.DataFrame({'A': [6, 87, 2], 'B': [26, 5, 30], 'C': [69, 89, 2]})
  6. print(df.corr(method='pearson')) # 默认是pearson,可以不写直接用df2.corr()
  7. # 方法2:
  8. from scipy.stats import pearsonr
  9. A = [6, 87, 2]
  10. B = [26, 5, 30]
  11. coef, p = pearsonr(A, B)
  12. print('pearsonr correlation coefficient: %.3f' % coef)
  13. # interpret the significance
  14. alpha = 0.05
  15. if p > alpha:
  16. print('Samples are uncorrelated (fail to reject H0) p=%.3f' % p)
  17. else:
  18. print('Samples are correlated (reject H0) p=%.3f' % p)
  19. # 方法3:
  20. """ndarray变量的相关系数计算"""
  21. import numpy as np
  22. A = [6, 87, 2]
  23. B = [26, 5, 30]
  24. # corrcoef得到相关系数矩阵
  25. print(np.corrcoef(A, B)) # pearson方法
  26. # ======================== Spearman(斯皮尔曼)相关系数计算 ============================
  27. # 方法1:
  28. import pandas as pd
  29. df = pd.DataFrame({'A': [6, 87, 2], 'B': [26, 5, 30], 'C': [69, 89, 2]})
  30. print(df.corr('spearman'))
  31. # 方法2:
  32. from scipy.stats import spearmanr
  33. A = [6, 87, 2]
  34. B = [26, 5, 30]
  35. coef, p = spearmanr(A, B)
  36. print('Spearmans correlation coefficient: %.3f' % coef)
  37. # interpret the significance
  38. alpha = 0.05
  39. if p > alpha:
  40. print('Samples are uncorrelated (fail to reject H0) p=%.3f' % p)
  41. else:
  42. print('Samples are correlated (reject H0) p=%.3f' % p)
  43. # ======================== Kendall(肯德尔)相关系数计算 ============================
  44. # 方法1:
  45. import pandas as pd
  46. df = pd.DataFrame({'A': [6, 87, 2], 'B': [26, 5, 30], 'C': [69, 89, 2]})
  47. print(df.corr('kendall'))
  48. # 方法2:
  49. from scipy.stats import kendalltau
  50. A = [6, 87, 2]
  51. B = [26, 5, 30]
  52. coef, p = kendalltau(A, B)
  53. print('kendalltau correlation coefficient: %.3f' % coef)
  54. # interpret the significance
  55. alpha = 0.05
  56. if p > alpha:
  57. print('Samples are uncorrelated (fail to reject H0) p=%.3f' % p)
  58. else:
  59. print('Samples are correlated (reject H0) p=%.3f' % p)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/kerry_55/article/details/122344779