一、皮爾遜相關系數(Pearson)
假設有兩個變量X、Y,那么兩變量間的皮爾遜相關系數可通過以下公式計算:
![]()
其中E是數學期望,cov表示協方差.
適用范圍:
當兩個變量的標准差都不為零時,相關系數才有定義,皮爾遜相關系數適用於:
(1)、兩個變量之間是線性關系,都是連續數據。
(2)、兩個變量的總體是正態分布,或接近正態的單峰分布。
(3)、兩個變量的觀測值是成對的,每對觀測值之間相互獨立。
def mean(x):#期望 return sum(x)/len(x) def de_mean(x): x_bar = mean(x) return [x_i - x_bar for x_i in x] # 輔助計算函數 dot product 、sum_of_squares def dot(v, w): return sum(v_i * w_i for v_i, w_i in zip(v, w)) def sum_of_squares(v): return dot(v, v) # 方差 def variance(x): n = len(x) deviations = de_mean(x) return sum_of_squares(deviations) / (n - 1) # 標准差 import math def standard_deviation(x): return math.sqrt(variance(x)) # 協方差 def covariance(x, y): n = len(x) return dot(de_mean(x), de_mean(y)) / (n -1) # 相關系數 def correlation(x, y): stdev_x = standard_deviation(x) stdev_y = standard_deviation(y) if stdev_x > 0 and stdev_y > 0: return covariance(x, y) / stdev_x / stdev_y else: return 0
二、斯皮爾曼等級相關系數(Spearman Rank)
假設兩個長度為N的向量X和Y,即X和Y中包含N個元素,計算兩個向量X和Y的相關性,可以根據以下步驟計算:
step1:將兩個列向量X和Y對應的元素Xi和Yi轉換為在各自列向量中的排名,記為R(Xi)和R(Yi)
step2: 根據下面公式,計算兩個列向量X和Y中對應元素的R(Xi)和R(Yi) 之間的差異d,並相加

step3:最后,根據下面公式計算出兩個列向量之間的相關性Rs

適用范圍
斯皮爾曼等級相關系數對數據條件的要求沒有皮爾遜相關系數嚴格,只要兩個變量的觀測值是成對的等級評定資料,或者是由連續變量觀測資料轉化得到的等級資料,不論兩個變量的總體分布形態、樣本容量的大小如何,都可以用斯皮爾曼等級相關系數來進行研究。
#序列:Series 用於存儲一行或者一列的數據,以及與之相關的索引集合 #(類似於列表,但是有索引) import pandas as pd import numpy as np #原始數據 X1=pd.Series([1, 2, 3, 4, 5, 6]) Y1=pd.Series([0.3, 0.9, 2.7, 2, 3.5, 5]) #處理數據刪除Nan x1=X1.dropna() y1=Y1.dropna() n=x1.count() x1.index=np.arange(n) y1.index=np.arange(n) #分部計算 d=(x1.sort_values().index-y1.sort_values().index)**2 dd=d.to_series().sum() p=1-6*dd/(n*(n**2-1)) r=x1.corr(y1,method='spearman') print(r,p) #0.942857142857143 0.9428571428571428
