相關分析是數據分析的一個基本方法,能夠用於發現不一樣變量之間的關聯性,關聯是指數據之間變化的類似性,這能夠經過相關係數來描述。發現相關性能夠幫助你預測將來,而發現因果關係意味着你能夠改變世界。 html
若是隨機變量X和Y是相互獨立的,那麼協方差less
Cov(X,Y) = E{ [X-E(X)] [Y-E(Y)] } = 0,ide
這意味着當協方差Cov(X,Y) 不等於 0 時,X和Y不相互獨立,而是存在必定的關係,此時,稱做X和Y相關。在統計學上,使用協方差和相關係數來描述隨機變量X和Y的相關性:函數
協方差:若是兩個變量的變化趨勢一致,也就是說若是其中一個大於自身的指望值,另一個也大於自身的指望值,那麼兩個變量之間的協方差就是正值。 若是兩個變量的變化趨勢相反,即其中一個大於自身的指望值,另一個卻小於自身的指望值,那麼兩個變量之間的協方差就是負值。從數值來看,協方差的數值越大,兩個變量同向程度也就越大。ui
,µ是變量的指望。spa
相關係數:相關係數消除了兩個變量變化幅度的影響,只是單純反應兩個變量每單位變化時的類似程度。code
,δ是變量的標準差。htm
相關係數用於描述定量變量之間的關係,相關係數的符號(+、-)代表關係的方向(正相關、負相關),其值的大小表示關係的強弱程度(徹底不相關時爲0,徹底相關時爲1)。對象
例如,下面兩種狀況中,很容易看出X和Y都是同向變化的,而這個「同向變化」有個很是顯著特徵:X、Y同向變化的過程,具備極高的類似度。blog
1,觀察協方差,狀況一的協方差是:
狀況二的協方差是:
協方差的數值相差一萬倍,只能從兩個協方差都是正數判斷出在這兩種狀況下X、Y都是同向變化,可是一點也看不出兩種狀況下X、Y的變化都具備類似性這一特色。
2,觀察相關係數,狀況一的相關係數是:
狀況二的相關係數是:
雖然兩種狀況的協方差相差1萬倍,可是,它們的相關係數是相同的,這說明,X的變化與Y的變化具備很高的類似度。
R能夠計算多種相關係數,包括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"))
參數註釋:
例如,使用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,相關係數有以下特徵:
0 < | r | <1表示變量之間存在不一樣程度的線性相關,根據約定的規則:
3,Spearman秩相關係數
對於分類或等級變量之間的關聯性,能夠採用Spearman秩相關係數(也稱做等級相關係數)來描述。「秩」是一種順序或者排序,秩相關係數是根據原始數據的排序位置進行求解,計算公式以下,d是秩次差的平方,n是等級個數:
秩次是指數據排序以後的序號,對於有序的分類序列,一、三、五、六、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)
參數註釋:
例如:在控制了收入、文盲率和高中畢業率的條件下,計算的人口和謀殺率之間的偏相關係數爲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, ...)
參數註釋:
例如,下面的代碼用於檢驗預期壽命和謀殺率的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)
參數註釋:
3,偏相關的顯著性檢驗
在多元正態性的假設下,psych包中的pcor.test()函數用於檢驗在控制一個或多個條件變量時,兩個變量之間的獨立性。
pcor.test(r, 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",...)
經常使用的參數註釋:
例如,以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')
對於相關圖矩陣,對角線上顯示的是變量的名稱,該變量其實是垂直的直線和水平的直線的交點,這兩條直線上的各個點表示也是該變量。
從相關圖中能夠看出,disp和cyl的正相關性最大,mpg和wt的負相關性最大。
對於面板的選擇,非對角線的面板選項有:
主對角線:
參考文檔: