lme4:如何在将所有相关性约束为 0 的同时指定随机斜率?

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

由于发生了一个有趣的事件,我正在尝试使用 R 中的 lme4 包来拟合随机斜率不允许相互关联的模型 或者 随机拦截。实际上,我想估计每个随机斜率的方差参数,但是 none 的 correlations/covariances。从我到目前为止所做的阅读来看,我认为我想要的实际上是随机效应的对角线 variance/covariance 结构。

一个类似问题的答案 提供了一种变通方法来指定一个模型,其中斜率与截距相关,但彼此不相关。 我也知道 lme4 中的 || 语法使斜率彼此相关,但与截距无关。 这些似乎都不能完全完成我想要做的事情。

借用的例子,如果我的模型是:

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

有没有一种方法可以指定模型,以便我估计 A 和 B 的方差参数,同时将 所有三个 相关性限制为 0?我想获得如下所示的结果:

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    

我更喜欢可以针对任意数量的随机斜率实现此目的的解决方案。例如,如果我要为第三个变量 C 添加随机效应,将有 6 个相关参数固定为 0 而不是 3。但是,任何可以让我在正确的方向上开始的事情都会非常有帮助。

编辑:

在问这个问题时,我误解了 || 语法在 lme4 中的作用。把上面不正确的说法划掉,以免以后误导大家。

正是 double-bar 表示法的作用。 但是,请注意 lme4 中的 || 确实 不像因子变量 所期望的那样有效。它确实在 glmmTMB 中工作 'properly',并且 afex::mixed() 函数是 [g]lmer 的包装器, 确实 实现了一个完整的功能版本||。 (多年来,我一直想将其导入 lme4,但还没有开始……)

模拟示例

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]]

解决方案

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

未列出相关性,因为它们在结构上不存在(在内部,随机效应项扩展为 (1|Subject) + (0 + A|Subject) + (0+B|Subject),这也是为什么这些组被列为 SubjectSubject.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