數據分析 第四篇:相關分析


相關分析是數據分析的一個基本方法,可以用於發現不同變量之間的關聯性,關聯是指數據之間變化的相似性,這可以通過相關系數來描述。發現相關性可以幫助你預測未來,而發現因果關系意味着你可以改變世界。 

一,協方差和相關系數

如果隨機變量X和Y是相互獨立的,那么協方差

Cov(X,Y) = E{ [X-E(X)] [Y-E(Y)] } = 0,

這意味着當協方差Cov(X,Y) 不等於 0 時,X和Y不相互獨立,而是存在一定的關系,此時,稱作X和Y相關。在統計學上,使用協方差和相關系數來描述隨機變量X和Y的相關性:

協方差:如果兩個變量的變化趨勢一致,也就是說如果其中一個大於自身的期望值,另外一個也大於自身的期望值,那么兩個變量之間的協方差就是正值。 如果兩個變量的變化趨勢相反,即其中一個大於自身的期望值,另外一個卻小於自身的期望值,那么兩個變量之間的協方差就是負值。從數值來看,協方差的數值越大,兩個變量同向程度也就越大。

µ是變量的期望。

相關系數:相關系數消除了兩個變量變化幅度的影響,只是單純反應兩個變量每單位變化時的相似程度

δ是變量的標准差。

相關系數用於描述定量變量之間的關系,相關系數的符號(+、-)表明關系的方向(正相關、負相關),其值的大小表示關系的強弱程度(完全不相關時為0,完全相關時為1)。

例如,下面兩種情況中,很容易看出X和Y都是同向變化的,而這個“同向變化”有個非常顯著特征:X、Y同向變化的過程,具有極高的相似度。

1,觀察協方差,情況一的協方差是:

情況二的協方差是:

 

協方差的數值相差一萬倍,只能從兩個協方差都是正數判斷出在這兩種情況下X、Y都是同向變化,但是一點也看不出兩種情況下X、Y的變化都具有相似性這一特點。

2,觀察相關系數,情況一的相關系數是:

情況二的相關系數是:

 

雖然兩種情況的協方差相差1萬倍,但是,它們的相關系數是相同的,這說明,X的變化與Y的變化具有很高的相似度。

二,相關的類型

R可以計算多種相關系數,包括Pearson相關系數、Spearman(秩)相關系數、Kendall(秩)相關系數、偏相關系數等相關系數,相關系數描述的是變量之間的線性相關程度。

  • Pearson相關系數衡量了兩個連續型變量之間的線性相關程度,要求數據連續變量的取值服從正態分布;
  • Spearman等級相關系數衡量兩個變量之間秩次(排序的位置)的相關程度,通常用於計算離散型數據、分類變量或等級變量之間的相關性;
  • Kendall等級相關系數用於計算有序的分類變量之間的相關系數,對於有序的分類變量,例如,評委對選手的評級,優、中、差等。

1,R函數

cor()函數可以計算相關系數,而cov()函數用於計算協方差:

cor(x, y = NULL, use = "everything", method = c("pearson", "kendall", "spearman"))
cov(x, y = NULL, use = "everything", method = c("pearson", "kendall", "spearman"))

參數注釋:

  • x:矩陣或數據框
  • y:默認情況下,y=NULL表示y=x,也就是說,所有變量之間兩兩計算相關,也可以指定其他的矩陣或數據框,使得x和y的變量之間兩兩計算相關。
  • use:指定缺失數據的處理方式,可選的方式為all.obs(遇到缺失數據時報錯)、everything(遇到缺失數據時,把相關系數的計算結果設置為missing)、complete.obs(行刪除)以及pairwise.complete.obs(成對刪除)
  • method:指定相關系數的類型,可選類型為"pearson", "kendall", "spearman"

例如,使用R基礎安裝包中的state.x77數據集,它提供了美國50個州的人口、收入、文盲率(Illiteracy)、預期壽命(Life Exp)、謀殺率和高中畢業率(HS Grad)等數據。

states <- state.x77[,1:6]

> cor(states)
            Population     Income Illiteracy    Life Exp     Murder     HS Grad
Population  1.00000000  0.2082276  0.1076224 -0.06805195  0.3436428 -0.09848975
Income      0.20822756  1.0000000 -0.4370752  0.34025534 -0.2300776  0.61993232
Illiteracy  0.10762237 -0.4370752  1.0000000 -0.58847793  0.7029752 -0.65718861
Life Exp   -0.06805195  0.3402553 -0.5884779  1.00000000 -0.7808458  0.58221620
Murder      0.34364275 -0.2300776  0.7029752 -0.78084575  1.0000000 -0.48797102
HS Grad    -0.09848975  0.6199323 -0.6571886  0.58221620 -0.4879710  1.00000000

可以看到,收入和高中畢業率之間存在很強的正相關(約0.620),文盲率和謀殺率之間存在很強的正相關(約0.703),文盲率和高中畢業率之間存在很強的負相關(約-0.657),預期壽命和謀殺率之間存在很強的負相關(約-0.781)等。

2,Pearson相關系數

Pearson線性相關系數一般用於分析連個連續性變量之間的線性相關的程度,計算公式是:

Pearson線性相關系數要求連續變量的取值服從正太分布,相關系數r的取值范圍是: -1 <= r <= 1,相關系數有如下特征:

  • r>0 表示正相關,r<0表示負相關;
  • r=0 表示不存在線性關系
  • r=1 或 r=-1 表示存在完全的線性關系

0 < | r | <1表示變量之間存在不同程度的線性相關,根據約定的規則:

  • | r | <=0.3 :為弱線性相關或不存在線性相關;
  • 0.3 < | r | <=0.5 :低度線性相關,認為存在線性相關,但是相關性不明顯
  • 0.5 < | r | <=0.8 :顯著線性相關,認為存在強線性相關,存在明顯的相關性
  • | r | >0.8 :高度相關,認為存在極強的線性相關

3,Spearman秩相關系數

對於分類或等級變量之間的關聯性,可以采用Spearman秩相關系數(也稱作等級相關系數)來描述。“秩”是一種順序或者排序,秩相關系數是根據原始數據的排序位置進行求解,計算公式如下,d是秩次差的平方,n是等級個數:

 

秩次是指數據排序之后的序號,對於有序的分類序列,1、3、5、6、8,數值1的秩次是1,數字5的秩次是3。對於同一個變量,相同的取值必須具有相同的秩次,例如:

例如,按照從大到小的順序對X和Y進行排序:

Spearman秩相關系數其實是利用兩變量的秩次大小作線性相關分析,下表用於計算變量X和Y的秩相關系數 ρ = 1 - 6*(1+1+1+9) / (6*35) =0.657

從Spearman秩相關系數的計算過程中,可以看到,不管X和Y這兩個變量的值差距有多大,只需要算一下它們每個值所處的排列位置的差值,就可以求出秩相關性系數。

4,Kendall等級相關系數

Kendall等級(Rank)相關系數,是一種秩相關系數,kendall秩相關系數用於:有n個統計對象,每個對象有兩個屬性,檢查這兩個屬性的變化是否一致。

舉個例子,假設老師對評委的評價等級:3表示優、2表示中、1表示差,使用評分的Kendall相關系數,查看2位評委對6位選手的評價標准是否一致:

X <- c(3,1,2,2,1,3)
Y <- c(1,2,3,2,1,1)
cor(X,Y,method="kendall")
[1] -0.2611165

再舉個例子,有一組8人的身高和體重,先按照身高排序,再按照體重排序,我們得到兩組數據:

使用Kendall等級相關系數這兩個排名(按身高排名和按體重排名)之間的相關性。

5,偏相關

偏相關是指在控制一個或多個定量變量(稱作條件變量)時,另外兩個定量變量之間的相關關系。可以使用ggm包中的pcor()函數計算偏相關系數。

pcor(u, S)

參數注釋:

  • u:位置向量,前兩個整數表示要計算偏相關系數的變量下標,其余的整數為條件變量的下標。
  • S:是數據集的協方差矩陣,即cov()函數計算的結果

例如:在控制了收入、文盲率和高中畢業率的條件下,計算的人口和謀殺率之間的偏相關系數為0.346

> library(igraph)
> library(ggm)
> colnames(states)
[1] "Population" "Income"     "Illiteracy" "Life Exp"   "Murder"     "HS Grad"  
> pcor(c(1,5,2,3,6),cov(states))
[1] 0.3462724

三,相關性的顯著性檢驗

在計算好相關系數之后,需要對相關性進行顯著性檢驗,常用的原假設是變量間不相關(即總體的相關系數為0),可以使用cor.test()函數對單個的Pearson、Spearman和Kendall相關系數進行顯著性檢驗,以驗證原假設是否成立。如果p值很小,說明變量之間存在相關性,相關性的大小由相關系數確定。

顯著性檢驗返回的結果中,p值(p value)就是當原假設為真時所得到的樣本觀察結果出現的概率。如果p值很小,說明原假設情況的發生的概率很小,而如果出現了,根據小概率原理,我們就有理由拒絕原假設,p值越小,我們拒絕原假設的理由越充分。

小概率原理是指:在統計學中,通常把在現實世界中發生幾率小於5%的事件稱之為“不可能事件”,通常把顯著性水平定義為0.05,或0.025。當p值小於顯著性水平時,把原假設視為不可能事件,因為拒絕原假設。

1,cor.test()檢驗

cor.test()每次只能檢驗一種相關關系,原假設是變量間不相關,即總體的相關系數是0。

cor.test(x, y,
         alternative = c("two.sided", "less", "greater"),
         method = c("pearson", "kendall", "spearman"),
         exact = NULL, conf.level = 0.95, continuity = FALSE, ...)

參數注釋:

  • alternative:用於指定進行雙側檢驗還是單側檢驗,有效值是 "two.sided", "greater" 和 "less",對於單側檢驗,當總體的相關系數小於0時,使用alternative="less";當總體的相關系數大於0時,使用alternative="greater";默認情況下,alternative="two.side",表示總體相關系數不等於0。
  • method:指定計算的相關類型,
  • exact:邏輯值,是否計算出精確的p值
  • conf.level:檢驗的置信水平

例如,下面的代碼用於檢驗預期壽命和謀殺率的Pearson相關系數為0的原假設,

> cor.test(states[,3],states[,5])

    Pearson's product-moment correlation

data:  states[, 3] and states[, 5]
t = 6.8479, df = 48, p-value = 1.258e-08
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.5279280 0.8207295
sample estimates:
      cor 
0.7029752 

檢驗的結果是:p值(p-value=1.258e-08),樣本估計的相關系數cor 是 0.703,這說明:

假設總體的相關度為0,則預計在1千萬次中只會有少於1次的機會見到0.703的樣本相關度,由於這種情況幾乎不可能發生,所以拒絕原假設,即預期壽命和謀殺率之間的總體相關度不為0。

2,corr.test()檢驗

psych包中的corr.test()函數,可以依次為Pearson、Spearman或Kendall計算相關矩陣和顯著性水平。

corr.test(x, y = NULL, use = "pairwise",method="pearson",adjust="holm", alpha=.05,ci=TRUE)

參數注釋:

  • use:指定缺失數據的處理方式,默認值是pairwise(成對刪除);complete(行刪除)
  • method:計算相關的方法,Pearson(默認值)、Spearman或Kendall

3,偏相關的顯著性檢驗

在多元正態性的假設下,psych包中的pcor.test()函數用於檢驗在控制一個或多個條件變量時,兩個變量之間的獨立性。

pcor.test(r, q, n)

參數注釋:

  • r:是由pcor()函數計算得到的偏相關系數
  • q:要控制的變量(以位置向量表示)
  • n:樣本大小

四,相關圖

利用corrgram包中的corrgram()函數,使用圖形來顯示相關系數矩陣,

corrgram(x, order = FALSE,lower.panel = panel, upper.panel = panel, text.panel = textPanel, main='title'
  col.regions = colorRampPalette(c("red", "salmon","white", "royalblue", "navy")), cor.method = "pearson",...)

常用的參數注釋:

  • x:數據集
  • order:變量是否被排序
  • lower.panel / upeer.panel:對角線下/上的面板
  • text.panel=panel.txt:對角線顯示為文本
  • main:主標題
  • col.regions:顏色,使用該參數控制函數中使用的顏色。
  • cor.method:做相關分析的函數名稱,默認值是person,其他可用的值是:spearman, kendall

 例如,以mtcars數據框中的變量相關性為例,它含有11個變量,對每個變量都測量了32輛汽車,使用corrgram()函數獲得相關系數:

> library(corrgram)
> corrgram(mtcars,order = TRUE, lower.panel = panel.ellipse,upper.panel = panel.pie,text.panel = panel.txt,main='Corrgram of mtcars intercorrelations')

對於相關圖矩陣,對角線上顯示的是變量的名稱,該變量實際上是垂直的直線和水平的直線的交點,這兩條直線上的各個點表示也是該變量。

  • 對於上三角:默認地,藍色表示正相關,紅色表示負相關,顏色的深淺表示相關的程度。餅圖的填充的大小表示了相關性的程度,正相關從順時針填充,負相關從逆時針填充,填充的越多,表示相關性越大;
  • 對於下三角:包含平滑擬合曲線和置信橢圓,設置lower.panel=NULL可以隱藏掉下三角。

從相關圖中可以看出,disp和cyl的正相關性最大,mpg和wt的負相關性最大。

對於面板的選擇,非對角線的面板選項有:

  • panel.pie:用餅圖的填充比例來表示相關性的大小
  • panel.shade:用陰影的深度來表示相關性的大小
  • panel.ellipse:畫一個置信橢圓和平滑曲線
  • panel.conf:畫出相關性數值和置信區間

主對角線:

  • panel.txt:輸出變量名
  • panel.ednsity:輸出核密度曲線和變量名

 

參考文檔:

相似度計算之斯皮爾曼等級相關系數

【r<-高級|統計】三大相關性系數

統計學之三大相關性系數(pearson、spearman、kendall)

如何通俗易懂地解釋「協方差」與「相關系數」的概念?


免責聲明!

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



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