使用 MICE 的纵向多级插补模型中的随机效应
Random Effects in Longitudinal Multilevel Imputation Models Using MICE
我正在尝试使用纵向设计来估算数据集中的数据。有两个预测变量(实验组和时间)和一个结果变量(分数)。聚类变量是 id.
这是玩具数据
set.seed(345)
A0 <- rnorm(4,2,.5)
B0 <- rnorm(4,2+3,.5)
A1 <- rnorm(4,6,.5)
B1 <- rnorm(4,6+2,.5)
A2 <- rnorm(4,10,.5)
B2 <- rnorm(4,10+1,.5)
A3 <- rnorm(4,14,.5)
B3 <- rnorm(4,14+0,.5)
score <- c(A0,B0,A1,B1,A2,B2,A3,B3)
id <- rep(1:8,times = 4, length = 32)
time <- rep(0:3, each = 8, length = 32)
group <- rep(c("A","B"), times =2, each = 4, length = 32)
df <- data.frame(id = id, group = group, time = time, score = score)
# plots
(ggplot(df, aes(x = time, y = score, group = group)) +
stat_summary(fun.y = "mean", geom = "line", aes(linetype = group)) +
stat_summary(fun.y = "mean", geom = "point", aes(shape = group), size = 3) +
coord_cartesian(ylim = c(0,18)))
# now place some NAs
df[sample(1:nrow(df), 10, replace = F),"score"] <- NA
df
如果我理解 正确,在预测矩阵中我应该用 -2
和两个固定预测变量 time
和 [= 指定 id
聚类变量15=] 与 1
。像这样
library(mice)
(ini <- mice(df, maxit=0))
(pred <- ini$predictorMatrix)
(pred["score",] <- c(-2, 1, 1, 0))
(imp <- mice(df,
method = c("", "", "", "2l.pan"),
pred = pred,
maxit = 1,
seed = 71152))
我想知道的是:
- 这是纵向随机截距插补模型吗?将 id 变量指定为
-2
将其指定为 'class' 变量,但在 this mice primer 中它建议对于多级模型,您应该在dataframe 作为常数,然后通过预测矩阵中的 2
指定为随机截距。但是,这是基于 2l.norm
函数而不是 2l.pan
函数,所以我不太确定我在这里的位置。 2l.pan
函数是否不需要此列或随机效应的规范?
- 是否有任何方法可以指定纵向随机斜率模型,如果可以,如何指定?
pan
库不需要截距项。
您可以使用
深入了解该功能
library(pan)
?pan
也就是说 mice
使用一个名为 mice.impute.2l.pan
的 pan 包装器并加载了 mice
库,您可以查看该函数的帮助。它声明:它有一个名为 intercept
的参数,它是 [a] Logical [and] determin[es] whether the intercept is automatically added.
默认情况下为 TRUE。默认情况下,这被定义为随机拦截。在浏览了 mice wrapper 的 R 代码后发现了这一点:
if (intercept) {
x <- cbind(1, as.matrix(x))
type <- c(2, type)
}
其中pan
函数参数type
是一个Vector of length ncol(x) identifying random and class variables
。默认添加截距并定义为随机效应。
他们确实提供了示例,就像您在固定效果的预测矩阵中用 1 表示 "x"。
它还声明 2l.norm
、The random intercept is automatically added in mice.impute.2l.norm().
这个答案对你来说可能有点晚了,但它可能会对以后阅读此内容的人有所帮助:
如何使用 2l.pan
以下是有关使用 mice
指定多级插补模型的一些详细信息。因为应用程序是纵向的,所以我使用术语“人员”来指代第 2 级的单位。这些是 mice
文档中提到的与 2l.pan
最相关的参数:
type
Vector of length ncol(x)
identifying random and class variables.
Random effects are identified by a 2
. The group variable (only one
is allowed) is coded as -2
. Random effects also include the fixed
effect. If for a covariates X1
group means shall be calculated and
included as further fixed effects choose 3
. In addition to the
effects in 3
, specification 4
also includes random effects of
X1
.
您可以在预测变量矩阵中使用 5 种不同的代码来估算 2l.pan
的变量。人员标识符编码为 -2
(这与 2l.norm
不同)。为了包括具有固定或随机效应的预测变量,这些变量分别用 1
或 2
编码。如果编码为2
,则自动包含相应的固定效应。
此外,2l.pan
提供代码 3
和 4
,其含义与 1
和 2
相似,但将包含一个额外的固定该变量对人均值的影响。如果您尝试对随时间变化的预测变量的人内和人际效应建模,这将非常有用。
intercept
Logical determining whether the intercept is automatically added.
默认情况下,2l.pan
将截距包括为固定效应和随机效应。因此,不需要在预测矩阵中包含常数项。如果设置 intercept=FALSE
,此行为会改变,截距会从插补模型中删除。
groupcenter.slope
If TRUE
, in case of group means (type
is 3
or 4
) group mean
centering for these predictors are conducted before doing imputations.
Default is FALSE
.
使用此选项,可以使预测变量围绕人均值居中,而不是“按原样”包含预测变量(即不居中)。这仅适用于编码为 3
或 4
的变量。对于编码为 3
的预测变量,这不是很重要,因为有和没有居中的模型是相同的。
但是,当预测变量编码为 4
(即具有随机斜率)时,居中会改变随机效应的含义,因此随机斜率不再“按原样”应用于变量" 但对于该变量的个人偏差。
在您的示例中,您可以为 time
添加一个简单的随机斜率,如下所示:
library(mice)
ini <- mice(df, maxit=0)
# predictor matrix (following 'type')
pred <- ini$predictorMatrix
pred["score",] <- c(-2, 1, 2, 0)
# imputation method
meth <- c("", "", "", "2l.pan")
imp <- mice(df, method=meth, pred=pred, maxit=10, m=10)
在此示例中,将 time
编码为 3
或 4
没有多大意义,因为 time
的人均值对所有人都是相同的.但是,如果您想要将随时间变化的协变量作为预测变量包含在插补模型中,3
和 4
可能会有用。
可以在 mice()
的调用中直接指定 intercept
和 groupcenter.slope
等附加参数,例如:
imp <- mice(df, ..., groupcenter.slope=TRUE)
关于您的问题
因此,按照 post 中所述回答您的问题:
是的,2l.pan
提供了一个多级(或者更确切地说是两级)插补模型。默认情况下,截距包括固定效应和随机效应(可以使用 intercept=FALSE
更改)并且不需要在预测矩阵中指定(这与 2l.norm
相反)。
是的,您可以使用 2l.pan
指定随机斜率。为此,具有随机斜率的预测变量在预测矩阵中编码为 2
或 4
。如果编码
如2
,包括随机斜率。如果编码为 4
,则包括随机斜率以及该变量的人均值的附加固定效应。如果编码为 4
,则可以通过使用 groupcenter.slope=TRUE
(见上文)来改变随机斜率的含义。
本文还包含一些有关如何使用 2l.pan
和其他函数进行多重插补的示例:[Link]
我正在尝试使用纵向设计来估算数据集中的数据。有两个预测变量(实验组和时间)和一个结果变量(分数)。聚类变量是 id.
这是玩具数据
set.seed(345)
A0 <- rnorm(4,2,.5)
B0 <- rnorm(4,2+3,.5)
A1 <- rnorm(4,6,.5)
B1 <- rnorm(4,6+2,.5)
A2 <- rnorm(4,10,.5)
B2 <- rnorm(4,10+1,.5)
A3 <- rnorm(4,14,.5)
B3 <- rnorm(4,14+0,.5)
score <- c(A0,B0,A1,B1,A2,B2,A3,B3)
id <- rep(1:8,times = 4, length = 32)
time <- rep(0:3, each = 8, length = 32)
group <- rep(c("A","B"), times =2, each = 4, length = 32)
df <- data.frame(id = id, group = group, time = time, score = score)
# plots
(ggplot(df, aes(x = time, y = score, group = group)) +
stat_summary(fun.y = "mean", geom = "line", aes(linetype = group)) +
stat_summary(fun.y = "mean", geom = "point", aes(shape = group), size = 3) +
coord_cartesian(ylim = c(0,18)))
# now place some NAs
df[sample(1:nrow(df), 10, replace = F),"score"] <- NA
df
如果我理解 -2
和两个固定预测变量 time
和 [= 指定 id
聚类变量15=] 与 1
。像这样
library(mice)
(ini <- mice(df, maxit=0))
(pred <- ini$predictorMatrix)
(pred["score",] <- c(-2, 1, 1, 0))
(imp <- mice(df,
method = c("", "", "", "2l.pan"),
pred = pred,
maxit = 1,
seed = 71152))
我想知道的是:
- 这是纵向随机截距插补模型吗?将 id 变量指定为
-2
将其指定为 'class' 变量,但在 this mice primer 中它建议对于多级模型,您应该在dataframe 作为常数,然后通过预测矩阵中的2
指定为随机截距。但是,这是基于2l.norm
函数而不是2l.pan
函数,所以我不太确定我在这里的位置。2l.pan
函数是否不需要此列或随机效应的规范? - 是否有任何方法可以指定纵向随机斜率模型,如果可以,如何指定?
pan
库不需要截距项。
您可以使用
深入了解该功能library(pan)
?pan
也就是说 mice
使用一个名为 mice.impute.2l.pan
的 pan 包装器并加载了 mice
库,您可以查看该函数的帮助。它声明:它有一个名为 intercept
的参数,它是 [a] Logical [and] determin[es] whether the intercept is automatically added.
默认情况下为 TRUE。默认情况下,这被定义为随机拦截。在浏览了 mice wrapper 的 R 代码后发现了这一点:
if (intercept) {
x <- cbind(1, as.matrix(x))
type <- c(2, type)
}
其中pan
函数参数type
是一个Vector of length ncol(x) identifying random and class variables
。默认添加截距并定义为随机效应。
他们确实提供了示例,就像您在固定效果的预测矩阵中用 1 表示 "x"。
它还声明 2l.norm
、The random intercept is automatically added in mice.impute.2l.norm().
这个答案对你来说可能有点晚了,但它可能会对以后阅读此内容的人有所帮助:
如何使用 2l.pan
以下是有关使用 mice
指定多级插补模型的一些详细信息。因为应用程序是纵向的,所以我使用术语“人员”来指代第 2 级的单位。这些是 mice
文档中提到的与 2l.pan
最相关的参数:
type
Vector of length
ncol(x)
identifying random and class variables. Random effects are identified by a2
. The group variable (only one is allowed) is coded as-2
. Random effects also include the fixed effect. If for a covariatesX1
group means shall be calculated and included as further fixed effects choose3
. In addition to the effects in3
, specification4
also includes random effects ofX1
.
您可以在预测变量矩阵中使用 5 种不同的代码来估算 2l.pan
的变量。人员标识符编码为 -2
(这与 2l.norm
不同)。为了包括具有固定或随机效应的预测变量,这些变量分别用 1
或 2
编码。如果编码为2
,则自动包含相应的固定效应。
此外,2l.pan
提供代码 3
和 4
,其含义与 1
和 2
相似,但将包含一个额外的固定该变量对人均值的影响。如果您尝试对随时间变化的预测变量的人内和人际效应建模,这将非常有用。
intercept
Logical determining whether the intercept is automatically added.
默认情况下,2l.pan
将截距包括为固定效应和随机效应。因此,不需要在预测矩阵中包含常数项。如果设置 intercept=FALSE
,此行为会改变,截距会从插补模型中删除。
groupcenter.slope
If
TRUE
, in case of group means (type
is3
or4
) group mean centering for these predictors are conducted before doing imputations. Default isFALSE
.
使用此选项,可以使预测变量围绕人均值居中,而不是“按原样”包含预测变量(即不居中)。这仅适用于编码为 3
或 4
的变量。对于编码为 3
的预测变量,这不是很重要,因为有和没有居中的模型是相同的。
但是,当预测变量编码为 4
(即具有随机斜率)时,居中会改变随机效应的含义,因此随机斜率不再“按原样”应用于变量" 但对于该变量的个人偏差。
在您的示例中,您可以为 time
添加一个简单的随机斜率,如下所示:
library(mice)
ini <- mice(df, maxit=0)
# predictor matrix (following 'type')
pred <- ini$predictorMatrix
pred["score",] <- c(-2, 1, 2, 0)
# imputation method
meth <- c("", "", "", "2l.pan")
imp <- mice(df, method=meth, pred=pred, maxit=10, m=10)
在此示例中,将 time
编码为 3
或 4
没有多大意义,因为 time
的人均值对所有人都是相同的.但是,如果您想要将随时间变化的协变量作为预测变量包含在插补模型中,3
和 4
可能会有用。
可以在 mice()
的调用中直接指定 intercept
和 groupcenter.slope
等附加参数,例如:
imp <- mice(df, ..., groupcenter.slope=TRUE)
关于您的问题
因此,按照 post 中所述回答您的问题:
是的,
2l.pan
提供了一个多级(或者更确切地说是两级)插补模型。默认情况下,截距包括固定效应和随机效应(可以使用intercept=FALSE
更改)并且不需要在预测矩阵中指定(这与2l.norm
相反)。是的,您可以使用
2l.pan
指定随机斜率。为此,具有随机斜率的预测变量在预测矩阵中编码为2
或4
。如果编码 如2
,包括随机斜率。如果编码为4
,则包括随机斜率以及该变量的人均值的附加固定效应。如果编码为4
,则可以通过使用groupcenter.slope=TRUE
(见上文)来改变随机斜率的含义。
本文还包含一些有关如何使用 2l.pan
和其他函数进行多重插补的示例:[Link]