接觸組學(xué)數(shù)據(jù)這么久了,大家一定少不了分析各種相關(guān)性,譬如大到幾個轉(zhuǎn)錄組樣本的整體相關(guān)性分析,小到挑選了一些候選基因看它們在不同樣本中的表達(dá)模式相關(guān)性。今天這篇文章給大家講講如何利用R語言進行相關(guān)性分析。 組學(xué)數(shù)據(jù)分析主要有兩類,一類是基于被研究對象的位置和序列。一類是基于算法。前者比如說lncRNA與mRNA的antisense和cis的作用關(guān)系,miRNA和piRNA的靶向基因預(yù)測等。后者就比如說機器學(xué)習(xí)、降維、聚類等算法。 其中機器學(xué)習(xí)是通過程序不斷迭代來尋找合適的模型。 降維就是將高維數(shù)據(jù)通過計算,在盡量保證數(shù)據(jù)原始分布特征的情況下,將數(shù)據(jù)映射在低維的刻度。 聚類方法很多,常用的是計算歐式距離后,用K-mean聚類算法進行聚類。 K-mean聚類算法就是先隨機挑選k個中心,按照距離遠(yuǎn)近分別聚在一起,然后在聚類的簇里重新選擇平均值作為中心點,重新聚類,再不斷迭代設(shè)置的次數(shù),最后的結(jié)果就是聚類結(jié)果。 當(dāng)然如果畫樹,還涉及分類樹的算法。簡而言之,麻煩,不詳細(xì)說了。 相關(guān)性分析,這就是本文要詳細(xì)說的了。 相關(guān)性分析是一種統(tǒng)計技術(shù)。
相關(guān)性:可以顯示兩個變量是否相關(guān)以及如何相關(guān)。例如,身高和體重是相關(guān)的; 較高的人往往有更大的體重。那么這種關(guān)系就是正相關(guān)。那么再例如汽車排量與每升汽油的里程,是負(fù)相關(guān)的,汽車排量越大,每升汽油跑的里程就越短。 盡管這種相關(guān)性非常明顯,但您的數(shù)據(jù)可能包含未預(yù)料到的相關(guān)性。您可能還會產(chǎn)生懷疑,懷疑兩個變量之間是否存在相關(guān)性,或者不知道兩者之間的依賴和聯(lián)系程度。這個時候,就需要一種可以量化的指數(shù)分析。相關(guān)分析可以幫助我們更好地理解數(shù)據(jù)。 但是,使用相關(guān)性分析的時候,我們需要記住的一個關(guān)鍵事項是:永遠(yuǎn)不要假設(shè)相關(guān)性就一定意味著A變量的變化會導(dǎo)致B變量的變化。 多年來個人電腦和運動鞋的銷售都急劇增長,并且它們之間存在高度相關(guān)性,但你不能認(rèn)為購買電腦會導(dǎo)致人們購買運動鞋(反之亦然)。但可能還是可能存在相同的調(diào)節(jié)因素,比如社會生產(chǎn)力的提高和經(jīng)濟狀況的改善。 1 正負(fù)相關(guān)性 當(dāng)兩個變量之間存在非常強烈的相互依賴關(guān)系的時候,我們就可以說兩個變量之間的存在高度相關(guān)性。 若兩組的值一起增大,我們稱之為正相關(guān),若一組的值增大時,另一組的值減小,我們稱之為負(fù)相關(guān)。 本次我們用R來進行計算和繪圖,所用的數(shù)據(jù)是R自帶的mtcars數(shù)據(jù)。 > mtcars > head(mtcars) mpg cyl disp hp drat wt qsec vs am gear carb Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1 行名我們知道是汽車的型號。那么列名呢?
從上述列名中,我們可以簡單得到排量(disp)與馬力(hp)呈現(xiàn)正相關(guān)性,而與每加侖汽油行駛的里程是負(fù)相關(guān)性。 那么我們就可以用R的cor函數(shù)來計算兩個變量之間的相關(guān)性。
2 相關(guān)分析的局限 剛剛我們知道了,相關(guān)性分為正相關(guān)和負(fù)相關(guān)。但這里,我們之說的是線性相關(guān)。因為非線性相關(guān)的話,更適合建模擬合多元回歸。這個還是很牛的領(lǐng)域,只是我還沒涉及,上次去青島做生信培訓(xùn),就有老師想構(gòu)建四因素的多元回歸分析。這個領(lǐng)域我完全沒有了解。就不說了。 但是用R中cor函數(shù)來計算相關(guān)性也是有局限的。首先第一點,不能計算非線性模型。 例如我們先看一組簡化的數(shù)據(jù),icecream是冰激凌的銷售額。sunglass是太陽鏡的銷售額,tem是溫度。 sunglass <- c(213,233,296,345,645,644,492,691,790,667,645,546,506,524,434,383,282,181,30,50,30) icecream <- c(215,236,300,350,651,651,500,700,800,678,657,559,520,539,450,400,300,200,50,30,50) tem <- seq(30,40,0.5) dat <- data.frame(sunglass, icecream, tem) 我們先看在溫度低于35時候的冰激凌銷售與溫度之間的關(guān)系。
這個時候,我們可以看到當(dāng)溫度低于35度的時候,冰激凌銷量是和溫度正相關(guān)的。但是隨著天氣炎熱,大家都不愿出遠(yuǎn)門,這時候冰激凌的銷售就下來了。溫度在30度到40度之間的時候,溫度和冰淇淋銷量之間的相關(guān)性是怎么樣呢。
其實我們就可以發(fā)現(xiàn)問題,這里的溫度和冰激凌銷量是有很強的相關(guān)性的,我們甚至可以用腦子擬合出一個拋物曲線。雖然這個相關(guān)性不是線性的。但是如果我們繼續(xù)用R中cor函數(shù)來計算,用線性相關(guān)性分析顯然是不正確的,數(shù)值才-0.39。 另外,相關(guān)性強,也不等于因果關(guān)系。例如我們可以看到太陽眼鏡的銷量和冰激凌的銷量之間的關(guān)系。 r4 <- cor(dat$icecream,dat$sunglass) p5 <- ggplot(data = dat, aes(x = icecream, y = sunglass)) + geom_point() + geom_smooth(method = 'lm',color = '#1a9641') + geom_text(aes(x = 700, y = 500,label = paste('R' ,'=',signif(r4,3),seq = '')),color ='#fdae61') + theme_bw() 可以看到,就算太陽鏡和冰淇淋的銷量相關(guān)性是0.99,也不能體現(xiàn)兩者是因果關(guān)系。就是說,相關(guān)不代表一個現(xiàn)象導(dǎo)致另一個(相關(guān)可能有其他的原因,比如太陽的直射時間)。 今天的內(nèi)容就到這里啦~
|
|