【发布时间】:2020-03-07 03:39:34
【问题描述】:
我的问题是对使用“小鼠”按组进行插补的问题的后续: multiple imputation and multigroup SEM in R
就插补部分而言,答案中的代码可以正常工作。但之后我得到了一份实际完整数据的列表,但不止一组。示例如下:
'Set up data frame'
df.g1<-data.frame(ID=rep("A",5),x1=floor(runif(5,0,2)),x2=floor(runif(5,10,20)),x3=floor(runif(5,100,150)))
df.g2<-data.frame(ID=rep("B",5),x1=floor(runif(5,0,2)),x2=floor(runif(5,25,50)),x3=floor(runif(5,200,250)))
df.g3<-data.frame(ID=rep("C",5),x1=floor(runif(5,4,5)),x2=floor(runif(5,75,99)),x3=floor(runif(5,500,550)))
df<-rbind(df.g1,df.g2,df.g3)
'Introduce NAs'
df$x1[rbinom(15,1,0.1)==1]<-NA
df$x2[rbinom(15,1,0.1)==1]<-NA
df$x3[rbinom(15,1,0.1)==1]<-NA
df
'Impute values by group:'
df.clean<-lapply(split(df,df$ID), function(x) mice::complete(mice(df,m=5)))
df.clean
如您所见,df.clean 是一个包含 3 个元素的列表。每组一个元素。但是每个元素都包含我正在寻找的完整数据集。
原始答案建议 rbind() 获取 df.clean 中的数据,这给我留下了一个包含 45 个(原始大小的 3 倍)观测值的新数据集。 这是最后一步的原始代码:
imputed.both <- do.call(args = df.clean, what = rbind)
哪个数据是“正确”的?为什么最后一步?
非常感谢!
【问题讨论】:
-
df.clean是数据帧列表,而imputed.both是与一个数据帧相同的数据。你的问题到底是什么? -
df.clean 基本上是我在其中寻找的答案的三倍。用推算的数据。那么这三个 data.frames 中的哪一个是“正确的”?其次,这三个数据框合二为一的意义何在?在我的示例中,检查输出仍然相对容易,但我的原始数据集约为 500 组。 IE。如果没有必要,我不想增加我的数据大小。
-
嗨胡安,我想你误解了stackoverflow.com/questions/48770037/…。 OP 需要在每个子集中进行估算,因此拆分
-
在你的情况下,你不需要这样做,你可以在你的函数中看到, lapply(split(df,df$ID), function(x) mice::complete( mouse(df,m=5))),x 实际上没用。
-
好的,我把它作为答案发布,我希望现在更清楚
标签: r group-by imputation r-mice