## My previous response included only half the file.
## This is based on ?aov
## From Venables and Ripley (2002) p.165.
data(npk, package="MASS")
## as a test, not particularly sensible statistically
npk.aovE <- aov(yield ~ N*P*K + Error(block), npk)
np.k.aovE <- aov(yield ~ N*P+K + Error(block), npk)
anova(np.k.aovE, npk.aovE) ## doesn't work, as query noted
## Compare these two
summary(npk.aovE)
summary(np.k.aovE)
## The block stratum has the same total in both summaries.
## In this example, the two suppressed interactions are last and
## both are not significant.
## In order to use anova(model.1, model.2), it is necessary to
## rewrite the SAME models without the Error function.
## Use terms( , keep.order=TRUE) and the dummy variables that were
## generated in the multi-stratum model.
npk.proj <- proj(npk.aovE)
npk.x <- npk.proj$block[,"N:P:K"]
npk.aov <- aov(terms(yield ~ npk.x + block + N+P+K+N:P+N:K+P:K,
keep.order=TRUE), npk)
np.k.aov <- aov(terms(yield ~ block + N+P+K+N:P, keep.order=TRUE), npk)
summary(npk.aov)
summary(np.k.aov)
anova(npk.aov, np.k.aov)