1. 皮爾遜相關系數(Pearson Correlation Coefficient)
1.1 衡量兩個值線性相關強度的量
1.2 取值范圍[-1, 1]
正相關:>0, 負相關:<0, 無相關:=0
1.3 要理解Pearson相關系數,首先要理解協方差(Covariance),協方差是一個反映兩個隨機變量相關程度的指標,如果一個變量跟隨着另一個變量同時變大或者變小,那么這兩個變量的協方差就是正值,反之相反,公式如下:
方差:
Pearson相關系數公式如下:
注意:有了協方差,為什么還使用皮爾遜相關系數?雖然協方差能反映兩個隨機變量的相關程度(協方差大於0的時候表示兩者正相關,小於0的時候表示兩者負相關),但是協方差值的大小並不能很好地度量兩個隨機變量的關聯程度,例如,現在二維空間中分布着一些數據,我們想知道數據點坐標X軸和Y軸的相關程度,如果X與Y的相關程度較小但是數據分布的比較離散,這樣會導致求出的協方差值較大,用這個值來度量相關程度是不合理的。
為了更好的度量兩個隨機變量的相關程度,引入了Pearson相關系數,其在協方差的基礎上除以了兩個隨機變量的標准.
2. 計算方法舉例:
x y
1 10
3 12
8 24
7 21
9 34
在Excel中計算:
3. 其他例子
4. R平方值
4.1 定義:決定系數,反應因變量的全部變異能通過回歸關系被自變量解釋的比例。
也就是說,對於已經建模的模型,多大程度上可以解釋數據
4.2 描述:如R平方為0.8,則表示回歸關系可以解釋因變量80%的變異。換句話說,如果我們控制自變量不變,則因變量的變異程度會減少80%。
4.3 簡單線性回歸:R^2 = r * r (r為皮爾遜相關系數)
多元線性回歸:
R平方也有局限性:R平方隨着自變量的增加會變大,R平方和樣本量是有關系的。因此,我們要對R平方進行修正。修正方法:
實際中一般會選擇修正后的R平方值對線性回歸模型對擬合度進行評判
Python實現:
# -*- coding:utf-8 -*-
import numpy as np
from astropy.units import Ybarn
import math
#相關度
def computeCorrelation(X, Y):
xBar = np.mean(X)
yBar = np.mean(Y)
SSR = 0
varX = 0
varY = 0
for i in range(0, len(X)):
diffXXbar = X[i] - xBar
diffYYbar = Y[i] - yBar
SSR += (diffXXbar * diffYYbar)
varX += diffXXbar**2
varY += diffYYbar**2
SST = math.sqrt(varX * varY)
return SSR / SST
#測試
testX = [1, 3, 8, 7, 9]
testY = [10, 12, 24, 21, 34]
# print("相關度r:", computeCorrelation(testX, testY))
#相關度r: 0.940310076545
#R平方
#簡單線性回歸:
# print("r^2:", str(computeCorrelation(testX, testY)**2))
#r^2: 0.884183040052
#多個x自變量時:
def polyfit(x, y, degree): #degree自變量x次數
result = {}
coeffs = np.polyfit(x, y, degree)
result['polynomial'] = coeffs.tolist()
p = np.poly1d(coeffs)
yhat = p(x)
ybar = np.sum(y)/len(y)
ssreg = np.sum((yhat - ybar)**2)
sstot = np.sum((y - ybar)**2)
result['determination'] = ssreg / sstot
return result
#測試
print(polyfit(testX, testY, 1)["determination"])
#r^2:0.884183040052