文中會對遇到的問題進行解答,圖表部分也做了比較詳細的說明,對初學者比較友好,當然知道實驗部分會讓你對數據如何得來的有一個整體的把握,知其然而知其所以然,分析和解釋數據起來會更加的得心應手。
本文我首發于微信公眾號生信草堂
,可在微信公眾號生信草堂找到全文(文章標題:16S從實驗到數據分析最全流程
)和文中示例數據。
導航
本文一共分為三個部分:
簡書不支持頁面內跳轉
1. 實驗部分
2. 建庫測序
3. 16S測序數據分析
一. 實驗部分:DNA提取與質檢
1. DNA提取[1]
- QIAamp fast DNA stool Mini. Ref:51604
- Protocol: Isolation of DNA from stool for Pathogen Detection.
1.1 注意事項:
- ① 如果檢測細胞較難溶解(G+菌),可在step3中將水浴溫度增加到95℃。
- ② 離心條件:室溫,14000rpm。
1.2 準備:
- ① 提前30-40min開啟水浴鍋。
- ② 在37-70℃中重新溶解Buffer AL和inhibitEX buffer中殘留的沉淀。
- ③ 按照說明添加相應體積的酒精于AW1和AW2。
- ④ 加溶液前先混勻。
1.3 實驗步驟
實驗步驟在原基礎上有所修改
- 先將樣本在室溫下融化10分鐘左右。
- 加1.2mL inhibitEX Buffer于2mL離心管中,棉簽混勻糞便樣本后取180-220mg于2mL的離心管中,vortex直到將樣本完全混勻。
-
70℃
(可將裂解溫度提高到95℃),5min,vortex,15s。 - 離心1min。
- 取上清
550uL
到新的1.5mL的EP管中,離心1min。 - 加
30uL
proteinase K到新的1.5 mL的EP管中。 - 吸取
400 uL
步驟5中的上清液到步驟6中的EP管中。 - 加
400uL
buffer AL, vortex,15s。 - 70℃孵育10min。
- 加
400uL
酒精(96-100%),混勻(vortex)。 - 吸取600 uL加入吸附柱,離心1min,棄下管,換新的收集管。
重復步驟11一次。
- 加500 uL Buffer AW1, 離心1min,棄下管,換新的收集管。
- 加500 uL Buffer AW2, 離心3min,棄下管,換新的收集管。
- 空管離心3min。
- 將吸附柱轉移到新的1.5mL EP管中,加200ul(如果濃度較低可減少體積)Buffer ATE, 室溫孵育
5min
,離心1min。
2. 質檢
僅供參考
DNA濃度:≥10ng/ul[2]
DNA純度:A260/A280 = 1.8 – 2.0左右
DNA總量:≥300ng[3]
-
DNA完整性:要有明顯的基因組主帶
1% 的瓊脂糖凝膠,上樣量400ng,120v電壓跑膠30min這是較好的結果了,有拖帶很正常,只要主帶明顯即可。
3. 總結
- 樣本成分復雜,基因組DNA比較容易降解,在保證提取質量的前提下盡量加快前期的樣本處理速度。
- 樣本反復凍融之后提取的DNA質量較差,保存之前可分裝成多管或者一次多提幾管備用。
二. 建庫測序[4]
- 以下只做一個簡單的介紹,僅供參考
流程圖
第一輪PCR
第二輪PCR
RCR產物純化與文庫質檢
三. 16S測序數據分析
可在微信公眾號:生信草堂
,獲取示例所用的文件
16S rRNA 基因是編碼原核生物核糖體小亞基的基因,長度約1500bp左右,包括9個可變區和10個保守區,保守區序列反映了物種間的親緣關系,而可變區序列則能反映物種間的差異。經常用于細菌系統發育和分類鑒定,核心是物種分析,包括微生物的種類,不同種類間的相對豐度,不同分組間的物種差異以及系統進化等。一般根據實驗目標,設計和樣本類型等不同,擴增的區域也會有所不同。
本實例采用的是Illumina
MiSeq
V3-V4區
的測序數據,長度在460bp左右,為減少運算量等,本例只包含了5
個樣本,僅供參考。分析流程是在linux上完成,需要有一點linux基礎。
16S分析流程圖
1. qiime2安裝[5]
1.1 Minicoda軟件包管理器安裝
# 安裝miniconda軟件管理器(https://conda.io/miniconda.html):用于安裝QIIME2及依賴關系
wget https://repo.continuum.io/miniconda/Miniconda3-latest-MacOSX-x86_64.sh
./Miniconda3-latest-Linux-x86_64.sh
# 如果已經安裝過,則升級conda為最新版本
conda update conda
conda install wget
1.2 安裝qiime2最新版
wget https://data.qiime2.org/distro/core/qiime2-2018.8-py35-linux-conda.yml
conda env create -n qiime2-2018.8 --file qiime2-2018.8-py35-linux-conda.yml
# OPTIONAL CLEANUP
rm qiime2-2018.8-py35-linux-conda.yml
# 激活工作環境
source activate qiime2-2018.8
# 檢查安裝是否成功,運行此命令沒有報錯即安裝成功
qiime --help
# 不用時可將其關閉
source deactivate
2. 導入數據分析前的工作(可選)
- 送公司測序返還的數據一般都是拆分過并去除了引物的,可以自己再做一下質檢,后續使用dada2分析時也會有堿基質量分布圖,所以這步可以不做,自己質檢(fastqc)的信息會比較全面。
- 切除引物也只是一個示例,在本例中可以跳過。
2.1 質檢
# 公司的給的測序數據一般都是拆分過的,可將單端數據全部合并做質檢,也可單獨質檢
# cat命令合并壓縮過的文件會出錯,合并之前需要先解壓。
gunzip *.gz # 解壓
# 第一種方法:合并后質檢。
cat *R1* > R1.fastq #合并上游序列,并指定輸出文件名為R1.fastq
cat *R2* > R2.fastq #合并下游序列,并指定輸出文件名為R2.fastq
# 質檢
mkdir qc #創建一個文件夾用于存放質檢文件
fastqc -t 2 R1.fastq R2.fastq -o qc # -t --threads,一般有多少個樣本用多少線程。-o 指定輸出文件存放目錄。
# 第二種方法:單獨質檢后將質檢報告合并
mkdir qct #創建一個文件夾用于存放質檢文件
fastqc *fastq -t 10 -o qct
pip install multiqc #安裝multiqc
multiqc qct/* # 合并報告
- fastqc的結果包括reads各位置的堿基質量值分布、堿基的總體質量值分布、reads各個位置上堿基分布比例、GC含量分布、reads各個位置的N堿基數目、是否含有測序接頭序列等。
-
圖中橫軸是測序序列的堿基,縱軸是質量得分,質量值Q = -10*log10(error P),即20表示1%的錯誤率,30表示0.1%的錯誤率。圖中每1個箱線圖(又稱盒須圖),都是該位置的所有序列的測序質量的一個統計,分別表示最小值、下四分位數(第25百分位數)、中位數(第50百分位數)、上四分位數(第75百分位數)以及最大值,圖中藍色的細線是各個位置的平均值的連線。
第一種方法:fasqc堿基質量分布圖(R1)
第二種方法:堿基質量分布圖
也可在dada2步驟時設置合適的參數去除引物(論壇里建議在使用dada2處理數據之前先去掉引物。參考:https://forum.qiime2.org/t/lost-of-data-with-dada2/1449/5)
2.2 切除引物(本例中的引物已經切除,可跳過)
# 安裝與升級cutadapt
pip install --user --upgrade cutadapt
# 將cutadapt添加$PATH環境變量(需管理員權限,沒有也沒關系,可以跳到下一步)
echo 'PATH="$HOME/.local/bin:$PATH"'>>/etc/profile
# 如無管理員權限,每次使用cutadapt時需指定路徑
如:~/.local/bin/cutadapt --help # 如不指定路徑則會使用$PATH中的默認版本,老版本不支持多進程
# 創建存放cut的序列的目錄
mkdir cut_adapt
# 切除引物序列示例。
~/.local/bin/cutadapt -g forward_primer -e number forward.fastq -o file/R1.fastq -j 0
# cutadapt參數:
-j 0 表示調用所有CPU
-o 指定輸出文件目錄、文件名。
-g 5’端引物
-a 3’端引物
-e 引物匹配允許錯誤率,如0.1,0.15等
3. 在qiime2中分析測序數據
3.1 準備工作
# 需要自己寫2個文件
# 1.manifest file,將數據放在當前的文件夾下,然后自己寫一個絕對路徑文件,按以下格式寫,#開頭的行是注釋行會被自動忽略,例如以下命名為為se-33-manifest的文件,也可保存為txt等文件
#absolute filepaths “Fastq manifest” formats *file name: se-33-manifest
sample-id,absolute-filepath,direction
002,/data/shixq/qiime2/002_R1.fastq,forward
002,/data/shixq/qiime2/002_R2.fastq,reverse
017,/data/shixq/qiime2/017_R1.fastq,forward
017,/data/shixq/qiime2/017_R2.fastq,reverse
020,/data/shixq/qiime2/020_R1.fastq,forward
020,/data/shixq/qiime2/020_R2.fastq,reverse
060,/data/shixq/qiime2/060_R1.fastq,forward
060,/data/shixq/qiime2/060_R2.fastq,reverse
091,/data/shixq/qiime2/091_R1.fastq,forward
091,/data/shixq/qiime2/091_R2.fastq,reverse
#另外如果在當前測序數據文件下操作,絕對路徑可寫為(和上面的寫法相等):
sample-id,absolute-filepath,direction
002,$PWD/002_R1.fastq,forward
002,$PWD/002_R2.fastq,reverse
# 2.sample metadata文件,可用EXCEL編輯后保存為制表符分割的txt文件,根據自己的數據做修改。
# 其中q2:types那行可以不寫,如果分類是以數字來表示的,如1,2,3,代表不同的分組則需要標注這列對應的q2:types為categorical(分類的),否則會默認為numeric(數字)而報錯。
#SampleID subject edu height weight env1 env4
#q2:types categorical categorical categorical categorical categorical
091 subject-1 5 160 50 2 1
020 subject-1 5 160 70 1 3
017 subject-1 2 174 70 1 3
060 subject-2 2 160 70 1 1
002 subject-2 5 174 50 2 1
3.2 激活工作環境
source activate qiime2-2018.8
3.3 導入帶質量的雙端測序數據
-
質量值體系分為 Phred33 和 Phred 64兩種,如下圖所示,一般看fastq文件的質量值那行包含!和?(對應ASCII值33和63)等,即為Phred33體系(一般都為Phred33)。
測序質量值
qiime tools import \
--type 'SampleData[PairedEndSequencesWithQuality]' \
--input-path se-33-manifest \
--output-path paired-end-demux.qza \
--input-format PairedEndFastqManifestPhred33
#可視化文件paired-end-demux.qza
qiime demux summarize \
--i-data paired-end-demux.qza \
--o-visualization paired-end-demux.qzv
-
各樣品測序數據柱狀分布圖,展示不同測序深度下樣品數量分布
pair-end-demux.qzv - 上下游堿基質量分布圖
注:
- 生成的.qzv文件可點這里拖拽進網頁查看(推薦)
- 或是使用qiime tools view paired-end-demux.qzv 查看
3.4 dada2去燥,合并雙端序列
這步也可使用Deblur,這里不做演示,可參考官方文檔
# 這步花的時間最長,可使用--p-n-threads 0 參數調用所有CPU,減少運算時間。
注意:需要20bp以上的overlap才能使用dada2拼接,否則會報錯。
qiime dada2 denoise-paired \
--i-demultiplexed-seqs paired-end-demux.qza \
--p-trim-left-f 0 \
--p-trim-left-r 0 \
--p-trunc-len-f 270 \
--p-trunc-len-r 250 \
--o-table table.qza \
--o-representative-sequences rep-seqs.qza \
--o-denoising-stats denoising-stats.qza \
--p-n-threads 0 #調用所有CPU
# 可視化denoising stats(qzv文件可在線查看)
qiime metadata tabulate \
--m-input-file denoising-stats.qza \
--o-visualization denoising-stats.qzv
-
展示去除低質量序列、嵌合體、合并等后的序列數
denoising-stats.qzv
3.5 FeatureTable and FeatureData summaries
# Feature表
qiime feature-table summarize \
--i-table table.qza \
--o-visualization table.qzv \
--m-sample-metadata-file sample-metadata.txt
# 代表序列統計
qiime feature-table tabulate-seqs \
--i-data rep-seqs.qza \
--o-visualization rep-seqs.qzv
3.6 建樹用于多樣性分析
qiime phylogeny align-to-tree-mafft-fasttree \
--i-sequences rep-seqs.qza \
--o-alignment aligned-rep-seqs.qza \
--o-masked-alignment masked-aligned-rep-seqs.qza \
--o-tree unrooted-tree.qza \
--o-rooted-tree rooted-tree.qza
3.7 Alpha多樣性分析
# 計算多樣性(包括所有常用的Alpha和Beta多樣性方法),輸入有根樹、Feature表、樣本重采樣深度
# 取樣深度看table.qzv文件確定(一般為樣本最小的sequence count,或覆蓋絕大多數樣品的sequence count)
qiime diversity core-metrics-phylogenetic \
--i-phylogeny rooted-tree.qza \
--i-table table.qza \
--p-sampling-depth 55464 \
--m-metadata-file sample-metadata.txt \
--output-dir core-metrics-results
# 輸出結果包括多種多樣性結果,文件列表和解釋如下:
# beta多樣性bray_curtis距離矩陣 bray_curtis_distance_matrix.qza
# alpha多樣性evenness(均勻度,考慮物種和豐度)指數 evenness_vector.qza
# alpha多樣性faith_pd(考慮物種間進化關系)指數 faith_pd_vector.qza
# beta多樣性jaccard距離矩陣 jaccard_distance_matrix.qza
# alpha多樣性observed_otus(OTU數量)指數 observed_otus_vector.qza
# alpha多樣性香農熵(考慮物種和豐度)指數 shannon_vector.qza
# beta多樣性unweighted_unifrac距離矩陣,不考慮豐度 unweighted_unifrac_distance_matrix.qza
# beta多樣性unweighted_unifrac距離矩陣,考慮豐度 weighted_unifrac_distance_matrix.qza
# 測試分類元數據(sample-metadata)列和alpha多樣性數據之間的關聯,輸入多樣性值、sample-medata,輸出統計結果
# 統計faith_pd算法Alpha多樣性組間差異是否顯著
qiime diversity alpha-group-significance \
--i-alpha-diversity core-metrics-results/faith_pd_vector.qza \
--m-metadata-file sample-metadata.txt \
--o-visualization core-metrics-results/faith-pd-group-significance.qzv
# 統計evenness組間差異是否顯著
qiime diversity alpha-group-significance \
--i-alpha-diversity core-metrics-results/evenness_vector.qza \
--m-metadata-file sample-metadata.txt \
--o-visualization core-metrics-results/evenness-group-significance.qzv
-
以evenness-group-significance.qzv為例,圖中可點Category選擇分類方法,查看不同分組下箱線圖間的分布與差別。圖形下面的表格,詳細詳述組間比較的顯著性和假陽性率統計。
evenness-group-significance.qzv
3.8 Beta 多樣性分析
# 按subject分組,統計unweighted_unifrace距離的組間是否有顯著差異,其他的分組分析類似。
qiime diversity beta-group-significance \
--i-distance-matrix core-metrics-results/unweighted_unifrac_distance_matrix.qza \
--m-metadata-file sample-metadata.txt \
--m-metadata-column subject \
--o-visualization core-metrics-results/unweighted-unifrac-subject-significance.qzv \
--p-pairwise
# 可視化三維展示unweighted-unifrac的主坐標軸分析
qiime emperor plot \
--i-pcoa core-metrics-results/unweighted_unifrac_pcoa_results.qza \
--m-metadata-file sample-metadata.txt \
--p-custom-axes weight \
--o-visualization core-metrics-results/unweighted-unifrac-emperor-weight.qzv
# 可視化三維展示bray-curtis的主坐標軸分析
qiime emperor plot \
--i-pcoa core-metrics-results/unweighted_unifrac_pcoa_results.qza \
--m-metadata-file sample-metadata.txt \
--p-custom-axes height \
--o-visualization core-metrics-results/unweighted-unifrac-emperor-height.qzv
3.9 Alpha rarefaction plotting
# --p-max-depth should be determined by reviewing the “Frequency per sample” information presented in the table.qzv file
that was created above. In general, choosing a value that is somewhere around the median frequency seems to work well.
but you may want to increase that value if the lines in the resulting rarefaction plot don’t appear to be leveling out,
or decrease that value if you seem to be losing many of your samples due to low total frequencies closer to the minimum
sampling depth than the maximum sampling depth.
# --p-max-depth一般取table.qzv文件Frequency per sample的中位數左右
qiime diversity alpha-rarefaction \
--i-table table.qza \
--i-phylogeny rooted-tree.qza \
--p-max-depth 55000 \
--m-metadata-file sample-metadata.txt \
--o-visualization alpha-rarefaction.qzv
- 可視化將有兩個圖。頂部圖是α稀疏圖,主要用于確定樣品的豐富度是否已被完全觀察或測序。如果圖中的線在沿x軸的某個采樣深度處看起來“平坦化”(即接近零斜率),則表明收集超出該采樣深度的其他序列將不可能會有其他的OTU(feature)產生。如果圖中的線條沒有達到平衡,這可能是因為尚未完全觀察到樣品的豐富程度(因為收集的序列太少),或者它可能表明在數據中存在大量的測序錯誤(被誤認為是新的多樣性)。底部圖表示當特征表稀疏到每個采樣深度時每個組中保留的樣本數。
-
5個樣本被分成兩組weight,圖中顯示即兩條線,每組的樣本數分別為2和3。
Alpha rarefaction
3.10 訓練分類器
不同實驗使用不同的引物有不同的擴增區域,鑒定物種分類的精度就不同,提前的訓練可以讓分類結果更準確。
提供自己的測序引物序列即可
# 下載數據庫文件(greengenes)
wget ftp://greengenes.microbio.me/greengenes_release/gg_13_5/gg_13_8_otus.tar.gz
# 解壓
tar -zxvf gg_13_8_otus.tar.gz
# 使用rep_set文件中的99_otus.fasta數據和taxonomy中的99_OTU_taxonomy.txt數據,也可根據需要選擇其他相似度。
# 導入參考序列
qiime tools import \
--type 'FeatureData[Sequence]' \
--input-path 99_otus.fasta \
--output-path 99_otus.qza
# 導入物種分類信息
qiime tools import \
--type 'FeatureData[Taxonomy]' \
--input-format HeaderlessTSVTaxonomyFormat \
--input-path 99_otu_taxonomy.txt \
--output-path ref-taxonomy.qza
# Extract reference reads
# 這里不建議指定截取的長度(參考:https://forum.qiime2.org/t/how-can-i-train-classifier-for-paired-end-reads/1512/3)
# Greengenes 13_8 99% OTUs from 341F/805R region of sequences(分類器描述),提供測序的引物序列,截取對應的區域進行比對,達到分類的目的。
qiime feature-classifier extract-reads \
--i-sequences 99_otus.qza \
--p-f-primer CCTACGGGNGGCWGCAG \ #341F引物
--p-r-primer GACTACHVGGGTATCTAATCC \ #805R引物
--o-reads ref-seqs.qza
# Train the classifier(訓練分類器)
# 基于篩選的指定區段,生成實驗特異的分類器
qiime feature-classifier fit-classifier-naive-bayes \
--i-reference-reads ref-seqs.qza \
--i-reference-taxonomy ref-taxonomy.qza \
--o-classifier Greengenes_13_8_99%_OTUs_341F-805R_classifier.qza
3.11 物種分類
# 物種分類
qiime feature-classifier classify-sklearn \
--i-classifier Greengenes_13_8_99%_OTUs_341F-805R_classifier.qza \
--i-reads rep-seqs.qza \
--o-classification taxonomy.qza
# 結果可視化
qiime metadata tabulate \
--m-input-file taxonomy.qza \
--o-visualization taxonomy.qzv
# 物種分類條形圖
qiime taxa barplot \
--i-table table.qza \
--i-taxonomy taxonomy.qza \
--m-metadata-file sample-metadata.txt \
--o-visualization taxa-bar-plots.qzv
-
圖中開頭字母分別表示:界 (Kingdom)、門(Phylum)、綱 (Class)、目 (Order)、科( Family)、屬( Genus)、種 (Species)
taxa-bar-plots.qzv
3.12.1 ANCOM差異度分析
- 差異豐度分析采用ANCOM (analysis of composition of microbiomes),是2015年發布在Microb Ecol Health Dis上的方法,文章稱在微生物組方面更專業,但不接受零值(零在二代測序結果表中很常見),用于比較兩個或更多群體中微生物組的組成。
- 示例樣本較少,沒有顯著差異,在此不做展示,可參考方法。
# 按subject分組進行差異分析
qiime feature-table filter-samples \
--i-table table.qza \
--m-metadata-file sample-metadata.txt \
--p-where "subject='subject-1'" \
--o-filtered-table subject-1-table.qza
# OTU表添加假count,因為ANCOM不允許有零
qiime composition add-pseudocount \
--i-table subject-1-table.qza \
--o-composition-table comp-subject-1-table.qza
# subject-1 -->weight
qiime composition ancom \
--i-table comp-subject-1-table.qza \
--m-metadata-file sample-metadata.txt \
--m-metadata-column weight \
--o-visualization ancom-subject-1-weight.qzv
3.12.2 按種水平進行差異分析,genus level (i.e. level 6 of the Greengenes taxonomy)
# 按種水平進行合并,統計各種的總reads
qiime taxa collapse \
--i-table subject-1-table.qza \
--i-taxonomy taxonomy.qza \
--p-level 6 \
--o-collapsed-table subject-1-table-l6.qza
# add-pseudocount
qiime composition add-pseudocount \
--i-table subject-1-table-l6.qza \
--o-composition-table comp-subject-1-table-l6.qza
# subject-1 -->weight
qiime composition ancom \
--i-table comp-subject-1-table-l6.qza \
--m-metadata-file sample-metadata.txt \
--m-metadata-column weight \
--o-visualization l6-ancom-subject-1-weight.qzv
refernce:
[1] https://www.qiagen.com/us/shop/sample-technologies/dna/genomic-dna/qiaamp-fast-dna-stool-mini-kit/#resources
[2]、[3] 數值僅供參考,不同的測序公司要求會有不同。
[4]https://support.illumina.com/downloads/16s_metagenomic_sequencing_library_preparation.html
[5] https://docs.qiime2.org/2018.8/install/
[6] https://forum.qiime2.org/t/qiime2-chinese-manual/838
[7] https://forum.qiime2.org/t/lost-of-data-with-dada2/1449/5
[8] https://docs.qiime2.org/2018.8/tutorials/moving-pictures/