R计算多个向量两两之间相关性
2020-12-11 本文已影响0人
生信交流平台
我们知道R里面计算两个数值向量之间的相关性用cor函数,而检验是否显著相关用cor.test。例如
a=1:10
#设置随机过程的种子,保证结果可重复性
set.seed(123)
#给b加入一个小的扰动,服从正态分布,均值是0,标准差是0.05
b=a+rnorm(10,0,0.05)
cor(a,b) #0.9998834
cor.test(a,b)
会得到如下结果,a和b是几乎完整正相关的,相关系数是0.9998834。一般相关系数是-1到1之间的一个数,-1表示完全负相关,1表示完全负相关。>0正相关,<0负相关,=0不相关。
![](https://img.haomeiwen.com/i24747866/6d4d6be380bc5181.jpg)
我们还可以简单的画图展示一下
plot(a,b)
#线性拟合,画出拟合的直线。
#lty控制线的风格,为虚线
#lwd控制线的宽度
abline(lm(b~a),col="red",lwd=2,lty=2)
![](https://img.haomeiwen.com/i24747866/26c4a7c02326f550.png)
那么如果你有多个数值向量需要计算相关性怎么办?
我们拿mtcars这套R自带的数据来举个例子,这套数据有32行,11列。
每一行为一种车型,每一列为一种特征。
![](https://img.haomeiwen.com/i24747866/0f96b02c07687c9e.png)
下面我们就来看看,如何计算这11种特征两两之间的相关性,这里给大家介绍四种方法
一、corrplot包
install.packages("corrplot")
library(corrplot)
#计算特征两两之间的相关系数
M <- cor(mtcars)
#计算特征两两之间的相关性检验的P值
Pval <- cor.mtest(mtcars)
#画图展示特征两两之间的相关系数
corrplot(M, method = "circle")
我们可以来看下特征两两之间的相关系数
![](https://img.haomeiwen.com/i24747866/a3dc9382f6847a40.png)
也可以看看特征两两之间的相关性检验的P值,
View(Pval$p)
![](https://img.haomeiwen.com/i24747866/4c601245c4c23603.png)
看看相关性图
![](https://img.haomeiwen.com/i24747866/b2e60125c0a61fdb.png)
二、corr包
#安装corrr包
install.packages("corrr")
library(corrr)
#计算特征两两之间的相关系数
correlate(mtcars)
![](https://img.haomeiwen.com/i24747866/2ad94a51563059c4.jpg)
这个包还有一个特点,就是可以指定某几个特征,然后计算跟剩下特征之间的相关性
#focus on mgp,计算所有特征跟mpg这个特征之间的相关性
focus(correlate(mtcars), mpg)
![](https://img.haomeiwen.com/i24747866/1b760ee9c37c2f68.jpg)
三、psych包
#安装psych包
install.packages("psych")
library(psych)
corr.test(mtcars)
得到特征两两之间的相关系数如下
![](https://img.haomeiwen.com/i24747866/36abae2e66e3fce9.jpg)
同时也能得到相关性的p值
![](https://img.haomeiwen.com/i24747866/b3fb1a5f6f103450.jpg)
四、Hmisc包
#安装Hmisc包
install.packages("Hmisc")
library(Hmisc)
rcorr(as.matrix(mtcars))
得到特征两两之间的相关系数如下
![](https://img.haomeiwen.com/i24747866/d40395d3b2e28ed0.jpg)
同时也能得到相关性的p值
![](https://img.haomeiwen.com/i24747866/b266fce964718d22.jpg)
条条大路通罗马
不管是白猫还是黑猫,抓住老鼠就是好猫
弱水三千只取一瓢
总之,方法很多,选择适合自己的方法达到目的就行。