美文网首页
2. 数据总览

2. 数据总览

作者: 吴十三和小可爱的札记 | 来源:发表于2021-01-30 19:13 被阅读0次

简介

通过Rank Abundance曲线、稀释曲线、物种累积箱形图(species accumulation boxplot)和物种堆叠柱状图可视化展示,从样本丰富度、测序深度和样本个数三个方面全面评估总体实验设计、采样个数、测序情况,对扩增子数据获得初步认识。

Rank Abundance曲线

Rank Abundance曲线是将样品中的OTUs/ASVs的相对丰度(或绝对丰度)由大到小排序,并以排序编号为横坐标,OTUs中的相对丰度为纵坐标绘制得到,它可直观的反映样本中物种的丰富度和均匀度。在水平方向上,物种的丰富度由曲线的宽度来反映,物种的丰富度越高,曲线在横轴上的跨度越大;在垂直方向上,曲线的平滑程度,反映了样品中物种的均匀程度,曲线越平缓,物种分布越均匀。

简单来说,在rank abundance 曲线中每一条垂直的线代表一个OTU/ASV,可以理解为一种菌,每一条垂直线右侧的水平线(即楼梯的平台)表示该菌种含量。另外,曲线的平缓程度反映了样品中物种的均度,曲线越平缓,物种分布越均匀,曲线越陡,物种分布越不均匀。

具体做法,首先每个样本中的OTU按丰度大小降序排列。然后以横坐标为各OTU的排列顺序,纵坐标为各OTU的丰度(最好使用相对丰度,并做对数转化)绘制图形。

数据样式:常见OTU丰度表,列为样本,行为OTU,交叉区域为每种OTU在各样本中的丰度。

# Input OTUs 
otu_table  <-  read.delim("16S-amplicon-analysis/otutab.txt", header=T, sep="\t", row.names=1, stringsAsFactors = FALSE)

# relative abundance
relative_otu <- apply(otu_table, 2, function(x){x/sum(x)})
# check
apply(relative_otu, 2, sum)
## KO1 KO2 KO3 KO4 KO5 KO6 OE1 OE2 OE3 OE4 OE5 OE6 WT1 WT2 WT3 WT4 WT5 WT6 
##   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1
# rank-abundance curves
library(BiodiversityR)
Transp_relat_otu <- t(relative_otu)
Transp_relat_otu[c(1:3),c(1:3)]
##         ASV_10      ASV_100     ASV_1000
## KO1 0.01122980 0.0024346450 0.0001217322
## KO2 0.01014012 0.0005014347 0.0001671449
## KO3 0.01789865 0.0009814557 0.0001291389

rank_dat <- data.frame()
for (i in rownames(Transp_relat_otu)) {
    rank_dat_i <- data.frame(rankabundance(subset(Transp_relat_otu, rownames(Transp_relat_otu) == i), digits = 6))[1:2]
    rank_dat_i$sample <- i
    rank_dat <- rbind(rank_dat, rank_dat_i)
}

rank_dat <- subset(rank_dat, rank_dat$abundance != 0)

# visualization
library(ggplot2)
ggplot(rank_dat, aes(rank, log(abundance, 10), color = sample)) + geom_line()

稀释曲线

稀释曲线(Rarefaction curves)是从样品中随机抽取一定测序量的数据(序列条数),统计它们所对应的OTUs/ASVs种类(代表物种),并以抽取的测序数据量与对应的OTUs/ASVs种类来构建曲线。一般情况下,横坐标代表随机抽取的序列数量,纵坐标代表观测到的OTUs/ASVs种类数量,样本曲线的延伸终点的横坐标位置为对应样本的测序数量。

稀释曲线可直接反映测序数据量的合理性,并间接反映样品中物种的丰富程度和样本特性,当曲线趋向平坦时,说明测序数据量渐进合理,更多的数据量只会产生少量新OTUs/ASVs(物种);反之表明不饱和,增加数据量可以发现更多OTUs/ASVs。

数据样式:常见OTU丰度表,列为样本,行为OTU,交叉区域为每种OTU在各样本中的丰度,可以将rarecurve的数据提取出来美化

 # input OTUs 
otu_table  <-  read.delim("16S-amplicon-analysis/otutab.txt", header=T, sep="\t", row.names=1, stringsAsFactors = FALSE)

Transp_otu <- t(otu_table )

# step size
step <-  1000
rare_otu <- rarecurve(Transp_otu, step = step, label = FALSE)
names(rare_otu) <- rownames(Transp_otu)

protox <- mapply(FUN = function(x, y) {
  mydf <- as.data.frame(x)
  colnames(mydf) <- "value"
  mydf$sample_name <- y
  mydf$subsample <- attr(x, "Subsample")
  mydf
}, x = rare_otu, y = as.list(rownames(Transp_otu)), SIMPLIFY = FALSE)

xy <- do.call(rbind, protox)
rownames(xy) <- NULL  # pretty

ggplot(xy, aes(x = subsample, y = value, color = sample_name)) +
  scale_color_discrete(guide = FALSE) +
  geom_line() + geom_point(size = 0.5) + 
  xlab("Number of sequences") + 
  ylab("Number of OTUs") +
  theme(legend.position = c(0.97,0.25),
        panel.background = element_blank(),
        panel.border = element_rect(fill = NA ),
        legend.text = element_text(size=12),
        axis.title = element_text(family="sans", size=13))

物种累积箱形图

物种累积箱形图(species accumulation boxplot)是描述物种多样性随着样本个数的增加而增加的分析,是调查和预测样本中物种丰度的有效工具,被广泛用于判断样本量是否充分以及估计物种丰富度。

当样本个数较少时,物种随着抽样个数的增加呈现急剧上升的趋势,可以推断此前发现的物种并不全面,随着样本量增加,还能继续发现新的物种,此时并不能表征整个群落结构;随着样本个数增加,曲线上升趋势趋于平缓,表明采样量足够。

数据样式:常见OTU丰度表,列为样本,行为OTU,交叉区域为每种OTU在各样本中的丰度。

# input OTUs 
otu_table  <-  read.delim("16S-amplicon-analysis/otutab.txt", header=T, sep="\t", row.names=1, stringsAsFactors = FALSE)

Transp_otu <- t(otu_table )
species_accum <- specaccum(Transp_otu, method="random")

# extract data
data <- as.data.frame(species_accum$perm)
data$sites <- as.character(seq(1: nrow(data)))

plot_data  <- tidyr::pivot_longer(data = data, 
                                  cols =  -sites, 
                                  names_to = "V", 
                                  values_to = "richness")
# Reorder factor levels
plot_data$sites <- forcats::fct_inorder(plot_data$sites)

ggplot(data = plot_data) + 
  geom_boxplot(mapping = aes(x = sites, y = richness)) +
  ylab("OTUs detected") + 
  xlab("Number of samples sequenced") + 
  theme_bw()

相关文章

网友评论

      本文标题:2. 数据总览

      本文链接:https://www.haomeiwen.com/subject/nbektltx.html