相关分析是指对多个具备相关关系的变量进行分析,从而衡量变量间的相关程度或密切程度。相关性可以应用到所有数据的分析过程中,任何事物之间都存在一定的联系。相关性用R(相关系数)表示,R的取值范围是[-1,1]
相关和因果的差异
相关性不等于因果,用x1和x2作为两个变量逆行解释,相关意味着x1和x2是逻辑上的并列相关关系,而因果联系可以解释为因为x1所以x2(或因为x2所以x1)的逻辑关系,二者是完全不同的。
相关性的真实价值不是用来分析“为什么”,而是通过相关性来描述无法解释的问题背后真正成因。相关性的真实价值是能知道“是什么”,即无论通过何种因素对结果产生影响,最终出现的规律就是二者会一起增加,降低等。
相关系数低就是不相关吗
R(相关系数)低就是不相关么?其实不是。
首先,R的取值可以为负,R=-0.8代表的相关性要高于R=0.5,负相关性只是意味着两个变量的增长趋势相反。因此需要看R的绝对值来判断相关性的强弱。
其次,即使R的绝对值低,也不一定说明变量间的相关性低,原因是相关性衡量的仅仅是变量间的线性相关关系,变量间除了线性关系外,还包括指数关系,多项式关系,幂关系等,这些非线性相关的相关性不在R(相关性分析)衡量范围内。
Python 相关性分析
import numpy as np
data = np.loadtxt('/Users/nxcjh/learn/python-yunying/python_book/chapter3/data5.txt', delimiter='\t')
x = data[:, :-1] # 切分自变量
print(x)
correlation_matrix = np.corrcoef(x, rowvar=0) # 相关性分析
print("相关性结果:")
print(correlation_matrix.round(2)) # 打印输出相关性结果
[[9.74500000e+01 6.91560000e+02 3.17747000e+03 ... 2.50230850e+05
1.48545545e+06 1.48517277e+06]
[1.01760000e+02 9.20360000e+02 1.57680100e+04 ... 6.39772285e+06
5.72076300e+05 5.71978860e+05]
[9.82100000e+01 8.94760000e+02 8.82403000e+03 ... 1.61567885e+06
1.05798051e+06 1.05838664e+06]
...
[1.00580000e+02 5.22320000e+02 7.88055000e+03 ... 5.72337040e+05
2.25482960e+05 4.10655250e+05]
[9.95600000e+01 5.03000000e+02 4.02205000e+03 ... 7.15016400e+05
2.08891280e+05 3.95942710e+05]
[1.00420000e+02 7.14510000e+02 7.79795000e+03 ... 2.77508514e+06
5.97421660e+05 2.26286140e+05]]
相关性结果:
[[ 1. -0.04 0.27 -0.05 0.21 -0.05 0.19 -0.03 -0.02]
[-0.04 1. -0.01 0.73 -0.01 0.62 0. 0.48 0.51]
[ 0.27 -0.01 1. -0.01 0.72 -0. 0.65 0.01 0.02]
[-0.05 0.73 -0.01 1. 0.01 0.88 0.01 0.7 0.72]
[ 0.21 -0.01 0.72 0.01 1. 0.02 0.91 0.03 0.03]
[-0.05 0.62 -0. 0.88 0.02 1. 0.03 0.83 0.82]
[ 0.19 0. 0.65 0.01 0.91 0.03 1. 0.03 0.03]
[-0.03 0.48 0.01 0.7 0.03 0.83 0.03 1. 0.71]
[-0.02 0.51 0.02 0.72 0.03 0.82 0.03 0.71 1. ]]
相关性矩阵的左侧和顶部都是相对变量,从左到右,从上到下依次是列1到列9,从结果看出:
- 第5列和第7列相关性最高,系数达到0.91
- 第4列和第6列相关性比较高,系数达到0.88
主要知识点
- 通过Numpy的loadtxt方法读取文本数据文件,并制定分隔符。
- 对Numpy矩阵做切块处理;
- 使用Numpy中的corrcoef做相关性分析;
- 使用round方法保留2位小数。