missForest
missForest é um método de imputação não paramétrico para dados tabulares de tipos mistos em R. Ele lida com variáveis numéricas e categóricas simultaneamente, treinando iterativamente florestas aleatórias para prever valores ausentes a partir dos observados. Sem suposições explícitas de modelagem, sem fatorações de matrizes—apenas fortes bases preditivas que funcionam bem imediatamente.
- Funciona com qualquer combinação de colunas numéricas e fator
- Captura não linearidades e interações
- Reporta o erro de imputação out-of-bag (OOB) (NRMSE/PFC)
- Suporta execução paralela (por variável ou por floresta)
- Dois backends de floresta:
ranger(padrão) erandomForest(legado/compatibilidade)
Instalação
# CRAN (recommended)
install.packages("missForest")Development version (from GitHub)
install.packages("remotes")
remotes::install_github("stekhoven/missForest")Quick start
library(missForest)Example data
data(iris)Introduce ~20% MCAR missingness
set.seed(81)
iris_mis <- prodNA(iris, noNA = 0.20)Impute with default backend (ranger)
imp <- missForest(iris_mis, xtrue = iris, verbose = TRUE)Imputed data
head(imp$ximp)Estimated OOB errors (NRMSE for numeric, PFC for factors)
imp$OOBerrorTrue error if xtrue was provided (for benchmarking only)
imp$errorEscolhendo um backend
# Legacy behavior using randomForest
imp_rf <- missForest(iris_mis, backend = "randomForest")Explicitly use ranger with limited threads
imp_rg <- missForest(iris_mis, backend = "ranger", num.threads = 2)Paralelização
Dois modos estão disponíveis via parallelize:
"variables": constrói florestas para diferentes variáveis em paralelo (registre um backend foreach)."forests": paraleliza dentro da floresta de uma única variável (threads do ranger; ou sub-florestas foreach para randomForest).
# Not run:
library(doParallel)
registerDoParallel(2)
imp_vars <- missForest(iris_mis, parallelize = "variables", verbose = TRUE)
imp_fors <- missForest(iris_mis, parallelize = "forests", verbose = TRUE, num.threads = 2)
Visão geral da API
missForest(xmis, ...)
Função principal de imputação.
Principais argumentos:
xmis— data frame/matriz com valores ausentes (colunas devem sernumericoufactor).maxiter— iterações máximas (padrão10).ntree— árvores por floresta (padrão100).mtry— variáveis testadas em cada divisão (padrãosqrt(p)).nodesize— vetor numérico de tamanho 2: tamanho mínimo do nó para c(numeric, factor). Padrãoc(5, 1).variablewise— retorna erro OOB por variável seTRUE.parallelize—"no","variables"ou"forests".num.threads— threads pararanger(ignorado pelorandomForest).backend—"ranger"(padrão) ou"randomForest".xtrue— dados completos opcionais para benchmarking (adiciona$error).
backend = "ranger":ntree → num.treesnodesize → min.bucket(separado para regressão/classificação; padrãoc(5,1))sampsize(contagens) →sample.fraction(frações; geral ou por classe)classwt → class.weightscutofftratado ajustando probability forests e pós-thresholding
Utilitários
mixError(ximp, xmis, xtrue)— calcula NRMSE (numérico) e PFC (fatorial) sobre entradas ausentes reais.nrmse(ximp, xmis, xtrue)— NRMSE apenas para dados contínuos.prodNA(x, noNA = 0.1)— injeta ausência MCAR em um data frame.varClass(x)— retorna"numeric"/"factor"por coluna.
Dicas & melhores práticas
- Converta colunas de caracteres em fatores antes de chamar
missForest. - Para dados amplos, considere
parallelize = "variables". Para árvores profundas/caros, considereparallelize = "forests". - Defina uma semente para resultados quase reprodutíveis:
set.seed(123); imp <- missForest(x)
``
- Você pode reduzir o valor de
ntree durante a prototipagem para acelerar as iterações.---
Citação
Se você usar o missForest, por favor cite:
Stekhoven, D. J. & Bühlmann, P. (2012). MissForest—nonparametric missing value imputation for mixed-type data.* Bioinformatics, 28(1), 112–118. https://doi.org/10.1093/bioinformatics/btr597
Você também pode citar o pacote:
r
citation("missForest")
``Contributing
Issues and pull requests are welcome. Please include a minimal reproducible example when reporting bugs. For performance discussions, share small benchmarks and session info.
License
GPL (≥ 2)
Contact
Daniel J. Stekhoven — stekhoven@nexus.ethz.ch
--- Tranlated By Open Ai Tx | Last indexed: 2026-07-17 ---