R语言之相关系数计算篇

R语言之相关系数计算篇

简介:

在环境微生物类的文章中,经常出现计算物种与基因、基因与基因、基因与代谢物之间的相关系数的内容,在这个计算的基础之上再进行相关的可视化。例如相关性热图、网络图等等。文献中常出现的相关系数有Spearman、Pearson两种。

案例:

之间课题组一个师兄想代谢组学中代谢物与基因之间的相关性,共选择了95种代谢物,3313个相关基因,三个实验组一个对照组(每组三个生物学重复,共计12个样本)如下:

在这里插入图片描述
在这里插入图片描述

想分析每种代谢物和基因之间的关系,需要求解P值和R值,如下:
在这里插入图片描述

求解思路:

方法一:cor() 函数与cor.test()函数

这两种函数是R自带的函数,使用简单,操作过程如下:

cor()函数

代码:

metabolite <- read.csv('metabolite.csv',row.names = 1)
gene <- read.csv('gene.csv',row.names = 1) #导入数据
R_pearson <- cor(metabolite,gene,method = 'pearson') #求解相关系数

结果:

在这里插入图片描述

成功求解相关系数,but,该函数不能求解P值,失败*1。

cor.test()函数

代码:

metabolite <- read.csv('metabolite.csv',row.names = 1)
gene <- read.csv('gene.csv',row.names = 1)
R_pearson <- cor.test(metabolite,gene,method = 'pearson')

结果:

> R_pearson <- cor.test(metabolite,gene,method = 'pearson')
Error in cor.test.default(metabolite, gene, method = "pearson") : 
  'x'和'y'的长度必需相同

cor.test()函数只能进行同维度的数据计算,但是相较于cor()函数,cor.test()函数可以计算出P值,如下:

代码:

metabolite <- read.csv('metabolite.csv',row.names = 1)
gene <- read.csv('gene.csv',row.names = 1)
R_pearson <- cor.test(metabolite$X2.Hydroxypyridine,gene$Cluster.1184.0,method = 'pearson') #只选择其中一列数据进行计算

结果:

在这里插入图片描述

But!我们需要计算的是不同维度的数据,失败*2

方法二:Hmisc包中的rcorr()函数以及Psych包中的corr.test()函数

Hmisc包中的rcorr()函数

代码:

metabolite <- read.csv('metabolite.csv',row.names = 1)
gene <- read.csv('gene.csv',row.names = 1)
library(Hmisc) #载入包(前提是你安装了这个包)
rcorr_test_pearson <- rcorr(as.matrix(gene),as.matrix(metabolite),type = 'pearson')#这里的编写规则和前两个不一样,数据需要转化为矩阵as.matrix()

结果:

该计算过程需要耗费一丢丢时间,当然不超过30s的样子

在这里插入图片描述

该结果包含了相关系数和P值,算是成功求解,但是一看结果:

R_pearson$r

在这里插入图片描述
该结果中包含了gene、metabolite本身的相关系数以及P值,原因是啥俺也不知道/(ㄒoㄒ)/~~,失败*3

Psych包中的corr.test()函数

代码:

metabolite <- read.csv('metabolite.csv',row.names = 1)
gene <- read.csv('gene.csv',row.names = 1)
library(psych) #载入包(前提是你安装了这个包)
R_pearson <- corr.test(gene,metabolite,method = 'pearson')

结果:

结果就是出不来结果,┭┮﹏┭┮。好像是因为数量较大和corr.test()函数还包括了P值矫正的过程,这里需要指明的是虽然我没有写出矫正的方法但是corr.test()函数会有一个默认的矫正过程,所以大家在使用corr.test()的时候一定要注意这里有默认矫正的过程!!!!

在这里插入图片描述

代码一直停不下来,最后我按了ESC中止了代码。

后续:

只运行部分数据进行求解:

metabolite <- read.csv('metabolite.csv',row.names = 1)
gene <- read.csv('gene.csv',row.names = 1)
library(psych) #载入包(前提是你安装了这个包)
R_pearson <- corr.test(gene[1:3],metabolite[1:6],method = 'pearson')

后续的结果:

在这里插入图片描述

至少说明在数据量比较小的时候,corr.test()函数有着比较好的优势。失败*3

结果:

最后还是决定使用Hmisc包中的rcorr()函数进行求解:

代码:

metabolite <- read.csv('metabolite.csv',row.names = 1)
gene <- read.csv('gene.csv',row.names = 1)
library(Hmisc) #载入包(前提是你安装了这个包)
rcorr_test_pearson <- rcorr(as.matrix(gene),as.matrix(metabolite),type = 'pearson')#这里的编写规则和前两个不一样,数据需要转化为矩阵as.matrix()
rcorr_test_pearson_R <- rcorr_test_pearson$r[1:3313,3314:3408]
rcorr_test_pearson_P <- rcorr_test_pearson$P[1:3313,3314:3408]#后来琢磨了一下,我只选择结果里面我需要的数据即可
write.csv(rcorr_test_pearson_R,'R.csv')#导出数据
write.csv(rcorr_test_pearson_P,'P.csv')

结果:
在这里插入图片描述
在这里插入图片描述
芜湖!下班!么么哒!

  • 27
    点赞
  • 126
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 14
    评论
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨杨杨杨杨齐家

孩子想喝冰红茶/(ㄒoㄒ)/~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值