首页 文章

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

提问于
浏览
9

我试图用纵向设计来估算数据集中的数据 . 有两个预测因子(实验组和时间)和一个结果变量(分数) . 聚类变量是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 指定两个固定预测变量 timegroup . 像这样

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 回答

  • 5

    这个答案对你来说可能有点晚了,但它可以帮助一些将来读这篇文章的人:

    如何使用2l.pan

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

    type长度为ncol(x)的Vector,用于识别随机变量和类变量 . 随机效应由2标识 . 组变量(仅允许一个)编码为-2 . 随机效应还包括固定效应 . 如果对于协变量,X1组平均值应计算并包含在另外的固定效应中选择3.除了3中的效果外,规范4还包括X1的随机效应 .

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

    此外, 2l.pan 提供代码 34 ,其具有与 12 类似的含义,但将包含对该变量的人均值的附加固定效果 . 如果您尝试对时变预测变量的人与人之间的影响进行建模,这将非常有用 .

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

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

    groupcenter.slope如果为TRUE,则在组均值(类型为3或4)的情况下,这些预测变量的组均值中心在进行估算之前进行 . 默认值为FALSE .

    使用此选项,可以将预测变量居中于人均值周围,而不是包括预测变量"as is"(即,没有居中) . 这仅适用于编码为 34 的变量 . 对于编码为 3 的预测变量,这不是很重要,因为有和没有居中的模型是相同的 .

    但是,当预测变量被编码为 4 (即具有随机斜率)时,则居中改变随机效应的含义,使得随机斜率不再适用于变量"as is",而是适用于该变量的人与人之间的偏差 .


    在您的示例中,您可以为 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]

  • 3

    pan 库不需要拦截术语 .

    你可以使用挖掘功能

    library(pan)
    ?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 函数参数 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.

相关问题