首页 文章

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

提问于
浏览
4

在使用小鼠插补缺失值后对纵向数据进行统计分析时遇到问题 . 在以宽数据格式插入缺失之后,我将提取的数据转换为长格式 . 由于纵向数据,参与者具有重复的行(3个时间点),这在将长格式数据集转换为类型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

最好,

朱利安

1 回答

  • 3

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

相关问题