一、相关性分析简介
相关性分析(correlation analysis)是指对两个或多个具备相关关系的变量进行线性相关分析,从而衡量变量间的相关程度或密切程度。相关性程度即为相关性系数R,R的取值范围是[-1, 1]。相关性不等于因果。
二、相关性分析原理及方法
方法 | 别称 | 原理 | 公式 | 优点 | 数据要求 |
Pearson(皮尔逊)相关系数 | 皮尔逊积矩相关系数 | 反映两个变量线性相关程度的统计量 | ![]() |
速度快、定位准、效率高 | 连续性、正态分布性、线性关系 |
Spearman(斯皮尔曼)相关系数 | 斯皮尔曼秩相关系数 | 首先得到两组数据X和Y的秩(U,V),,然后计算相关系数 |
首先对两个变量(X, Y)的数据进行排序,然后记下排序以后的位置(X’, Y’),(X’, Y’)的值就称为秩次,秩次的差值就是上面公式中的di,n就是变量中数据的个数,最后带入公式就可求解结果 |
适用的范围广,异常值影响小 | 适用于定序变量或不满足正态分布假设的等间隔数据 |
Kendall(肯德尔)相关系数 | 肯德尔秩相关系数 | 首先将X,Y按秩自然排序,计算一致顺序个数U和非一致顺序个数V,然后计算相关系数。所计算的对象是分类变量,包括有序(例如成绩等级优中差)和无序(例如性别男、女)的分类 |
Nc表示主客观评价值中一致的值的个数,Nd则表示了主观评估值和客观评估值不一样的个数 |
适用的范围广 | 适用于定序变量或不满足正态分布假设的等间隔数据 |
三、python代码
- # ======================== 皮尔逊相关系数计算 ============================
- # 方法1:
- """dataframe"""
- import pandas as pd
- df = pd.DataFrame({'A': [6, 87, 2], 'B': [26, 5, 30], 'C': [69, 89, 2]})
- print(df.corr(method='pearson')) # 默认是pearson,可以不写直接用df2.corr()
-
- # 方法2:
- from scipy.stats import pearsonr
- A = [6, 87, 2]
- B = [26, 5, 30]
- coef, p = pearsonr(A, B)
- print('pearsonr correlation coefficient: %.3f' % coef)
- # interpret the significance
- alpha = 0.05
- if p > alpha:
- print('Samples are uncorrelated (fail to reject H0) p=%.3f' % p)
- else:
- print('Samples are correlated (reject H0) p=%.3f' % p)
-
- # 方法3:
- """ndarray变量的相关系数计算"""
- import numpy as np
- A = [6, 87, 2]
- B = [26, 5, 30]
- # corrcoef得到相关系数矩阵
- print(np.corrcoef(A, B)) # pearson方法
-
- # ======================== Spearman(斯皮尔曼)相关系数计算 ============================
- # 方法1:
- import pandas as pd
- df = pd.DataFrame({'A': [6, 87, 2], 'B': [26, 5, 30], 'C': [69, 89, 2]})
- print(df.corr('spearman'))
-
- # 方法2:
- from scipy.stats import spearmanr
- A = [6, 87, 2]
- B = [26, 5, 30]
- coef, p = spearmanr(A, B)
- print('Spearmans correlation coefficient: %.3f' % coef)
- # interpret the significance
- alpha = 0.05
- if p > alpha:
- print('Samples are uncorrelated (fail to reject H0) p=%.3f' % p)
- else:
- print('Samples are correlated (reject H0) p=%.3f' % p)
- # ======================== Kendall(肯德尔)相关系数计算 ============================
- # 方法1:
- import pandas as pd
- df = pd.DataFrame({'A': [6, 87, 2], 'B': [26, 5, 30], 'C': [69, 89, 2]})
- print(df.corr('kendall'))
-
- # 方法2:
- from scipy.stats import kendalltau
- A = [6, 87, 2]
- B = [26, 5, 30]
- coef, p = kendalltau(A, B)
- print('kendalltau correlation coefficient: %.3f' % coef)
- # interpret the significance
- alpha = 0.05
- if p > alpha:
- print('Samples are uncorrelated (fail to reject H0) p=%.3f' % p)
- else:
- print('Samples are correlated (reject H0) p=%.3f' % p)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/kerry_55/article/details/122344779