DADA2+Phyloseq分析16S-seq數(shù)據(jù) 2021-06-10

一. 16S-seq實驗

所用示例數(shù)據(jù)使用Illumina公司兩步PCR的方法進(jìn)行擴(kuò)增:

1st stage PCR, 使用含adaptor的16S rRNA基因的通用引物,比如505F-80R,799F-1192等烹困;

2nd stage PCR, 使用含P5/P7蠢莺,index雳锋,和adaptor的引物,給每個樣品的序列加上特定的index

測序使用2x250bp雙端測序趁桃。

Illumna 16S-seq實驗流程

二. 安裝分析所需要的軟件

安裝R語言

(1)?RStudio | Open source & professional software for data science teams - RStudio

(2) R: The R Project for Statistical Computing (r-project.org)

安裝分析包仑最。

(1) R含有大量的分析包扔役,統(tǒng)計分析、畫圖等packages可以直接通過R.studio菜單中的tools>install packages安裝警医;或者使用以下命令:

install.packages("pkg-name")

(2) R中生物信息學(xué)常用的分析包來自bioconductor亿胸,需要先在R中安裝BiocManager,再使用BiocManager安裝分析包

install.packages("BiocManager")? ? # 安裝BiocManager軟件包

?BiocManager::install("dada2") ? ? ? # 安裝bioconductor中的dada2分析包

···

安裝中可能會出現(xiàn)以下提示:

安裝DADA2的提示

可輸入a法严,表示update所有與dada2有關(guān)聯(lián)的分析包损敷。

(3) 本示例中需要安裝以下軟件包:dada2葫笼,phyloseq深啤,ggplot2,DESeq2

(4) 分析開始前路星,在Rstudio讀入所需的軟件包

(5) 設(shè)置好工作目錄:通過Rstudio的session>Set Working Directory>choose Directory設(shè)置

set working director

或者直接在終端中輸入以下命令:

setwd("E:/teaching/da2-pipline")? #中間的路徑需要根據(jù)自己的電腦修改


三溯街、測序文件的處理

1. 首先查看以下收到的測序文件,常用的2x250bp測序結(jié)果會含兩個文件洋丐,比如sample-R1.fq和sample-R2.fq呈昔,分別用R1和R2表示5'-和3'-測序結(jié)果,sample為原理提供的樣品名友绝。

測序結(jié)果文件

2. 將測序文件的信息讀入R語言中堤尾。

以下示例中,現(xiàn)將測序結(jié)果所在的文件夾路徑讀入到path迁客,然后將該文件夾下面所有以“-R1.fq”

#設(shè)置path保存測序文件所在的路徑

path <- "Z:/dada2_pipline";

#以下命令會顯示path保存的文件夾路徑下所有文件名

list.files(path);

#以下命令顯示path文件夾中郭宝,所有以-R1.fq結(jié)尾的文件,并排序

sort(list.files(path, pattern="-R1.fq", full.names = TRUE))

# 明白以上命令后掷漱,可運(yùn)行下面的代碼粘室,將測序結(jié)果文件信息讀入fnFs和fnRs

fnFs <- sort(list.files(path, pattern="-R1.fq", full.names = TRUE))?

fnRs <- sort(list.files(path, pattern="-R2.fq", full.names = TRUE))?

# 在Rstudio,可查看右上角中fnFs和FnRs的內(nèi)容卜范,是否為正確的測序文件名

#或者直接在Rstudio的控制終端衔统,輸入fnFs查看

該示例中,共有4個文件

3. 查看測序質(zhì)量。

#查看測序質(zhì)量

#繪制樣品1-2測序質(zhì)量的圖片锦爵,并保存到plot_output

plot_output<-plotQualityProfile(fnFs[1:2]);

#查看圖片, 注意右側(cè)Plots窗口

plot_output;? ? ?

#繪制所有樣品測序質(zhì)量的圖

plot_output<-plotQualityProfile(fnFs);? ?

plot_output;

#保存圖片到當(dāng)前目錄

ggsave(filename="For_seq_qual.pdf",plot_output,

? ? ? width = 18, height = 6,

? ? ? units = "cm");

plotQualityProfile(fnRs);? #? 繪制Rev測序的質(zhì)量圖片舱殿,可按上述代碼保存圖片

#移除暫時不用的plot_output

rm(plot_output);

輸出結(jié)果,y軸為測序質(zhì)量數(shù)據(jù)棉浸,x軸為測序循環(huán)數(shù)(即堿基位置)

關(guān)于測序質(zhì)量圖的注解

In gray-scale is a heat map of the frequency of each quality score at each base position. The mean quality score at each position is shown by the green line, and the quartiles of the quality score distribution by the orange lines. The red line shows the scaled proportion of reads that extend to at least that position (this is more useful for other sequencing technologies, as Illumina reads are typically all the same length, hence the flat red line).

4. 過濾接頭和低質(zhì)量序列

從上述的圖中怀薛,以Q30為閾值,可以看出迷郑,F(xiàn)orward(R1)的整體質(zhì)量都還可以枝恋;Reverse(R2)的測序質(zhì)量稍低,平均來看嗡害,大概也在200bp左右出現(xiàn)了下降焚碌。

設(shè)置過濾后文件保存的位置

此示例中,是在原來path保存的目錄下面霸妹,建立一個“filtered”的文件夾十电,用來保存過濾后的序列文件,文件名按照sample_F_filt.fastq.gz的模式命名叹螟,其中后面的.gz表示該文件是壓縮文件鹃骂。

#paste0()函數(shù)將sample.names中保存的樣品名(即原來測序文件的前半部分)加上"_F_filt.fastq.gz"

paste0(sample.names, "_F_filt.fastq.gz");

#file.path()函數(shù),將目錄path罢绽,“filtered”畏线,文件名用/連起來,

filtFs <- file.path(path, "filtered", paste0(sample.names, "_F_filt.fastq.gz"));

filtRs <- file.path(path, "filtered", paste0(sample.names, "_R_filt.fastq.gz"));

運(yùn)行以下filterAndTrim函數(shù)良价,過濾低質(zhì)量序列寝殴。out保存過濾信息。

在該示例中明垢,

fnFs和fnRs為原始序列文件蚣常,filtFs和filtRs為過濾后的序列文件;

truncLen=c(208,200)表示分別去掉208(For測序結(jié)果)和200(rev測序結(jié)果)以后的堿基;

MaxN=0痊银,切除末端的低質(zhì)量序列后抵蚊,得的的序列中不能再有N;

maxEE=c(2,2)溯革,序列的EE值不能低于maxEE贞绳,EE = sum(10^(-Q/10)). 比如200bp的序列,每個堿基的Q=30鬓照,EE=0.2.

rm.phix=TRUE熔酷,去除其中來自phix噬菌體的序列(測序反應(yīng)中加入phix DNA作為對照);

compress=TRUE豺裆,壓縮輸出的序列文件拒秘。

如果需要切除5'端的引物序列号显,可以用加入trimLeft=c(N1,N2)。

out <- filterAndTrim(fnFs, filtFs, fnRs, filtRs, truncLen=c(208,200),

? ? ? ? ? ? ? ? ? ? maxN=0, maxEE=c(2,2), truncQ=2, rm.phix=TRUE,

? ? ? ? ? ? ? ? ? ? compress=TRUE, multithread=FALSE);

#查看過濾信息

head(out);

#查看過濾后的序列質(zhì)量?

plotQualityProfile(filtFs);?

plotQualityProfile(filtRs);


過濾后的序列質(zhì)量

5. 推斷序列變異(Infer Sequence variant)

DADA2中躺酒,learnErrors程序“學(xué)習(xí)”輸入數(shù)據(jù)中測序產(chǎn)生錯誤押蚤,并構(gòu)建預(yù)測模型。

# 這里是DADA2比較神奇的地方, 它會從輸入的數(shù)據(jù)中學(xué)習(xí)測序的誤差羹应。理論上揽碘,輸入的數(shù)據(jù)越大,

# 學(xué)習(xí)模型越準(zhǔn)確园匹,需要的計算資源也越大

errF <- learnErrors(filtFs, multithread=FALSE);

errR <- learnErrors(filtRs, multithread=FALSE);

#繪制quality score與error frequency相關(guān)圖形

plotErrors(errF, nominalQ=TRUE);

plotErrors(errF, nominalQ=TRUE);

Forward測序數(shù)據(jù)中雳刺,不同類型的突變頻率與Q值之間的關(guān)系

然后利用該模型,去除測序產(chǎn)生的堿基替換裸违、indel錯誤掖桦,來獲得“真實”的序列(denoised sequence)。

> dadaFs <- dada(filtFs, err=errF, multithread=FALSE)

Sample 1 - 8382 reads in 4284 unique sequences.

Sample 2 - 9341 reads in 4959 unique sequences.

Sample 3 - 8866 reads in 4794 unique sequences.

Sample 4 - 8097 reads in 4720 unique sequences.

> dadaRs <- dada(filtRs, err=errR, multithread=FALSE)

Sample 1 - 8382 reads in 6273 unique sequences.

Sample 2 - 9341 reads in 5980 unique sequences.

Sample 3 - 8866 reads in 6526 unique sequences.

Sample 4 - 8097 reads in 6833 unique sequences.

將雙端測序的reads合并

minOverlap

#將雙端測序的reads合并

mergers <- mergePairs(dadaFs, derepFs, dadaRs, derepRs)

構(gòu)建ASV table

> #構(gòu)建sequence table供汛,即OTU table或ASV

> #包含ASV枪汪,每一個ASV

> seqtab <- makeSequenceTable(mergers);

#表格的行、列數(shù)目怔昨。本示例中雀久,有4行(4個樣品);587列(587條ASV)趁舀;

> dim(seqtab);

[1]? ?4 587

> seqtab[,1];

root_exp1 root_exp2 soil_exp1 soil_exp2?

? ? ? 522? ? ? ?364? ? ? ? ?0? ? ? ? ?0?

> #ASV的長度信息統(tǒng)計

> table(nchar(getSequences(seqtab)));

去嵌合體(remove chimeras)

## 去PCR產(chǎn)生的嵌合體

seqtab.nochim <- removeBimeraDenovo(seqtab, method="consensus", multithread=TRUE, verbose=TRUE);

dim(seqtab.nochim);

?#計算每個樣品中嵌合體的比例

apply(seqtab.nochim,1,sum)/apply(seqtab,1,sum);

#查看第一條ASV的序列(即第一列的標(biāo)題)

colnames(seqtab)[1]

增加序列的物種信息

##給ASV序列賦予物種分類信息

## 分類數(shù)據(jù)庫保存在當(dāng)前目錄的tax文件夾中(“./tax”)

## 如內(nèi)存不夠赖捌,可刪除中間信息

rm(errF,errR,plot_output, seqtab,dadaFs,dadaRs,derepFs,derepRs);

taxa <- assignTaxonomy(seqtab.nochim, "./tax/silva_nr_v132_train_set.fa.gz", multithread=TRUE)

#增加species的信息。

taxa <- addSpecies(taxa, "./tax/silva_species_assignment_v132.fa.gz")

到此赫编,序列的處理結(jié)束巡蘸,接下來用phyloseq包分析微生物多樣性信息奋隶。

四. 多樣性分析

1. 將序列處理結(jié)果phyloseq的格式擂送。

#構(gòu)建樣品信息表格

#本示例中。有兩個root和soil兩種材料唯欣,每個兩個重復(fù)嘹吨。

#查看sample names

sample.names;

samdf <- data.frame(rownames(seqtab.nochim),c("root","root","soil","soil"));

rownames(samdf)<- sample.names;

colnames(samdf)<-c("id","group")

samdf;


構(gòu)建完成的樣品信息表。id表示樣品名字境氢,與OTU table中的名字一致


2. 整理OTU table和taxa table蟀拷,主要是將原來序列作為列標(biāo)題的表格換為人工設(shè)定的OTU+數(shù)字

##整理OTU table(或ASV table)

# 上述腳本輸出的seqtab.nochim表格中,列的標(biāo)題是ASV的序列(非常長)萍聊,在這里用簡單的OTU+數(shù)字來代替

seqtab.nochim0<-seqtab.nochim;

colnames(seqtab.nochim0)<-paste(rep("OTU",ncol(seqtab.nochim)),1:ncol(seqtab.nochim),sep="");

## 同上问芬,將taxa表格中的分類信息用OTU+數(shù)據(jù)來代替。

taxa0<-taxa

rownames(taxa0)<-paste(rep("OTU",ncol(seqtab.nochim)),1:ncol(seqtab.nochim),sep="");

head(taxa0);


## 將信息讀入phyloseq所需的格式

ps <- phyloseq(otu_table(seqtab.nochim0, taxa_are_rows=FALSE),? ?sample_data(samdf),? ? ? ? ? ? ? ? tax_table(taxa0));

重構(gòu)好的taxa0信息表格


3. 獲取多樣性信息

(1)alpha多樣性

#可以開始查看多樣性的信息

# 查看alpha多樣性

estimate_richness(ps, measures =c("Observed", "Chao1", "ACE", "Shannon", "Simpson", "InvSimpson", "Fisher"));

#繪制alpha多樣性的比較圖

plot_richness(ps);

alpha多樣性的輸出


繪制alpha多樣性信息

(2)對數(shù)據(jù)進(jìn)行rarefaction平衡化后重新分析寿桨。

##rarefaction后重新估計多樣性數(shù)據(jù)

set.seed(7)

#參考每個樣品的序列總數(shù)

rowSums(otu_table(ps));

#最小值為3993此衅,可將sample.size設(shè)為3993以下强戴,進(jìn)行rarefaction

ps.rarefy<-rarefy_even_depth(ps, sample.size=3900, replace=T);

#利用rarefactio的數(shù)據(jù)重新估計樣品多樣性

# 查看alpha多樣性

estimate_richness(ps.rarefy, measures =c("Observed", "Chao1", "ACE", "Shannon", "Simpson", "InvSimpson", "Fisher"));

#繪制alpha多樣性的比較圖

plot_richness(ps);

#繪制熱圖

plot_heatmap(ps.rarefy, method = "NMDS", distance = "bray");

比較兩次的輸出結(jié)果


alpha多樣性比較,每個樣品序列總數(shù)通過rarefaction到3900


alpha多樣性數(shù)據(jù)(rarefied to 3900 reads)

(3)beta多樣性比較

繪制heatmap

#繪制熱圖

plot_heatmap(ps.rarefy, method = "NMDS", distance = "bray");

heatmap

PCA分析

#PCA分析

pslog<-transform_sample_counts(ps.rarefy, function(x) log(1+x));

out.log<-ordinate(pslog, method="NMDS", distance="bray");

plot_ordination(pslog, out.log, color="id", shape="group");

PCA分析

細(xì)菌組成

#繪制每個樣品門水平的豐度信息

plot_bar(ps.rarefy,x="id", fill="Phylum");

#繪制豐度高的OTU代表的細(xì)菌Family

top20 <- names(sort(taxa_sums(ps.rarefy), decreasing=TRUE))[1:20];

ps.top20 <- transform_sample_counts(ps.rarefy, function(OTU) OTU/sum(OTU));

ps.top20 <- prune_taxa(top20, ps.top20);

plot_bar(ps.top20, x="id", fill="Family") + facet_wrap(~group, scales="free_x");

所有細(xì)菌門

#繪制豐度高的OTU代表的細(xì)菌Family

top20 <- names(sort(taxa_sums(ps.rarefy), decreasing=TRUE))[1:20];

ps.top20 <- transform_sample_counts(ps.rarefy, function(OTU) OTU/sum(OTU));

ps.top20 <- prune_taxa(top20, ps.top20);

plot_bar(ps.top20, x="id", fill="Family") + facet_wrap(~group, scales="free_x");


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載挡鞍,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者骑歹。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市墨微,隨后出現(xiàn)的幾起案子道媚,更是在濱河造成了極大的恐慌,老刑警劉巖翘县,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件最域,死亡現(xiàn)場離奇詭異,居然都是意外死亡锈麸,警方通過查閱死者的電腦和手機(jī)羡宙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來掐隐,“玉大人狗热,你說我怎么就攤上這事÷鞘。” “怎么了匿刮?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長探颈。 經(jīng)常有香客問我熟丸,道長,這世上最難降的妖魔是什么伪节? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任光羞,我火速辦了婚禮,結(jié)果婚禮上怀大,老公的妹妹穿的比我還像新娘纱兑。我一直安慰自己,他們只是感情好化借,可當(dāng)我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布潜慎。 她就那樣靜靜地躺著,像睡著了一般蓖康。 火紅的嫁衣襯著肌膚如雪铐炫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天蒜焊,我揣著相機(jī)與錄音倒信,去河邊找鬼。 笑死泳梆,一個胖子當(dāng)著我的面吹牛鳖悠,可吹牛的內(nèi)容都是我干的唆迁。 我是一名探鬼主播,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼竞穷,長吁一口氣:“原來是場噩夢啊……” “哼唐责!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起瘾带,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤鼠哥,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后看政,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體朴恳,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年允蚣,在試婚紗的時候發(fā)現(xiàn)自己被綠了于颖。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡嚷兔,死狀恐怖森渐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情冒晰,我是刑警寧澤同衣,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站壶运,受9級特大地震影響耐齐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蒋情,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一埠况、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧棵癣,春花似錦辕翰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽刷后。三九已至的畴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間尝胆,已是汗流浹背丧裁。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留含衔,地道東北人煎娇。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓二庵,卻偏偏與公主長得像,于是被迫代替她去往敵國和親缓呛。 傳聞我的和親對象是個殘疾皇子催享,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內(nèi)容