missForest
missForest — непараметрический метод импутации для смешанных типов табличных данных в R. Он одновременно обрабатывает числовые и категориальные переменные, итеративно обучая случайные леса для предсказания пропущенных значений на основе имеющихся. Без явных модельных предположений, без матричных факторизаций — только сильные предсказательные базовые алгоритмы, которые хорошо работают из коробки.
- Работает с любым сочетанием числовых и факторных столбцов
- Учитывает нелинейности и взаимодействия
- Показывает ошибку импутации out-of-bag (OOB) (NRMSE/PFC)
- Поддерживает параллельное выполнение (по переменной или по лесу)
- Два движка леса:
ranger(по умолчанию) иrandomForest(устаревший/совместимый)
Установка
# 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$errorВыбор серверной части
# 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)Параллелизация
Доступны два режима через parallelize:
"variables": построение лесов для разных переменных параллельно (зарегистрировать backend foreach)."forests": параллелизация внутри леса одной переменной (потоки ranger; или подлеса foreach для 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)
Обзор API
missForest(xmis, ...)
Основная функция импутации.
Ключевые аргументы:
xmis— data frame/матрица с пропущенными значениями (столбцы должны бытьnumericилиfactor).maxiter— максимальное количество итераций (по умолчанию10).ntree— количество деревьев в каждом лесу (по умолчанию100).mtry— количество переменных для каждого разбиения (по умолчаниюsqrt(p)).nodesize— числовой длины 2: минимальный размер узла для c(numeric, factor). По умолчаниюc(5, 1).variablewise— возвращает ошибку OOB для каждой переменной, еслиTRUE.parallelize—"no","variables", или"forests".num.threads— количество потоков дляranger(игнорируется вrandomForest).backend—"ranger"(по умолчанию) или"randomForest".xtrue— необязательные полные данные для бенчмаркинга (добавляет$error).
backend = "ranger":ntree → num.treesnodesize → min.bucket(отдельно для регрессии/классификации; по умолчаниюc(5,1))sampsize(количество) →sample.fraction(доли; общая или по классам)classwt → class.weightscutoffреализуется путем обучения лесов вероятностей и пост-пороговой обработки
Утилиты
mixError(ximp, xmis, xtrue)— вычисляет NRMSE (numeric) и PFC (factor) по истинно пропущенным значениям.nrmse(ximp, xmis, xtrue)— NRMSE только для непрерывных данных.prodNA(x, noNA = 0.1)— добавляет MCAR пропуски в data frame.varClass(x)— возвращает"numeric"/"factor"для каждого столбца.
Советы и лучшие практики
- Преобразуйте столбцы с символами в факторы перед вызовом
missForest. - Для широких данных используйте
parallelize = "variables". Для глубоких/дорогостоящих деревьев используйтеparallelize = "forests". - Установите seed для квази-воспроизводимых результатов:
set.seed(123); imp <- missForest(x)
``
- Вы можете уменьшить значение
ntree во время прототипирования для ускорения итераций.---
Цитирование
Если вы используете missForest, пожалуйста, цитируйте:
Stekhoven, D. J. & Bühlmann, P. (2012). MissForest—непараметрическая импутация пропущенных значений для данных смешанного типа.* Bioinformatics, 28(1), 112–118. https://doi.org/10.1093/bioinformatics/btr597
Вы также можете сослаться на пакет:
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 ---