简体   繁体   中英

N-way ANOVA in R

I need some help in performing N-way ANOVA in R to capture inter dependencies among different factors. In my data, there are around 100 different factors and I am using the following code to perform ANOVA.

model.lm<-lm(y~., data=data)
anova(model.lm)

As far as I know (may be I am wrong) that this performs 1-way ANOVA at each factor alone. For some reasons, I need to perform N-way ANOVA between all the 100 groups ie from x1 to x100. Do I need to specify each factor like the following or there is a shorthand notation for this?

model.lm<-lm(y~x1*x2*x3....,x100, data=data)
anova(model.lm)

You can use update.formula and the ~(.)^n notation.

Eg for a model including 3-way interactions from 4 variables a , b , c and d

update(~a+b+c+d, ~(.)^3)


## ~a + b + c + d + a:b + a:c + a:d + b:c + b:d + c:d + a:b:c + a:b:d + a:c:d + b:c:d

So for your example where you want to fit 100-way interactions, I would suggest thinking of a more appropriate model (especially if it is time you are accounting for here).

If you decide to continue with the basic ANOVA approach you could do something like this (and wait for R to crash due having memory issues due to your large data / inappropriate model.)

xvars <- paste0('x',1:100)
oneway <- reformulate(termlabels=  xvars, response = 'y')


horribleformula <- update(oneway, . ~ (.)^100)

horriblemodel <- lm(horribleformula, data=data)

Or (thanks to @Dason for picking this up)

 stillhorrible <- lm(y ~ .^100, data = data)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM