How can i apply moderated t-test in Anova as ebayes function used in limma?

Please Help

Thanks

Moderated t-test in Anova

0

Entering edit mode

How can i apply moderated t-test in Anova as ebayes function used in limma?

Please Help

Thanks

1

Entering edit mode

Following up on James' comment, the best example is in Section 9.3 of the user's guide. This does a moderated F-test for the ANOVA-style comparison, rather than a t-test. Generally speaking, we need to:

- Use
`makeContrasts`

to define all of the comparisons you're interested in. For an ANOVA-style test for equality across multiple groups, we can define all pairwise comparisons between groups (note that we don't really need all pairwise comparisons, but this approach gives us all of the relevant log-fold changes in the downstream results, so we might as well do it). - Use
`contrasts.fit`

to re-fit the linear model according to the contrast matrix from step 1. - Use
`eBayes`

to perform empirical Bayes shrinkage on the refitted model from step 2. - Use
`topTable`

without any`coef`

specified (i.e., set to`NULL`

). This will do an ANOVA-style test for all of the comparisons at once.

If you need more advice, you'll have to give specific details about your samples, experimental design and comparisons of interest.

0

Entering edit mode

In an attempt to provide some clarification for the OP, I'd like to ask (and try to answer) what was left unsaid here.

You say that "note that we don't really need all pairwise comparisons", which might lead one to ask "**well, how many contrast do I have to input to get the same result?**" So I thought I'd go about *the guerrilla statistician's* way to answer this question.

Using some data I have lying around here, I cut it down so that it very much resembles the dataset that is being used in Section 9.3, with the slightly modified code below in the hopes that it makes comparisons more clear.

Here is the setup described in the user's guide:

fit0 <- lmFit(eset, design) cm1 <- makeContrasts(RNA2-RNA1, RNA3-RNA2, RNA3-RNA1, levels=design) fit1 <- eBayes(contrasts.fit(fit0, cm1))

And now the pvalues for the ANOVA are in `fit1$F.p.value`

So what is the minimal number of contrasts we need to setup to get the same value?

Replacing `cm1`

with either of these two gives you *practically* equal, **but not identical** `$F.p.value`

's as above.

cm2a <- makeContrasts(RNA2-RNA1, RNA3-RNA1, levels=design) fit2a <- eBayes(contrasts.fit(fit0, cm2a)) cm2b <- makeContrasts(RNA2-RNA1, RNA3-RNA2, levels=design) fit2b <- eBayes(contrasts.fit(fit0, cm2b))

A plot of `plot(-log10(fit1$F.p.value), -log10(fit2a$F.p.value))`

(or `y=-log10(fit2b$F.p.value)`

) gets you a plot that's basically on the 45, except that a few points are off the diagonal. These points, however, are from pvalues that are super highly significant (ie. > 7 in -log10 space) that the downstream results you get from these would most likely be identical.

Still, the question remains: are these two analysis really (theoretically) equivalent to the one outlined in Section 9.3?

As an aside, you could also get the same `$F.p.value`

you get from `cm2a`

by fitting a design *with* an intercept, and grabbing the multi-coef comparison's pvlaue (`topTable(..., coef=2:3)$P.Value`

) like so:

design.icept <- model.matrix(~ Target, target) fit.icept <- eBayes(lmFit(eset, design.icept)) tt <- topTable(fit.icept, 2:3, Inf, sort.by='none')

Now `tt$P.Value`

is *exactly* (not approximately) the same as `fit2a$F.p.value`

1

Entering edit mode

There's some approximation in `contrasts.fit`

, but that's only relevant if you have non-orthogonal designs and weights (so it shouldn't have any effect here). The differences that you mention between `fit1`

, `fit2a`

and `fit2b`

are *probably* due to numerical issues or differences in termination of the fitting iterations.

Of course, I'm sure you're aware that - in theory, at least - there should be no difference. The null hypothesis in `cm2a`

and `cm2b`

should be the same as that in `cm`

. For example, with `cm2a`

, if RNA2 - RNA1 = 0, and RNA3 - RNA1 = 0, then RNA3 - RNA2 must also equal zero. There's no need to state the last one.

1

Entering edit mode

limma easily does anova-style F-tests, but with empirical Bayes moderation. You can use in limma on any model formula that you would use for the anova() function (except for those with random factors).

Suppose you have a matrix of expression values y and an experimental factor group. To do a oneway anova for the first gene, you might use:

out <- anova(y[1,] ~ group) summary(out)

In limma you do this:

design <- model.matrix(~group) fit <- lmFit(y, design) fit <- eBayes(fit) topTable(fit)

This does a moderated oneway anova for every gene in your dataset, not just one.

There is absolutely no way to use anova() to do an empirical Bayes analysis like limma does. anova() does a univariate analysis for one gene only, and empirical Bayes analysis is not possible for just one gene.

0

Entering edit mode

Hi,

Sorry if I am confusing your question but I think you're asking how to calculate a moderated t-statistic without using limma (for high-dimensional data)? I think you have to write your own function or just simply use limma.

If, for whatever reason, you do not want to use limma:

Here's how I would approach this but there may be a more efficient way someone else can point out:

(0) How many samples do you have? If you have a lot then you can just do a t-test.

(1) First take a look at Gorfon Smyth's paper on the moderated t statistic (formula on page 8): http://www.statsci.org/smyth/pubs/ebayes.pdf

(2) Using the notation in the paper, there are two quantities needed for the moderated t-test: d_{0} and s_{0}, the prior d.o.f and standard deviation. So if you download the limma package, there is a function called "squeezeVar()" (I think there's a file in the R directory called "squeezeVar.R") that returns both d_{0} and s_{0}.

So I would create a new function, fit your linear model, use squeezeVar() to calculate s_{0} and d_{0} and then calculate the moderated t-statistic.

0

Entering edit mode

As u know limma and Anova are two different approaches for gene analysis. I want to ask that in limma we can perform moderated t-test using ebayes function as it take parameter of model created by lm.fit but we use lm function for creating model in anova and the model created by annova does not work in ebayes. So can we apply moderated t-test in annova or what is the test name for anova similiar to ebays in limma or what is the best test for annova type model.

Thanks for your answers please guide in this.

Similar Posts

Loading Similar Posts

Traffic: 260 users visited in the last hour

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

Have you read the limma User's guide? There are multiple worked examples of how to do what you ask.