我试图用纵向设计来估算数据集中的数据 . 有两个预测因子(实验组和时间)和一个结果变量(分数) . 聚类变量是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,在预测矩阵中,我应该使用 -2
指定 id
聚类变量,并使用 1
指定两个固定预测变量 time
和 group
. 像这样
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中,它表明对于多级模型,您应该在数据帧中创建一个所有1
的变量作为常量,然后通过2
将其指定为随机截距预测矩阵 . 但是(i)这是基于2l.norm
函数而不是2l.pan
函数,所以我不确定我在哪里 .2l.pan
函数是否不需要此列或随机效果的规范? -
有没有办法指定纵向随机斜率模型,如果是,如何?
2 回答
这个答案对你来说可能有点晚了,但它可以帮助一些将来读这篇文章的人:
如何使用2l.pan
以下是有关使用
mice
指定多级插补模型的一些详细信息 . 因为应用程序是纵向的,所以我使用术语"persons"来引用级别2的单位 . 这些是mice
文档中提到的2l.pan
最相关的参数:对于用
2l.pan
估算的变量,您可以在预测变量矩阵中使用5种不同的代码 . 人员标识符编码为-2
(这与2l.norm
不同) . 要包含具有固定或随机效应的预测变量,这些变量分别使用1
或2
进行编码 . 如果编码为2
,则会自动包含相应的固定效果 .此外,
2l.pan
提供代码3
和4
,其具有与1
和2
类似的含义,但将包含对该变量的人均值的附加固定效果 . 如果您尝试对时变预测变量的人与人之间的影响进行建模,这将非常有用 .默认情况下,
2l.pan
将截距包括为固定效果和随机效果 . 因此,不需要在预测矩阵中包含常数项 . 如果设置intercept=FALSE
,则会更改此行为,并从插补模型中删除截距 .使用此选项,可以将预测变量居中于人均值周围,而不是包括预测变量"as is"(即,没有居中) . 这仅适用于编码为
3
或4
的变量 . 对于编码为3
的预测变量,这不是很重要,因为有和没有居中的模型是相同的 .但是,当预测变量被编码为
4
(即具有随机斜率)时,则居中改变随机效应的含义,使得随机斜率不再适用于变量"as is",而是适用于该变量的人与人之间的偏差 .在您的示例中,您可以为
time
包含一个简单的随机斜率,如下所示:在这个例子中,将
time
编码为3
或4
并没有多大意义,因为time
的人的手段对所有人都是相同的 . 但是,如果您希望在插补模型中包含时变协变量作为预测变量,则3
和4
可能很有用 .像
intercept
和groupcenter.slope
这样的附加参数可以直接在mice()
的调用中指定,例如:关于你的问题
所以,回答帖子中所述的问题:
1)是的,
2l.pan
提供了多级(或更确切地说是两级)的插补模型 . 截距默认包括固定和随机效果(可以使用intercept=FALSE
更改),无需在预测矩阵中指定(这与2l.norm
形成对比) .2)是的,您可以使用
2l.pan
指定随机斜率 . 为此,具有随机斜率的预测变量在预测矩阵中被编码为2
或4
. 如果编码为2
,则包括随机斜率 . 如果编码为4
,则包括随机斜率以及对该变量的人均值的附加固定效果 . 如果编码为4
,则可以通过使用groupcenter.slope=TRUE
(见上文)来改变随机斜率的含义 .本文还包括一些有关如何使用
2l.pan
和其他函数进行mutlivel插补的工作示例:[Link]pan
库不需要拦截术语 .你可以使用挖掘功能
那就是
mice
使用了一个名为mice.impute.2l.pan
的panper包装器,加载了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
函数参数type
是Vector of length ncol(x) identifying random and class variables
. 截距默认添加并定义为随机效果 .他们确实提供了例如你在固定效果预测矩阵中用“x”表示1的例子 .
它还声明
2l.norm
,The random intercept is automatically added in mice.impute.2l.norm().
它有一些描述的例子 . The CRAN documentation for pan might help you.