MICE纵向多级插补模型的随机效应

时间:2017-12-23 06:24:39

标签: r mixed-models r-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

如果我正确理解this post,我应在预测矩阵中指定id聚类变量-2和两个固定预测变量time和{{1} } group。像这样

1

我想知道的是:

  1. 这是纵向随机截取插补模型吗?将id变量指定为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)) 将其指定为“类”变量,但在this mice primer中,它表明对于多级模型,您应该在数据框中创建所有-2的变量作为一个常量,然后在预测器矩阵中通过1指定为随机截距。但是(i)这是基于2函数而不是2l.norm函数,所以我不确定我在哪里。 2l.pan函数是否不需要此列或随机效果的规范?
  2. 有没有办法指定纵向随机斜率模型,如果是,如何指定?

2 个答案:

答案 0 :(得分:5)

pan库不需要拦截术语。

您可以使用

深入了解该功能
library(pan)
?pan

mice使用了一个名为mice.impute.2l.pan的平移包装器,加载了mice库,您可以查看该功能的帮助。它声明:它有一个名为intercept的参数,[a] Logical [and] determin[es] whether the intercept is automatically added.默认为TRUE。默认情况下,这被定义为随机拦截。在浏览鼠标包装器的R代码后发现了这个:

if (intercept) { x <- cbind(1, as.matrix(x)) type <- c(2, type) }

pan函数参数typeVector of length ncol(x) identifying random and class variables的位置。默认情况下会添加截距并将其定义为随机效果。

它们确实提供了例如你在固定效果预测矩阵中用“x”表示1的例子。

它还声明了2l.normThe random intercept is automatically added in mice.impute.2l.norm().

它有一些描述的例子。 The CRAN documentation for pan might help you.

答案 1 :(得分:3)

这个答案对你来说可能有点晚了,但它可能会帮助一些将来阅读此内容的人:

如何使用2l.pan

以下是有关使用mice指定多级插补模型的一些详细信息。因为应用程序是纵向的,所以我使用术语“人员”来指代第2级的单元。这些是2l.pan文档中提到的mice最相关的参数:

  

type

     

长度为ncol(x)的向量,用于标识随机变量和类变量。   随机效应由2标识。组变量(只有一个   被允许)被编码为-2。随机效应还包括固定   影响。如果对于协变量X1组,则应计算并且   作为进一步固定的效果包含在内,请选择3。除了   3中的效果,规范4也包含随机效果   X1

对于2l.pan推算的变量,您可以在预测变量矩阵中使用5种不同的代码。人员标识符编码为-2(这与2l.norm不同)。要包含具有固定或随机效应的预测变量,这些变量分别使用12进行编码。如果编码为2,则会自动包含相应的固定效果。

此外,2l.pan提供代码34,其含义与12相似,但会包含额外的固定效果这个变量的人意味着什么。如果您正在尝试对时变预测变量的内部和人际效应进行建模,这将非常有用。

  

intercept

     

逻辑确定是否自动添加拦截。

默认情况下,2l.pan将拦截包括为固定效果和随机效果。因此,在预测矩阵中包含常数项是 no required 。如果设置intercept=FALSE,则会更改此行为,并从插补模型中删除拦截。

  

groupcenter.slope

     

如果TRUE,则在群组意味着(type34)群组意味着   这些预测因子的中心是在进行估算之前进行的。   默认值为FALSE

使用此选项,可以将预测变量居中于人均值周围,而不是“按原样”包括预测变量(即,没有居中)。这仅适用于编码为34的变量。对于编码为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编码为34不会有多大意义,因为time的人均值对所有人都相同。但是,如果您希望在插补模型中包含时变协变量作为预测变量,34可能会有用。

interceptgroupcenter.slope等其他参数可以直接在mice()的调用中指定,例如:

imp <- mice(df, ..., groupcenter.slope=TRUE)

关于您的问题

所以,回答帖子中所说的问题:

1)是的,2l.pan提供了一个多级(或更确切地说是两级)的插补模型。默认情况下,拦截既包括固定效果也包含随机效果(可以使用intercept=FALSE进行更改),无需在预测变量矩阵中指定(这与2l.norm形成对比)。

2)是的,您可以使用2l.pan指定随机斜率。为此,具有随机斜率的预测变量在预测矩阵中被编码为24。如果编码 如2,包含随机斜率。如果编码为4,则包括随机斜率以及对该变量的人均值的附加固定效果。如果编码为4,则可以通过使用groupcenter.slope=TRUE(见上文)来更改随机斜率的含义。

本文还包括一些有关如何使用2l.pan和其他函数进行mutlivel插补的工作示例:[Link]