接触组学数据这么久了,大家一定少不了分析各种相关性,譬如大到几个转录组样本的整体相关性分析,小到挑选了一些候选基因看它们在不同样本中的表达模式相关性。今天这篇文章给大家讲讲如何利用R语言进行相关性分析。 组学数据分析主要有两类,一类是基于被研究对象的位置和序列。一类是基于算法。前者比如说lncRNA与mRNA的antisense和cis的作用关系,miRNA和piRNA的靶向基因预测等。后者就比如说机器学习、降维、聚类等算法。 其中机器学习是通过程序不断迭代来寻找合适的模型。 降维就是将高维数据通过计算,在尽量保证数据原始分布特征的情况下,将数据映射在低维的刻度。 聚类方法很多,常用的是计算欧式距离后,用K-mean聚类算法进行聚类。 K-mean聚类算法就是先随机挑选k个中心,按照距离远近分别聚在一起,然后在聚类的簇里重新选择平均值作为中心点,重新聚类,再不断迭代设置的次数,最后的结果就是聚类结果。 当然如果画树,还涉及分类树的算法。简而言之,麻烦,不详细说了。 相关性分析,这就是本文要详细说的了。 相关性分析是一种统计技术。
相关性:可以显示两个变量是否相关以及如何相关。例如,身高和体重是相关的; 较高的人往往有更大的体重。那么这种关系就是正相关。那么再例如汽车排量与每升汽油的里程,是负相关的,汽车排量越大,每升汽油跑的里程就越短。 尽管这种相关性非常明显,但您的数据可能包含未预料到的相关性。您可能还会产生怀疑,怀疑两个变量之间是否存在相关性,或者不知道两者之间的依赖和联系程度。这个时候,就需要一种可以量化的指数分析。相关分析可以帮助我们更好地理解数据。 但是,使用相关性分析的时候,我们需要记住的一个关键事项是:永远不要假设相关性就一定意味着A变量的变化会导致B变量的变化。 多年来个人电脑和运动鞋的销售都急剧增长,并且它们之间存在高度相关性,但你不能认为购买电脑会导致人们购买运动鞋(反之亦然)。但可能还是可能存在相同的调节因素,比如社会生产力的提高和经济状况的改善。 1 正负相关性 当两个变量之间存在非常强烈的相互依赖关系的时候,我们就可以说两个变量之间的存在高度相关性。 若两组的值一起增大,我们称之为正相关,若一组的值增大时,另一组的值减小,我们称之为负相关。 本次我们用R来进行计算和绘图,所用的数据是R自带的mtcars数据。 > 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)呈现正相关性,而与每加仑汽油行驶的里程是负相关性。 那么我们就可以用R的cor函数来计算两个变量之间的相关性。
2 相关分析的局限 刚刚我们知道了,相关性分为正相关和负相关。但这里,我们之说的是线性相关。因为非线性相关的话,更适合建模拟合多元回归。这个还是很牛的领域,只是我还没涉及,上次去青岛做生信培训,就有老师想构建四因素的多元回归分析。这个领域我完全没有了解。就不说了。 但是用R中cor函数来计算相关性也是有局限的。首先第一点,不能计算非线性模型。 例如我们先看一组简化的数据,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时候的冰激凌销售与温度之间的关系。
这个时候,我们可以看到当温度低于35度的时候,冰激凌销量是和温度正相关的。但是随着天气炎热,大家都不愿出远门,这时候冰激凌的销售就下来了。温度在30度到40度之间的时候,温度和冰淇淋销量之间的相关性是怎么样呢。
其实我们就可以发现问题,这里的温度和冰激凌销量是有很强的相关性的,我们甚至可以用脑子拟合出一个抛物曲线。虽然这个相关性不是线性的。但是如果我们继续用R中cor函数来计算,用线性相关性分析显然是不正确的,数值才-0.39。 另外,相关性强,也不等于因果关系。例如我们可以看到太阳眼镜的销量和冰激凌的销量之间的关系。 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() 可以看到,就算太阳镜和冰淇淋的销量相关性是0.99,也不能体现两者是因果关系。就是说,相关不代表一个现象导致另一个(相关可能有其他的原因,比如太阳的直射时间)。 今天的内容就到这里啦~
|
|