Anda tidak punya pilihan selain menyalahkan nilai atau mengubah model. Pilihan yang bagus bisa berupa output dalam paket Hmisc. Saya pikir itu kurang berat daripada rfimpute yang merupakan apa yang menahan Anda, contoh paket pertama (ada yang lain):
# 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
Anda menyebutkan bahwa Anda memiliki banyak pengamatan baru yang memiliki nilai yang hilang pada variabel independen. Meskipun Anda memiliki banyak kasus seperti ini, jika untuk setiap pengamatan baru hanya ada satu atau dua variabel yang hilang dan jumlah variabel Anda tidak kecil, mungkin hanya mengisi lubang dengan median atau rata-rata (apakah terus menerus?) bisa bekerja.
Hal lain yang mungkin menarik adalah melakukan analisis kepentingan variabel minor. Implementasi R hutan acak menghitung dua langkah penting dan plot masing-masing:
varImpPlot(yourRandomForestModel) # yourRandomForestModel must have the argument importance=TRUE
Dan Anda dapat bermain-main hanya dengan memasukkan variabel "penting" dalam pelatihan model, hingga akurasi prediksi tidak terlalu terpengaruh dibandingkan dengan "model penuh". Mungkin Anda menyimpan variabel dengan jumlah kesalahan yang rendah. Ini bisa membantu Anda mengurangi ukuran masalah Anda.
randomForest
paket di R hanya memiliki metode imputasi yang Anda gambarkan. Jika Anda ingin tetap berada di lingkungan yang sama,gbm
memiliki metode yang agak halus untuk menangani nilai yang hilang dalam data baru (itu tidak sempurna, tetapi bermanfaat).