[R-sig-ME] Confusion about contrasts

Reinhold Kliegl reinhold.kliegl at gmail.com
Mon Jul 18 02:30:20 CEST 2011


Your solution is ok. Basically, for the set of prime contrasts you
want to use you need to take the generalized inverse  (see, e.g.,
Venables & Ripley, 2002, MASS, section 6.2, p. 144-150). That's what
make.contrasts() does. Alternatively, you can use:

################
library(MASS) # for ginv() and fractions()

# target contrast
contrasts(trimmedwords$target) <- contr.sdif(2)  # avoid treatment
contrast for target factor

# prime contrasts
(primeconts<-cbind(c(-1,0,1,0), c(0,-1,1,0), c(0,0,-1,1)))
(cmat1 <- fractions(ginv(t(primeconts))))
contrasts(trimmedwords$prime) <- cmat1
priming.model<-lmer(react~target*prime+(1|subject)+(1|item),data=trimmedwords)

# alternative contrasts
(altconts <- cbind(c(-1,0,1,0), c(0,-1,1,0), c(-1,1,0,0)))
(cmat2 <- fractions(ginv(t(altconts))))
contrasts(trimmedwords$prime) <- cmat2
priming.model<-lmer(react~target*prime+(1|subject)+(1|item),data=trimmedwords)

#################

Obviously, you don't need to do this if cmat == ginv(t(cmat))--as is
the case for treatment and a few other types of contrasts. Also, this
is nothing special about lmer(), but applies to all linear models
using a model matrix in R.

Reinhold Kliegl

On Mon, Jul 18, 2011 at 1:41 AM, Marius <marius.mather at gmail.com> wrote:
> Dear all,
> I'm struggling to understand how lmer handles contrasts. I have a lexical
> decision experiment that I'm trying to analyse, where regular or irregular
> verbs (the targets) are preceded by four different kinds of prime, making it
> a (2x4) within-subjects design. I'm pretty sure I have the basic model
> specification right, i.e. something like this:
>
> priming.model<-lmer(react~target*prime+(1|subject)+(1|item),data=trimmedwords)
>
> The contrasts I would be most interested in are comparing the first prime
> condition to the third, and the second to the third. Initially I was
> planning to set the contrasts for the prime factor like this (I realise
> these are not orthogonal, is this a problem?):
>
> primeconts<-cbind(c(-1,0,1,0),c(0,-1,1,0),c(0,0,-1,1))
> colnames(primeconts)<-c("1v3","2v3","3v4")
> primeconts
>     1v3 2v3 3v4
> [1,]  -1   0   0
> [2,]   0  -1   0
> [3,]   1   1  -1
> [4,]   0   0   1
>
> However, I've been told by one of the other researchers here that you need
> the contrasts in the form given by make.contrasts() in the gmodels package,
> which creates contrasts "in the form that R requires". I'm having trouble
> finding out exactly what this command does in the package documentation, and
> I'm a little wary of using something I don't understand. For the set of
> contrasts above, make.contrasts() returns:
>
>      C1    C2    C3
> V1 -0.75  0.25 -0.25
> V2  0.25 -0.75 -0.25
> V3  0.25  0.25 -0.25
> V4  0.25  0.25  0.75
>
> but when I've used a different set of contrasts (albeit possibly not the
> most sensible ones), it returns something a lot less understandable, hence
> my hesitation:
>
> make.contrasts(rbind(c(-1,0,1,0),c(0,-1,1,0),c(-1,1,0,0)))
>              C1         C2            C3
> V1 -3.333333e-01  0.0000000 -3.333333e-01
> V2  3.148450e-17 -0.3333333  3.333333e-01
> V3  3.333333e-01  0.3333333 -2.775558e-17
> V4  0.000000e+00  0.0000000  0.000000e+00
>
> The first set of contrasts given by make.contrasts() looks like what I'm
> familiar with from linear regression, where you set the coefficients for the
> groups in the contrast so that their mean is 0 and the difference between
> them is 1, so that the intercept in the regression output represents the
> overall mean, and the unstandardized beta for the contrast effect gives you
> the difference between the groups (i.e. the contrast estimate) directly.
>
> Can anyone shed some light on the best way to code the contrasts? If it is
> the make.contrasts() method, I would appreciate a brief explanation on what
> that function actually does, in terms of the properties of the matrix it
> returns.
>
> Thanks in advance,
> Marius
>
>        [[alternative HTML version deleted]]
>
> _______________________________________________
> R-sig-mixed-models at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-sig-mixed-models
>




More information about the R-sig-mixed-models mailing list