R中的model.matrix和makeContrasts

时间:2017-02-09 18:29:03

标签: r matrix bioinformatics bioconductor contrast

我想通过R中的线性回归建模做一些对比。我有以下数据,mat1

   Gene1    Gene2   Gene3
1  5.89     7.45    2.66
2  8.99     5.39    1.58
3  3.67     6.88    4.82
4  8.25     8.76    3.58

我使用以下代码创建设计矩阵:

library(limma)
expression <- factor(mat1)
design <- model.matrix(~0 + expression)
colnames(design) <- levels(expression)

设计矩阵看起来很奇怪。并且行数和列数已更改。错误在哪里?

以下是我想要继续使用的下一段代码:

fit <- lmFit(mat1, design)
contrast.matrix <- makeContrasts(Gen1 - Gen2, levels = design)
fit2 <- contrasts.fit(fit, contrast.matrix)
fit2 <- eBayes(fit2)

这是正确的方法吗?也许任何人都可以帮助我。感谢。

2 个答案:

答案 0 :(得分:1)

使用线性模型分析基因表达的一般语法看起来是正确的,包括contrast.matrix。但是,我担心您的代码不提供样本特征的信息(也就是患者研究中的临床协变量)。我不确定您正在测试的问题/假设是什么。例如,如果您要比较治疗(通常用1编码)与不治疗(0),您可以运行:

design <- model.matrix( ~ feature$treatment)

其中feature是带有临床信息的矩阵或data.frame。

在没有看到您的实际数据和样本/临床功能的情况下,我最好的猜测是这两行代码出了问题:

design <- model.matrix(~0 + expression)
colnames(design) <- levels(expression)

即设计矩阵的设置。

您可能需要重新访问limma R / Bioconductor包,并在必要时通过示例。

答案 1 :(得分:0)

试试下面的代码:

fit <- lmFit(mat1, design)
contrast.matrix <- limma::makeContrasts(Gen1 - Gen2, levels = design)
fit2 <- limma::contrasts.fit(fit, contrast.matrix)
fit2 <- eBayes(fit2)