時間序列研究的是基因表達的動態行為,測量的是一系列和時間點之間有強烈相關性的過程。和針對某一時間點的基因表達進行差異分析不同,時間序列更加關注是發現基因表達的趨勢,以有助于理解生物學動態變化過程(比如對刺激的反應、發育過程、周期行為等)。也就是說,時間序列關注的是整體變化趨勢而不是某特異表達。這樣就有幾個挑戰,一是要分析的數據量會很大,二是實驗條件變多,三是要發掘實驗動態變化本質,傳統的統計學方法比如t-tests就無能為力了,需要運用新的統計學方法,四是樣本間的時間間隔并不總是相等。
maSigPro的全稱是Microarray Significant Profiles,采用2步回歸策略。第一步選擇基因,首先,可以使用統計學程序來鑒定顯著表達變化的基因;第二步選擇變量,把隨時間變化發生顯著表達變化的基因進行聚類并且可視化。這個可以通過回歸來解決,其中,時間被視為數量變量,實驗條件視為分類變量,這樣就可以分析趨勢變化。
下面簡要概述maSigPro分析的步驟、參數及原理。
1. 讀入表達數據以及實驗設計
data("data.abiotic")
head(data.abiotic)
data("edesign.abiotic")
head(data.abiotic)
data.abiotic為一個芯片表達數據集,每一行為一個基因,每一列為一個樣品/條件/重復。maSigPro同樣可以處理RNA-seq數據,但是maSigPro沒有集合數據標準化的算法,數據讀入之前需要首先經過標準化的處理,可以將edge R得到的cpm作為maSigPro的讀入數據集。
edesign.abiotic為實驗設計表,行名為data.abiotic(讀入數據)的列名,Time為時間信息,Replicate為生物學重復信息,生物學重復之間使用相同的數字表示。后面的列比較靈活,用于表示實驗設計,有3種常見設計:
1. 考察單一時間變量下基因表達變化(無處理)
所在列均為1即可,如
Time = rep(c(1,5,10,24),each=3)
Replicates = rep(c(1:4),each=3)
Group = rep(1,12)
edesign = cbind(Time,Replicates,Group)
rownames(edesign) = paste("Array",c(1:12), sep= "")
2. 不同處理具有相同的時間起點
data("edesignCT")
head(edesignCT)
不同樣品在相同時間點均為1即可。
3. 多種處理組合
在用maSigPro進行分析時,一般情況都是兩個或兩個以上的感興趣的變量,其中一個典型的就是時間變量,另外一個通常都是分類變量,代表實驗組別(比如不同的處理,細胞株,組織等)。
edesign.abiotic
對應處理列為1,非對應為0。
2. 確定回歸模型
d = make.design.matrix(edesign.abiotic, degree = 2)
maSigPro采用多項式回歸,參數degree設置多項式使用的次數,在本示例中有3個時間點,degree設置為2,多項式次數設置過高會導致過擬合,一般在能夠解釋自變量和因變量關系的前提下,次數應該越低越好。
3. 尋找顯著基因
這時maSigPro兩步法的第一步,計算得到每個基因的回歸擬合,并挑選顯著基因用于后續分析。
fit = p.vector(data.abiotic, d, Q=0.05, MT.adjust = "BH",counts = FALSE)
Q為FDR閾值,MT.adjust為多重檢驗方法。counts為布爾值,當為False時表示采用正太分布對芯片數據進行回歸擬合,當為True時表示采用負二項分布對Counts數據進行回歸擬合。
這一步將篩選出至少在一個group下表現出差異的基因。
4. 尋找顯著差異
tstep = T.fit(fit,step.method="backward")
T.fit將采用逐步回歸法,查找基因在哪些group下具有顯著差異。
5. 獲得顯著基因集
sigs = get.siggenes(tstep, rsq = 0.7, vars = "groups")
rsq是R-squared的閾值,默認是0.7,作者文中認為當有三個生物學重復時,0.5已經可以得到非常收斂的結果。
vars可以接受3個參數:"groups","all"和"each"。
groups:每一個實驗設計groups產生一個列表,包括reference groups以及處理和control之間的差異。
all: 只有一個列表,包含所有的模型變異。
each: 每一種可能的變異為一個列表,包括control和處理之間,以及處理或control和時間尺度之間的差異。
運行masigpro 主要有四步:
5. 結果獲取
1. 冷處理條件下,基因表達隨時間的變化
data("data.abiotic")
head(data.abiotic)
data.control = data.abiotic[,c(10:18)] ## 提取冷處理數據
data("edesign.abiotic")
head(edesign.abiotic)
edesign.control = edesign.abiotic[c(10:18),c(1:2,4)] ##構建冷處理實驗設計
edesign.control
d= make.design.matrix(edesign.control,degree = 2)
fit = p.vector(data.control,d,Q=0.05,counts=FALSE)
fit$i ## 差異基因數
tstep = T.fit(fit)
sigs = get.siggenes(tstep,rsq=0.5,vars="groups")
names(sigs$sig.genes)
pdf("Figure 1.pdf")
cl = see.genes(sigs$sig.genes$Cold,newX11 = F,alfa = 0.05, k = 5)## 對差異結果進行聚類分析
dev.off()
cluster = as.data.frame(cl$cut) ## 提取聚類信息
head(cluster)
2. 多組合處理
d = make.design.matrix(edesign.abiotic,degree = 2)
fit = p.vector(data.abiotic,d,Q=0.05,counts=FALSE)
fit$i
tstep = T.fit(fit)
sigs = get.siggenes(tstep,rsq=0.5,vars="groups")
names(sigs$sig.genes)
pdf("Figure 2.pdf")
cl = see.genes(sigs$sig.genes$ColdvsControl,newX11 = F,alfa = 0.05,k=5)
dev.off()