[R-sig-ME] correlation of random intercepts and slopes
Titus von der Malsburg
malsburg at gmail.com
Mon Jun 20 20:56:09 CEST 2011
Dear list!
I have a situation where lmer reports much higher
correlations of random slopes and intercepts than I would
expect. I generated fake data for a fictitious experiment
using the function new.df shown below. The experiment has a
within-factor 'cond' with levels 1 and 2, a set of items and
subjects which are both measured repeatedly. There are
random intercepts and slopes for items and subjects. On top
there's sampling error. The dependent measure 'rt' is some
kind of reaction time. Example:
> d <- new.df(cond1.rt=600, effect.size=10, sdev=10,
nsubj=49, sdev.int.subj=10, sdev.slp.subj=10,
nitems=16, sdev.int.items=10,
sdev.slp.items=10)
cond1.rt is the average reaction time in condition 1.
cond1.rt+effect.size is the rt in condition 2, sdev
the sampling error, the rest concerns number of subjects and
items, and the sdevs of their random intercepts and slopes.
This is the head of the data frame:
> head(d)
subj item cond rt re.int.subj re.slp.subj re.int.item re.slp.item
1 1 1 1 628.4764 12.15373 4.138659 -0.932447 6.619795
2 1 1 2 603.1140 12.15373 -4.138659 -0.932447 -6.619795
3 1 2 1 617.8467 12.15373 4.138659 -2.980553 2.471397
4 1 2 2 606.5777 12.15373 -4.138659 -2.980553 -2.471397
5 1 3 1 622.8397 12.15373 4.138659 -2.133049 5.101761
6 1 3 2 616.4011 12.15373 -4.138659 -2.133049 -5.101761
The random intercepts and slopes have small correlations:
> with(subset(d, cond==1), cor(re.int.subj, re.slp.subj))
[1] 0.2650591
> with(subset(d, cond==1), cor(re.int.item, re.slp.item))
[1] -0.3144838
But when I roll an lmer model, I see much higher correlations
of slopes and intercepts:
> lmer(rt~cond+(cond|item)+(cond|subj), d)
Linear mixed model fit by REML
Formula: rt ~ cond + (cond | item) + (cond | subj)
Data: d
AIC BIC logLik deviance REMLdev
12050 12098 -6016 12040 12032
Random effects:
Groups Name Variance Std.Dev. Corr
subj (Intercept) 349.735 18.7012
cond 82.905 9.1052 -0.839
item (Intercept) 201.250 14.1863
cond 81.835 9.0463 -0.732
Residual 98.758 9.9377
Number of obs: 1568, groups: subj, 49; item, 16
Fixed effects:
Estimate Std. Error t value
(Intercept) 594.053 4.511 131.70
cond 8.120 2.657 3.06
Correlation of Fixed Effects:
(Intr)
cond -0.765
When I xyplot the data, I can't see any correlation of
slopes and intercepts. Could anybody please enlighten
me as to why lmer reports these high correlations?
Many thanks!
Titus
new.df <- function(cond1.rt=600, effect.size=10, sdev=10,
sdev.int.subj=10, sdev.slp.subj=10, nsubj=10,
sdev.int.items=10, sdev.slp.items=10, nitems=10) {
ncond <- 2
subj <- rep(1:nsubj, each=nitems*ncond)
item <- rep(1:nitems, nsubj, each=ncond)
cond <- rep(0:1, nsubj*nitems)
err <- rnorm(nsubj*nitems*ncond, 0, sdev)
d <- data.frame(subj=subj, item=item, cond=cond+1, err=err)
# Adding random intercepts and slopes for subjects:
re.int.subj <- rnorm(nsubj, 0, sdev.int.subj)
d$re.int.subj <- rep(re.int.subj, each=nitems*ncond)
re.slp.subj <- rnorm(nsubj, 0, sdev.slp.subj)
d$re.slp.subj <- rep(re.slp.subj, each=nitems*ncond) * (cond - 0.5)
# Adding random intercepts and slopes for items:
re.int.item <- rnorm(nitems, 0, sdev.int.items)
d$re.int.item <- rep(re.int.item, nsubj, each=ncond)
re.slp.item <- rnorm(nitems, 0, sdev.int.items)
d$re.slp.item <- rep(re.slp.item, nsubj, each=ncond) * (cond - 0.5)
d$rt <- (cond1.rt + cond*effect.size
+ d$re.int.subj + d$re.slp.subj
+ d$re.int.item + d$re.slp.item
+ d$err)
d
}
More information about the R-sig-mixed-models
mailing list