【问题标题】:Input data must have class mids输入数据必须具有类中值
【发布时间】:2017-07-28 22:13:20
【问题描述】:

我正在做一个学校项目,我需要对缺失的数据进行插补,在用老鼠进行插补后,我试图生成具有完整功能的完整数据集。

当我一个一个地运行它们时,一切正常,但我想使用一个 for 循环,以防我想要的不仅仅是 m = 5 插补。现在,当尝试运行for-loop 时,我总是收到错误

完成错误(imputation[1]):输入数据必须有类“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]))
}

有人可以帮我吗?

【问题讨论】:

  • 请告诉我在你的真实应用中你不使用maxit=1
  • 我的老师说可以这样做吗?但是我应该重新考虑一下,这是否可能导致错误?
  • 它不会导致错误的说。它可能只会给你非常糟糕的推算。链式方程算法应该运行到收敛。您只允许它运行一次迭代。因此,插补结果可能毫无价值。
  • tbh 我也想知道这个问题,我不太确定他为什么提出这个解决方案,他还建议将 norm 作为方法,但是我的 NA 变量是分类变量,并且 norm 会计算奇数但是我什至需要,所以我正在考虑使用购物车...
  • 如果你所有的数据都是分类的,我强烈推荐包imputeMulti。作为包作者,我有偏见;但我的测试表明它比AmeliamiceHmisc 中的任何一个都准确得多。而且这个结果对于数据中的缺失量是稳健的......请注意,imputeMulti 仅适用于分类数据,不包括混合(分类和连续)数据。

标签: r missing-data imputation r-mice


【解决方案1】:

因为类不是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)))

【讨论】:

    猜你喜欢
    • 2016-04-26
    • 2016-12-15
    • 2013-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多