[R-sig-ME] A strange design; impossible to model using mixed models?

Douglas Bates bates at stat.wisc.edu
Sun Jun 6 15:16:01 CEST 2010


On Sat, Jun 5, 2010 at 8:22 PM, Mike Lawrence <Mike.Lawrence at dal.ca> wrote:
> Hi folks,
>
> This is likely a case of an experimentalist (not me!) failing to
> consult a statistician before applying an experimental design. I have
> data where I'm interested in 3 theoretical variables derived from 2
> manipulated variables, all measured within-Ss:
>
> #set up the design
> a = expand.grid(
>        s = 1:100 #subjects
>        , x = 1:4 #one predictor variable
>        , y = 1:3 #second predictor variable
> )
> a$z = rnorm(nrow(a)) #fake data
>
> #recode predictor variables
> a$v1 = ifelse(a$x==1,-.5,ifelse(a$x==2,.5,NA)) #based on x
> a$v2 = ifelse(a$x==3,-.5,ifelse(a$x==4,.5,NA)) #based on x
> a$v3 = ifelse(a$y==1,-.5,ifelse(a$y==2,.5,NA)) #based on y
>
>
> Now, obviously with such formulation, it's impossible to compute an
> interaction between v1 and v2 because they're non-orthogonal, but it
> is possible to compute the interactions between v1 & v3, and between
> v2 and v3:
>
> fit1 = lmer(
>        z ~ v1 * v3 + ( 1 | s )
>        , data = a
> )
>
> fit2 = lmer(
>        z ~ v2 * v3 + ( 1 | s )
>        , data = a
> )
>
> But I feel like it should be possible to do both above models
> simultaneously (gaining accuracy in the estimation of the main effect
> of v3), as:
>
> fit = lmer(
>        z ~
>                v1 +
>                v2 +
>                v3 +
>                v1:v3 +
>                v2:v3 +
>                ( 1 | s )
>        , data = a
> )
>
> However, I get the error:
> Error in function (fr, FL, start, REML, verbose)  :
>  Number of levels of a grouping factor for the random effects
> must be less than the number of observations
>
> Is it simply impossible to model the three variables simultaneously?

The way you have specified those variables, yes.
> str(a)
'data.frame':	1200 obs. of  7 variables:
 $ s : int  1 2 3 4 5 6 7 8 9 10 ...
 $ x : int  1 1 1 1 1 1 1 1 1 1 ...
 $ y : int  1 1 1 1 1 1 1 1 1 1 ...
 $ z : num  1.629 1.684 0.115 0.723 -0.415 ...
 $ v1: num  -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 ...
 $ v2: num  NA NA NA NA NA NA NA NA NA NA ...
 $ v3: num  -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 -0.5 ...
 - attr(*, "out.attrs")=List of 2
  ..$ dim     : Named int  100 4 3
  .. ..- attr(*, "names")= chr  "s" "x" "y"
  ..$ dimnames:List of 3
  .. ..$ s: chr  "s=  1" "s=  2" "s=  3" "s=  4" ...
  .. ..$ x: chr  "x=1" "x=2" "x=3" "x=4"
  .. ..$ y: chr  "y=1" "y=2" "y=3"

> str(model.matrix(~ v1 + v2, a))
 num[0 , 1:3]
 - attr(*, "dimnames")=List of 2
  ..$ : NULL
  ..$ : chr [1:3] "(Intercept)" "v1" "v2"
 - attr(*, "assign")= int [1:3] 0 1 2

If you include both v1 and v2 in the model there are 0 observations
without missing data in one of the covariates.




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