limmar package是一個功能比較全的包,,既含有cDNA芯片的RAW data輸入、前處理(歸一化)功能,,同時也有差異化基因分析的“線性”算法(limma: Linear Models for Microarray Data),,特別是對于“多因素實驗(multifactor designed experiment)”。limmar包的可擴展性非常強,,單通道(one channel)或者雙通道(tow channel)數(shù)據(jù)都可以分析差異基因,,甚至也包括了定量PCR和RNA-seq(第一次見分析microarray的包也能處理RNA-seq)。 limmar package是一個集大成的包,,對載入數(shù)據(jù),、數(shù)據(jù)前處理(背景矯正、組內(nèi)歸一化和組間歸一化都有很多種選擇方法),、差異基因分析都有很多的選擇,。而且,所設(shè)計的線性回歸和經(jīng)驗貝葉斯方法找差異基因非常值得學(xué)習(xí),。
1. 讀入樣本信息 使用函數(shù)讀readTargets(file="Targets.txt", path=NULL, sep="\t", row.names=NULL, quote="\"",...),。這個函數(shù)其實是一個包裝了的read.table(),讀入的是樣本的信息,,創(chuàng)建的對象類似于marray包的marrayInfos和Biobase包的AnnotatedDataFrame,。 2. 讀入探針密度數(shù)據(jù) 與marray包一致,Bioconductor不能讀入原始的TIFF圖像文件,,只能輸出掃描儀輸入的,、轉(zhuǎn)換成數(shù)字信號的文本文件。使用函數(shù)read.maimages(files=NULL, source="generic", path=NULL, ext=NULL, names=NULL, columns=NULL, other.columns=NULL, annotation=NULL, green.only=FALSE, wt.fun=NULL, verbose=TRUE, sep="\t", quote=NULL, ...) 參數(shù)說明:files需要通過函數(shù)dir(pattern = "Mypattern")配合正則表達式篩選(規(guī)范命名很重要),同時該函數(shù)可以讀入符合格式的壓縮過的文件,,比如*.txt.gz的文件,,這極大的減小的數(shù)據(jù)儲存大小;source的取值分為兩類,,一類是“高富帥”,,比如“agilent”、“spot”等等(下表),,它們是特定掃描儀器的特定輸出格式,;如果不幸是“屌絲”,即格式是自己規(guī)定的,,可以選定source="generic",,這時需要規(guī)定columns;任何cDNA文件都要有R/G/Rb/Gb四列(Mean或者Median),;annotation可以規(guī)定哪些是注釋列,;wt.fun用于對點樣點進行質(zhì)量評估,取值為0表示這些點將在后續(xù)的分析中被剔除,,取值位1表示需要保留,,對點樣點的評估依賴于圖像掃描軟件的程序設(shè)定,比如SPOT和GenePix軟件,,查看QualityWeights(現(xiàn)成函數(shù)或者自己寫函數(shù)),。 讀入單通道數(shù)據(jù):讀入單通道數(shù)據(jù),可以設(shè)定green.only = TRUE即可,,然后對應(yīng)讀入columns = list(G = "Col1", Gb = "Col2"),。 讀入的數(shù)據(jù),如果是單通道,,則成為EListRaw class,;如果是雙通道,則是RGList class,。 數(shù)據(jù)操作: cbind():合并數(shù)據(jù),; “[”:分割數(shù)據(jù); RGList class有的names是 "R",,"G",,"Rb","Gb",,"weights",,"printer","genes",,"targets",,"notes": R/G/Rb/Gb分別紅和綠的前景和背景噪音,;weight是掃描軟件的質(zhì)量評估;printer是點樣規(guī)則(printer layout),;genes是基因注釋,;target是樣本注釋;notes是一般注釋,??梢酝ㄟ^myRGList$names進行相應(yīng)的取值和賦值。 3. 前處理 cDNA芯片前處理的流程是:背景去除(background correction)--> 組內(nèi)歸一化(with-array normalization)--> 組間歸一化(between-array normalization),。最后一步組間歸一化可選,,注意trade-off原則。 3.1 背景去除: backgroundCorrect(RG, method="auto", offset=0, printer=RG$printer, normexp.method="saddle", verbose=TRUE) RG:可以是EListRaw,,也可以是RGList class,; method:取“ auto”,, “none”,“ subtract”,, "half",, "minimum", "movingmin",, "edwards"或者 "normexp",; normexp.method:在method取“normexp”時,可以取 "saddle",, "mle",, "rma" 或者"rma75"。 作者建議使用“mle”或者“saddle”,,兩個運行速度也差不多,。如果數(shù)據(jù)中含有“形態(tài)背景估計(morphological background estimates)”,比如SPOT和GenePix圖像處理軟件,,那么method = "subtract"也就較好的表現(xiàn),。 3.2 組內(nèi)歸一化 normalizeWithinArrays(object, layout, method="printtiploess", weights=object$weights, span=0.3, iterations=4, controlspots=NULL, df=5, robust="M", bc.method="subtract", offset=0) method:"none","median",,"loess","printtiploess",,"composite",,"control"和"robustspline"。初始值設(shè)定為“printtiploess”,,但是對于Agilent芯片或者小樣本芯片(每個“點樣塊”少于150個探針),。可用選用的loess或者robustspline,。“l(fā)oess歸一化方法假設(shè)了有相當大的一部分探針沒有發(fā)生差異化表達,,而不是上調(diào)或者下調(diào)的基因數(shù)差不多或者差異化程度圍繞著0波動,。”(參考文獻1),。需要注意,組內(nèi)歸一化只是對單張芯片的M值進行了規(guī)整(不影響A值),,但是對與組間各個通道沒有進行比較,。 weight:是圖像處理軟件對探針權(quán)重的標記,,如果使用weight,,那么在歸一化過程中weight為0的探針不會影響其他探針,這并不意味著這些探針會被剔除,,它們同樣會被歸一化,,也會出現(xiàn)在歸一化的結(jié)果中,。如果不想使用,,那么weight設(shè)為NULL。 iterations:設(shè)定loess的循環(huán)數(shù),,循環(huán)數(shù)越多,,結(jié)果越強健(robust),。 3.3 組間歸一化 normalizeBetweenArrays(object, method=NULL, targets=NULL, cyclic.method="fast", ...) method:“none",, "scale", "quantile",, "Aquantile",, "Gquantile",“Rquantile”,,“Tquantile”,,“cyclicloess”?!皊cale”對log-ratio數(shù)值進行歸一化,;“quantile”對密度(intensity)進行歸一化;“Aquantile”對A數(shù)值進行歸一化,,不調(diào)正M數(shù)值,; "Gquantile"和“Rquantile”則分別對Green和Red通道進行歸一化,適用于Green或者Red為“參考標準(common reference)”的樣品,;“Tquantile”表示樣品分開歸一化或者Green和Red一先一后進行歸一化,。以下是一個cDNA芯片的密度圖,分別為原始,、去背景(method = "normexp", normexp.method="mle"),、組內(nèi)歸一化(method = "robustspline")和組間歸一化(method = “quantile”),使用plotDensities()繪制,。 4. 線性模型設(shè)計(linear model desigh) “線性模型”主要分析差異化表達基因,,使用這種方法需要準備兩個矩陣:“實驗設(shè)計矩陣(design matrix)”和“對比矩陣(contrast matrix)”?!皩嶒炘O(shè)計矩陣”主要用于每張芯片上用的RNA樣品種類,,“對比矩陣”主要用于規(guī)定實驗組和對照組。 “實驗設(shè)計矩陣”:列表示RNA樣品種類,,對于oligo芯片或者使用common reference的cDNA芯片(簡稱第一類),,列數(shù)與不同RNA樣品數(shù)恰好相同;行數(shù)等于芯片數(shù),。對于不同染料對應(yīng)不同樣品的cDNA芯片(簡稱第二類),,列數(shù)比RNA樣品數(shù)恰好少一,,行數(shù)等于芯片數(shù)(如要要衡量染料效應(yīng)(dye effect),,則列數(shù)與第一類相同)。對于第一類芯片,,使用model.matrix()函數(shù)創(chuàng)建“實驗設(shè)計矩陣”:比如oligo芯片model.matrix(~ 0+factor(c(1,1,1,2,2,3,3,3)))表示三類RNA樣品,;對于cDNA芯片,modelMatrix(targets,ref="EGFP")創(chuàng)建以“EGFP”為common reference的矩陣,。對于第二類芯片,,需要手動創(chuàng)建。 “對比矩陣”通過函數(shù)makeContrasts()函數(shù)創(chuàng)建,。 使用步驟:創(chuàng)建“實驗設(shè)計矩陣” --> lmFit() --> 創(chuàng)建“對比矩陣”(此步可選,,如正交實驗) --> contrasts.fit()(接上步,可選)--> eBayes() --> topTable(),。文檔詳細列出了各種各樣的例子,。 比較有用的例子: 4.1 交換染料的技術(shù)重復(fù) =========================================================================== > beta7pq$targets FileNames SubjectID Cy3 Cy5 Date of Blood Draw Date of Scan 1 6Hs.195.1.gpr 1 b7 - b7 + 2002.10.11 2003.07.25 2 6Hs.168.gpr 3 b7 + b7 - 2003.01.16 2003.08.07 3 6Hs.166.gpr 4 b7 + b7 - 2003.01.16 2003.08.07 4 6Hs.187.1.gpr 6 b7 - b7 + 2002.09.16 2003.07.18 5 6Hs.194.gpr 8 b7 - b7 + 2002.09.18 2003.07.25 6 6Hs.243.1.gpr 11 b7 + b7 - 2003.01.13 2003.08.06 Labels 1 6Hs.195.1.gpr 2 6Hs.168.gpr 3 6Hs.166.gpr 4 6Hs.187.1.gpr 5 6Hs.194.gpr 6 6Hs.243.1.gpr # 假定這六張芯片每兩兩做技術(shù)重復(fù) > design <- c(1, -1, -1, 1, 1, -1) > corfit <- duplicateCorrelation(beta7pq, design, ndups=1, block = c(1, 1, 2, 2, 3, 3), weight = NULL) > fit <- lmFit(beta7pq, design, block = c(1, 1, 2, 2, 3, 3), cor = corfit$consensus) > fit <- eBayes(fit) > topTable(fit, adjust = "dfr") P.Value adj.P.Val B 6647 4.870266e-07 0.01129122 5.341680 11025 1.507433e-06 0.01747417 4.663784 4910 9.223463e-06 0.04706320 3.434271 11470 1.054914e-05 0.04706320 3.336518 7832 1.182200e-05 0.04706320 3.252921 22582 1.217992e-05 0.04706320 3.230931 20812 1.939031e-05 0.05662524 2.882772 1755 2.042581e-05 0.05662524 2.843204 21405 2.743542e-05 0.05662524 2.616544 11717 2.833754e-05 0.05662524 2.591458 # 也可以采用以下方法 > design <- modelMatrix(beta7pq$targets, ref = "b7 -") > design <- cbind(Dye = 1, desigh) > fit <- lmFit(beta7pq, design) > colnames(design)[2] <- "b7" > cont.matrix <- makeContrasts(MUvsWT = b7/2, levels = design) > fit2 <- contrasts.fit(fit, cont.matrix) > fit2 <- eBayes(fit2) > topTable(fit2, adjust = "fdr") P.Value adj.P.Val B 6647 8.351055e-07 0.01936109 4.430939 11025 3.555781e-06 0.02976803 3.700994 11431 3.851970e-06 0.02976803 3.656632 6211 6.431916e-06 0.03727939 3.362305 11470 2.201258e-05 0.09075900 2.586146 4910 2.495165e-05 0.09075900 2.501700 1755 3.124884e-05 0.09075900 2.347645 7832 3.131780e-05 0.09075900 2.346120 11987 5.008082e-05 0.12764486 2.014907 21859 5.505731e-05 0.12764486 1.946501 # 兩者有些不同,原因可能是第一種方法是專門為“對稱”的cDNA芯片設(shè)計,,而第二種是為非對稱設(shè)計,。 =========================================================================== 4.2 類型2的芯片 參考文獻8.4和8.5節(jié)。其中用到了model.matrix()這個函數(shù),,什么意思,? 4.3 正交實驗 參考文獻8.6和8.7節(jié),。 4.4 將兩個通道分開分析 參考文獻8.8節(jié) 5. 做圖 5.1 背景和前景 imageplot(z, layout, low = NULL, high = NULL, ncolors = 123, zerocenter = NULL, zlim = NULL, mar=c(2,1,1,1), legend=TRUE, ...) z:可以定義R/Rb/G/Gb,也可以是導(dǎo)數(shù),; low/high:規(guī)定顏色,,比如low = "white" , high = "red" 下圖是一張芯片的綠色前景圖、紅色背景圖和log-ratio圖(M值圖): ======================================================= > imageplot(log2(beta7$G[, 1]), beta7$printer, low = "white", high = "green") > imageplot(log2(beta7$Rb[, 1]), beta7$printer, low = "white", high = "red") > imageplot(beta7q$M[, 1], beta7$printer) ======================================================= 也可以使用imageplot3by2(RG, z="Gb", prefix=paste("image",z,sep="-"), path=NULL, zlim=NULL, common.lim=TRUE, ...),,將圖以3*2的格式六個一組保存成圖片,。 5.2 M-A圖 使用plotMA(MA, array=1, xlab="A", ylab="M", main=colnames(MA)[array], xlim=NULL, ylim=NULL, status, values, pch, col, cex, legend=TRUE, zero.weights=FALSE, ...)畫單個MA圖。但這個函數(shù)有些問題,,有時畫不出,。所以,完全可以自己來畫,,比如: ========================================================== # plot the MAplot befor normalization > M <- log2((beta7$R[, 1]-beta7$Rb[, 1])/(beta7$G[, 1]-beta7$Gb[, 1])) > A <- (log2((beta7$R[, 1]-beta7$Rb[, 1]))+log2((beta7$G[, 1]-beta7$Gb[, 1])))/2 > plot(A, M, cex = 0.5) # we can also plot the MAplot above using marray package > beta7ma <- as(beta7, "marrayRaw") > plot(maA(beta7ma)[,1], maM(beta7ma)[, 1]) # plot the MAplot after normalization > plot(beta7q$A[, 1], beta7q$M[, 1], cex = 0.5) =========================================================== 使用plotPrintTipLoess(object,layout,array=1,span=0.4,...)畫print-tip的MA圖,,下圖分別是歸一化前和后的print-tip的MA圖。 使用boxplot()畫盒箱圖,,使用plotDensity()畫密度曲線圖,。下圖為原始數(shù)據(jù)、組內(nèi)歸一化(method = "normexp", normexp.method="mle")和組建歸一化(method = "scale")的盒箱圖,。 最后,,還可以使用 volcanoplot(fit, coef=1, highlight=0, names=fit$genes$ID, xlab="Log Fold Change", ylab="Log Odds", pch=16, cex=0.35, ...)畫“火山圖”(highlight標記前N個差異基因); 使用vennDiagram(object, include="both", names, mar=rep(1,4), cex=1.5, lwd=1, circle.col, counts.col, show.include, ...)畫“韋恩圖”,; 使用plotMDS()繪制多緯標度圖(multidimensional scaling plot, MDS),。 參考文獻:limma: Linear Models for Microarray Data User’s Guide |
|