【问题标题】:Cannot coerce class ""amelia"" to a data.frame in R无法将类“amelia”强制转换为 R 中的 data.frame
【发布时间】:2014-11-22 02:05:38
【问题描述】:

我在 R 中使用 Amelia 包来处理缺失值。当我尝试使用估算数据训练随机森林时出现以下错误。我不确定如何将 amelia 类转换为数据框,这将是 R 中 randomForest 函数的正确输入。

train_data<-read.csv("train.csv")
sum(is.na(train_data))

impute<- amelia(x=train_data,m=5,idvars=c("X13"), interacs=FALSE)
impute<= as.data.frame(impute)

for(i in 1:impute$m) {  
  model <- randomForest(Y ~X1+X2+X3+X4+X5+X6,
                 data= as.data.frame(impute))
}

Error in as.data.frame.default(impute) : 
  cannot coerce class ""amelia"" to a data.frame

如果我将 randomForest 的输入用作 impute$imputations[[i]],则会出现以下错误:

 model <- randomForest(Y ~X1+X2+X3+X4+X5+X6,
                 impute$imputations[[i]])
Error: $ operator is invalid for atomic vectors

谁能建议我如何解决这个问题。这将是一个很大的帮助。

【问题讨论】:

  • @RichardScriven 你的意思是我应该做 impute
  • 我认为你应该先看看unclass(impute)。这应该让您对对象的实际外观有所了解。忘记as.matrix,我错了
  • @RichardScriven 感谢您的解释。我仍然无法处理这个错误。我在使用 aregImpute 时遇到了类似的错误。当我将估算的测试数据集提供给预测函数时。 impute_valid

标签: r dataframe random-forest


【解决方案1】:

发生这种情况是因为您正在尝试对包含您所做的插补信息的变量进行训练。它没有您需要训练的数据。您需要使用完整的函数来组合数据集中的估算值。

impute <- amelia(x=train_data,m=5,idvars=c("X13"), interacs=FALSE)
impute <- complete(impute,1)
impute <- as.data.frame(impute)

在此之后,您将不会遇到训练或预测数据的问题。

【讨论】:

  • 这是mice imputation包的答案,而问题是关于amelia的。
  • @MhairiMcNeill 已更正。我在使用时遇到了这个问题,并且错过了用这种特殊情况更新它。但修复方法保持不变。
【解决方案2】:

所以,我认为第一个问题是这里的这一行:

impute<= as.data.frame(impute)

应该是:

impute <- as.data.frame(impute)

这会引发错误。

多重插补用多个数据集替换数据,每个数据集对缺失值进行不同的替换。这反映了这些缺失值预测的不确定性。通过将 Amelia 对象转换为数据帧,您试图从 5 个数据帧中创建一个数据帧,但如何做到这一点并不明显。

您可能想研究更简单的插补形式(如均值插补)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-11
    • 2017-07-09
    • 2017-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多