[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