我有一个缺少值的因素。我知道这个因子值取决于几个日期的组合。
尽管如此,我还是遇到了一些麻烦。似乎这两个类都很棘手,尤其是Date
。
举一个简单的例子,我们有1 Date
和1个因子:
require(VIM)
toimpute <- data.frame(mydates = seq(as.Date("1990-01-01"),as.Date("2000-01-01"),50),
imputeme = c(NA,NA,rep(c("a","b","c"),24)))
toimpute$imputeme <- as.factor(toimpute$imputeme)
似乎kNN不会为此而努力:
imputed <- kNN(toimpute,variable = "imputeme")
[.data.frame
(data.x ,, i)中的错误:选择了未定义的列
mice
也不喜欢它。我认为mice
至少应该使用因子,尽管这条消息说它必须是numeric
(也许它允许factor
因变量但只有numeric
表示自变量? ):
imputed <- mice(toimpute)
iter imp variable 1 1 imputeme Error in FUN(newX[, i], ...) : 'x' must be numeric In addition: Warning messages: 1: In var(data[, j], na.rm = TRUE) : Calling var(x) on a factor x is deprecated and will become an error. Use something like 'all(duplicated(x)[-1L])' to test for a constant vector. 2: In FUN(newX[, i], ...) : NAs introduced by coercion
我想如果没有别的我可以做随机森林模型来预测缺失数据的观察类别,但是如果有一种方法可以用一种更常见的缺失值函数来做到这一点。我想知道。
答案 0 :(得分:2)
要处理因子变量的估算,您可以使用Hmisc
包中的aregImpute或transcan。
toimpute <- data.frame(mydates = seq(as.Date("1990-01-01"),as.Date("2000-01-01"),50),
imputeme = c(NA,NA,rep(c("a","b","c"),24)))
toimpute$imputeme <- as.factor(toimpute$imputeme)
require(Hmisc)
imputed <- aregImpute(data=toimpute,mydates~imputeme)
table(is.na(imputed))
FALSE
19
从Arguments(aregImpute
)下的文档中可以看到:
式
一个S模型公式。您可以指定变量转换的限制。函数自动确定哪些变量是分类(即因子,类别或字符向量)。二进制变量自动限制为线性。通过识别函数(I())包含变量,强制连续变量的线性变换。建议factor()或as.factor()不出现在公式中,而是根据需要将变量转换为因子并存储在数据框中。 这种方式对因子变量的估算(例如使用impute.transcan完成)将是正确的。目前,reformM不处理包含在I()等函数中的变量。