missForest
missForest adalah metode imputasi nonparametrik untuk data tabular tipe campuran di R. Metode ini menangani variabel numerik dan kategorikal secara bersamaan dengan melatih random forest secara iteratif untuk memprediksi entri yang hilang dari data yang teramati. Tidak ada asumsi pemodelan eksplisit, tidak ada faktorisasi matriks—hanya baseline prediktif yang kuat dan langsung bekerja dengan baik.
- Bekerja dengan kombinasi kolom numerik dan faktor apa pun
- Menangkap nonlinearitas dan interaksi
- Melaporkan galat imputasi out-of-bag (OOB) (NRMSE/PFC)
- Mendukung eksekusi paralel (per variabel atau per forest)
- Dua backend forest:
ranger(default) danrandomForest(warisan/kompatibel)
Instalasi
# 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$errorMemilih 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)Paralelisasi
Dua mode tersedia melalui parallelize:
"variables": membangun hutan untuk variabel berbeda secara paralel (daftarkan backend foreach)."forests": paralelisasi di dalam hutan satu variabel (thread ranger; atau sub-hutan foreach untuk 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)
Ikhtisar API
missForest(xmis, ...)
Fungsi inti imputasi.
Argumen utama:
xmis— data frame/matrix dengan nilai hilang (kolom harusnumericataufactor).maxiter— iterasi maksimum (default10).ntree— jumlah pohon per hutan (default100).mtry— variabel yang dicoba pada setiap split (defaultsqrt(p)).nodesize— numeric panjang-2: ukuran node minimum untuk c(numeric, factor). Defaultc(5, 1).variablewise— mengembalikan error OOB per variabel jikaTRUE.parallelize—"no","variables", atau"forests".num.threads— jumlah thread untukranger(diabaikan olehrandomForest).backend—"ranger"(default) atau"randomForest".xtrue— data lengkap opsional untuk benchmarking (menambah$error).
backend = "ranger":ntree → num.treesnodesize → min.bucket(terpisah untuk regresi/klasifikasi; defaultc(5,1))sampsize(jumlah) →sample.fraction(fraksi; keseluruhan atau per kelas)classwt → class.weightscutoffditangani dengan fitting probability forests dan post-thresholding
Utilitas
mixError(ximp, xmis, xtrue)— menghitung NRMSE (numerik) dan PFC (faktor) pada entri hilang yang sebenarnya.nrmse(ximp, xmis, xtrue)— NRMSE untuk data kontinu saja.prodNA(x, noNA = 0.1)— menyuntikkan missingness MCAR ke dalam data frame.varClass(x)— mengembalikan"numeric"/"factor"per kolom.
Tips & praktik terbaik
- Ubah kolom karakter menjadi faktor sebelum memanggil
missForest. - Untuk data yang lebar, pertimbangkan
parallelize = "variables". Untuk pohon yang dalam/mahal, pertimbangkanparallelize = "forests". - Atur seed untuk hasil yang hampir dapat direproduksi:
set.seed(123); imp <- missForest(x)
``
- Anda dapat menurunkan
ntree selama prototyping untuk mempercepat iterasi.---
Sitasi
Jika Anda menggunakan missForest, harap sitasi:
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
Anda juga dapat mensitasi paketnya:
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 ---