r-lme4:如何指定随机斜率,同时将所有相关性约束为0



由于一个有趣的事件转折,我尝试使用R中的lme4包来拟合一个模型,其中随机斜率不允许相互关联随机截距。实际上,我想估计每个随机斜率的方差参数,但没有相关性/协变量。从我目前所做的阅读来看,我认为我想要的是一个有效的随机效应的对角方差/协方差结构。

这里类似问题的答案提供了一种变通方法,可以指定一个斜率与截距相关但不相互关联的模型我还知道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中的作用。仔细阅读上面的错误陈述,以避免将来误导任何人。

这正是双条形表示法的作用但是请注意,lme4中的||并不像人们对因子变量所期望的那样工作。它在glmmTMB中确实"正常"工作,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.1Subject.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

最新更新