Nie masz wyboru, musisz przypisać wartości lub zmienić modele. Dobrym wyborem może być aregImpute w pakiecie Hmisc. Myślę, że jest mniej ciężki niż rfimpute, co Cię zatrzymało, przykład pierwszego pakietu (są inne):
# 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
Wspominasz, że masz wiele nowych obserwacji, w których brakuje wartości niezależnych zmiennych. Chociaż masz wiele takich przypadków, jeśli dla każdej nowej obserwacji brakuje tylko jednej lub dwóch zmiennych, a twoja liczba zmiennych nie jest niewielka, może po prostu wypełniasz dziury medianą lub średnią (czy są one ciągłe?) powinno działać.
Inną rzeczą, która może być interesująca, jest analiza drobnych zmian ważności. Losowa implementacja lasu R oblicza dwie miary ważności i odpowiednie wykresy:
varImpPlot(yourRandomForestModel) # yourRandomForestModel must have the argument importance=TRUE
Możesz się bawić z włączeniem „ważnych” zmiennych do treningu modelu, dopóki dokładność prognoz nie wpłynie na to w porównaniu z „pełnym modelem”. Może trzymasz zmienne z małą liczbą braków. Może to pomóc w zmniejszeniu rozmiaru problemu.
randomForest
pakiet w R ma tylko opisaną metodę imputacji. Jeśli chcesz pozostać w podobnym środowisku,gbm
ma nieco płynniejszą metodę obsługi brakujących wartości w nowych danych (nie jest to idealne, ale jest przydatne).