2016-07-07 25 views
2

我有一個缺失值的因素。我知道這個因素值取決於幾個日期的組合。使用日期的推算因子值

雖然我有一些麻煩得到這個工作。似乎這兩個類都很棘手,尤其是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) 

看來k近鄰不會買賬:

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 

我猜如果沒有別的辦法,我可以做一個隨機森林模型來預測缺失數據的觀測類別,但是如果有一種方法可以用我想知道的更常見的缺失值函數之一來完成。

+1

我認爲'aregImpute'對因子變量有效。檢查[此鏈接](http://www.inside-r.org/packages/cran/hmisc/docs/aregImpute) –

+0

@JosephWood這似乎工作,將其添加爲答案,如果你喜歡 –

+0

我不確定關於日期。我猜,他們會自動轉換爲因素。另外,你可以從'Hmisc'查看'transcan'。 –

回答

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()。

+0

謝謝,約瑟夫。當我明天開始工作時,我會用實際的代碼更新它。 –

+0

@ Hack-R,太棒了!我昨天要添加一個代碼示例,但我非常忙。此外,不確定關於這個問題的反對票,因爲這對於社區來說似乎是一個非常有幫助的問題,更不用說是一個構建得很好的問題。 –