10.1 背景介绍
现在考虑一个双色微阵列实验,其中所有的阵列都使用了通用参照。如果在整个实验中将相同的通道作为通用参照,则可以对表达值的log-ratios进行精确分析,就好像是通过单通道实验获得的基因表达log值一样。在这些情况下,可以像单通道实验一样设计微阵列。
当通用参照进行了染色交换实验后,最简单的方法是使用modelMatrix()
函数和目标文件设置设计矩阵。
10.2 两组
现在假设我们希望使用与通用参照RNA(Ref)杂交的阵列比较两只野生型(Wt)小鼠与三只突变(Mu)小鼠:
FileName | Cy3 | Cy5 |
---|---|---|
File1 | Ref | WT |
File2 | Ref | WT |
File3 | Ref | Mu |
File4 | Ref | Mu |
File5 | Ref | Mu |
这里的关注点在于突变型小鼠和野生型小鼠之间的比较。我们可以通过两种主要方法进行比较:
- 创建一个设计矩阵,其中包含突变体与野生型差异的系数,
- 创建一个设计矩阵,其中包括野生型和突变型小鼠分别的系数,然后提取差异作为对比。
对于第一种方法,设计矩阵应如下:
> design
WTvsREF MUvsWT
Array1 1 0
Array2 1 0
Array3 1 1
Array4 1 1
Array5 1 1
这里第一个系数估计每个探针野生型和参考之间的差异。第二个系数估计突变型和野生型之间的差异。对于那些不熟悉线性回归模型矩阵的人,可以通过以下方式理解它。矩阵代表每个阵列使用的系数。对于前两个阵列,拟合值只是WTvsREF
系数,这显然是正确的。对于其余的阵列 ,拟合值应该是WTvsREF + MUvsWT
,等效于突变与参照的对比,也是正确的。由于原因稍后将显而易见,有时我们将其称为实验组-对照组参数化。可以通过下面的命令发现差异表达基因:
> fit <- lmFit(MA, design)
> fit <- eBayes(fit)
> topTable(fit, coef="MUvsWT", adjust="BH")
这里不需要使用contrasts.fit()
,因为针对关注点的比较已经内置在拟合模型中。这个分析类似于经典的混合双样本t检验,只不过不同之处在于基因之间已经借用了信息。
对于第二种方法,设计矩阵应该是
> design
WT MU
Array1 1 0
Array2 1 0
Array3 0 1
Array4 0 1
Array5 0 1
现在,第一个系数代表野生型与参照,第二个系数代表突变型与参照。我们感兴趣的比较是这两个系数之间的差异,我们将其称为分组参数化。可以通过下面的命令发现差异表达基因
> fit <- lmFit(MA, design)
> cont.matrix <- makeContrasts(MUvsWT=MU-WT, levels=design)
> fit2 <- contrasts.fit(fit, cont.matrix)
> fit2 <- eBayes(fit2)
> topTable(fit2, adjust="BH")
结果与第一种方法完全一致。
设计矩阵可以通过下面的方法构建:
- 手动
- 使用
limma
软件包中的modelMatrix()
函数 - 使用R语言内置的
model.matrix()
函数
将Group定义为
> Group <- factor(c("WT","WT","Mu","Mu","Mu"), levels=c("WT","Mu"))
对于第一种方法,实验组-对照组参数化,设计矩阵可以通过下面的命令计算
> design <- cbind(WTvsRef=1,MUvsWT=c(0,0,1,1,1))
或者通过
> param <- cbind(WTvsRef=c(-1,1,0),MUvsWT=c(0,-1,1))
> rownames(param) <- c("Ref","WT","Mu")
> design <- modelMatrix(targets, parameters=param)
或者通过
> design <- model.matrix(~Group)
> colnames(design) <- c("WTvsRef","MUvsWT")
上面三种命令的计算结果一致。
对于第二种方法,分组参数化,设计矩阵可以通过下面的命令计算
> design <- cbind(WT=c(1,1,0,0,0),MU=c(0,0,1,1,1))
或者通过
> param <- cbind(WT=c(-1,1,0),MU=c(-1,0,1))
> rownames(param) <- c("Ref","WT","Mu")
> design <- modelMatrix(targets, parameters=param)
或者通过
> design <- model.matrix(~0+Group)
> colnames(design) <- c("WT","Mu")
上面三种命令的计算结果一致。
10.3 若干组
上述分为两组的方法很容易扩展到任何数量的组。假设有三个RNA靶标进行比较,这三个目标称为 “RNA1”,“RNA2” 和 “RNA3”,目标矩阵有可能是
FileName | Cy3 | Cy5 |
---|---|---|
File1 | Ref | RNA1 |
File2 | RNA1 | Ref |
File3 | Ref | RNA2 |
File4 | RNA2 | Ref |
File5 | Ref | RNA3 |
可以使用下面的命令创建设计矩阵
> design <- modelMatrix(targets, ref="Ref")
经过处理之后,分析就完全等同于9.3章节的单通道实验了。例如,为了得到三组之间的两两比较结果,需要运行以下命令
> fit <- lmFit(eset, design)
> contrast.matrix <- makeContrasts(RNA2-RNA1, RNA3-RNA2, RNA3-RNA1,
+ levels=design)
> fit2 <- contrasts.fit(fit, contrast.matrix)
> fit2 <- eBayes(fit2)
等等。