相關分析是指對多個具備相關關係的變量進行分析,從而衡量變量間的相關程度或密切程度。相關性可以應用到所有數據的分析過程中,任何事物之間都存在一定的聯繫。相關性用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位小數。