Pearson、Spearman、Kendall、Polychoric、Polyserial相關係數簡介及R計算

2021-03-02 小白魚的生統筆記
變量間Pearson、Spearman、Kendall、Polychoric、Tetrachoric、Polyserial、Biserial相關係數簡介及R計算對於給定數據集中,變量之間的關聯程度以及關係的方向,常通過相關係數衡量。就關係的強度而言,相關係數的值在+1和-1之間變化,值±1表示變量之間存在完美關聯程度,即完全相關時絕對值為1;隨著相關係數值趨於0,意味著變量之間的關係將減弱,完全不相關時為0。關係的方向由係數的符號表示;+號表示正向關係,-號表示負向關係。


圖示兩個變量之間的相關係數,正相關意味著圖表從左到右具有向上的斜率:隨著x值的增加,y值會變大;負相關性意味著圖表從左到右具有向下的斜率:隨著x值的增加,y值會變小;零(不相關)表示y不隨x的變化而變化。     

首先簡介常見的用於描述變量間相關性的係數,包括Pearson、Spearman、Kendall、Polychoric、Tetrachoric、Polyserial、(Point-)Biserial等。  

Pearson相關係數(皮爾森相關)是使用最廣泛的相關性統計量,用於測量兩組連續變量之間的線性關聯程度。

Pearson相關係數計算如下:

rxy,變量x和y的Pearson相關係數;

n,觀測對象的數量;

xi,x的第i個觀測值;

yi,y的第i個觀測值。

 

Pearson相關係數應用於連續變量,假定兩組變量均為正態分布、存在線性關係且等方差。線性關係假設兩個變量之間是線性響應的,等方差假設數據在回歸線上均勻分布。

  

Spearman秩相關係數(斯皮爾曼等級相關)是一種非參數統計量,其值與兩組相關變量的具體值無關,而僅僅與其值之間的大小關係有關。Spearman秩相關依據兩列成對等級的各對等級數之差進行計算,所以又稱為「等級差數法」。當變量在至少是有序的尺度上測量時,它是合適的相關分析方法。

Spearman秩相關係數計算如下:


ρ,Spearman秩相關係數;

di,對應變量的秩之差,即兩個變量分別排序後成對的變量位置(等級)差;

n,觀測對象的數量。

 

Spearman秩相關同樣應用於連續變量,與Pearson相關相比Spearman秩相關不要求變量的正態性和等方差假設,且對異常值的敏感度較低(該方法基於變量的排序,因此異常值的秩次通常不會有明顯變化),因此適用範圍通常更廣。但方法較為保守,統計效能較Pearson相關係數低,容易忽略一些不太強的線性關係。

此外,Spearman秩相關要求數據必須至少是有序的,一個變量的得分必須與另一個變量單調相關(monotonically related)。 

 

Kendall 相關係數則用於計算分類變量間的秩相關,用於反映分類變量相關性的指標,適用於兩個分類變量均為有序分類的情況。

考慮兩組變量,x和y,它們各自的觀測值數量均為n,則x與y觀測值可能配對的總數為n(n-1)/ 2。由於x和y為分類變量,需要首先根據類別表示的重要度人工賦值。隨後考察x和y的關係對,如果xi<yi且xj<yj,或xi>yi且xj>yj,則該關係對是一致的(concordant),反正則不一致(discordant)。一致關係對數量與不一致關係對數量的差值除以總關係對數量,可得Kendall 相關係數:

如果一致對的數量比不一致對的數量大得多,則變量是正相關的;如果一致對的數目比不一致對的數目少得多;則變量是負相關的;如果一致對的數目與不一致對的數目大致相同,則變量之間的關係很弱。

  

Polychoric相關(多分格相關)度量多個對象之間關於有序變量(有時稱為「有序類別」數據)之間的一致性。當以列聯表的形式組織數據時,兩個分類自變量被排序,據此計算Polychoric相關係數。

對於2×2列聯表的情況,Polychoric相關係數也稱為Tetrachoric相關係數(作為Polychoric相關的一種常見類型)。通過以下對Tetrachoric相關的描述即可理解Polychoric相關的定義。  

Tetrachoric相關(二元有序變量間的相關,Polychoric相關的某種常見類型)

Tetrachoric相關(四分相關)是在二元正態性假設下從2×2表推斷出的Pearson相關,用於測量二元數據一致性。Tetrachoric相關要求基本變量來自正態分布,並且二元數據中存在一個潛在的連續梯度,即觀測值的特徵應該是連續而非離散的。

首先將觀察數值矩陣獲得列聯表,並通過下式計算:

 

 

Polyserial相關(定量變量和序數變量的相關)

Polyserial相關(多系列相關)測量的是兩個連續變量之間的相關關係,它們具有二元正態分布,其中一個變量可以直接觀測到(以定量數值記錄),而另一個變量無法被觀測(以序數值記錄)。通過將可觀測的連續變量分類為有限的離散有序值集,可以從可觀測的有序變量獲得不可觀測有序變量的信息。

Biserial相關(連續變量和二元有序變量的相關,Polyserial相關的某種特例)

Biserial相關係數為Polyserial相關的一種特例,用於測量一組連續變量和一組二元變量的線性關係,二元變量是二分序數類型,具有潛在的連續性。

Y0,x=0時變量對的平均分;

Y1,x=1時變量對的平均分;

p,x=1時變量對的比例;

q,x=0時變量對的比例;

σy,總體標準偏差。

  

Point-Biserial相關(連續變量和二元分類變量的相關)

與Biserial相關係數相比,Point-Biserial相關係數用於測量一組連續變量和一組二元分類變量的線性關係,分類變量是無序的。

M1,二元變量組「1」對象對應的連續變量的均值;

M0,二元變量組「0」對象對應的連續變量的均值;

Sn,連續變量的標準偏差;

p,二元變量組「1」對象所佔總對象的比例;

q,二元變量組「0」對象所佔總對象的比例。

接下來展示在R中計算上述提到的相關係數的方法。  

Pearson、Spearman和Kendall相關

在R中,cor()可用於計算Pearson、Spearman和Kendall相關矩陣,cov()可用於獲得協方差矩陣。

##Pearson、Spearman、Kendall 相關
data(mtcars)

#標準化不影響相關係數計算值,但可以讓數據服從均值 0,標準差 1 的等方差結構
mtcars <- scale(mtcars)

#協方差計算,cov()
cov_pearson <- cov(mtcars, method = 'pearson')
cov_pearson

cov_spearman <- cov(mtcars, method = 'spearman')
cov_spearman

cov_kendall <- cov(mtcars, method = 'kendall')
cov_kendall

#相關係數計算,cor()
cor_pearson <- cor(mtcars, method = 'pearson')
cor_pearson

cor_spearman <- cor(mtcars, method = 'spearman')
cor_spearman

cor_kendall <- cor(mtcars, method = 'kendall')
cor_kendall

#相關圖,例如
library(corrplot)

corrplot(cor_pearson, method = 'number', number.cex = 0.8, diag = FALSE, tl.cex = 0.8)
corrplot(cor_pearson, add = TRUE, type = 'upper', method = 'pie', diag = FALSE, tl.pos = 'n', cl.pos = 'n')

#輸出,例如
write.table(cor_pearson, 'cor_pearson.txt', sep = '\t', col.names = NA, quote = FALSE)


直接指定數據集,默認計算所有變量間的相關係數,獲得斜對角線對稱的矩陣。

也可指定兩組變量集,獲得相互之間兩兩變量間非對稱的相關矩陣。

#指定兩組變量集,獲得非對稱的相關矩陣,例如
x <- c('mpg', 'cyl', 'disp', 'hp')
y <- c('drat', 'wt', 'qsec')

cor_pearson_xy <- cor(mtcars[x], mtcars[y], method = 'pearson')
cor_pearson_xy

#相關圖
corrplot(cor_pearson_xy, method = 'square', addCoef.col = 'black', number.cex = 0.8, tl.cex = 1.2)

#輸出,例如
write.table(cor_pearson_xy, 'cor_pearson_xy.txt', sep = '\t', col.names = NA, quote = FALSE)

  

偏相關是指在控制一個或多個定量變量時,另外兩個定量變量之間的相互關係。R包ggm中提供的命令pcor()可以計算偏相關係數。

##偏相關,ggm 包 pcor()
library(ggm)

#要計算相關係數的兩個變量,或指定下標
x1 <- c('mpg', 'cyl')

#要控制的條件變量,或指定下標
x2 <- c('drat', 'wt', 'qsec')

#指定協方差矩陣,計算偏相關
pcor_pearson <- pcor(c(x1, x2), cov(mtcars, method = 'pearson'))
pcor_pearson

  

psych包提供了計算這些相關係數的方法。

psych包也能計算Polyserial和Biserial相關,但文檔中沒提供示例,沒看明白……

##Polychoric、Tetrachoric
library(psych)

#Polychoric 相關
data(bock)

polyc <- polychoric(lsat6)
polyc

#Tetrachoric 相關
tetr <- tetrachoric(lsat6[ ,1:2])
tetr

  

Polyserial和(Point-)Biserial相關

以ltm包提供的方法為例。

##Polyserial、(Point-)Biserial
library(ltm)

#Polyserial 相關
mpg <- subset(ggplot2::mpg, class == 'midsize' | class == 'compact')
polys <- polyserial(mpg$cty, mpg$class, std.err = TRUE)
polys

#Point-Biserial 相關
poi_biser <- biserial.cor(mpg$cty, mpg$class)
poi_biser

#Biserial 相關
biser <- biserial.cor(mtcars$mpg, mtcars$vs)
biser

通常來講,相關性分析是一種用於描述變量關聯程度的探索性分析方法,而非確立因果關係的模型,不涉及假設檢驗過程。但如果有必要,仍可以計算相關係數的顯著性,評估哪些變量間的關聯程度是更重要的。

一些R包提供了計算變量間相關係數顯著性的方法。此外,也可以自寫函數獲得,見下文。  

計算相關矩陣及顯著性水平。

library(psych)

#所有變量間相關係數的對稱矩陣
corr_matrix <- corr.test(mtcars, method = 'pearson')
corr_matrix$r #相關矩陣
corr_matrix$p #p 值矩陣

#相關圖,只展示 p < 0.05 的相關係數
library(corrplot)

col1 <- colorRampPalette(c('blue4', 'blue', 'white', 'orange', 'red3'))
corrplot(corr_matrix$r, p.mat = corr_matrix$p, sig.level = 0.05, insig = 'blank', method = 'number',
diag = FALSE, col = col1(21), tl.cex = 1)
corrplot(corr_matrix$r, p.mat = corr_matrix$p, sig.level = 0.05, insig = 'blank', method = 'circle',
add = TRUE, type = 'upper', diag = FALSE, col = col1(21), tl.pos = 'n', cl.pos = 'n')

#自定義篩選,例如選擇 |r| >=0.7,p < 0.05 的結果,將不滿足條件的相關係數值賦值為 0 後輸出
corr_matrix$p[corr_matrix$p >= 0.05] <- -1
corr_matrix$p[corr_matrix$p < 0.05 & corr_matrix$p >= 0] <- 1
corr_matrix$p[corr_matrix$p == -1] <- 0

corr_matrix$r[abs(corr_matrix$r) < 0.7] <- 0
corr_matrix$r <- corr_matrix$r * corr_matrix$p
write.table(corr_matrix$r, 'corr_matrix_select.txt', sep = '\t', col.names = NA, quote = FALSE)


#給定兩組變量間相關係數的非對稱矩陣
x <- as.matrix(mtcars[c('mpg', 'cyl', 'disp', 'hp')])
y <- as.matrix((mtcars[c('drat', 'wt', 'qsec')])

corr_matrix <- corr.test(x, y, method = 'pearson')
corr_matrix$r #相關矩陣
corr_matrix$p #p 值矩陣

#相關圖,只展示 p < 0.05 的相關係數
col1 <- colorRampPalette(c('blue4', 'blue', 'white', 'orange', 'red3'))
corrplot(corr_matrix$r, p.mat = corr_matrix$p, sig.level = 0.05, insig = 'blank',
method = 'square', addCoef.col = 'black', col = col1(21), number.cex = 0.8, tl.cex = 1.2)

  

計算相關矩陣及顯著性水平。

library(Hmisc)

#所有變量間相關係數的對稱矩陣
rcorr_matrix <- rcorr(as.matrix(mtcars), type = 'pearson')
rcorr_matrix$r #相關矩陣
rcorr_matrix$P #p 值矩陣

#給定兩組變量間相關係數的非對稱矩陣
x <- as.matrix(mtcars[c('mpg', 'cyl', 'disp', 'hp')])
y <- as.matrix((mtcars[c('drat', 'wt', 'qsec')]))

rcorr_matrix <- rcorr(x, y, type = 'pearson')
rcorr_matrix$r #相關矩陣
rcorr_matrix$P #p 值矩陣

#相關圖、自定義結果篩選等,參考上述

  

置換檢驗是個百搭的非參數檢驗方法,相關係數的顯著性可根據置換檢驗的原理獲得。

上述提到的所有相關係數,包括Polychoric、Tetrachoric、Polyserial、(Point-)Biserial等,如果找不到計算顯著性的R包,不妨考慮手寫函數計算,其實並不難。

#計算觀測值的相關係數(cor0),還是以 Pearson 相關為例,其它類似
cor0 <- cor(mtcars, method = 'pearson')

#隨機置換數據 999 次,計算每次置換後數據計算的相關係數(corN),並統計 |corN|>|cor0| 的頻數
p_num <- cor0
p_num[abs(p_num)>0] <- 1

set.seed(123)
for (i in 1:999) {
random <- apply(mtcars, 2, sample)
corN <- cor(random, method = 'pearson')

corN[abs(corN) >= abs(cor0)] <- 1
corN[abs(corN) < abs(cor0)] <- 0
p_num <- p_num + corN
}

#p 值矩陣,即 |corN|>|cor0| 的概率
p <- p_num/1000
p

#相關圖比較,僅顯著(p < 0.05)的相關係數標以背景色
#左圖為手寫的置換檢驗結果,右圖為 psych 包獲得的結果,二者是一致的
library(corrplot)
library(psych)
cor_psych <- corr.test(mtcars, method = 'pearson')

layout(matrix(c(1,2), 1, 2, byrow = TRUE))
corrplot(cor0, method = 'square', type = 'lower', p.mat = p, sig.level = 0.05, insig = 'blank',
addCoef.col = 'black', diag = FALSE, number.cex = 0.8, tl.cex = 0.8)
corrplot(cor_psych$r, method = 'square', type = 'lower', p.mat = cor_psych$p, sig.level = 0.05, insig = 'blank',
addCoef.col = 'black', diag = FALSE, number.cex = 0.8, tl.cex = 0.8)


Pearson, Spearman & Kendall:https://www.statisticssolutions.com/correlation-pearson-kendall-spearman/

(Point-)Biserial:https://www.statisticshowto.datasciencecentral.com/point-biserial-correlation/

Tetrachoric & Polychoric:http://john-uebersax.com/stat/tetra.htm

Polyserial:http://support.sas.com/documentation/cdl/en/procstat/63963/HTML/default/viewer.htm#procstat_corr_sect019.htm

相關焦點

  • 五大相關係數簡介及R計算:Pearson、Spearman、Kendall、Polychoric、Polyserial
    變量間Pearson、Spearman、Kendall、Polychoric、Tetrachoric、Polyserial、Biserial相關係數簡介及R計算對於給定數據集中,變量之間的關聯程度以及關係的方向,常通過相關係數衡量。
  • R語言 | Pearson、Spearman、Kendall、Polychoric、Polyserial相關係數簡介及R計算
    變量間Pearson、Spearman、Kendall、Polychoric、Tetrachoric、Polyserial、Biserial相關係數簡介及R計算對於給定數據集中,變量之間的關聯程度以及關係的方向,常通過相關係數衡量。
  • 相關係數簡介及R計算
    變量間Pearson、Spearman、Kendall、Polychoric、Tetrachoric、Polyserial、Biserial相關係數簡介及R計算對於給定數據集中,變量之間的關聯程度以及關係的方向,常通過相關係數衡量。
  • 相關係數計算(Spearman,Pearson,Kendall)
    對於服從Pearson相關係數的數據亦可計算Spearman相關係數,但統計效能要低一些。Pearson相關係數的計算公式可以完全套用 Spearman相關係數計算公式,但公式中的x和y用相應的秩次代替即可。Kendall's tau-b等級相關係數:用於反映分類變量相關性的指標,適用於兩個分類變量均為有序分類的情況。
  • 如何選用Pearson、Spearman、Kendall三大相關係數
    說到相關分析,很多人會馬上拿出皮爾遜Pearson相關係數,從不論數據是不是符合適用條件,甚至完全不了解Pearson相關係數還有假設條件這回事。常見的相關係數有三種,它們分別是Pearson、Spearman、Kendall係數,世人兼知pearson係數,冷淡了另外兩個。
  • 三大相關係數簡介及其在R中的相關函數
    概率統計學習中最常見的是Pearson相關係數,其取值範圍是[-1,1],當取值為0時表示不(線性)相關,取值為[-1,0)表示負相關,取值為(0,1]表示正相關。相關係數絕對值越接近於1,兩個變量間(線性)相關性越強。
  • Pearson(皮爾遜)相關係數
    相關係數:考察兩個事物(在數據裡我們稱之為變量)之間的相關程度。如果有兩個變量:X、Y,最終計算出的相關係數的含義可以有如下理解:(1)、當相關係數為0時,X和Y兩變量無關係。(2)、當X的值增大(減小),Y值增大(減小),兩個變量為正相關,相關係數在0.00與1.00之間。
  • SPSS統計分析案例:相關分析之kendall係數
    相關分析中最為常用的是pearson相關係數,嚴格來說它有自己的適用性,數據最好是正態分布且為連續型的數值,比如一個班級男生的身高數據和體重數據。在現實中,並不是所有的分析數據都能滿足這樣的條件,對於一些分類型的數據,或者明顯不是正態分布的數據,pearson相關係數是不合適的。此時有另外兩個係數可用,它們分別是spearman和kendall相關係數。
  • R_相關分析_Correlation
    利用兩個變量之間的均值和標準差計算的相關係數或線性相關係數,一般用字母r表示,可以用來描述變量相關聯的方向(±:正相關或負相關)和強度(完全不相關時為0,完全相關時為1)Pearson相關係數被廣泛使用,除此之外還有Spearman秩相關係數和Kendall秩相關係數。Pearson相關係數計算公式如下:其中為均值。在這裡主要介紹Pearson相關係數在R語言中的實現。
  • R語言學習筆記之相關性矩陣分析及其可視化
    計算相關矩陣R內置函數 cor() 可以用來計算相關係數:cor(x, method = c("pearson", "kendall", "spearman")),如果數據有缺失值計算相關係數矩陣res <- cor(mydata)round(res, 2)#保留兩位小數
  • 《R語言實戰》菜雞筆記(七):基本統計分析
    stat.desc(x,basic=T,desc=T,norm=F,p=0.95)# x是數據框或時間序列# basic=T(默認)計算所有值、空值、缺失值數量,計算最大值、最小值、值域和總和# desc=T(默認)計算中位數,平均數,平均數的標準誤,平均數置信度為95%的置信區間,方差,標準差,變異係數# norm=T(非默認)返回正態分布統計量:偏度峰度(及其統計顯著程度)和Shapiro-Wilk
  • SPSS分析技術:Pearson相關、Spearman相關及Kendall相關
    Spearman等級相關和Kendall一致性相關的使用範圍更廣,但精確度較差。Pearson相關皮爾遜相關是利用相關係數來判定數據之間的線性相關性,相關係數r的公式如下:對於相關係數r,有以下判定慣例:當r的絕對值大於0.6,表示高度相關;在0.4到0.6之間,表示相關;小於0.4,表示不相關。r大於0,表示正相關;r小於0,表示負相關。雖然相關係數能夠判別數據的相關性,但是還是要結合檢驗概率和實際情況進行判定,當檢驗概率小於0.05時,表示兩列數據之間存在相關性。
  • r相關性檢驗 - CSDN
    1.6.1 Pearson相關檢驗設二元總體(X,Y)的分布函數為F(x,y),X,Y的方差分別為var(X)和var(Y),總體協方差為cov(X,Y),總體的相關係數定義為ρXY=cov(X,Y)var(X)·var(Y)(1.72)設(X1,Y1),(X2,Y2),…,(Xn,Yn)為取自某個二元總體(X,Y)的獨立樣本,可以計算樣本的相關係數
  • R與生物專題 | 第七講 R-相關性分析及作圖
    例如,如果我們想知道父親和兒子的身高之間是否存在關係,可以計算相關係數來回答這個問題。如果兩個變量(父親和兒子的身高)之間沒有關係,則兒子的平均身高應該相同,而與父親的身高無關,反之亦然。通過查詢相關係數表。其中自由度為:df=n-2,n是x和y變量中的觀察次數(長度)。2. 或通過如下計算t值:對應的p值通過t分布表確認,其中自由度為:df=n-2,n是x和y變量中的觀察次數(長度)。
  • [空間分析]玖·地理統計 相關分析
    Pearson’s r 的計算和特性:0 no linear relationship 不相關如何理解?皮爾森相關分析通過計算兩個變量之間的相關係數,分析變量間線性相關的程度,在多元相關分析中,由於受到其他變量的影響,皮爾森相關係數只能從表面上反映兩個變量相關的性質,往往不能真實地反映變量之間的線性相關程度,甚至會給人造成相關的假象,因此,在某些場合,簡單的皮爾森相關係數並不是刻畫相關關係的本質統計量。
  • R語言從入門到精通:Day10-R語言統計入門代碼大全
    R可以計算多種相關係數,包括Pearson相關係數、Spearman相關係數、Kendall相關係數、偏相關係數、多分格(polychoric)相關係數和多系列(polyserial)相關係數。cor()函數可以計算Pearson、Spearman、Kendall這三種相關係數,而cov()函數可用來計算協方差。
  • R-相關性分析
    最常用的為卡方檢驗,用於評價兩個無序分類變量的相關性(檢驗兩組數據是否具有統計學差異,從而分析因素之間的相關性)第二部分: Pearson相關&Spearman相關R中可計算多種相關係數,其中最常用的包括Pearson,Spearman和Kendall相關係數,最基礎的,cor(x = ,y = ,use = ,method = ) 可用於計算相關係數; cov(x
  • 三大相關係數法
    在這三大相關係數中,spearman和kendall屬於等級相關係數亦稱為「秩相關係數」,是反映等級相關程度的統計分析指標。最終選擇哪種相關係數法,對比結果誰更符合預期效果。Pearson相關係數:按照大學的線性數學水平來理解, 它比較複雜一點,可以看做是兩組數據的向量夾角的餘弦。
  • 相關性分析在SPSS中的具體操作,一文讀懂相關係數的含義及使用——【醫學和生物統計】
    相關係數的選擇相關分析之前,需要先確認變量的類型,根據具體類型選擇合適的相關係數。Pearson相關係數適用於兩變量的度量水平都是連續數值型,且兩變量的總體是正態分布或者近似正態分布的情況,還有說法認為其樣本量應大於30,可供參考,如果不滿足上述條件,則考慮選擇spearman係數或者kendall係數。
  • r語言檢驗 是否相關 - CSDN
    相關係數a=c(1,3,5,7,9);b=c(1,4,6,9,10)cor(a,b)cor.test(a,b) #檢驗相關係數的顯著性cor(iris[1:4]) #相關係數,參數填數據集,則計算相關係數矩陣a1=rnorm(5);b1=rnorm(5);cor(a1,b1);cor.test(a1,b1) #自己模擬生成兩個變量#spearman