Dropping correlations bet. random-effects in lme4 syntax
Awesome, thanks!
On Sat, Oct 3, 2020 at 12:40 PM Phillip Alday <phillip.alday at mpi.nl> wrote:
On 03/10/2020 19:24, Simon Harmel wrote:
Thanks for the additional information about the use of `0+` in the context
of categorical variables:)
So, by splitting the specification of the grouping variable like:
lmer(y ~ A * B * C + (A * C | group) + (B|group) , data = data)
I get the below correlation matrix. So, here we have created 2 different
intercepts, one for each "split" of the same grouping variable, right?
Yes, by default R adds in an intercept. I recommend always writing 1+ or
0+ to make explicit what you want.
(This was what I meant with "Note that life gets tricky with the
interaction terms." in my first reply.)
I ask this because B has no correlation with the first split's (intercept)
but it has a singular correlation with the second split's (intercept). The
output looks confusing to a novice like me.
(Intercept) A C A:C (Intercept) B
(Intercept) 1.000 -0.794 -0.195 0.953 0 0
A -0.794 1.000 0.278 -0.854 0 0
C -0.195 0.278 1.000 0.028 0 0
A:C 0.953 -0.854 0.028 1.000 0 0
(Intercept) 0.000 0.000 0.000 0.000 1 -1
B 0.000 0.000 0.000 0.000 -1 1
Singularity isn't a problem per se -- it's mathematically well defined and
being able to fit singular covariance matrices for the random effects was
one of the algorithmic innovations lme4 has compared to its predecessor
nlme.
Singularity can be a problem for inference (because it's often a sign of
overfitting).... but it makes sense here. B has no correlation with the
first intercept because you set it to be zero via your formula
specification, so that term is forced to be zero in the model computation.
The second intercept is perfectly correlated with B because it (the second
intercept) is redundant in the model, but it can't correlate with the first
intercept (because that correlation is forced to zero by your model
specification) and so it collapses into B.
If B is continuous, you can avoid this with 0+B. If B is categorical, then
0+B will still be overparameterized, but you can try 0+dummy(B) to set up
indicator variable for one of the two levels. (I can tell from your output
that B is continuous or only has two levels because there is only one slope
for it.)
Phillip
On Sat, Oct 3, 2020 at 11:52 AM Phillip Alday <phillip.alday at mpi.nl>
wrote:
I have no idea what 0* means, but 0+ means "suppress the intercept" (which has knock-on effects for categorical variables and whether they're represented in the model as (nlevels-1) contrasts or nlevels). For the other things: try it out. The output of summary(m1) will show you which levels and correlations were kept. On 03/10/2020 18:44, Simon Harmel wrote: Thanks Phillip. What would be the meaning of placing `0 +` next to any of the random effects (e.g., B) as shown in m2? m1 <- lmer(y ~ A * B * C + (A * C | group) + (B|group) , data = data) m2 <- lmer(y ~ A * B * C + (A * 0+ B * C | group), data = data) On Sat, Oct 3, 2020 at 11:33 AM Phillip Alday <phillip.alday at mpi.nl> wrote:
You can split the specification of your grouping to achieve this, at least in part: lmer(y ~ A * B * C + (A * C | group) + (B|group) , data = data) Note that life gets tricky with the interaction terms. Phillip On 03/10/2020 06:35, Simon Harmel wrote:
Hello all, I know to drop all correlations among all level-1 predictors in the
random
part of an lmer() call, I can use `||`. But I was wondering how to drop
correlations (a) "individually" or (b) "in pairs"?
Example of (a) is how to drop the correlation of B with others (A & C)?
Example of (b) is how to drop the correlation between B and C?
lmer(y ~ A * B * C + (A * B * C || group), data = data)
Thanks,
Simon
[[alternative HTML version deleted]]
_______________________________________________ R-sig-mixed-models at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-sig-mixed-models