首先聲明,文章中的很多代碼和方法參考了微信公眾號:生信寶典。
在此表示感謝,書寫此文章的目的是為了進行筆記以便后續研究備用,也希望能和大家一起分享學習,里面如有錯誤敬請指出
批次效應是測量結果中的一部分,它們因為實驗條件的不同而具有不同的表現形式,并且與我們研究的變量沒有關系。一般批次效應可能在下述情形中出現:
1.一個實驗的不同部分在不同時間完成;
2.一個實驗的不同部分由不同的人完成;
3.試劑用量不同、芯片不同、實驗儀器不同;
4.將自己測的數據與從網上下載的數據混合使用;
其中,不同的時間,不同的人,以及試劑、儀器等等構成了批次效應。
R包sva可以預測并矯正批次效應,該包通過添加兩個代理變量(surrogate variables)幫助DESeq在后續分析中矯正批次效應,并不會對數據本身進行修改。
在本研究數據中,batch列是在不同時間完成的生物學重復,而condition列則相當與處理條件。
利用上一篇建立的dds數據集,進行sva分析,代碼來源于參考文獻(RNA-seq workflow: gene-level exploratory analysis and differential expression),其中比較關鍵的是mod的建立,里面選擇condition進行建模,根據參考文獻的意思就是假設我們不知道有不同批次的處理,而僅以condition設計的4個處理進行建模,并設置mod0為對照,具體的算法說明可以查閱文獻(svaseq: removing batch effects and other unwanted noise from sequencing data):
dds <- estimateSizeFactors(dds)
dat <- counts(dds, normalized = TRUE)
idx <- rowMeans(dat) > 1
dat <- dat[idx, ]
mod <- model.matrix(~ condition, colData(dds))
mod0 <- model.matrix(~ 1, colData(dds))
svseq <- svaseq(dat, mod, mod0, n.sv = 2)
但實際上我們是知道存在不同的處理批次batch,通過可視化batch參數來查看差別:
par(mfrow = c(2, 1), mar = c(3,5,3,1))
for (i in 1:2) {
stripchart(svseq$sv[, i] ~ dds$batch, vertical = TRUE, main = paste0("SV", i))
abline(h = 0)
}
看上去在兩個代理參數中r1的批次差別并不明顯,r2僅僅是略有差別。但是每張圖上的四個點代表不同的處理,實際的分布情況究竟如何呢。也可以通過直接查看sv1和sv2的數值來判斷:
> svseq$sv
[,1] [,2]
[1,] -0.19582386 0.2958170
[2,] -0.24163478 0.5719400
[3,] -0.34376511 -0.3164447
[4,] 0.53655461 -0.1749394
[5,] 0.33288941 -0.2062186
[6,] -0.50402035 -0.4996413
[7,] 0.05640151 0.3973242
[8,] 0.35939858 -0.0678371
每一行代表一個樣品,列的數值是SV1和SV2的結果,我們知道行1和2對應R0_1和R0_2,行3和4對應R16_1和R16_2,以此類推。那么這兩兩之間分別SV1和SV2對應的數值差異越小越好。為了更方便的展示差異,將SV1和SV2參數傳入dds,并進行可視化:
#將SV1和SV2參數傳入dds,并重新命名,便于后續比較:
ddssva <- dds
ddssva$SV1 <- svseq$sv[,1]
ddssva$SV2 <- svseq$sv[,2]
design(ddssva) <- ~ SV1 + SV2 + condition
#使用ggplot進行可視化:
plot_data <- as.data.frame(colData(ddssva))
plot_data$Sample <- rownames(plot_data)
library(ggplot2)
ggplot(plot_data, aes(x=SV1, y=SV2, color=condition, shape=batch)) + geom_point()+ geom_text_repel(aes(label=Sample))
這下就可以看出明顯差別了,按照正常情況,應該是R0,R16,R24和R32的兩個批次應該分別聚集在一起,但是從圖中可以看出R16和R24的平行性并不好。本研究的四個處理是細菌在同一培養條件下,不同生長時期獲取的樣品,進行了兩次單獨的生物學重復,而R16和R24正是細菌生長的對數期,這可能是造成兩批重復在這兩個樣品中存在較大差異的原因。也提醒我們在后續進行RNA-seq實驗設計是,生物學重復實驗還是盡量需要在同一批培養中實施。
當將SV1和SV2修正參數傳入ddssva后,后續我們會分別分析沒有修正參數dds和帶有修正參數的ddssva兩個數據集在最終獲取表達差異基因方面的差別。
后面我會分別對這兩組數據集進行分析并比較他們之間的差別。