提问人:Hack-R 提问时间:7/8/2016 更新时间:7/8/2016 访问量:927
使用日期插补因子值
Impute factor values using dates
问:
我有一个缺少值的因子。我知道这个因子值取决于几个日期的组合。
不过,我在让它工作时遇到了一些麻烦。似乎这两门课都很棘手,尤其是.Date
举个简单的例子,让我们有 1 和 1 个因子:Date
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.x, , i) 中的错误:选择了未定义的列
[.data.frame
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
我想如果不出意外,我可以做一个随机森林模型来预测缺失数据的观测值的类别,但是如果有一种方法可以用我想知道的更常见的缺失值函数之一来做到这一点。
答:
2赞
Joseph Wood
7/8/2016
#1
要处理因子变量的插补,可以使用包中的 aregImpute 或 transcan。Hmisc
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
在“参数 (for)”下的文档中,它写道:aregImpute
公式
S 模型公式。您可以指定变量转换的限制。该函数自动确定哪些变量是分类变量(即因子、类别或字符向量)。二进制变量被自动限制为线性变量。通过识别函数 (I()) 封闭变量来强制连续变量的线性变换。建议不要在公式中显示 factor() 或 as.factor(),而是根据需要将变量转换为因子并存储在数据框中。这样,因子变量的插补(例如,使用 impute.transcan 完成)将是正确的。目前,reformM 不处理包含在函数(如 I())中的变量。
评论
0赞
Hack-R
7/8/2016
谢谢,约瑟夫。当我明天开始工作时,我会用实际代码更新它。
0赞
Joseph Wood
7/8/2016
@Hack-R,太棒了!!我昨天打算添加一个代码示例,但我非常忙。此外,不确定对这个问题的否决票,因为这对社区来说似乎是一个非常有帮助的问题,更不用说一个结构良好的问题了。
评论
aregImpute
transcan
Hmisc