1. 程式人生 > >【轉載】統計學之三大相關性係數(pearson、spearman、kendall)

【轉載】統計學之三大相關性係數(pearson、spearman、kendall)

三個相關性係數(pearson, spearman, kendall)反應的都是兩個變數之間變化趨勢的方向以及程度,其值範圍為-1到+1,0表示兩個變數不相關,正值表示正相關,負值表示負相關,值越大表示相關性越強。

  1. person correlation coefficient(皮爾森相關性係數)

公式如下:
在這裡插入圖片描述
重點關注第一個等號後面的公式,最後面的是推導計算,暫時不用管它們。看到沒有,兩個變數(X, Y)的皮爾森相關性係數(ρX,Y)等於它們之間的協方差cov(X,Y)除以它們各自標準差的乘積(σX, σY)。

公式的分母是變數的標準差,這就意味著計算皮爾森相關性係數時,變數的標準差不能為0(分母不能為0),也就是說你的兩個變數中任何一個的值不能都是相同的。如果沒有變化,用皮爾森相關係數是沒辦法算出這個變數與另一個變數之間是不是有相關性的。

就好比我們想研究人跑步的速度與心臟跳動的相關性,如果你無論跑多快,心跳都不變(即心跳這個變數的標準差為0),或者你心跳忽快忽慢的,卻一直保持一個速度在跑(即跑步速度這個變數的標準差為0),那我們都無法通過皮爾森相關性係數的計算來判斷心跳與跑步速度到底相不相關。

我們再拔高一點,來看個更具普遍性的例子吧,其中的計算我們使用廣受歡迎的R語言來執行,如果你手邊也裝了R語言,可以一起來做做看:

假設你現在做了個生物學實驗,喜得以下兩個變數:
X1=c(1, 2, 3, 4, 5, 6)
Y1=c(0.3, 0.9, 2.7, 2, 3.5, 5)

X1《-c(1, 2, 3, 4, 5, 6)
Y1《-c(0.3, 0.9, 2.7, 2, 3.5, 5)
mean(X1) #平均值
[1] 3.5
mean(Y1)
[1] 2.4
var(X1) #方差
[1] 3.5
var(Y1)
[1] 2.976
sd(X1) #標準差
[1] 1.870829
sd(Y1)
[1] 1.725109
cov(X1,Y1) #協方差
[1] 3.06
cor(X1,Y1,method=“pearson”) #皮爾森相關性係數
[1] 0.9481367

其值在0.9以上,說明二者非常相關,比如驗證了蛋白A表達量的變化,與蛋白B表達量的變化關係很大!拿到這種有統計學論證的結果你可能很開心。

然而,由於實驗操作不慎或者處理資料不小心,得到了這樣一個變數X2(1,1,1,1,1,1),那麼計算X2與Y1之間的皮爾森相關性係數會發生什麼呢?

X2《-c(1,1,1,1,1,1)
cor(X2,Y1,method=“pearson”)
[1] NA
Warning message:
In cor(X2, Y1, method = “pearson”) : the standard deviation is zero

R執行會得到一個缺失值(NA),並且程式碼給你提醒:標準差為零(自己試著計算下X2的標準差是多少),這時候明白上面說的意思了吧!也就是說,X2裡面的取值根本沒有任何波動,那它與Y1的相關性也就沒法用這種方法來計算了。

此外,從上面的公式我們知道,皮爾森相關性係數是協方差與標準差的比值,所以它對資料是有比較高的要求的:

第一, 實驗資料通常假設是成對的來自於正態分佈的總體。為啥通常會假設為正態分佈呢?因為我們在求皮爾森相關性係數以後,通常還會用t檢驗之類的方法來進行皮爾森相關性係數檢驗,而 t檢驗是基於資料呈正態分佈的假設的。
在這裡插入圖片描述

第二, 實驗資料之間的差距不能太大,或者說皮爾森相關性係數受異常值的影響比較大。比如剛才心跳與跑步的例子,萬一這個人的心臟不太好,跑到一定速度後承受不了,突發心臟病,那這時候我們會測到一個偏離正常值的心跳(過快或者過慢,甚至為0),如果我們把這個值也放進去進行相關性分析,它的存在會大大幹擾計算的結果的。

  1. spearman correlation coefficient(斯皮爾曼相關性係數)

斯皮爾曼相關性係數,通常也叫斯皮爾曼秩相關係數。“秩”,可以理解成就是一種順序或者排序,那麼它就是根據原始資料的排序位置進行求解,這種表徵形式就沒有了求皮爾森相關性係數時那些限制。下面來看一下它的計算公式:
在這裡插入圖片描述

計算過程就是:首先對兩個變數(X, Y)的資料進行排序,然後記下排序以後的位置(X’, Y’),(X’, Y’)的值就稱為秩次,秩次的差值就是上面公式中的di,n就是變數中資料的個數,最後帶入公式就可求解結果。舉個例子吧,假設我們實驗的資料如下:
在這裡插入圖片描述

帶入公式,求得斯皮爾曼相關性係數:ρs= 1-6*(1+1+1+9)/6*35=0.657

也就是說,我們不用管X和Y這兩個變數具體的值到底差了多少,只需要算一下它們每個值所處的排列位置的差值,就可以求出相關性係數了。這下理解起來是不是容易多了!還是用上面的資料,下面寫下程式碼實現:

X《-c(11,490,14,43,30,3)
Y《-c(2,75,3,44,7,42)
cor(X,Y,method=“spearman”)
[1] 0.6571429

而且,即便在變數值沒有變化的情況下,也不會出現像皮爾森係數那樣分母為0而無法計算的情況。另外,即使出現異常值,由於異常值的秩次通常不會有明顯的變化(比如過大或者過小,那要麼排第一,要麼排最後),所以對斯皮爾曼相關性係數的影響也非常小!

由於斯皮爾曼相關性係數沒有那些資料條件要求,適用的範圍就廣多了。在我們生物實驗資料分析中,尤其是在分析多組學交叉的資料中說明不同組學資料之間的相關性時,使用的頻率很高。

  1. kendall correlation coefficient(肯德爾相關性係數)

肯德爾相關性係數,又稱肯德爾秩相關係數,它也是一種秩相關係數,不過它所計算的物件是分類變數。
分類變數可以理解成有類別的變數,可以分為
無序的,比如性別(男、女)、血型(A、B、O、AB);
有序的,比如肥胖等級(重度肥胖,中度肥胖、輕度肥胖、不肥胖)。
通常需要求相關性係數的都是有序分類變數。

舉個例子。比如評委對選手的評分(優、中、差等),我們想看兩個(或者多個)評委對幾位選手的評價標準是否一致;或者醫院的尿糖化驗報告,想檢驗各個醫院對尿糖的化驗結果是否一致,這時候就可以使用肯德爾相關性係數進行衡量。

由於資料情況不同,求得肯德爾相關性係數的計算公式不一樣,一般有3種計算公式,在這裡就不繁瑣地列出計算公式了,直接給出R語言的計算函式:

還是用cor函式求,這時候把method這個引數設成“kendall”,這時我們假設老師對選手的評價等級—3表示優,2表示中,1表示差:

X《-c(3,1,2,2,1,3)
Y《-c(1,2,3,2,1,1)
cor(X,Y,method=“kendall”)
[1] -0.2611165

這時候就可以理解為兩位老師對選手們的看法是呈相反趨勢的,不過這種相反的程度不很大


原文:https://blog.csdn.net/sinat_24143931/article/details/78798630