简体   繁体   中英

lme4: How to specify random slopes while constraining all correlations to 0?

Due to an interesting turn of events, I'm trying use the lme4 package in R to fit a model in which the random slopes are not allowed to correlate with each other or the random intercept. Effectively, I want to estimate the variance parameter for each random slope, but none of the correlations/covariances. From the reading I've done so far, I think what I want is effectively a diagonal variance/covariance structure for the random effects.

An answer to a similar question here provides a workaround to specify a model where slopes are correlated with intercepts, but not with each other. I also know the || syntax in lme4 makes slopes that are correlated with each other, but not with the intercepts. Neither of these seems to fully accomplish what I'm looking to do.

Borrowing the example from the earlier post , if my model is:

m1 <- lmer (Y ~ A + B + (1+A+B|Subject), data=mydata)

is there a way to specify the model such that I estimate variance parameters for A and B while constraining all three correlations to 0? I would like to achieve a result that looks something like this:

VarCorr(m1)    
##  Groups   Name        Std.Dev. Corr       
##  Subject  (Intercept) 1.41450             
##           A           1.49374  0.000      
##           B           2.47895  0.000 0.000
##  Residual             0.96617    

I'd prefer a solution that could achieve this for an arbitrary number of random slopes. For example, if I were to add a random effect for a third variable C, there would be 6 correlation parameters to fix at 0 rather than 3. However, anything that could get me started in the right direction would be extremely helpful.

This is exactly what the double-bar notation does.

simulated example

library(lme4)
set.seed(101)
dd <- data.frame(A = runif(500), B = runif(500), 
                 Subject = factor(rep(1:25, 20)))
dd$Y <- simulate(~ A + B + (1 +  A + B|Subject), 
  newdata = dd,
  family = gaussian,
  newparams = list(beta = rep(1,3), theta = rep(1,6), sigma = 1))[[1]]

solution

summary(m <- lmer (Y ~ A + B + (1+A+B||Subject), data=dd))

The correlations aren't listed because they are structurally absent (internally, the random effects term is expanded to (1|Subject) + (0 + A|Subject) + (0+B|Subject) , which is also why the groups are listed as Subject , Subject.1 , Subject.2 ).

Random effects:
 Groups    Name        Variance Std.Dev.
 Subject   (Intercept) 0.8744   0.9351  
 Subject.1 A           2.0016   1.4148  
 Subject.2 B           2.8718   1.6946  
 Residual              0.9456   0.9724  
Number of obs: 500, groups:  Subject, 25

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM