1. 什么是標(biāo)準(zhǔn)化
廣義:為了使不同芯片的數(shù)據(jù)具有可比性
狹義:使芯片的均值(中位數(shù))相等
系統(tǒng)誤差來源
提取的RNA總量不同
RNA提取,逆轉(zhuǎn)錄汗捡,熒光標(biāo)記淑际,PCR擴增等各個環(huán)節(jié)的效率
DNA的質(zhì)量
變異會掩蓋真正有差異的基因
2. 標(biāo)準(zhǔn)化方法
方法1:管家基因法
選擇一組認為表達量不會變化的基因,并根據(jù)這幾個基因?qū)π酒M行校正
缺點:不知道哪些是表達量不變的基因扇住,不能保證這些基因在處理過程或癌變過程中表達不發(fā)生變化
關(guān)于管家基因的定義:通常認為對細胞的生命功能具有重要作用春缕,表達恒定并且通常表達量比較高的基因;另一個不同的定義是不同情況下該基因的表達在不同芯片中的rank相同艘蹋,選出這些基因并以他們?yōu)閰⒖歼M行標(biāo)準(zhǔn)化锄贼。
方法2:spike-ins外加合成序列法
引入一些能控制相對密度的標(biāo)志序列及探針,并使用這些探針對剩余的探針進行標(biāo)準(zhǔn)化
缺點:不知道如何控制標(biāo)志序列與樣品的相對量
方法3:簡單縮放進行標(biāo)準(zhǔn)化
通過乘以一個標(biāo)準(zhǔn)化系數(shù)女阀,從而使不同芯片的數(shù)據(jù)的分布及均值大致相同宅荤,,從而使其具有可比性
缺點:不能保證MA plot為一條水平直線(可能有彎曲)浸策,如何確定標(biāo)準(zhǔn)化系數(shù)(是使用RNA總信號強度冯键,中位數(shù)還是其他的值?)
其他方法
同時使用spike-ins和簡單縮放進行標(biāo)準(zhǔn)化的榛,spike-ins包括很多不同強度的值琼了,并用它們來檢驗縮放后的值是否可信
基線
當(dāng)我談?wù)撟儺悤r,通常是以某個芯片作為基線即參考的,dChip算法是以表達值處于中位數(shù)的某個芯片為參考的
使用一組表達量不變的探針雕薪,并在不同信號強度區(qū)域使用不同的scale factor進行校正昧诱,該校正通是在兩個芯片之間進行的,該方法與在MA plot中擬和一條光滑曲線所袁,把M值與該曲線相減得到校正數(shù)據(jù)的方法相同盏档。
前提條件
通過縮放使90%的基因表達量具有可比性是否在當(dāng)兩個樣本的基因表達模式有很大差異時合理
縮放即百分位數(shù)法對芯片數(shù)據(jù)進行校正的前提條件是大多數(shù)基因的表達是沒有發(fā)生變化的,百分位數(shù)法對該假設(shè)的依賴性比縮放法更強燥爷,當(dāng)這個假設(shè)不成立時蜈亩,使用上述方法進行標(biāo)準(zhǔn)化是沒有意義的
大多數(shù)基因表達量不發(fā)生變化的情況有:
- 飽食/饑餓實驗
- 熱休克實驗
- 對比不同器官(?前翎?稚配?)
3. 如何評價不同的標(biāo)準(zhǔn)化方法
接下來的內(nèi)容基本上來自于Bolstad, Irizarry, Astrand 和 Speed(bekerley的文章 Bioinformatics, 2003, p.185-193
對于在生物學(xué)上認為表達相同的基因,在經(jīng)過標(biāo)準(zhǔn)后之后表達應(yīng)該是基本相等的
3.1 測試標(biāo)準(zhǔn)化方法的數(shù)據(jù)集
Affymetrix 拉丁方設(shè)計實驗數(shù)據(jù)
The Affymetrix Latin Square Experiment (Hu95Av2, repeated on Hu133A)港华,該數(shù)據(jù)集是合成的已知濃度序列道川,并按照拉丁方實驗設(shè)計進行芯片實驗。
其中U95Av2芯片共有14組合成的序列立宜,每組序列的濃度分別為: 0, 0.25, 0.5, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, and 1024 pM冒萄,至少重復(fù)三次后,每組合成序列的對應(yīng)濃度向前移位橙数,如第二個實驗中每組序列的濃度從 0.25 pM 開始并以 0 pM結(jié)尾尊流,共59個芯片。每組合成序列大多都是只含有一種序列灯帮,但組1含有2種序列崖技,組12是空白組。
Hu 133A芯片共42個芯片钟哥,有14組實驗响疚,每組實驗重復(fù)3次,共42個合成序列這些序列濃度范圍為0.125 pM 到 512 pM瞪醋,與U95 數(shù)據(jù)不同忿晕,該數(shù)據(jù)集包含更多合成序列,從更小的濃度開始银受,掃描儀器為GeneChip? Scanner 3000践盼,更少探針與序列交叉雜交的情況。
Gene Logic Dilution Data
75個Hu95Av2芯片宾巍,兩個組織來源:肝臟和中樞神經(jīng)系統(tǒng)咕幻,其中包括;
- 每種組織各自30個芯片
- 5種不同濃度顶霞,每個濃度重復(fù)6次
- 剩下的15個芯片是兩種組織的混合樣本
- 3中不同比例的樣品(27:75, 50:50, 75:25)锣吼,各自重復(fù)5次
4個·肝臟組織的芯片數(shù)據(jù)在Bioconductor的包affydata的內(nèi)置數(shù)據(jù)Dilution中
library(affydata)
data("Dilution")
pData(Dilution)
## liver sn19 scanner
## 20A 20 0 1
## 20B 20 0 2
## 10A 10 0 1
## 10B 10 0 2
varMetadata(phenoData(Dilution))
## labelDescription
## liver amount of liver RNA hybridized to array in micrograms
## sn19 amount of central nervous system RNA hybridized to array in micrograms
## scanner ID number of scanner used
A Gene Logic Spike In Dataset
98個 Hu95Av1芯片玄叠,共11 cRNA個合成序列拓提,其中26個芯片所有合成序列濃度相同,但不同芯片的濃度不同(芯片1濃度都為0代态,芯片2濃度都為0.5, 芯片3濃度都為0.75)西雀,剩下的芯片組成兩個拉丁方設(shè)計,每個水平3個重復(fù)判莉。
我們需要用到的數(shù)據(jù)是Dulition使用的5個肝臟樣本的數(shù)據(jù)(所有樣本都在同一個稀釋水平)
26個Gene Logic Spike In數(shù)據(jù)集的芯片,單個芯片上所有合成序列濃度相同
為什么Gene Logic公司做該實驗并提供數(shù)據(jù)锰镀,因為Gene Logic是最大的Affy芯片消費者之一,他們收集了非常多表達譜數(shù)據(jù)并進行銷售花鹅;他們想提高數(shù)據(jù)分析的質(zhì)量并為他們自己的方法打廣告,該數(shù)據(jù)可以在官網(wǎng)申請真友。
3.2 標(biāo)準(zhǔn)化驗證
標(biāo)準(zhǔn)化的方法共有:
library(affydata)
normalize.AffyBatch.methods()
## [1] "constant" "contrasts" "invariantset" "loess"
## [5] "methods" "qspline" "quantiles" "quantiles.robust"
3.2.1 基線方法
- 選擇一個芯片作為基線(中位數(shù))對所有芯片進行縮放(affy的算法是在匯總定量后使用該方法,但是這里我們使用探針?biāo)降臄?shù)據(jù)進行縮放)
- Nonlinear invariant rank方法進行標(biāo)準(zhǔn)化愈案,同樣選擇一個芯片作為基線
3.2.2 Complete Data方法(不需要選擇基線)
- Cyclic Loess(循環(huán)loess擬合)
- Contrasts
- Quantiles(分位數(shù)法)
Cyclic Loess方法
$$
M_{k} = log{2}(x{ki}/x{kj})
$$
i潦嘶,j代表芯片編號崇众,若$\hat{M_{k}}$為擬合的曲線锰蓬,校正后的M值應(yīng)該是
$$
M_{k}'=M_{k}-\hat{M_{k}}
$$
那么我們?nèi)绾蝸硇U總€芯片的值呢?該方法使用對稱校正的方法
$$
x'{ki} = 2^{A{k}+0.5\bullet M'_{k}}
$$
$$
x'{ki} = 2^{A{k}-0.5\bullet M'_{k}}
$$
對所有芯片都進行校正舱卡,通常需要重復(fù)2~3次轮锥,但是該方法運行速度較慢(n個芯片計算的時間復(fù)雜度至少是O(n^2))
Contrast Based Normalization
詳細算法可見該文章:Contrast Normalization of Oligonucleotide Arrays
- 最開始的輸入是一個n*k的矩陣,n代表features數(shù),k代表芯片編號饲握,該矩陣已經(jīng)經(jīng)過log2轉(zhuǎn)化
- 乘以正交對比矩陣(線性代數(shù)的知識)后互拾,轉(zhuǎn)化后的第一列是所有芯片表達矩陣的均值(相當(dāng)MA plot相對于x-y plot的旋轉(zhuǎn)使曲線水平化)
- 再對除第一列以外的其他列進行曲線擬合,并校正除第一列以外的其他列(使均值為0)田篇,再進行矩陣逆運算得到校正后的表達矩陣
點評:該算法最主要的思想是對log密度值根據(jù)均值進行縮放(幾何均值)
比Cyclic Loess方法快泊柬,但計算速度仍較慢
Quantile分位數(shù)法
該方法的前提假設(shè)為每個芯片的表達數(shù)據(jù)分布都是完全相同的
- n個芯片p個探針組成一個p * n的矩陣X
- 對矩陣X的每一列分別進行排序冷守,使每一行的表達量值在相應(yīng)每一列的分位數(shù)都相同
- 計算每一行的均值亮钦,并替代原值,使得該矩陣同一行的數(shù)據(jù)完全相同
- 把每一列的數(shù)據(jù)位置還原,形成校正后的表達矩陣
該方法值涉及排序和做均值蚁滋,計算速度極快
為什么選擇均值作為新的表達量值澄阳?
當(dāng)我們以兩個芯片的表達量值分別作為x和y軸即做y-x plot時低剔,如果兩個樣本所有基因的分位數(shù)都相同,則形成一條完美的對角直線(y=x)
實際上,我們做的y-x plot越靠近y=x說明標(biāo)準(zhǔn)化效果越好开皿,而需要對n個芯片兩兩作圖笋妥,這提示使用均值作為新的表達量值
使用均值作為新的表達量春宣,我們不需要考慮縮放的問題,并且結(jié)果顯示對于對數(shù)化的數(shù)據(jù)和原始數(shù)據(jù)標(biāo)準(zhǔn)化效果都比較好,但是二者計算出來的新表達量值不同
我們更傾向于使用中位數(shù)而不是均值潦蝇,是否進行對數(shù)轉(zhuǎn)化不影響最終的標(biāo)準(zhǔn)化的值,雖然取均值和中位數(shù)時大部分差異并不的
3.2.3 選擇不同基線的影響
不同基線的選擇最后得出的表達值差異可能非常大
3.2.4 如何定義標(biāo)準(zhǔn)化是否成功
我們想要的結(jié)果是各個芯片數(shù)據(jù)的分布大致相同则酝,從而具有可比性,評價標(biāo)準(zhǔn)化是否成功最常用的就是MA plot
為了使之前的預(yù)處理相同爽雄,所有芯片的預(yù)處理均使用同一種方法挚瘟,如RMA方法處理背景信號
文章的一些結(jié)果
- 通常MA plot在標(biāo)準(zhǔn)化之前的直線有一定的曲率,這提示標(biāo)準(zhǔn)化過程需用曲線進行擬合订框,否則不使用非線性方法進行標(biāo)準(zhǔn)化
- 所有結(jié)果均顯示標(biāo)準(zhǔn)化之后的原始數(shù)據(jù)顯示出更小的變異性
- 使用complete data方法比baseline chip方法結(jié)果更好藤违,對于simple constant scaling比非線性方法如invariant rank set更好
- 三種complete data方法中,結(jié)果相差不大璧榄,quantile方法結(jié)果稍微更好,并且因為quantile方法的速度明顯比其他的快,因此他們推薦使用quantile方法
4. 如何進行標(biāo)準(zhǔn)化
首選要確認是否大部分基因的表達量沒有發(fā)生很大的改變
接著我們可以檢驗一下MA plot是否是水平的妒潭,如果是水平的我們就不需要使用quantiles方法進行標(biāo)準(zhǔn)化
如果MA plot不是水平的,我們再檢驗一下芯片的質(zhì)量(圖片)是否有人為的異常,如果沒有異常則可以使用quantiles方法處理
4.1 一次Bioconductor的冒險
我們的目標(biāo):重復(fù)文獻Bolstad et al. (2003)的研究,使用Bioconductor提供的數(shù)據(jù)
首選載入數(shù)據(jù)和函數(shù)
library(affy)
library(affydata)
data(Dilution)
以一個AffyBatch對象即Dilution數(shù)據(jù)開始(把CEL文件讀入創(chuàng)建的數(shù)據(jù))阱持,我們想測試不同標(biāo)準(zhǔn)化方法的效率及準(zhǔn)確性
預(yù)測處理步驟包括:
- Background correction
- Normalization
- PM correction
- Summary Quantification
4.2 是否需要標(biāo)準(zhǔn)化
# shows log intensities!
boxplot(Dilution, col=rainbow(4))
dev.copy(png,file="boxplot1.png")
dev.off()
分布密度圖
hist(Dilution,lty=1,col=rainbow(4),lwd=3, main="intensity distribution")
dev.copy(png,file="hist1.png", res=108)
dev.off()
MA plot(有參考基線)
par(mfrow=c(2,2))
MAplot(Dilution)
par(mfrow=c(1,1))
dev.copy(png,file="MAplot1.png", res=72)
dev.off()
MA plot(相互比較)
mva.pairs(Dilution)
## Error in log(new("AffyBatch", cdfName = "HG_U95Av2", nrow = 640L, ncol = 640L, : unused argument (2)
help(mva.pairs)
# a matrix containing the chip data in the columns.
提取AffyBatch對象為矩陣之后才能使用mva.pairs函數(shù),如果記不住證明提取數(shù)據(jù)矩陣滓窍,可以查看AffyBatch的slot
slotNames(Dilution)
## [1] "cdfName" "nrow" "ncol" "assayData"
## [5] "phenoData" "featureData" "experimentData" "annotation"
## [9] "protocolData" ".__classVersion__"
Dilution@cdfName
## [1] "HG_U95Av2"
Dilution@nrow
## [1] 640
Dilution@ncol
## [1] 640
Dilution@phenoData
## An object of class 'AnnotatedDataFrame'
## sampleNames: 20A 20B 10A 10B
## varLabels: liver sn19 scanner
## varMetadata: labelDescription
Dilution@experimentData
## Experiment data
## Experimenter name: Gene Logic
## Laboratory: Gene Logic
## Contact information: 708 Quince Orchard Road
## Gaithersburg, MD 20878
## Telephone: 1.301.987.1700
## Toll Free: 1.800.GENELOGIC (US and Canada)
## Facsimile: 1.301.987.1701
##
## Title: Small part of dilution study
## URL: http://qolotus02.genelogic.com/datasets.nsf/
## PMIDs:
##
## Abstract: A 68 word abstract is available. Use 'abstract' method.
## notes:
## :
##
Dilution@annotation
## [1] "hgu95av2"
Dilution@.__classVersion__
## R Biobase eSet AffyBatch
## "2.10.0" "2.5.5" "1.3.0" "1.2.0"
而其中的assayData
和phenoData
可以用了提取數(shù)據(jù)矩陣和樣本信息
Dilution@assayData
## $exprs
## 20A 20B 10A 10B
## 1 149.0 112.0 129.0 60.0
## 2 1153.5 575.3 1262.3 564.8
## ...
## 250 118.0 93.0 117.8 69.0
## [ reached getOption("max.print") -- omitted 409350 rows ]
class(Dilution@assayData)
## [1] "list"
length(Dilution@assayData)
## [1] 1
names(Dilution@assayData)
## [1] "exprs"
class(Dilution@assayData[[1]])
## [1] "matrix"
dim(Dilution@assayData[[1]])
## [1] 409600 4
樣本信息可以用以下命令
Dilution@phenoData
## An object of class 'AnnotatedDataFrame'
## sampleNames: 20A 20B 10A 10B
## varLabels: liver sn19 scanner
## varMetadata: labelDescription
class(Dilution@phenoData)
## [1] "AnnotatedDataFrame"
## attr(,"package")
## [1] "Biobase"
slotNames(Dilution@phenoData)
## [1] "varMetadata" "data" "dimLabels" ".__classVersion__"
Dilution@phenoData@data
## liver sn19 scanner
## 20A 20 0 1
## 20B 20 0 2
## 10A 10 0 1
## 10B 10 0 2
Dilution@phenoData@varMetadata
## labelDescription
## liver amount of liver RNA hybridized to array in micrograms
## sn19 amount of central nervous system RNA hybridized to array in micrograms
## scanner
我們也可以使用exprs提取AffyBatch對象中的數(shù)據(jù)矩陣
length(exprs(Dilution))
## [1] 1638400
dim(exprs(Dilution))
## [1] 409600 4
mva.pairs(exprs(Dilution))
dev.copy(png,file="MAplot2.png", res=72)
dev.off()
image(Dilution[,1],transfo=log2)
放大可以看到芯片頂部有特殊標(biāo)記(說明芯片沒有放反)
par(mfrow=c(1,2))
image(matrix(exprs(Dilution[,1]),
nrow=nrow(Dilution),
ncol=ncol(Dilution)),
main="raw intensity")
image(log2(matrix(exprs(Dilution[,1]),
nrow=nrow(Dilution),
ncol=ncol(Dilution))),
main="log intensity")
par(mfrow=c(1,1))
可以看出MA plot的線并不是非常水平,并且圖像沒有明顯認為誤差,可以使用quantiles進步標(biāo)準(zhǔn)化
4.3 背景校正
4.3.1 使用RMA校正背景
Dilution.bg <- bg.correct.rma(Dilution)
par(mfrow=c(1, 2))
hist(Dilution, lty=1, col=rainbow(4), lwd=3,
main="raw data")
hist(Dilution.bg, lty=1, col=rainbow(4), lwd=3,
main="background corrected")
## hist對AffyBatch對象默認進行l(wèi)og2處理植兰,并繪制PM的密度分布
## 下面的代碼與上面的代碼等價
plotDensity(log2(pm(Dilution)),
lty=1, col=rainbow(4), lwd=3,
main="raw data")
plotDensity(log2(pm(Dilution.bg)),
lty=1, col=rainbow(4), lwd=3,
main="background corrected")
log2處理后的分布如下圖
plotDensity(log2(exprs(Dilution)),
lty=1, col=rainbow(4), lwd=3,
main="raw data")
plotDensity(log2(exprs(Dilution.bg)),
lty=1, col=rainbow(4), lwd=3,
main="background corrected")
4.3.2 使用MAS校正背景
par(mfrow=c(1, 2))
Dilution.bg.rma <- bg.correct.rma(Dilution)
hist(Dilution.bg.rma, lty=1, col=rainbow(4), lwd=3,
main="RMA background corrected")
Dilution.bg.mas <- bg.correct.mas(Dilution)
hist(Dilution.bg.mas, lty=1, col=rainbow(4), lwd=3,
main="MAS background corrected")
par(mfrow=c(1, 1))
[圖片上傳失敗...(image-57c667-1525937569283)]
這說明不同的背景校正方法有比較大的差異筒繁,比較不同的標(biāo)準(zhǔn)化方法時膝晾,應(yīng)在相同背景校正方法的情況下進行比較
4.4 標(biāo)準(zhǔn)化
標(biāo)準(zhǔn)化的方法有:
normalize.AffyBatch.constant
normalize.AffyBatch.contrasts
normalize.AffyBatch.invariantset
normalize.AffyBatch.quantiles
首選不進行標(biāo)準(zhǔn)化的結(jié)果:
eset0 <- expresso(Dilution,
bgcorrect.method="rma",
normalize=FALSE,
pmcorrect.method="pmonly",
summary.method="medianpolish")
eset0是一個ExpressionSet對象禀忆,用exprs提取的矩陣維度變小了箩退,有原來的features(probes)變成了probesets
slotNames(eset0)
## [1] "experimentData" "assayData" "phenoData" "featureData"
## [5] "annotation" "protocolData" ".__classVersion__"
rownames(eset0@featureData@data)[10]
## [1] "1008_f_at"
eset0@assayData
## <environment: 0x286adb60>
ls(eset0@assayData)
## [1] "exprs" "se.exprs"
dim(get("exprs", eset0@assayData))
## [1] 12625 4
R中的環(huán)境:可以把R中的“pass by value”模式轉(zhuǎn)化為“pass by reference”模式
myEnv <- new("environment") frogs <- rnorm(5) assign("frogs",frogs,envir=myEnv) ls(myEnv) ## [1] "frogs"
得到未經(jīng)標(biāo)準(zhǔn)化數(shù)據(jù)每個probset的均值和方差
dim(exprs(eset0))
## [1] 12625 4
eset0.mu <- apply(exprs(eset0),1,"mean")
eset0.var <- apply(exprs(eset0),1,"var")
尋找middle behavior芯片
apply(exprs(Dilution), 2, "median")
## 20A 20B 10A 10B
## 188 127 149 94
constant方法與未經(jīng)標(biāo)準(zhǔn)化的樣本間差異比較
第三個為參考基線,用constant方法進行標(biāo)準(zhǔn)化
eset1 <- expresso(Dilution,
bgcorrect.method = "rma",
normalize.method = "constant",
normalize.param = list(refindex=3),
pmcorrect.method = "pmonly",
summary.method = "medianpolish")
eset1.mu <- apply(exprs(eset1),1,"mean")
eset1.var <- apply(exprs(eset1),1,"var")
MA plot對不同方法進行比較
A1 <- (eset0.mu + eset1.mu)/2
## M1是兩種方法對探針均值的影響比較,不能描述哪種方法比較好
M1 <- (eset0.mu - eset1.mu)/2
## M2是兩種方法對探針方差的影響比較娄涩,通常越好的方法越能減少樣本之間的差異
M2 <- (eset0.var / eset1.var)
M3 <- log2(eset0.var / eset1.var)
d0 <- 0.0001;
M4 <- log2((eset0.var + d0)/(eset1.var + d0))
plot(A1, M4,
xlab="(eset0.mu + eset1.mu)/2",
ylab="log2((eset0.var + 1e-04)/(eset1.var + 1e-04))",
main="Dilution: none against scaling")
# 大部分點都大于0扬虚,說明constant縮放標(biāo)準(zhǔn)化減少了方差
quantiles標(biāo)準(zhǔn)化方法與constant方法對樣本間差異性的影響比較
eset2 <- expresso(Dilution,
bgcorrect.method="rma",
normalize.method="quantiles",
pmcorrect.method="pmonly",
summary.method="medianpolish")
eset2.mu <- apply(exprs(eset2),1,"mean")
eset2.var <- apply(exprs(eset2),1,"var")
plot((eset1.mu+eset2.mu)/2,
log2((eset1.var + 1e-04)/(eset2.var + 1e-04)),
main="Dilution: scaling against quantiles")
# 大部分點都大于0咽斧,均值為0.98晋柱,說明quantiles方法比constant方法更能縮小樣本間的差異
改變背景校正方法為mas
以上我們比較的是不同標(biāo)準(zhǔn)化方法對樣本之間的差異性的影響拧额,通常該差異性也受不同背景校正方法和匯總法的影響侥锦,在上述比較中快毛,我們使用的是rma進行背景校正,匯總方法是median polish方法襟衰,接下來我們使用mas進行背景校正,median polish進行匯總苔悦,得到的比較結(jié)果如下
eset0 <- expresso(Dilution,
bgcorrect.method="mas",
normalize=FALSE,
pmcorrect.method="pmonly",
summary.method="medianpolish")
eset0.mu <- apply(exprs(eset0),1,"mean")
eset0.var <- apply(exprs(eset0),1,"var")
eset1 <- expresso(Dilution,
bgcorrect.method = "mas",
normalize.method = "constant",
normalize.param = list(refindex=3),
pmcorrect.method = "pmonly",
summary.method = "medianpolish")
eset1.mu <- apply(exprs(eset1),1,"mean")
eset1.var <- apply(exprs(eset1),1,"var")
eset2 <- expresso(Dilution,
bgcorrect.method="mas",
normalize.method="quantiles",
pmcorrect.method="pmonly",
summary.method="medianpolish")
eset2.mu <- apply(exprs(eset2),1,"mean")
eset2.var <- apply(exprs(eset2),1,"var")
plot((eset1.mu+eset0.mu)/2,
log2((eset0.var + 1e-04)/(eset1.var + 1e-04)),
main="Dilution: none against constant")
# 大部分點都大于0邑退,說明constant縮放標(biāo)準(zhǔn)化減少了方差
plot((eset1.mu+eset2.mu)/2,
log2((eset1.var + 1e-04)/(eset2.var + 1e-04)),
main="Dilution: scaling against quantiles")
# 大部分點都大于0蜈七,均值為0.265,說明quantiles方法比constant方法更能縮小樣本間的差異
Bioconductor還有一個R包
affycomp
能很方便對不同方法進行比較