У вас немає іншого вибору, як вписати значення або змінити моделі. Хорошим вибором може бути арегмітація в пакеті Hmisc. Я думаю, що його менш важкий, ніж rfimpute, який саме вас затримує, перший приклад пакету (є й інші):
# 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
Ви згадуєте, що у вас є багато нових спостережень, у яких відсутні значення на незалежних змінних. Незважаючи на те, що у вас є багато подібних випадків, якщо для кожного нового спостереження є лише недоліки в одній або двох його змінних, і кількість ваших змінних не є крихітною, можливо, просто заповнення дірок середньою чи середньою (чи є вони суцільними?) міг працювати.
Ще одна річ, яка може бути цікавою, - це зробити незначний аналіз змінної важливості. Випадкова реалізація лісу R обчислює два важливі заходи та відповідні ділянки:
varImpPlot(yourRandomForestModel) # yourRandomForestModel must have the argument importance=TRUE
І ви можете пограти, просто включивши «важливі» змінні у тренінг моделі, поки точність прогнозування не все, що впливає на порівняння з «повною моделлю». Можливо, ви зберігаєте змінні з малою кількістю пропусків. Це може допомогти вам зменшити розмір вашої проблеми.
randomForest
пакет в R має лише описаний вами метод імпутації. Якщо ви хочете залишитися в подібному середовищі,gbm
є дещо плавніший метод поводження з пропущеними значеннями в нових даних (це не ідеально, але це корисно).