Sie haben keine andere Wahl, als die Werte zu unterstellen oder Modelle zu ändern. Eine gute Wahl könnte aregImpute im Hmisc-Paket sein. Ich denke, es ist weniger schwer als rfimpute, was Sie festhält, erstes Paketbeispiel (es gibt andere):
# 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
Sie erwähnen, dass Sie viele neue Beobachtungen haben, bei denen Werte für die unabhängigen Variablen fehlen. Auch wenn Sie viele Fälle wie diesen haben, wenn für jede neue Beobachtung nur eine oder zwei ihrer Variablen fehlen und Ihre Anzahl von Variablen nicht winzig ist, füllen Sie möglicherweise nur die Löcher mit einem Median oder Durchschnitt (sind sie kontinuierlich?) könnte klappen.
Eine andere Sache, die interessant sein könnte, ist eine geringfügige Analyse der variablen Wichtigkeit. Die zufällige Forest R-Implementierung berechnet zwei Wichtigkeitsmaße und entsprechende Diagramme:
varImpPlot(yourRandomForestModel) # yourRandomForestModel must have the argument importance=TRUE
Und Sie können damit herumspielen, nur "wichtige" Variablen in das Modelltraining einzubeziehen, bis die Vorhersagegenauigkeit im Vergleich zum "vollständigen Modell" nicht mehr so stark beeinträchtigt ist. Vielleicht behalten Sie Variablen mit einer geringen Anzahl von Fehlern. Dies könnte Ihnen helfen, die Größe Ihres Problems zu verringern.
randomForest
Paket in R verfügt nur über die von Ihnen beschriebene Imputationsmethode. Wenn Sie in einer ähnlichen Umgebung bleiben möchten,gbm
haben Sie eine etwas flüssigere Methode, um fehlende Werte in neuen Daten zu behandeln (es ist nicht perfekt, aber es ist nützlich).