【问题标题】:Multiple Imputation of longitudinal data in MICE and statistical analyses of object type midsMICE中纵向数据的多重插补和对象类型中间的统计分析
【发布时间】:2014-09-12 09:43:35
【问题描述】:

我在执行纵向数据统计分析后遇到问题 使用老鼠来填补缺失值。在广泛的失踪事件归算后 数据格式我将提取的数据转换为长格式。由于纵向 数据参与者有重复的行(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

最好的,

朱利安

【问题讨论】:

  • 我不太确定您想要实现什么以及为什么要将估算数据重新转换为 mids 对象。通常,一旦您通过complete,对估算数据的分析就可以正常工作。

标签: r r-mice


【解决方案1】:

我希望我能用这个小例子回答你的问题。我真的不明白为什么需要转换回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 设计的。

【讨论】:

  • 亲爱的 Simon,非常感谢您回答我的问题和您的单一插补旁注。我会看看 pan 包,看看它是否会对效果产生影响。你帮了大忙。
  • @JulianSchulze 如果您使用pan,您还可以查看mitml 包,它使用MI 自动执行大部分基于lmer 的分析。
【解决方案2】:

不确定我的回答有多相关,因为您很久以前就问过一个问题,但无论如何......在this slide deck 接近尾声的幻灯片上,在标题为“方法 POST”的幻灯片上,作者使用了函数 long2mids()

imp1 <- mice(boys) 
long <- complete(imp1, "long", inc = TRUE)
long$whr <- with(long, wgt / (hgt / 100))
imp2 <- long2mids(long)

但是,long2mids() has been deprecated in favor of as.mids() since version 2.22

【讨论】:

    【解决方案3】:

    miceadds 包中的 as.mids() 将在这里工作

    【讨论】:

      猜你喜欢
      • 2018-06-05
      • 1970-01-01
      • 2021-10-15
      • 1970-01-01
      • 1970-01-01
      • 2011-10-02
      • 1970-01-01
      • 1970-01-01
      • 2021-12-31
      相关资源
      最近更新 更多