MICE中多重插补的纵向数据和对象类型mids的统计分析

8
我在使用mice对缺失值进行插补后,对纵向数据进行统计分析时遇到了问题。在宽格式中插补缺失值后,我将提取的数据转换为长格式。由于纵向数据的存在,参与者会有重复行(3个时间点),这会在将长格式数据集转换为类型mids对象时导致问题。有人知道如何在插补后创建mids对象或其他合适的对象吗?我想在此之后使用lmer、lme进行汇总固定效应。 我尝试了很多不同的方法,但仍然无法解决问题。
谢谢您的帮助,请查看下面的代码:
# minimal reproducible example

## Make up some data
set.seed(2)

# ID Variable, Group, 3 Timepoints outcome measure (X1-X3)
Data <- data.frame(
    ID = sort(sample(1:100)),
    GROUP = sample(c(0, 1), 100, replace = TRUE),
    matrix(sample(c(1:5,NA), 300, replace=T), ncol=3)
)

# install.packages("mice")
library(mice)

# Impute the data in wide format
m.out <- mice(Data, maxit = 5, m = 2, seed = 9, pred=quickpred(Data, mincor = 0.0, exclude = c("ID","GROUP"))) # ignore group here for easiness

# mids object?
is.mids(m.out) # TRUE

# Extract imputed data
imp_data <- complete(m.out, action = "long", include = TRUE)[, -2]

# Converting data into long format
# install.packages("reshape")
library(reshape)
imp_long <- melt(imp_data, id=c(".imp","ID","GROUP"))
# sort data
imp_long <- imp_long[order(imp_long$.imp, imp_long$ID, imp_long$GROUP),]
row.names(imp_long)<-NULL

# save as.mids
as.mids(imp_long,.imp=1, .id=2) # doesnt work
as.mids(imp_long) # doesnt work

Best,

Julian


我不太确定你想要实现什么,以及为什么要将输入的数据重新转换为“mids”对象。通常,在完成“complete”后,对填充数据进行分析就可以正常工作了。 - SimonG
3个回答

4

我希望这个小例子能回答你的问题。我不是很清楚为什么需要将数据转换回 mids 类。通常情况下,当我使用 mice 时,我会将填充后的数据转换成一个完成数据集列表,然后应用 apply 函数对该列表进行分析。

library(mice)
library(reshape)
library(lme4)

Data <- data.frame(
    ID = sort(sample(1:100)),
    GROUP = sample(c(0, 1), 100, replace = TRUE),
    matrix(sample(c(1:5,NA), 300, replace=T), ncol=3)
)

# impute
m.out <- mice(Data, pred=quickpred(Data, mincor=0, exclude=c("ID","GROUP")))

# complete
imp.data <- as.list(1:5)
for(i in 1:5){
  imp.data[[i]] <- complete(m.out, action=i)
}

# reshape
imp.data <- lapply(imp.data, melt, id=c("ID","GROUP"))

# analyse
imp.fit <- lapply(imp.data, FUN=function(x){
  lmer(value ~ as.numeric(variable)+(1|ID), data=x) 
})
imp.res <- sapply(imp.fit, fixef)

请记住,当您对在不同级别变化的变量的关系感兴趣时,单级插补并不是一个好主意。

对于这些任务,您应使用维护双层变异而不像 mice在此配置中那样抑制它的过程。

虽然mice有解决方法,但例如Mplus和R中的pan软件包专门为双层MI设计。


亲爱的西蒙,非常感谢您回答我的问题并提供单一插补的侧记。我会查看pan包并弄清楚它是否对效果产生影响。您真是帮了我大忙。 - Julian Schulze
如果您使用 pan,您也可以查看 mitml 包,该包使用 MI 自动化了许多基于 lmer 的分析。 - SimonG

2
不确定我的回答是否相关,因为您很久以前就提出了问题,但无论如何... 在这张幻灯片 链接 的末尾,在标题为“Method POST”的幻灯片上,作者使用函数long2mids():Original Answer
imp1 <- mice(boys) 
long <- complete(imp1, "long", inc = TRUE)
long$whr <- with(long, wgt / (hgt / 100))
imp2 <- long2mids(long)

然而,long2mids()自版本2.22起已被弃用,推荐使用as.mids()


-1

在这里,miceadds包中的as.mids()函数将起作用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接