missForest
missForest یک روش تخمین غیرپارامتری برای دادههای جدولی مختلط در R است. این روش متغیرهای عددی و دستهای را به طور همزمان با آموزش تکراری جنگلهای تصادفی برای پیشبینی مقادیر گمشده از دادههای مشاهدهشده مدیریت میکند. بدون فرضیات مدلسازی صریح، بدون فاکتورگیری ماتریس—فقط خطوط پایه پیشبینی قوی که به طور پیشفرض خوب کار میکنند.
- با هر ترکیبی از ستونهای عددی و فاکتور کار میکند
- غیرخطیها و برهمکنشها را ثبت میکند
- خطای تخمین خارج از کیسه (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— دیتافریم/ماتریس با مقادیر گمشده (ستونها بایدnumericیاfactorباشند).maxiter— بیشترین تعداد تکرارها (پیشفرض10).ntree— تعداد درخت در هر جنگل (پیشفرض100).mtry— تعداد متغیرهای امتحان شده در هر تقسیم (پیشفرضsqrt(p)).nodesize— آرایه عددی طول-۲: حداقل اندازه نود برای c(numeric, factor). پیشفرضc(5, 1).variablewise— اگرTRUEباشد، خطای OOB برای هر متغیر را برمیگرداند.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 (عدد) و PFC (فاکتور) را برای مقادیر گمشده واقعی محاسبه میکند.nrmse(ximp, xmis, xtrue)— NRMSE برای دادههای پیوسته فقط.prodNA(x, noNA = 0.1)— گمشدگی MCAR را به دیتافریم تزریق میکند.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—nonparametric missing value imputation for mixed-type data.* 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 ---