Caret::train - Valores no imputados
Pregunta
Estoy intentando imputar valores pasando "knnImpute" al argumento preProcess del método train() de Caret.Según el siguiente ejemplo, parece que los valores no se imputan, permanecen como NA y luego se ignoran.¿Qué estoy haciendo mal?
Cualquier ayuda es muy apreciada.
library("caret")
set.seed(1234)
data(iris)
# mark 8 of the cells as NA, so they can be imputed
row <- sample (1:nrow (iris), 8)
iris [row, 1] <- NA
# split test vs training
train.index <- createDataPartition (y = iris[,5], p = 0.80, list = F)
train <- iris [ train.index, ]
test <- iris [-train.index, ]
# train the model after imputing the missing data
fit <- train (Species ~ .,
train,
preProcess = c("knnImpute"),
na.action = na.pass,
method = "rpart" )
test$species.hat <- predict (fit, test)
# there is 1 obs. (of 30) in the test set equal to NA
# this 1 obs. was not returned from predict
Error in `$<-.data.frame`(`*tmp*`, "species.hat", value = c(1L, 1L, 1L, :
replacement has 29 rows, data has 30
ACTUALIZAR:He podido utilizar la función preProcess directamente para imputar los valores.Todavía no entiendo por qué esto no parece ocurrir dentro de la función del tren.
# attempt to impute using nearest neighbors
x <- iris [, 1:4]
pp <- preProcess (x, method = c("knnImpute"))
x.imputed <- predict (pp, newdata = x)
# expect all NAs were populated with an imputed value
stopifnot( all (!is.na (x.imputed)))
stopifnot( length (x) == length (x.imputed))
Solución
Ver ?predict.train
:
## S3 method for class 'train'
predict(object, newdata = NULL, type = "raw", na.action = na.omit, ...)
Hay un na.omit
aquí también:
> length(predict (fit, test))
[1] 29
> length(predict (fit, test, na.action = na.pass))
[1] 30
máx.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow