[R] Calculating the correlations of nested random effects in lme4
Dominik Ćepulić
dcepulic at gmail.com
Fri Jan 5 15:49:31 CET 2018
I postulate the following model
AC <- glmer(Accuracy ~ RT*Group + (1+RT|Group:subject) +
(1+RT|Group:Trial), data = da, family = binomial, verbose = T)
Here I predict Accuracy from RT, Group (which has values 0 or 1) and the
interaction of Group and RT (those are the fixed effects). I also estimate
the random effects for both intercepts and slopes for subjects and
different trials. However, these random effects are nested in one of the
mentioned two groups. That means that I calculate the subject random
effects separately for group 0 and for group 1. Also, the trial random
effects are calculated separately for group 0 and for group 1.
The results are following:
Random effects:
Groups Name Variance Std.Dev. Corr
Group:subject (Intercept) 0.9785 0.9892
RT 0.1434 0.3787 -0.77
Group:Trial (Intercept) 0.7694 0.8772
RT 0.1047 0.3236 -0.68
Number of obs: 39401, groups: Group:subject, 438; Group:Trial, 180
Fixed effects:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 2.72834 0.11997 22.742 < 2e-16 ***
RT -0.98367 0.05909 -16.647 < 2e-16 ***
Group1 -0.12424 0.16829 -0.738 0.46036
RT:Group1 0.23286 0.08163 2.853 0.00434 **
All the random effects coefficients represent the effects for Group 0 and
1 random effects together, without differentiating them. I would like to
get the following:
1) estimations for subject and trial random effects in group 0 and in group
1 separately (Variance and Correlations).
2) estimations of the correlations between random slopes in subjects in
group 0 and group 1.
Questions:
3) Can lme4 and lmerTest do this? If yes, how?
4) If it cannot, is it justified to do separate models for group 0 and for
group 1, and then compare the results? the problem here is that I don't get
the statistical test of the RT:Group1 interaction.
5) Is it justified to extract the random effects for different groups and
then calculate the correlations, and variances manually? If yes, is it more
reasonable to extract the random effects from the model where the
interaction between RT and Group is included, or from the models which are
separated according to the group (as mentioned in question 4). I know that
you get different results than when letting lme4 calculate the coefficients
due to the marginal probabilities...
Thanks!
*EDIT A*
Roland from CrossValidated suggested to try and specify the random effects
as this:
(RT * Group | Group:subject) + (RT * Group | Group:Trial)
This is what I got:
Random effects:
Groups Name Variance Std.Dev. Corr
Group:subject (Intercept) 0.88355 0.9400
RT 0.11654 0.3414
-0.87
Group1 0.68278 0.8263 -0.32
0.26
RT:Group1 0.12076 0.3475 -0.01 -0.28
-0.24
Group:Trial (Intercept) 0.64182 0.8011
RT 0.09434 0.3071
-0.76
Group1 0.75896 0.8712 -0.37
0.29
RT:Group1 0.15605 0.3950 0.29 -0.53
-0.52
Number of obs: 39401, groups: Group:subject, 438; Group:Trial, 180
Fixed effects:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 2.70777 0.11273 24.021 < 2e-16 ***
RT -0.98825 0.05821 -16.976 < 2e-16 ***
Group1 -0.08302 0.16997 -0.488 0.62525
RT:Group1 0.25620 0.08793 2.914 0.00357 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
convergence code: 0
unable to evaluate scaled gradient
Model failed to converge: degenerate Hessian with 5 negative
eigenvalues
*A1*) This looks like what I was looking for, especially when I run the
command. However, the model did not converge
convergence code: 0
unable to evaluate scaled gradient
Model failed to converge: degenerate Hessian with 5 negative
eigenvalues
What should I do with these warnings?
*A2*) I am a bit baffeled when I extract random effects
ranef(mod$Group:subject)
(Intercept) RT
Group1 RT:Group1
0:251001 -1.308168428 0.4780271048 0.352869565 -0.0737619415
0:251002 1.050036079 -0.3071004273 -0.294625317 -0.0334146992
0:251003 -1.220858015 0.4676770866 0.326114487 -0.0949017322
0:251004 0.944849620 -0.2545466823 -0.268350172 -0.0564150418
...
1:251001 -0.197649527 0.0839724493 -0.649897297 -0.1228681971
1:251002 0.710716899 -0.2103765167 0.006884114 -0.2151618897
1:251003 -0.402869078 0.1326561677 -0.344966110 0.0257983193
1:251004 -0.321174375 0.0874198115 0.191529601 0.1521126993
I already have nested subjects in rownames (0:251001) - so that means
subject 251001 in group 0, and then again I have values for each subject in
group 0 (intercept column) and group 1(Group1 column). The same is with
slope. What does this data show me?
What is the difference between defining random factors as
`1+RT|Group:subject` and then looking at Intercept and RT values for
0:subject1, 0:subject2...., 1:subject1, 1:subject2...
and
defining random factors as `RT*Group|subject` and looking at the various
columns (Intercept, RT, Group1, RT:Group1) for subject1, subject 2 etc.?
Thank you,
Dominik
[[alternative HTML version deleted]]
More information about the R-help
mailing list