[R-sig-ME] testing simple main effects by contrasts

Erich Studerus erich.studerus at bli.uzh.ch
Sat Jun 13 16:57:54 CEST 2009


Hi,

I have the following study design: Each of two groups of subjects (group A 
and group B) was tested repeatedly on two experimental days. At each 
experimental day, placebo or drug were administered in a randomized order 
and subjects were tested under the the influence of the drug in 3 
consecutive blocks. I have therefore one between subjects factor (Group A vs 
Group B) and two within subjects factors (Drug and Block). Here's a 
reproducible example:

x <- expand.grid(Block= paste('B', 1:3, sep=''),
  Drug = c('Placebo', 'Drug'), Subj=1:24)
df <- data.frame(x, Group = rep(c('A','B'), each=72),
  value=rnorm(144, sd=10))
m <- model.matrix(lm(value~Group*Drug+Block,df))
df$value <- df$value+m[,2]*7+ m[,3]*2 + m[,4]*5 + m[,5]*8 + m[,6]-2
#delete some observations to simulate an unbalanced design
df <- df[-as.numeric(sample(rownames(df),20)),]

mod <- lme(value ~ Group*Drug+Block, random = ~1|Subj, data = df)
anova(mod)

Now, since the interaction between Drug and Group is significant, the main 
effects of Drug and Group can not be interpreted. I therefore define 
contrasts to test the simple main effects, that is, the effect of the Drug 
in each Group, averaged over all levels of the Block factor.

I use the contrast package to set up the contrasts:
library(contrast)
con1 <- contrast(mod, list(Block=c('B1','B2','B3'), Group = 'A', Drug = 
'Pla'),
      list(Block=c('B1','B2','B3'), Group = 'A', Drug = 'Drug'), 
type='average')
con2 <- contrast(mod, list(Block=c('B1','B2','B3'), Group = 'B', Drug = 
'Pla'),
      list(Block=c('B1','B2','B3'), Group = 'B', Drug = 'Drug'), 
type='average')

Now, I use the multcomp-package to correct the p-values for multiple 
comparisons:

library(multcomp)
summary(glht(mod, linfct = rbind(con1$X,con2$X)))

This approach works fine with lme, but not with lmer. In the model above I 
modeled the block factor as a fixed effect. However, according to my 
understanding, it would be more parsimonious to model the block factor as a 
random effect. I'm not directly interested in its effect and it's just an 
additional source of variance due to habituation effects . Unfortunately, 
the Block and Subj factors are crossed and therefore can not easily be 
modeled by lme. After comparing different models, the best fitting model 
with lmer looks like this:

lmer(value ~ Group*Drug+(Drug|Subj)+(1|Block))

How can I set up contrasts to test simple main effects for this lmer model? 
I know, that lmer has a contrasts argument. However, as far as I can see, 
one can only test contrasts for the levels of one factor at a time. Any 
comments are highly appreciated.

Erich




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