2017-03-08 66 views
1

我正在进行一项学校项目,在该项目中,我需要对缺失数据进行补偿,并在用鼠标进行插补后尝试使用完整功能生成完整的数据集。输入数据必须具有类中级

当我一个接一个地运行它们时,一切正常,但我想用for循环来防止我想要的不止m = 5插值。现在,当试图运行for-loop时,我总是得到错误

完整错误(插补[1]):输入数据必须具有类'mids'。

但是当我查看这个类时 mids,这里怎么回事?

这是我的代码:

imputation <- mice(data = data, m = 5, method = "norm", maxit = 1, seed = 500) 
m <- 5 
for(i in 1:m){ 
    completeData[m] <- complete(imputation[m]) 
    print(summary(completeData[m])) 
} 

可能有人也许帮我在这里?

+0

请告诉我在你的真实应用程序中,你不使用'maxit = 1' –

+0

我的老师说这样做可以吗?但是我应该重新考虑一下,这可能会导致错误吗? – ZaLa91

+0

它不会导致每个说的错误。它可能会让你真的很糟糕的插曲。链式方程算法应运行收敛。你只允许它运行一次迭代。估算结果可能因此毫无价值。 –

回答

0

我们正在错误,因为该类不是mids

imputation[1] 
# $call 
# mice(data = walking, m = 5, maxit = 0, seed = 500) 

class(imputation[1]) 
# [1] "list" 

从手册?complete

使用

complete(x, action = 1, include = FALSE)

library(mice) 

# dummy data imputation 
data(walking) 
imputation <- mice(walking, max = 0, m = 5, seed = 500) 

# using for loop 
m <- 5 
for(i in 1:m){ 
    completeData <- complete(imputation, m) 
    print(summary(completeData)) 
} 

# I prefer to use lapply 
lapply(seq(imputation$m), function(i) summary(complete(imputation, i))) 
相关问题