Você não tem escolha a não ser imputar os valores ou alterar modelos. Uma boa opção pode ser negativa no pacote Hmisc. Eu acho que é menos pesado que o rfimpute, que é o que está prendendo você, primeiro exemplo de pacote (existem outros):
# Check that aregImpute can almost exactly estimate missing values when
# there is a perfect nonlinear relationship between two variables
# Fit restricted cubic splines with 4 knots for x1 and x2, linear for x3
set.seed(3)
x1 <- rnorm(200)
x2 <- x1^2
x3 <- runif(200)
m <- 30
x2[1:m] <- NA
a <- aregImpute(~x1+x2+I(x3), n.impute=5, nk=4, match='closest')
a
matplot(x1[1:m]^2, a$imputed$x2)
abline(a=0, b=1, lty=2)
x1[1:m]^2
a$imputed$x2
# Multiple imputation and estimation of variances and covariances of
# regression coefficient estimates accounting for imputation
# Example 1: large sample size, much missing data, no overlap in
# NAs across variables
x1 <- factor(sample(c('a','b','c'),1000,TRUE))
x2 <- (x1=='b') + 3*(x1=='c') + rnorm(1000,0,2)
x3 <- rnorm(1000)
y <- x2 + 1*(x1=='c') + .2*x3 + rnorm(1000,0,2)
orig.x1 <- x1[1:250]
orig.x2 <- x2[251:350]
x1[1:250] <- NA
x2[251:350] <- NA
d <- data.frame(x1,x2,x3,y)
# Find value of nk that yields best validating imputation models
# tlinear=FALSE means to not force the target variable to be linear
f <- aregImpute(~y + x1 + x2 + x3, nk=c(0,3:5), tlinear=FALSE,
data=d, B=10) # normally B=75
f
# Try forcing target variable (x1, then x2) to be linear while allowing
# predictors to be nonlinear (could also say tlinear=TRUE)
f <- aregImpute(~y + x1 + x2 + x3, nk=c(0,3:5), data=d, B=10)
f
# Use 100 imputations to better check against individual true values
f <- aregImpute(~y + x1 + x2 + x3, n.impute=100, data=d)
f
par(mfrow=c(2,1))
plot(f)
modecat <- function(u) {
tab <- table(u)
as.numeric(names(tab)[tab==max(tab)][1])
}
table(orig.x1,apply(f$imputed$x1, 1, modecat))
par(mfrow=c(1,1))
plot(orig.x2, apply(f$imputed$x2, 1, mean))
fmi <- fit.mult.impute(y ~ x1 + x2 + x3, lm, f,
data=d)
sqrt(diag(vcov(fmi)))
fcc <- lm(y ~ x1 + x2 + x3)
summary(fcc) # SEs are larger than from mult. imputation
Você mencionou que tem muitas observações novas que têm valores ausentes nas variáveis independentes. Embora você tenha muitos casos como esse, se para cada nova observação houver apenas uma falta em uma ou duas de suas variáveis e sua quantidade de variáveis não for pequena, talvez apenas preencha os buracos com uma mediana ou média (eles são contínuos?) poderia trabalhar.
Outra coisa que poderia ser interessante é fazer uma análise de importância variável menor. A implementação da floresta aleatória R calcula duas medidas de importância e respectivas plotagens:
varImpPlot(yourRandomForestModel) # yourRandomForestModel must have the argument importance=TRUE
E você pode brincar apenas incluindo variáveis "importantes" no treinamento do modelo, até que a precisão da previsão não seja a única afetada em comparação com o "modelo completo". Talvez você mantenha variáveis com um número baixo de erros. Isso pode ajudar a reduzir o tamanho do seu problema.
randomForest
pacote em R possui apenas o método de imputação que você descreveu. Se você deseja permanecer em um ambiente semelhante,gbm
possui um método um pouco mais suave de lidar com valores ausentes em novos dados (não é perfeito, mas é útil).