[R] lmer for mixed effects modeling of a loglinear model

Steve Buyske buyske at stat.rutgers.edu
Sat Apr 30 03:34:10 CEST 2005


I have a dataset with 25 subjects and 25 items. For each subject-item 
combination, there's a 0/1 score for two parts, A and B. I'm thinking 
of this as a set of 2 x 2 tables, 25 x 25 of them. I'd like to fit a 
log-linear model to this data to test the independence of the A and B 
scores.

If I ignore the subject and item parts, the following works just fine:
     glm(count ~ A * B, family = poisson, data =llform.df)

However, there's variability in the success probability by both item 
and subject. There are difficult items (for both parts A and B 
jointly) and there are proficient subjects (for A and B jointly). I 
would like to include these as random effects, and since I don't want 
a separate effect for A and for B, I created a new variable AB = I(A 
+ B), representing the additive effect of A and B. I then tried
     lmer(count ~ A * B + (AB - 1 | item) + (AB - 1 | subj),
          family = poisson, data = llform.df)

The lmer function (from the lme4 package) only detects a portion of 
the variance due to item and subject, and finds a highly significant 
AxB interaction effect that is really only due to the situation that 
good subjects with easy items tend to get both A and B right and so 
forth.

I'm not sure whether I'm modeling this wrong in lmer, I'm thinking 
about this wrong, or I'm asking too much (or any subset of the 
above), but I'd be grateful for any advice. Below I given a few 
sample lines of the dataframe, as well as the code I used to generate 
it.

Thanks,
Steve


Start of dataframe:

      item subj A B AB count
1       1    1 0 0  0 FALSE
1100    1    1 0 1  1 FALSE
1102    1    1 1 0  1 FALSE
1104    1    1 1 1  2  TRUE
2       1    2 0 0  0 FALSE
2100    1    2 0 1  1 FALSE
2102    1    2 1 0  1 FALSE
2104    1    2 1 1  2  TRUE
3       1    3 0 0  0 FALSE
3100    1    3 0 1  1 FALSE
3102    1    3 1 0  1 FALSE
3104    1    3 1 1  2  TRUE

Code to generate it:

test.df <- data.frame(item = gl(25, 25), subj = gl(25, 1, 625))
test.df$item.level <- with(test.df, rnorm(25, sd  = 1)[item])
test.df$subj.level <- with(test.df, rnorm(25, sd = 1)[subj])
test.df$Atemp <- as.numeric(with(test.df, runif(625) < 1/(1 + 
exp(-item.level + subj.level))))
test.df$Btemp <- as.numeric(with(test.df, runif(625) < 1/(1 + 
exp(-item.level + subj.level))))
llform.df <- rbind(test.df, test.df, test.df, test.df)
llform.df$A <- rep(0:1, each = 625 * 2)
llform.df$B <- rep(0:1, each = 625, times = 2)
llform.df$AB <- apply(llform.df[,7:8], 1, sum)
llform.df$count <- with(llform.df, A == Atemp & B == Btemp)
llform.df <- llform.df[order(llform.df$item, llform.df$subj),]


platform powerpc-apple-darwin7.9.0
arch     powerpc
os       darwin7.9.0
system   powerpc, darwin7.9.0
status
major    2
minor    1.0
year     2005
month    04
day      18
language R




More information about the R-help mailing list