Loading...
墨滴

fafu生信小蘑菇

2021/07/02  阅读:71  主题:自定义主题1

R语言实现OTU表的抽平分析

R语言实现OTU表的抽平分析

好久没有更新文章了,抱歉,今天我们先来讲一下抽平。相信大家平常在16s RNA 测序后,一般都会对测序数据划分后生成的OTU表进行抽平,保证保证样本测序序列的均一性。那么今天就来讲一下如何使用R语言来实现对OTU表的抽平分析。

1 抽平是什么?

抽平:指按照一定数量或样本序列最低数量,将所有样本的序列随机抽取至统一数据量。

简单地说,就是在不同的样本测序数据有差距的时候,保证样本测序序列的均一性

打个比方说:有5个样本:A、B、C、D、E,样品A测序数据量为3万条序列,样本B为4万条,样本C为5万条,样本C为6万条,样本E为7万条,这个时候我们一般会选择抽平处理。

但是注意抽平后样品B就会浪费1万条,样品C就会浪费2万条,样品D就会浪费3万条,样品E就会浪费4万条 ,所以抽平不是唯一的方法,也可以通过Deseq2方法去进行后续分析的,但是今天我们主要将抽平分析。

2 R语言实现抽平分析的方法

R语言实现抽平分析的方法,我所掌握的是两种,一种是使用vegan包,另一种是phyloseq包。

2.1 OTU表数据格式

这里我们提供一组数据,分别为16个样本的OTU数据,大家有需要可以去我的gitee获取该数据,可以给我留言。

图2.1 OTU表
图2.1 OTU表

2.2 vegan包实现抽平分析的方法

#首先我们需要加载vegan包
library(vegan) 
#加载工作目录,这里需要更换为你自己的
setwd("D:/R_wenji/06-微信公众号/21_07_02抽平分析")
#加载otu表
otu = read.table('otu.txt', header=T, sep="\t", quote = "", row.names=1, comment.char="",stringsAsFactors = FALSE
#求和查看每个样本的和
colSums(otu)
#使用该代码进行抽平
otu_Flattening = as.data.frame(t(rrarefy(t(otu), min(colSums(otu)))))
#查看抽平后的每个样本的和
colSums(otu_Flattening)
#将抽平后的otu表保存到该工作目录,准备后面的多样性分析
write.table (otu_Flattening, file ="otu_Flattening.csv",sep =",", quote =FALSE#结果导出

图2.2-1 抽平前每个样本的和
图2.2-1 抽平前每个样本的和
图2.2-2 抽平后每个样本的和
图2.2-2 抽平后每个样本的和
图2.2-3 抽平后的OTU表
图2.2-3 抽平后的OTU表

2.3 phyloseq包实现抽平分析的方法

#安装包
#如果你没有安装过phyloseq包,你可以使用下列代码进行安装该包
if(!requireNamespace("BiocManager")){
install.packages("BiocManager")
}
BiocManager::install("phyloseq")

#加载包1
library(phyloseq)
#设置一个随机种子便于重复
set.seed(123)

otu_1 = otu_table(otu, taxa_are_rows = T)
otu_2 = phyloseq(otu_1)

#注意,该方法会自动去除一些低丰度的otu
otu_Flattening1 = rarefy_even_depth(otu_2,replace = TRUE)
#8OTUs were removed because they are no longer present in any sample after random subsampling
#查看抽平前后的变化
sample_sums(otu_2)
sample_sums(otu_Flattening1)

#提取抽平后的otu表格 
otu_Flattening1 = as.data.frame(otu_Flattening1@.Data )

#将抽平后的otu表保存到该工作目录,准备后面的多样性分析
write.table (otu_Flattening1, file ="otu_Flattening1.csv",sep =",", quote =FALSE

图2.3-1 抽平前每个样本的和
图2.3-1 抽平前每个样本的和
图2.3-2 抽平后每个样本的和
图2.3-2 抽平后每个样本的和
图2.3-3 抽平后的OTU表
图2.3-3 抽平后的OTU表
#查看被过滤掉OTU在各样品中的数据
otu[setdiff(rownames(otu),rownames(otu_Flattening1)),]
图2.3-4 查看被过滤掉OTU在各样品中的数据
图2.3-4 查看被过滤掉OTU在各样品中的数据

我们可以看到使用phyloseq包来抽平分析会过滤掉一下低丰度的OTU,所以我们需要设置一个随机种子便于重复。可以看到被过滤掉了8个OTU。

这两个方法都可以抽平,要如何选择,还是看你,好了今天的内容就是这些,简单但是可以你需要。

好久没更新了,感谢你们的支持谢谢。

fafu生信小蘑菇

2021/07/02  阅读:71  主题:自定义主题1

作者介绍

fafu生信小蘑菇