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)
,这也是为什么这些组被列为 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
由于发生了一个有趣的事件,我正在尝试使用 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)
,这也是为什么这些组被列为 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