皮爾遜相關系數與斯皮爾曼等級相關系數


一、皮爾遜相關系數(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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM