Non hai altra scelta che imputare i valori o cambiare i modelli. Una buona scelta potrebbe essere aregImpute nel pacchetto Hmisc. Penso che sia meno pesante di rfimpute che è ciò che ti trattiene, primo esempio di pacchetto (ce ne sono altri):
# 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
Dici che hai molte nuove osservazioni che hanno valori mancanti sulle variabili indipendenti. Anche se hai molti casi come questo, se per ogni nuova osservazione ci sono solo mancanze in una o due delle sue variabili e la tua quantità di variabili non è minuscola forse riempie i buchi con una mediana o una media (sono continui?) potrebbe funzionare.
Un'altra cosa che potrebbe essere interessante è fare un'analisi di importanza variabile minore. L'implementazione casuale della foresta R calcola due misure di importanza e i rispettivi grafici:
varImpPlot(yourRandomForestModel) # yourRandomForestModel must have the argument importance=TRUE
E puoi giocare semplicemente includendo variabili "importanti" nell'addestramento del modello, fino a quando l'accuratezza della previsione non è affatto influenzata rispetto al "modello completo". Forse mantieni le variabili con un basso numero di mancanze. Potrebbe aiutarti a ridurre le dimensioni del tuo problema.
randomForest
pacchetto in R ha solo il metodo di imputazione descritto. Se vuoi rimanere in un ambiente simile,gbm
ha un metodo un po 'più fluido per gestire i valori mancanti nei nuovi dati (non è perfetto, ma è utile).