[R] Treatment-Contrast Interactions

Prof Brian Ripley ripley at stats.ox.ac.uk
Sun Feb 20 11:18:00 CET 2005


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




More information about the R-help mailing list