missForest
missForest to nieparametryczna metoda imputacji dla danych tabelarycznych o mieszanych typach w R. Obsługuje jednocześnie zmienne numeryczne i kategoryczne, iteracyjnie trenując lasy losowe do przewidywania brakujących wartości na podstawie zaobserwowanych. Brak jawnych założeń modelowych, brak faktoryzacji macierzy—tylko silne predykcyjne podstawy, które działają dobrze od razu.
- Działa z dowolną kombinacją kolumn numerycznych i czynnikowych
- Wychwytuje nieliniowości i interakcje
- Raportuje błąd imputacji out-of-bag (OOB) (NRMSE/PFC)
- Wspiera wykonywanie równoległe (na zmienną lub na las)
- Dwa silniki lasu:
ranger(domyślny) orazrandomForest(starszy/zgodność)
Instalacja
# 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$errorWybór backendu
# 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)Równoległość
Dostępne są dwa tryby poprzez parallelize:
"variables": budowanie lasów dla różnych zmiennych równolegle (zarejestruj backend foreach)."forests": równoległość w obrębie lasu pojedynczej zmiennej (wątki ranger; lub pod-lasy foreach dla 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)
Przegląd API
missForest(xmis, ...)
Główna funkcja imputacji.
Kluczowe argumenty:
xmis— ramka danych/macierz z brakującymi wartościami (kolumny muszą być typunumericlubfactor).maxiter— maksymalna liczba iteracji (domyślnie10).ntree— liczba drzew w lesie (domyślnie100).mtry— liczba zmiennych próbowanych przy każdym podziale (domyślniesqrt(p)).nodesize— wektor długości 2 typu numerycznego: minimalna wielkość węzła dla c(numeric, factor). Domyślniec(5, 1).variablewise— zwraca błąd OOB dla każdej zmiennej, jeśliTRUE.parallelize—"no","variables"lub"forests".num.threads— liczba wątków dlaranger(ignorowana przezrandomForest).backend—"ranger"(domyślnie) lub"randomForest".xtrue— opcjonalny kompletny zbiór danych do benchmarkingu (dodaje$error).
backend = "ranger":ntree → num.treesnodesize → min.bucket(osobno dla regresji/klasyfikacji; domyślniec(5,1))sampsize(liczby) →sample.fraction(ułamki; całościowo lub dla każdej klasy)classwt → class.weightscutoffobsługiwany przez dopasowanie probability forests i post-thresholding
Narzędzia pomocnicze
mixError(ximp, xmis, xtrue)— oblicza NRMSE (numeryczne) i PFC (faktoryzowane) dla prawdziwych brakujących wartości.nrmse(ximp, xmis, xtrue)— NRMSE tylko dla danych ciągłych.prodNA(x, noNA = 0.1)— wprowadza brakujące wartości MCAR do ramki danych.varClass(x)— zwraca"numeric"/"factor"dla każdej kolumny.
Porady i najlepsze praktyki
- Przekształć kolumny znakowe na czynniki przed wywołaniem
missForest. - Dla szerokich danych rozważ
parallelize = "variables". Dla głębokich/kosztownych drzew rozważparallelize = "forests". - Ustaw ziarno dla quasi-powtarzalnych wyników:
set.seed(123); imp <- missForest(x)
``
- Możesz obniżyć wartość
ntree podczas prototypowania, aby przyspieszyć iterację.---
Cytowanie
Jeśli korzystasz z missForest, prosimy o cytowanie:
Stekhoven, D. J. & Bühlmann, P. (2012). MissForest—nieparametryczna imputacja brakujących wartości dla danych mieszanych typów.* Bioinformatics, 28(1), 112–118. https://doi.org/10.1093/bioinformatics/btr597
Możesz również zacytować pakiet:
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 ---