edgeR: how to make contrasts with makeContrasts
0
3
Entering edit mode
5.4 years ago
m98 ▴ 420

I am very new to RNAseq analysis and I am learning how to use edgeR to perform differential gene expression. I am quite confused about how contrasts work. According to the manual:

design <- model.matrix(~0+group, data=y$samples)
colnames(design) <- levels(y$samples$group)
design
         A B C
sample.1 1 0 0 
sample.2 1 0 0 
sample.3 0 1 0 
sample.4 0 1 0 
sample.5 0 0 1
  

One can compare any of the treatment groups using the contrast argument of the glmQLFTest or glmLRT function. For example,

 fit <- glmQLFit(y, design)
 qlf <- glmQLFTest(fit, contrast=c(-1,1,0))
 topTags(qlf)
  

will compare B to A. The meaning of the contrast is to make the comparison -1A + 1B + 0*C, which is of course is simply B-A.

I have to admit I don't understand this. In other words, I don't understand the "maths" behind it: is B - A the same as A -B? Does the order of the columns matter in the design? And I'm guessing you shouldn't have an intercept in your design matrix if you need to make contrasts?

I've been trying to practise on some real data given to me and apply this:

I have 9 samples, split into 3 groups: wildtype (WT), knockout1 (KOA), knockout2 (KOB). The aim (given to me) was "we need to compare each KO with WT". Therefore, I made the following design matrix:

# Quick overview of my DGEList $counts
head (y$counts)
#       KOA1  KOA2  KOA3   KOB1   KOB2   KOB3   WT1   WT2   WT3
# gene1   12    24    45     34     45     26    16    20    24
# gene2 8007 14031 13076  12305  14154   8805 15194 18854 12634
# gene3   12    43    37    104     44     44    28    59    18
# gene4  553   759   955    736    631    517   829   894   997
# gene5 1232  2139  2417   2402   2148   1652  1899  2409  2959
# gene6  643   766   826    239    623    532   314   318   787

# Make model matrix
Geno <- factor(substring(colnames(y),1,nchar(colnames(y))-1))
design <- model.matrix(~0+Geno)
design
  GenoKOA   GenoKOB GenoWT
1       1         0      0
2       1         0      0
3       1         0      0
4       0         1      0
5       0         1      0
6       0         1      0
7       0         0      1
8       0         0      1
9       0         0      1
attr(,"assign")
[1] 1 1 1
attr(,"contrasts")
attr(,"contrasts")$Geno
[1] "contr.treatment"

# Estimate dispersion and fit glm
y <- estimateDisp(y, design, robust = TRUE)
fit <- glmQLFit(y, design, robust = TRUE)

# Make contrast and test
my.contrasts <- makeContrasts(WTvsKOA=GenoKOA-GenoWT, WTvsKOB=GenoKOB-GenoWT, levels = design)

qlf.WTvsKOA <- glmQLFTest(fit, contrast = my.contrasts[,"WTvsKOA"])
qlf.WTvsKOB <- glmQLFTest(fit, contrast = my.contrasts[,"WTvsKOB"])

Both my tests find 0 over-expressed and under-expressed and I am unsure as to why that is. It may be unrelated to my commands (replicates from KOA do not cluster together on my plotMDS graph). But either way, my questions remain: am I making the contrasts correctly?

Any help would be deeply appreciated.

ngs edgeR makeContrasts glm dge • 9.0k views
ADD COMMENT

Login before adding your answer.

Traffic: 1878 users visited in the last hour
Help About
FAQ
Access RSS
API
Stats

Use of this site constitutes acceptance of our User Agreement and Privacy Policy.

Powered by the version 2.3.6