FASTQ数据下载
- EBI
- SRA
数据地址:
https://www.ebi.ac.uk/ena/data/view/PRJNA246490
研究对象为:位于美国佛蒙特州VT的cabot非常粉砂壤土和位于美国新罕布什尔州的斯凯里细砂壤土。
研究目的:看两个不同的微生物群落的分类特征
总样品:110个
Sample:SRS631664-SRS631753
Experiment:SRX585017-SRX585126
Run:SRR1370913-SRR1371022
将TEXT
文本,提取网址部分,在linux端,使用wget下载
wget -i download.txt
#SampleID BarcodeSequence LinkerPrimerSequence SampleType Description
SRR1370913 AGCTGACTAGTC GTGCCAGCMGCCGCGGTAA tumor SRR1370913
SRR1370914 AGCTGACTAGTG GTGCCAGCMGCCGCGGTAA tumor SRR1370914
SRR1370915 AGCTGACTAGTA GTGCCAGCMGCCGCGGTAA normal SRR1370915
SRR1370920 AGCTGACTAGTT GTGCCAGCMGCCGCGGTAA normal SRR1370920
样品已经经过barocde拆分为单独的fastq,或者后续按barcode、引物的长度进行切除人工序列,这两列可以填8个A、或18个A作为占位。
上面的分组,只是练习需要,非真实。此列可以不要。
source activate qiime1
print_qiime_config.py
显示
QIIME library version: 1.9.1
QIIME script version: 1.9.1
qiime-default-reference version: 0.1.3
NumPy version: 1.10.4
SciPy version: 0.17.1
pandas version: 0.23.1
matplotlib version: 1.4.3
biom-format version: 2.1.6
h5py version: 2.8.0 (HDF5 version: 1.10.1)
qcli version: 0.1.1
pyqi version: 0.3.2
scikit-bio version: 0.2.3
PyNAST version: 1.2.2
Emperor version: 0.9.51
burrito version: 0.9.1
burrito-fillings version: 0.1.1
sortmerna version: SortMeRNA version 2.0, 29/11/2014
sumaclust version: SUMACLUST Version 1.0.00
swarm version: Swarm 1.2.19 [Apr 12 2017 17:30:22]
gdata: Installed.
分为数据文件夹、参数文件夹
mkdir rawdata
mkdir config
cp /Bio/Rawdata/TGM0001-tutorial-Soil-4-meta16S/*.fastq.gz rawdata/
cp /Bio/Rawdata/TGM0001-tutorial-Soil-4-meta16S/*.txt config/
cp /Bio/Rawdata/TGM0001-tutorial-Soil-4-meta16S/*.R config/
$validate_mapping_file.py -o vmf-map/ -m config/map.txt
No errors or warnings were found in mapping file.
方法默认[default: fastq-join]
MIN_OVERLAP 默认为none,最小为8个bp
PERC_MAX_DIFF 错配默认为none,最大错配为10%
$cat work.sh
join_paired_ends.py -m fastq-join -j 8 -p 10 -f rawdata/SRR1370913_1.fastq.gz -r rawdata/SRR1370913_2.fastq.gz -o joined/SRR1370913
join_paired_ends.py -m fastq-join -j 8 -p 10 -f rawdata/SRR1370914_1.fastq.gz -r rawdata/SRR1370914_2.fastq.gz -o joined/SRR1370914
join_paired_ends.py -m fastq-join -j 8 -p 10 -f rawdata/SRR1370915_1.fastq.gz -r rawdata/SRR1370915_2.fastq.gz -o joined/SRR1370915
join_paired_ends.py -m fastq-join -j 8 -p 10 -f rawdata/SRR1370920_1.fastq.gz -r rawdata/SRR1370920_2.fastq.gz -o joined/SRR1370920
split_libraries_fastq.py
split_libraries_fastq.py -i joined/SRR1370913/fastqjoin.join.fastq,joined/SRR1370914/fastqjoin.join.fastq,joined/SRR1370915/fastqjoin.join.fastq,joined/SRR1370920/fastqjoin.join.fastq --sample_id SRR1370913,SRR1370914,SRR1370915,SRR1370920 -o slout/ -m config/map.txt -q 19 --barcode_type 'not-barcoded' --phred_offset=33
数据结果:
total 363M
-rw-rw-r-- 1 toucan toucan 551 Jun 14 22:28 histograms.txt
-rw-rw-r-- 1 toucan toucan 363M Jun 14 22:28 seqs.fna
-rw-rw-r-- 1 toucan toucan 2.0K Jun 14 22:28 split_library_log.txt
OTU分析与注释–pick_open_reference_otus.py
$cat params.txt
pick_otus:enable_rev_strand_match True
运行命令:
pick_open_reference_otus.py -o otus/ -i slout/seqs.fna -p config/params.txt
允许正反向聚类分析
相当于不允许的两倍
log文件记录详细的子程序脚本:
otus/log_20180614223759.txt
如100bp,测序读错了3个碱基以上,就不能满足97%相似度。出现一条的视为测序错误。
head otus/step1_otus/seqs_clusters.uc
# uclust --input /tmp/UclustExactMatchFilterM9PRwT.fasta --id 0.97 --tmpdir /tmp --rev --w 8 --stepwords 8 --usersort --maxaccepts 1 --libonly --stable_sort --maxrejects 8 --lib /home/toucan/miniconda3/envs/qiime1/lib/python2.7/site-packages/qiime_default_reference/gg_13_8_otus/rep_set/97_otus.fasta --uc otus//step1_otus/seqs_clusters.uc
qiime1自带数据库为:
/home/toucan/miniconda3/envs/qiime1/lib/python2.7/site-packages/qiime_default_reference/gg_13_8_otus/rep_set:
97_otus.fasta
/home/toucan/miniconda3/envs/qiime1/lib/python2.7/site-packages/qiime_default_reference/gg_13_8_otus/rep_set_aligned:
85_otus.pynast.fasta
/home/toucan/miniconda3/envs/qiime1/lib/python2.7/site-packages/qiime_default_reference/gg_13_8_otus/taxonomy:
97_otu_taxonomy.txt
/home/toucan/miniconda3/envs/qiime1/lib/python2.7/site-packages/qiime_default_reference/gg_13_8_otus/trees:
97_otus.tree
后续使用的biom文件为:
otus/otu_table_mc2_w_tax_no_pynast_failures.biom
非pynast失败的,大于2条count的OTU表
$cat config/venn.R
#install.packages("VennDiagram")
sampleCol=c("SRR1370913","SRR1370914","SRR1370915","SRR1370920")
library(VennDiagram)
rt=read.table("otus/table.from_biom_w_taxonomy.txt",sep="\t",header=T,skip=1,row.names=1,comment.char = "")
list1=list()
for(i in sampleCol){
rt1=rt[rt[,i]!=0,]
print(head(rownames(rt1)))
list1[[i]]=rownames(rt1)
}
venn.diagram(list1,filename="venn.tiff",fill=rainbow(length(sampleCol)))
$cat config/heatmap.R #install.packages("gplots") lineNum=100 library('gplots') rt=read.table("otus/table.from_biom_w_taxonomy.txt",sep="\t",header=T,skip=1,row.names=1,comment.char = "") sampleNum=ncol(rt)-1 rt=rt[,1:sampleNum] rt1=rt[order(rowSums(rt),decreasing=TRUE),] rt2=rt1[1:lineNum,] y=as.matrix(log10(rt2+1)) pdf(file="heatmap.pdf",height=12) par(oma=c(3,3,3,5)) heatmap.2(y,col='greenred',trace="none",cexCol=1) dev.off()
core_diversity_analyses.py
1. single_rarefaction.py——Rarify the OTU table-测序深度统一校正为最小的样品count数
2. beta_diversity.py——-beta多样性
3. principal_coordinates.py——PCoA图形化
4. alpha_diversity.py——-Alpha多样性
5. make_rarefaction_plots.py——-稀释曲线
6. summarize_taxa.py——Summarize Taxonomy
7. plot_taxa_summary.py——Taxa summary plots
执行命令
core_diversity_analyses.py -o cdout/ -i otus/otu_table_mc2_w_tax_no_pynast_failures.biom -m config/map.txt -t otus/rep_set.tre -e 195965 -p config/diversityParams.txt
参数
-e为OTUcount数最小的样品数,先过来少于-e count数的样品,再统一校正为-e count的测序深度 -p为各子程序参数配置文件
$ cat config/diversityParams.txt
alpha_diversity:metrics observed_species,chao1,shannon,simpson
Alpha多样性(样本内多样性)
Alpha多样性是指一个特定区域或者生态系统内的多样性,
常用的度量指标有Chao1 丰富度估计量(Chao1 richness
estimator) 、香农多样性指数(Shannon diversity index)、
辛普森多样性指数(Simpson diversity index)等。
计算菌群丰度:Chao;
计算菌群多样性(丰度和均匀度):Shannon、Simpson。
Chao1:是用chao1 算法估计群落中含OTU数目的指数,chao1 在生态学中常用来估计物种总数,由Chao (1984)
最早提出。Chao1值越大代表物种总数越多。
计算公式:
Schao1=Sobs+n1(n1-1)/2(n2+1)
Shannon-Wiener 曲线,是利用shannon指数来进行绘制的,反映样品中微生物多样性的指数,利用各样品的测序量在不同测序深度时的微生物多样性指数构建曲线,以此反映各样本在不同测序数量时的微生物多样性。 当曲线趋向平坦时,说明测序数据量足够大,可以反映样品中绝大多数的微生物物种信息。
Simpson:用来估算样品中微生物的多样性指数之一,在生态学中常用来定量的描述一个区域的生物多样性。Simpson指数值越大,说明群落多样性越高。
同时解释样品所含物种的丰富程度和均匀程度。横坐标代表物种排序的数量;纵坐标代表观测到的
相对丰度。物种的丰富程度由曲线在横轴上的长度来反映,曲线越宽,表示物种的组成越丰富;物种组成的均匀程度由曲线的形状来反映,曲线越平坦,表示物种组成的均匀程度越高。而曲线快速陡然下降表明样本中的优势菌群所占比例很高,多样性较低。
Beta多样性是生态系之间的种多样性,它包含分类单位的比较生态系内的每一独特性。即衡量群落之间的差别。
Beta多样性不仅描述生境内生物种类的数量,同时也考虑到这些种类的相同性及其彼此之间的位置。不同生境间或某一生态梯度上不同地段间生物种类的相似性越差,Beta生物多样性越高。
基于两个样品OTU丰度之间比较;
基于系统发生树进行比较,亲缘关系;如OTU的序列碱基差异比较大,但亲缘关系比较亲,可以抵消差异。
PCoA分析,即主坐标分析(PCoA,PrincipalCoordinate Analysis)可以从复杂的多维度数据中提取和可视化展示主要的高信息量突变,与PCA的主要思想类似。它将距离矩阵的信息转变成在一系列直交轴中显示,这样某种变量的最大值体现在第一个成分坐标中,而另一种变量的最大值体现在另一个成分坐标上。距离越近的点代表样本间相似度越高,理论上生物学重复的样本应该聚在一起。
对于系统发生树所有枝,考查其指向的叶节点是否只存于同一个群落,那些叶节点只存在于同一群落的枝的枝长和,占整个树的枝长和的比例,就定义为UniFrac距离。
UniFrac计算了仅被一个群落占据的进化历史的相对大小,这个量越大,说明两个群落中独立的进化过程越多,也就说明这两个群落的差别越大。若两个群落完全相同,那么它们没有各自独立的进化过程,UniFrac值为0;若两个群落在进化树中完全分开,即它们是完全独立的两个进化过程,那么UniFrac值为1.
只考虑树枝是否相同
UniFrac的定义中,可以看出它只考虑序列是否在群落中出现,而不考虑序列的丰度。若两个群落包含的物种完全相同,那么不管每个物种的丰度是否有差别或者差别的大小,UniFrac值为0。但在某些具体的情况下,研究者感兴趣的恰恰是群落中物种丰度的变化,例如研究人体肠道微生物分布在抗生素治疗下的丰度变化情况,这时UniFrac就不能解决问题了。
weighted unifrac方法,就是在UniFrac的基础上,将序列的丰度纳入考虑,它能够区分物种丰度的差别。
系统发生树(英文:phylogenetic tree或evolutionary tree)是表明被认为具有共同祖先的各物种相互间演化关系的树,又被称为系统发育树、系统演化树、系统进化树、种系发生树、演化树、进化树、系统树。 它用来表示系统发生研究的结果,用它描述物种之间的进化关系。
构建系统树主要步骤:
1. filter_otus_from_otu_table.py——挑选丰度>1‰的OTU
2. filter_fasta.py——获得丰度>1‰OTU的fasta文件
3. make_phylogeny.py——-构建系统树
4. ggtree.R——系统树可视化
执行脚本:
filter_otus_from_otu_table.py -i otus/otu_table_mc2_w_tax_no_pynast_failures.biom -o otus/otu_table_mc2_0.001_fraction.biom --min_count_fraction 0.001
filter_fasta.py -f otus/pynast_aligned_seqs/rep_set_aligned_pfiltered.fasta -b otus/otu_table_mc2_0.001_fraction.biom -o otus/rep_set_0.001_fraction.fasta
make_phylogeny.py -i otus/rep_set_0.001_fraction.fasta -o otus/rep_set_0.001_fraction.tre
biom convert -i otus/otu_table_mc2_0.001_fraction.biom -o otus/table.from_0.001_fraction.txt --to-tsv --header-key taxonomy
R脚本系统发生树
$cat config/ggtree.R
#source("https://bioconductor.org/biocLite.R") #source("http://bioconductor.org/biocLite.R")
#biocLite("ggtree")
setwd("C:/Users/DELL/Desktop/tree")
library("ggplot2")
library("ggtree")
library("colorspace")
cls=list()
rt=read.table("table.from_0.001_fraction.txt",sep="\t",header=T,skip=1,row.names=1,comment.char = "")
# 切割门物种,将out传进门的容器列表中
for(i in 1:nrow(rt)){
otu=rownames(rt[i,])
phylum=strsplit(as.character(rt$taxonomy[i]),"\\; |p\\_\\_")[[1]][3]
cls[[phylum]]=c(cls[[phylum]], otu)
}
# 门的名字和长度
phylumNames=names(cls)
phylumNum=length(phylumNames)
# 读取树文件,确定,按门的名字进行分组otu
tree <- read.tree("rep_set_0.001_fraction.tre")
tree <- groupOTU(tree, cls)
# 去除NewReference,只显示OTU号
pdf(file="circosTree.pdf")
ggtree(tree, layout="fan", ladderize = FALSE, branch.length="none", aes(color=group)) +
scale_color_manual(values=c(rainbow_hcl(phylumNum+1)), breaks=1:phylumNum, labels=phylumNames ) + theme(legend.position="right") +
geom_text(aes(label=paste(" ",gsub("\\d+\\.\\d+|New\\.|Reference|CleanUp\\.","",label),sep=""), angle=angle+90), size=2.2)
dev.off()
pdf(file="heatmapTree.pdf",width=15,height=18)
p <- ggtree(tree, ladderize = FALSE, branch.length="none", aes(color=group)) +
scale_color_manual(values=c(rainbow_hcl(phylumNum+1)), breaks=1:phylumNum, labels=phylumNames ) + theme(legend.position="left") +
geom_text(aes(label=paste(" ",gsub("\\d+\\.\\d+|New\\.|Reference|CleanUp\\.","",label),sep="")), size=2.2)
# 最后一列为tax,需要-1,取log值标准化,画热图。
gplot(p, log(rt[,1:ncol(rt)-1]+1), font.size=4)
dev.off()
根据分组计算log2FoldChange值,计算P值和校正后P值,然后使用校正后P值进行筛选少于0.05的物种。
-a 比较方法
-c 分组类别
-x -y 只限于两组之间比较
#OTU Differential Abundance Testing
differential_abundance.py -i otus/otu_table_mc2_w_tax_no_pynast_failures.biom -o diff_otus.txt -m config/map.txt -c SampleType -x normal -y tumor -a DESeq2_nbinom
注:conda 安装的qiime1缺乏,optparse包,需要额外安装 conda install -n qiime1 optparse
报错显示:To install, open R and run the command: install.packages("optparse")