[R-sig-ME] correlation of random intercepts and slopes

Baldwin, Jim jbaldwin at fs.fed.us
Mon Jun 20 21:27:09 CEST 2011


The seemingly high correlation from lmer is between the fixed effects of slope and intercept rather than a correlation between the random effects associated with slope and intercept.

You'll see this in a simple regression with the correlation between slope and intercept being

           - xbar * sqrt(n/sum(x_i^2))

even when one isn't fitting a random coefficients model (Draper and Smith, Applied Regression Analysis, 3rd ed., page 129)

Jim

Jim Baldwin
Station Statistician
Pacific Southwest Research Station
USDA Forest Service
Albany, CA  94710

-----Original Message-----
From: r-sig-mixed-models-bounces at r-project.org [mailto:r-sig-mixed-models-bounces at r-project.org] On Behalf Of Titus von der Malsburg
Sent: Monday, June 20, 2011 11:56 AM
To: R-sig-mixed-models at r-project.org
Subject: [R-sig-ME] correlation of random intercepts and slopes

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
  }

_______________________________________________
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