兩個變量之間的皮爾遜相關系數定義為兩個變量之間的協方差和标準差的商。
第一種形式(也就是定義的形式):
第二種形式:
第三種形式:
第四種形式:
(其中,E為數學期望或均值,N為資料的數目,E{ [X-E(X)] [Y-E(Y)]}稱為随機變量X與Y的協方差,記為Cov(X,Y))
根據第四種形式的公式,使用python實作計算兩列資料的pearson相關系數的代碼:
from math import sqrt
def multiply(a,b):
#a,b兩個清單的資料一一對應相乘之後求和
sum_ab=
for i in range(len(a)):
temp=a[i]*b[i]
sum_ab+=temp
return sum_ab
def cal_pearson(x,y):
n=len(x)
#求x_list、y_list元素之和
sum_x=sum(x)
sum_y=sum(y)
#求x_list、y_list元素乘積之和
sum_xy=multiply(x,y)
#求x_list、y_list的平方和
sum_x2 = sum([pow(i,) for i in x])
sum_y2 = sum([pow(j,) for j in y])
molecular=sum_xy-(float(sum_x)*float(sum_y)/n)
#計算Pearson相關系數,molecular為分子,denominator為分母
denominator=sqrt((sum_x2-float(sum_x**)/n)*(sum_y2-float(sum_y**)/n))
return molecular/denominator
f=open('filename','r')
data={}
lines=f.readlines()
for line in lines:
#strip用于去掉換行符,split()通過指定分隔符對字元串進行切片,傳回子字元串
cols=line.strip('\n').split(',')
for i in range(len(cols)):
#float将字元串轉成浮點數
data.setdefault(i,[]).append(float(cols[i]))
x=data[]
y=data[]
if __name__=='__main__':
print ("x_list,y_list的Pearson相關系數為:"+str(cal_pearson(x,y)))
皮爾遜相關系數的适用範圍:
當兩個變量的标準差都不為零時,相關系數才有定義,皮爾遜相關系數适用于:
1. 兩個變量之間是線性關系,都是連續資料。
2. 兩個變量的總體是正态分布,或接近正态的單峰分布。
3. 兩個變量的觀測值是成對的,每對觀測值之間互相獨立。