[R] contrast matrix for aov

Christophe Pallier pallier at lscp.ehess.fr
Thu Mar 10 10:43:15 CET 2005


Prof Brian Ripley wrote:

>> On Wed, 9 Mar 2005, Darren Weber wrote:
>>
>> We have a two-factor, repeated measures design, with
>
>
> Where does `repeated measures' come into this?  You appear to have 
> repeated a 2x2 experiment in each of 8 blocks (subjects).  Such a 
> design is usually analysed with fixed effects.  (Perhaps you averaged 
> over repeats in the first few lines of your code?)
>
>>
>> roi.aov <- aov(roi ~ (Cue*Hemisphere) + 
>> Error(Subject/(Cue*Hemisphere)), data=roiDataframe)
>
>
> I think the error model should be Error(Subject).  In what sense are 
> `Cue' and `Cue:Hemisphere' random effects nested inside `Subject'?
>

I do not understand this, and I think I am probably not the only one. 
That is why I would be grateful if you could give a bit more information.

My understanding is that the fixed factors Cue and Hemisphere are 
crossed with the random factor Subject (in other words, Cue and 
Hemisphere are within-subjects factors, and this is probably why Darren 
called it a "repeated measure" design).

In this case, it seems to me from the various textbooks I read on Anova, 
that the appropriate MS to  test the interaction Cue:Hemisphere is 
Subject:Cue:Hemisphere (with 7 degress of freedom, as there are 8 
independent subjects). 

If you input Error(Subject/(Cue*Hemisphere)) in the aov formula, then 
the test for the interaction indeed uses the Subject:Cue:Hemisphere 
source of variation in demoninator. This fits with the ouput of other 
softwares.

If you include only 'Subjet', then the test for the interaction has 21 
degrees of Freedom, and I do not understand what this tests.

I apologize in if my terminology is not accurate.  But I hope you can 
clarify what is wrong with the Error(Subject/(Cue*Hemisphere)) term,
or maybe just point us to the relevant textbooks.

Thanks in advance,

Christophe Pallier






> Let me fake some `data':
>
> set.seed(1); roiValues <- rnorm(32)
> subjectlabels <- paste("V"1:8, sep = "")
> options(contrasts = c("contr.helmert", "contr.poly"))
> roi.aov <- aov(roi ~ Cue*Hemisphere + Error(Subject), data=roiDataframe)
>
>> roi.aov
>
>
> Call:
> aov(formula = roi ~ Cue * Hemisphere + Error(Subject), data = 
> roiDataframe)
>
> Grand Mean: 0.1165512
>
> Stratum 1: Subject
>
> Terms:
>                 Residuals
> Sum of Squares   4.200946
> Deg. of Freedom         7
>
> Residual standard error: 0.7746839
>
> Stratum 2: Within
>
> Terms:
>                       Cue Hemisphere Cue:Hemisphere Residuals
> Sum of Squares   0.216453   0.019712       0.057860 21.896872
> Deg. of Freedom         1          1              1        21
>
> Residual standard error: 1.021131
> Estimated effects are balanced
>
> Note that all the action is in one stratum, and the SSQs are the same as
>
> aov(roi ~ Subject + Cue * Hemisphere, data = roiDataframe)
>
> (and also the same as for your fit).
>
>> print(summary(roi.aov))
>
>
> It auto-prints, so you don't need print().
>
>> ########################################
>>
>>
>> I've tried to create a contrast matrix like this:
>>
>> cm <- contrasts(roiDataframe$Cue)
>>
>> which gives the main effect contrasts for the Cue factor.  I really 
>> want to specify the interaction contrasts, so I tried this:
>>
>> ########################################
>> # c( lh_cueL, lh_cueR, rh_cueL, rh_cueR )
>> # CueRight>CueLeft for the Left Hemisphere.
>> # CueLeft>CueRight for the Right Hemisphere
>>
>> cm <- c(-1, 1, 1, -1)
>> dim(cm) <- c(2,2)
>
>
> (That is up to sign what Helmert contrasts give you.)
>
>> roi.aov <- aov( roi ~ (Cue*Hemisphere) + 
>> Error(Subject/(Cue*Hemisphere)),
>> contrasts=cm, data=roiDataframe)
>> print(summary(roi.aov))
>> ########################################
>>
>> but the results of these two aov commands are identical.  Is it the 
>> case that the 2x2 design matrix is always going to give the same F 
>> values for the interaction regardless of the contrast direction?
>
>
> Yes, as however you code the design (via `contrasts') you are fitting 
> the same subspaces.  Not sure what you mean by `contrast direction', 
> though.
>
> However, you have not specified `contrasts' correctly:
>
> contrasts: A list of contrasts to be used for some of the factors in
>           the formula.
>
> and cm is not a list, and an interaction is not a factor.
>
>> OR, is there some way to get a summary output for the contrasts that 
>> is not available from the print method?
>
>
> For more than two levels, yes: see `split' under ?summary.aov.
> Also, see se.contrasts which allows you to find the standard error for 
> any contrast.
>
> For the fixed-effects model you can use summary.lm:
>
>> fit <- aov(roi ~ Subject + Cue * Hemisphere, data = roiDataframe)
>> summary(fit)
>
>                Df  Sum Sq Mean Sq F value Pr(>F)
> Subject         7  4.2009  0.6001  0.5756 0.7677
> Cue             1  0.2165  0.2165  0.2076 0.6533
> Hemisphere      1  0.0197  0.0197  0.0189 0.8920
> Cue:Hemisphere  1  0.0579  0.0579  0.0555 0.8161
> Residuals      21 21.8969  1.0427
>
>> summary.lm(fit)
>
>
> Call:
> aov(formula = roi ~ Subject + Cue * Hemisphere, data = roiDataframe)
>
> Residuals:
>     Min      1Q  Median      3Q     Max
> -1.7893 -0.4197  0.1723  0.5868  1.3033
>
> Coefficients:
>                  Estimate Std. Error t value Pr(>|t|)
> [...]
> Cue1             -0.08224    0.18051  -0.456    0.653
> Hemisphere1       0.02482    0.18051   0.137    0.892
> Cue1:Hemisphere1 -0.04252    0.18051  -0.236    0.816
>
> where the F values are the squares of the t values.
>
>




More information about the R-help mailing list