我在对纵向数据进行统计分析后遇到问题 用小鼠估算缺失值。在广泛的错误估算后 data-format我将提取的数据转换为longformat。因为纵向 数据参与者具有重复的行(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
最佳,
儒略
答案 0 :(得分: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设计的。
答案 1 :(得分:1)
由于您很久以前就问过一个问题,所以不确定我的答案有多重要,但是无论如何...在最后的幻灯片https://stefvanbuuren.name/Winnipeg/Lectures/Winnipeg.pdf中,作者名为“方法发布”的幻灯片使用功能long2mids():
imp1 <- mice(boys);
long <- complete(imp1, "long", inc = TRUE);
long$whr <- with(long, wgt/(hgt/100));
imp2 <- long2mids(long)
long2mids()似乎变成了as.mids()(请参阅此https://www.rdocumentation.org/packages/mice/versions/2.30/topics/long2mids)
答案 2 :(得分:0)
来自 mouseadds 包的 as.mids() 将在这里工作