On Sun, 20 Feb 2005, Lorin Hochstein wrote:
> Hello all,
>
> (Apologies in advance if my terminology is incorrect, I'm relatively
new to R
> and statistics).
>
> I have data from a factorial design with two treatments (CRF-23), and
I'm
> trying to compute treatment-contrast interactions through analysis of
> variance. I can't figure out how to do contrasts properly, despite
reading
> the help for "C" and "contrasts" functions.
>
> (I'm actually trying to solve an exercise in a textbook:
"Experimental
> Design" by Kirk, Ex. 9.7b).
>
> Here's what my data looks like:
>
> score <- c(12, 8,10, 6, 8, 4,
> 10,12, 8, 6,10,14,
> 9, 7, 9, 5,11,12,
> 7,13, 9, 9, 5,11,
> 8, 7, 3, 8,12,10,
> 13,14,19, 9,16,14)
> n <- 6
> A <- gl(2,3*n,labels=c("a1","a2"))
> B <-
rep(gl(3,n,labels=c("b1","b2","b3")),2)
>
> I understand how to test for the effects of A, B, and AB:
> summary(aov(score~A*B))
>
> Let's say I want to compute some contrasts on B and see if there is an
> interaction with A. I try to specify a matrix with the columns being the
> different contrasts on B:
>
> contrasts.B <- matrix(c(1,-1,0,1,0,-1,0,1,-1),nrow=3)
> I know the following is wrong:
> summary(aov(score~A*B,contrasts=contrasts.B))
>
> I know I'm doing multiple things wrong here, because R can't
possibly know I
> want those contrasts to be for the "B" variable, and because
passing a
> contrast matrix never seems to change the result no matter what I do, so
> clearly I misunderstand how contrasts work. Can anyone advise?
There are only be two independent contrasts for a three-level factor, so
you need to choose what you really want.
You can't really have `an interaction with A' with a contrast on B: that
is just another contrast.
> (I really want the result for each contrast separately, so should I be
> passing one vector as an argument to contrasts?)
I am not at all sure what you want to do. Here is one possibility
contrasts(B) <- contrasts.B[, 1:2]
fit <- aov(score~A*B)
summary(fit, split=list(B=1:2), expand.split = T)
Another way to specify this is
fit <- aov(score~A*B, contrasts = list(B=contrasts.B[, 1:2]))
which gives a list (as specified in ?aov) and names B.
If you want to look at the patterns of contrasts, use model.tables(), and
to assess a single contrast, use se.contrast (but beware of lack of
independence, even collinearity, if using multiple contrasts). Here is one
way:
cont <- c(1, -1)[A] * c(1, -1, 0)[B]
sum(cont) # 0
sum(cont*score)
se.contrast(fit, as.matrix(cont))
I hope that gives you some progress.
--
Brian D. Ripley, ripley at stats.ox.ac.uk
Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/
University of Oxford, Tel: +44 1865 272861 (self)
1 South Parks Road, +44 1865 272866 (PA)
Oxford OX1 3TG, UK Fax: +44 1865 272595