Main effects in multi-level experiment in limma
1
1
Entering edit mode
@eleonoregravier-8219
Last seen 20 months ago
France

Hi BioC community,

 

I have proteomics data with a multi-level experiment design, of the same type of the one described at paragraph 8.7 in limma user’s guide :

  • I have 7 patients in Condition A and 7 patients in Condition B (all patients are distinct)
  • For each patient, I have data from two tissue types (Tissue=T1 or T2)

The questions are :

  • 1/Are there differentially expressed proteins between the two groups ?
  • 2/Are there differentially expressed proteins between the two tissue types ?
  • 3/ Are there differentially expressed proteins between the two tissue type in the A group?
  • 4/ Are there differentially expressed proteins between the two tissue type in the B group?
  • 5/ Are there differentially expressed proteins between the two groups for the tissue type 1?
  • 6/ Are there differentially expressed proteins between the two groups for the tissue type 2?

 

As described in the user's guide, the questions 3 to 6 are directly resolved by :

>Treat <- factor(paste(targets$Condition,targets$Tissue,sep=".")) # here targets is the same than the one in the user's guide
>design <- model.matrix(~0+Treat)
> colnames(design) <- levels(Treat)
> corfit <- duplicateCorrelation(eset,design,block=targets$Subject)
> corfit$consensus
> fit <- lmFit(eset,design,block=targets$Subject,correlation=corfit$consensus)
> cm <- makeContrasts(
+ Tissue2vsTissue1ForgpA = A.2-A.1,
+ Tissue2vsTissue1ForgpB= B.2-B.1,
+ gpBvsgpAForTissue1= B.1-A.1,
+ gpBvsgpAForTissue2 = B.2-A.2,
+ levels=design)
> fit2 <- contrasts.fit(fit, cm)
> fit2 <- eBayes(fit2)

For question 3 to 6 :

>topTable(fit2, coef="Tissue2vsTissue1ForgpA")
>topTable(fit2, coef="Tissue2vsTissue1ForgpB")
>topTable(fit2, coef="gpBvsgpAForTissue1")
>topTable(fit2, coef="gpBvsgpAForTissue2 ")

To control the false discovery rate at 5% across all proteins and all contrasts:

> results <- decideTests(fit2,method="global")
> summary(results)

 

Now, my question is : How to answer to the questions 1 and 2 ?

I would have written topTable(fit2, coef=3 :4) for question 1 and topTable(fit2, coef=1:2) for question 2 ?

 

But this doesn’t give the main effects for condition (and tissue type) because here we does not work globally for the condition, but rather within each tissue type. A main effect is the difference in average expression of the protein between the two conditions, omitting the distinction between the 2 tissue types.

 

On the other hand, if I write:

 

design <- model.matrix(~Condition*Tissue, data=targets), the coefficient ConditionB is NOT the main effect as it is the difference between conditions within Tissue 1 …. so how can I get these two main effects please ?

 

May be I am wrong… and any help would be welcome,

Thanks in advance,

Best,

Eléonore

limma multifactorial design • 1.6k views
ADD COMMENT
1
Entering edit mode
@ryan-c-thompson-5618
Last seen 7 months ago
Scripps Research, La Jolla, CA

If you're asking how to test for a difference between groups A and B in the average expression across both tissues, and a difference between the two tissues of the average expression across both groups, you need to write a few new contrasts:

cm2 <- makeContrasts(
    gpBvsgpA = (B.1+B.2)/2 - (A.1+A.2)/2,
    Tissue2vsTissue1= (A.2+B.2)/2 - (A.1+B.1)/2,
    levels=design)

These might require a separate call to contrasts.fit, since they are linearly dependent with your existing contrasts (I forget what it does with linearly dependent contrasts). However, you should note that this is not the same as testing the main effects. You're testing the midpoint between two group means vs the midpoint between two other group means. As far as I know, a true test of the main effects would require a model with no interaction term.

ADD COMMENT

Login before adding your answer.

Traffic: 735 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