Bạn không có lựa chọn nào khác ngoài việc áp đặt các giá trị hoặc thay đổi mô hình. Một lựa chọn tốt có thể là aregImpute trong gói H'misc. Tôi nghĩ rằng nó ít nặng hơn rfimpute, thứ đang giam giữ bạn, ví dụ gói đầu tiên (có những thứ khác):
# 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
Bạn đề cập rằng bạn có nhiều quan sát mới thiếu giá trị trên các biến độc lập. Mặc dù bạn có nhiều trường hợp như thế này, nhưng đối với mỗi lần quan sát mới, chỉ có một lỗi trong một hoặc hai biến của nó và số lượng biến của bạn không nhỏ có thể chỉ lấp đầy các lỗ trung bình hoặc trung bình (chúng có liên tục không?) có thể làm việc.
Một điều có thể thú vị là làm một phân tích tầm quan trọng nhỏ. Việc thực hiện rừng R ngẫu nhiên tính toán hai biện pháp quan trọng và các ô tương ứng:
varImpPlot(yourRandomForestModel) # yourRandomForestModel must have the argument importance=TRUE
Và bạn có thể chơi xung quanh chỉ với các biến "quan trọng" trong đào tạo mô hình, cho đến khi độ chính xác dự đoán không phải là tất cả những gì bị ảnh hưởng so với "mô hình đầy đủ". Có thể bạn giữ các biến với số lần bỏ lỡ thấp. Nó có thể giúp bạn giảm kích thước của vấn đề của bạn.
randomForest
gói trong R chỉ có phương thức cắt bỏ mà bạn mô tả. Nếu bạn muốn ở trong một môi trường tương tự,gbm
có một phương pháp xử lý các giá trị bị thiếu trong dữ liệu mới một cách mượt mà hơn (nó không hoàn hảo, nhưng nó rất hữu ích).