【问题标题】:Impute factor values using dates使用日期估算因子值
【发布时间】:2016-07-08 21:34:02
【问题描述】:

我有一个缺少值的因素。我知道这个因子值取决于几个日期的组合。

我在让它工作时遇到了一些麻烦。似乎这两个课程都很棘手,尤其是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

我想如果没有别的办法,我可以做一个随机森林模型来预测具有缺失数据的观察类别,但是如果有一种方法可以使用我想知道的更常见的缺失值函数之一来做到这一点。

【问题讨论】:

  • 我认为aregImpute 适用于因子变量。检查this link
  • @JosephWood 这似乎有效,如果你愿意,可以添加它作为答案
  • 我不确定日期。从文档中我猜它们会自动转换为因子。另外,你可以从Hmisc查看transcan

标签: r missing-data


【解决方案1】:

要处理因子变量的插补,您可以使用 Hmisc 包中的 aregImputetranscan

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 

来自参数下的文档(对于aregImpute),内容如下:

公式
S 模型公式。您可以指定变量转换的限制。该函数自动确定哪些变量是分类的(即因子、类别或字符向量)。二元变量被自动限制为线性。通过识别函数 (I()) 封闭变量来强制连续变量的线性变换。建议公式中不要出现 factor() 或 as.factor(),而是根据需要将变量转换为因子并存储在数据框中。 这样,因子变量的插补(例如使用 impute.transcan 完成)将是正确的。 目前,reformM 不处理包含在 I() 等函数中的变量。

【讨论】:

  • 谢谢,约瑟夫。明天上班时,我会用实际代码更新它。
  • @Hack-R,太好了!!昨天我打算添加一个代码示例,但我非常忙。此外,不确定该问题是否被否决,因为这似乎是一个对社区非常有帮助的问题,更不用说一个结构良好的问题了。
猜你喜欢
  • 2019-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多