[BioC] limma, voom, weights: factorial versus nested interaction results

Reiner Schulz reiner.schulz at kcl.ac.uk
Wed Jan 2 13:31:58 CET 2013


Dear all,

Am analysing an RNA-seq experiment with a two-way factorial design, and
am observing different results for two contrasts of interest depending
on whether I use a factorial model matrix or a nested interaction model
matrix. I only observe this if the data are pre-processed w/ voom:
> counts.voom= voom( ...
i.e., when there are observational level weights passed to lmFit. If I
only pass counts.voom$E (no observational level weights) to lmFit, the
results for the two contrasts of interest are identical for the
factorial and nested interaction model matrices.
Is this to be expected, and if so, what is the explanation?

Much appreciated, Reiner

PS: some more details ...

> strain
 [1] MUT MUT MUT MUT MUT MUT MUT MUT MUT MUT MUT MUT MUT WT  WT  WT  WT
 WT  WT
[20] WT  WT  WT  WT  WT  WT  WT
Levels: WT MUT
> treat
 [1] U  T2 T1 U  T2 T1 U  U  T2 T1 U  T2 T1 U  T2 T1 U  T2 T1 U  U  T2
T1 U  T2
[26] T1
Levels: U T1 T2

> cond= factor( paste( sep='.', strain, treat), lev=c('WT.U', 'MUT.U',
'WT.T1', 'MUT.T1', 'WT.T2', 'MUT.T2'))
> design.matrix= model.matrix( ~0 + cond)
> design.matrix
   WT.U MUT.U WT.T1 MUT.T1 WT.T2 MUT.T2
1  0    1     0     0      0 	 0
2  0    0     0     0      0 	 1
3  0    0     0     1      0 	 0
4  0    1     0     0      0 	 0
5  0    0     0     0      0 	 1
6  0    0     0     1      0 	 0
7  0    1     0     0      0 	 0
8  0    1     0     0      0 	 0
9  0    0     0     0      0 	 1
10 0    0     0     1      0 	 0
11 0    1     0     0      0 	 0
12 0    0     0     0      0 	 1
13 0    0     0     1      0 	 0
14 1    0     0     0      0 	 0
15 0    0     0     0      1 	 0
16 0    0     1     0      0 	 0
17 1    0     0     0      0 	 0
18 0    0     0     0      1 	 0
19 0    0     1     0      0 	 0
20 1    0     0     0      0 	 0
21 1    0     0     0      0 	 0
22 0    0     0     0      1 	 0
23 0    0     1     0      0 	 0
24 1    0     0     0      0 	 0
25 0    0     0     0      1 	 0
26 0    0     1     0      0 	 0

> design.matrix.alt= model.matrix( ~strain + strain:treat)
> design.matrix.alt
   Intercept MUT WT:T1 MUT:T1 WT:T2 MUT:T2
1  1         1   0     0      0     0
2  1         1   0     0      0     1
3  1         1   0     1      0     0
4  1         1   0     0      0     0
5  1         1   0     0      0     1
6  1         1   0     1      0     0
7  1         1   0     0      0     0
8  1         1   0     0      0     0
9  1         1   0     0      0     1
10 1         1   0     1      0     0
11 1         1   0     0      0     0
12 1         1   0     0      0     1
13 1         1   0     1      0     0
14 1         0   0     0      0     0
15 1         0   0     0      1     0
16 1         0   1     0      0     0
17 1         0   0     0      0     0
18 1         0   0     0      1     0
19 1         0   1     0      0     0
20 1         0   0     0      0     0
21 1         0   0     0      0     0
22 1         0   0     0      1     0
23 1         0   1     0      0     0
24 1         0   0     0      0     0
25 1         0   0     0      1     0
26 1         0   1     0      0     0

Observed equalities (as expected):
MUT == MUT.U - WT.U
WT:T1 == WT.T1 - WT.U
MUT:T1 == MUT.T1 - MUT.U
WT:T2 == WT.T2 - WT.U
MUT:T2 == MUT.T2 - MUT.U
MUT:T1 - WT:T1 == (MUT.T1 - MUT.U) - (WT.T1 - WT.U)
MUT:T2 - WT:T2 == (MUT.T2 - MUT.U) - (WT.T2 - WT.U)

Observed inequalities (only w/ voom pre-processed data; unexpected):
WT:T1 - WT:T2 != (WT.T1 - WT.U) - (WT.T2 - WT.U)
MUT:T1 - MUT:T2 != (MUT.T1 - MUT.U) - (MUT.T2 - MUT.U)

--



More information about the Bioconductor mailing list