phyloseq: Explore microbiome pro

2020-04-07  本文已影响0人  超人快飞

在Phyloseq的Tutorials,学习MergeData


phyloseq支持包括对两个完全不同类别的数据对象进行合并


Examples

merge_samples


merge_samples()如果你想知道如果你从一个特定的解释变量中移除复制之间或样本之间的个体效应会对分析产生什么影响,那么它会非常有用.使用merge_samples函数,可以对合并后的样本的丰度值进行求和.
让我们首先删除未观察到的OTUs(所有样本的总和为0),并添加一个与人类相关的变量,以便稍后在图中使用该变量组织数据.

library(phyloseq);packagesVersion("phyloseq")

加载数据,删除空样本,向数据集添加一个新的sample_data变量

data(GlobalPatterns)
GP = GlobalPatterns
#Prune unwanted OTUs / taxa from a phylogenetic object.也包括`pune_samples()`和`pune_species()`
G = prune_taxa(taxa_sums(GlobalPatterns) > 0, GlobalPatterns)
humantypes = c("Feces", "Mock", "Skin", "Tongue")
#`get_variable()`Get the values for a particular variable in sample_data
sample_data(GP)$human <- get_variable(GP, "SampleType") %in% humantypes

现在进行合并

mergedGP = merge_samples(GP, "SampleType")
SD = merge_samples(sample_data(GP), "SampleType")
print(SD[, "SampleType"])

正如前面的例子,并对合并样本的OTU丰度进行了求和。让我们自己来研究一下,看看最常见前10个物种的丰度

# `names()`获取或设置对象的名称的函数
OTUnames10=names(sort(taxa_sums(GP),TRUE)[1:10])
GP10  = prune_taxa(OTUnames10,  GP)
# `subset()`返回满足条件的向量、矩阵或数据帧的子集。
ocean_samples = sample_names(subset(sample_data(GP), SampleType=="Ocean"))
print(ocean_samples)
rowSums(otu_table(GP10)[, ocean_samples])

让\们以图形的方式来看看两者之间的合并richness estimate summary plots,在合并之前没有执行任何预处理,绘制多样性

plot_richness(GP, "human", "SampleType", title="unmerged")

合并会对采样变量做一些奇怪的事情,在绘制之前,让我们将这些变量重新添加到sample_data

sample_data(mergedGP)$SampleType = sample_names(mergedGP)
sample_data(mergedGP)$human = sample_names(mergedGP) %in% humantypes
plot_richness(mergedGP, "human", "SampleType", title="merged")

merge_taxa


微生物调查数据集中的“噪声”来源之一是对OTU的精细定义,它模糊了一个模式,如果我们考虑更高的分类等级,这个模式可能是显而易见的,解决这个问题的最佳方法是使用聚集函数tip_glom或者是tax_glom基于系统发育或分类学的阈值而合并相似的otu,但是,要使任何一个功能正常工作,它必须能够合并两个或多个被认为是“等效”的otu.
下面是一个使用merge_taxa()的示例,它使用一个树图来显示合并之前和之后的内容,还展示了合并如何影响OTU表,以及所有带有OTU索引的数据组件。

load("example-data.RData")
plot_tree(closedps, color="Treatment", size="abundance", sizebase=2, label.tips="taxa_names")

利用merge_taxa来合并前8个OTUs为一个OTU.通过选择2作为可选的第三个参数merge_taxa,我们将这8个OTU的计数合并到第二个OTU的索引中

x1 = merge_taxa(closedps, taxa_names(closedps)[3:27], 2)
plot_tree(x1, color="Treatment", size="abundance", sizebase=2, label.tips="taxa_names")

merge_phyloseq

正如前面提到的,merge_phyloseq是一个方便工具来帮助将数据转换成正确的格式.下面是一个示例,我们从示例数据集中提取组件,下面是一个示例,我们从示例数据集中提取组件,然后使用merge_phyloseq将它们构建回原始形式
我们将 “Global Patterns” 数据集转换为组成数据

# 对象中检索系统发生树`phy_tree`
tree = phy_tree(GlobalPatterns)
# 构建或访问Taxonomy表
tax  = tax_table(GlobalPatterns)
#构建或者访问OTU表
otu<-otu_table(GlobalPatterns)
#构建或访问sample_data
sam<-sample_data(GlobalPatterns)
#构建OTU和分类单元的合并对象
otutax = phyloseq(otu, tax)

现在让我们使用merge_phyloseq来构建原始的GlobalPatterns对象,并进行比较以确保它们是相同的,请注意,merge_phyloseq的参数是多组件(otutax)和单个组件对象的混合

GP2 = merge_phyloseq(otutax, sam, tree)
identical(GP2, GlobalPatterns)
#TRUE

More complicated merges

merge_phyloseq函数也可以用于多个多组件对象。

otusamtree = phyloseq(otu, sam, tree)
GP3 = merge_phyloseq(otusamtree, otutax)
GP3
identical(GP3,GlobalPatterns)
#FALSE

所以归并看起来是可行的。新的对象GP3看起来与GlobalPatterns相似,但并不相同。为什么?merge_phyloseq的假设是,您希望合并单独的丰富数据来源,因此两个phyloseq对象中具有相同OTU索引的OTU表的任何部分都被合并在一起,就像前面的merge_taxa一样.
此示例场景具有说明性,但希望在实践中比较少见。不过,为了以防万一,一个简单的修复方法是提取otutax的唯一组件并将其提供给merge_phyloseq,而不是整个phyloseq对象。这相当于对前面的merge_phyloseq命令的一个小的直观修改:

GP4 = merge_phyloseq(otusamtree, tax_table(otutax))
GP4
identical(GP4,GlobalPatterns)
#TRUE
上一篇下一篇

猜你喜欢

热点阅读