由於使用的統計相關係數比較頻繁,所以這裡就利用幾篇文章簡單介紹一下這些係數。
相關係數:考察兩個事物(在數據裡我們稱之為變量)之間的相關程度。
如果有兩個變量:X、Y,最終計算出的相關係數的含義可以有如下理解:
(1)、當相關係數為0時,X和Y兩變量無關係。
(2)、當X的值增大(減小),Y值增大(減小),兩個變量為正相關,相關係數在0.00與1.00之間。
(3)、當X的值增大(減小),Y值減小(增大),兩個變量為負相關,相關係數在-1.00與0.00之間。
相關係數的絕對值越大,相關性越強,相關係數越接近於1或-1,相關度越強,相關係數越接近於0,相關度越弱。
通常情況下通過以下取值範圍判斷變量的相關強度:
相關係數 0.8-1.0 極強相關
0.6-0.8 強相關
0.4-0.6 中等程度相關
0.2-0.4 弱相關
0.0-0.2 極弱相關或無相關
在這三大相關係數中,spearman和kendall屬於等級相關係數亦稱為「秩相關係數」,是反映等級相關程度的統計分析指標。今天暫時用不到,所以現在只做pearson的相關研究。
首先放上公式:
公式定義為: 兩個連續變量(X,Y)的pearson相關性係數(Px,y)等於它們之間的協方差cov(X,Y)除以它們各自標準差的乘積(σX,σY)。係數的取值總是在-1.0到1.0之間,接近0的變量被成為無相關性,接近1或者-1被稱為具有強相關性。
根據以上公式,python3實現代碼:
def pearson(vector1, vector2):
n = len(vector1)
#simple sums
sum1 = sum(float(vector1[i]) for i in range(n))
sum2 = sum(float(vector2[i]) for i in range(n))
#sum up the squares
sum1_pow = sum([pow(v, 2.0) for v in vector1])
sum2_pow = sum([pow(v, 2.0) for v in vector2])
#sum up the products
p_sum = sum([vector1[i]*vector2[i] for i in range(n)])
#分子num,分母den
num = p_sum - (sum1*sum2/n)
den = math.sqrt((sum1_pow-pow(sum1, 2)/n)*(sum2_pow-pow(sum2, 2)/n))
if den == 0:
return 0.0
return num/den
現在,用兩個向量測試一下:vector1 = [2,7,18,88,157,90,177,570]
vector2 = [3,5,15,90,180, 88,160,580]
運行結果為0.998,可見這兩組數是高度正相關的。
此外,從上面的公式我們知道,皮爾森相關性係數是協方差與標準差的比值,所以它對數據是有比較高的要求的:
第一, 實驗數據通常假設是成對的來自於正態分布的總體。為啥通常會假設為正態分布呢?因為我們在求皮爾森相關性係數以後,通常還會用t檢驗之類的方法來進行皮爾森相關性係數檢驗,而 t檢驗是基於數據呈正態分布的假設的。
第二, 實驗數據之間的差距不能太大,或者說皮爾森相關性係數受異常值的影響比較大。例如心跳與跑步的例子,萬一這個人的心臟不太好,跑到一定速度後承受不了,突發心臟病,那這時候我們會測到一個偏離正常值的心跳(過快或者過慢,甚至為0),如果我們把這個值也放進去進行相關性分析,它的存在會大大幹擾計算的結果的。