[R] Running an ANOVA with a BY

xavier.chardon at free.fr xavier.chardon at free.fr
Tue Sep 29 10:45:48 CEST 2009


Or with plyr there's a more flexible approach:

res.aov <- dlply(warpbreaks, .(tension), function(x) aov(breaks ~ wool, data=x))
# aov results are stored in a list, you can directly extract what you want with l*ply

l_ply(res.aov, function(x) print(summary(x)))
ldply(res.aov, function(x) data.frame( fitted(x)))
ldply(res.aov, coefficients)

HTH,

Xavier

----- Mail Original -----
De: "Tobias Verbeke" <tobias.verbeke at gmail.com>
À: "baxterj" <jdew at vt.edu>
Cc: r-help at r-project.org
Envoyé: Lundi 28 Septembre 2009 22h55:34 GMT +01:00 Amsterdam / Berlin / Berne / Rome / Stockholm / Vienne
Objet: Re: [R] Running an ANOVA with a BY

baxterj wrote:
> I downloaded the package and got it to work with the coding:
> 
> model <- function(df) {aov(values ~ WellID, data = twelldata)}

Hmm.. I guess you mean to use 'data = df' instead of 'data = twelldata'

> ANOVA1way <- dlply(twelldata, .(Analyte), model)
> print(ANOVA1way)
> 
> This gives me degrees of freedom and sum of squares for each anova per
> analyte. However, I cant get the summary(ANOVA1way) to work so that I can
> get p-values, etc...  How can I do this? 

You need to extend your model function:
   - extract the bits you want
   - construct a result data frame
   - return it

and use a ddply

For example (non-tested):

model <- function(df) {
   lmObj <- lm(values ~ WellID, data = df)
   summaryLmObj <- summary(lmObj)
   res <- data.frame(intercept = coef(lmObj)[1],
      adjr2 = summaryLmObj$adj.r.squared) # extract and insert anything
   return(res)
}

(ANOVA1way <- ddply(twelldata, .(Analyte), model))

HTH,
Tobias

> Tobias Verbeke-2 wrote:
>> baxterj wrote:
>>> I have a simple 1 way anova coded like
>>>
>>> summary(ANOVA1way <- aov(Value ~ WellID, data = welldata))
>>>
>>> How can I use the BY function to do this ANOVA for each group using
>>> another
>>> variable in the dataset??  I tried coding it like this, but it doesn't
>>> seem
>>> to work.
>>>
>>> summary(ANOVA1way <- by(welldata, Analyte, function(x) aov(Value ~
>>> WellID,
>>> data = welldata)))
>>>
>>> In SAS I would code it like this:
>>> Proc sort data=welldata; by analyte; run;
>>> Proc glm data=welldata;
>>> by analyte;
>>> class wellid;
>>> model value = wellid;
>>> run;
>> Look at the plyr package for a general solution to
>> this type of problems:
>>
>> http://cran.r-project.org/web/packages/plyr/index.html
>>
>> and its introductory guide on the package home page:
>>
>> http://had.co.nz/plyr/
>>
>> HTH,
>> Tobias
>>
>> ______________________________________________
>> R-help at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide
>> http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>>
>>
>

______________________________________________
R-help at r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.




More information about the R-help mailing list