Forests are much smaller when saved with save() or saveRDS(). The
stored sampling-size function ($sampsize, also in $forest) and the
formula kept in $call were closures that carried the environment they
were created in: the internal frame of rfsrc() (data, weights and other
working objects) for the default sampling size, or the calling function's
frame for a formula built inside a function (e.g. the learners of
impute.learn()). Both now keep only what they refer to, and data frames,
matrices and long vectors passed by value through do.call() are no
longer copied into $call. Predictions are unchanged. For example, a
regression forest on 5,000 rows now saves at a third of its former size,
and an impute.learn() bank kept in memory is about 20 times smaller.
A forest restored by fast.load() no longer holds a copy of itself inside
its $sampsize function.
Added optional compact = TRUE saving to fast.save() and
fast.save.list(). Compact saves omit terminal-node information and
reconstruct it during prediction without growing new trees. This can
reduce disk use at the cost of additional prediction time. The fitted
object is unchanged, and both saving modes use the existing loaders.
The default remains compact = FALSE.
Added compact-save eligibility checks before removing an existing
destination, including checks of every forest when saving a list.
Compact saving requires a non-anonymous forest with retained training
predictors and responses, and a sampling-size specification that
preserves the training sample size after loading. fast.save() also
checks the grow-object class before removing its destination.
impute.learn() now accepts terminal.qualts and terminal.quants
in full.sweep.options, allowing terminal-node storage controls to
reach the saved target learners. These settings are independent of
initial-imputation and supervised auxiliary-forest options.
Renamed the default quantreg() method from "local" to
"exchangeable", retaining "local" as an alias. Exchangeable and
forest-weighted quantiles and moments are now calculated directly from
the saved residual distribution. They no longer depend on the maxn
reporting grid, and quantiles can extend beyond the training-response
range.
Added get.pinball.error() for scoring selected probability levels,
observations, and continuous outcomes without refitting. Added
quantreg.tau controls for printed losses and optional plot annotations.
Quantile plots now include an empirical training-response null CRPS
curve by default, controlled by crps.null. Graphical arguments in
... now customize the main panel; use the new inset.args argument
for the CRPS inset. Improved subset handling and preservation of
multipanel graphics layouts.
Fixed prediction-time quantile probability alignment and default Greenwald--Khanna tolerances for singleton or repeated-singleton probability requests. Improved handling of selected multivariate responses, missing predictions, and singleton output dimensions.
Improved validation of imputation inputs and controls, support for tabular data containers and non-syntactic column names, and column alignment in blocked imputation.
Integer restoration now rounds only generated imputations, preserving observed fractional values. Corrected detection of integer-supported variables and avoided integer conversion when it would lose information.
Learned-imputer saving now stages and reads back learners before replacing an existing destination. Added path and learner-layout checks, protection against overwriting a full learner bank with a loaded subset, and recovery handling for failed replacements.
Training now reports partially failed learner banks and stops when no target learner succeeds. Prediction preserves previous fills when an update fails and reports convergence and failed-update diagnostics. Added support for empty deployment tables and reporting of numeric conversion failures.
Corrected OOD scoring of invalid class probabilities and discrepancies above the training reference. Improved numerical stability for extreme aggregation weights and powers.
Fixed partial-dependence extraction for multivariate and mixed outcomes,
singleton dimensions, factor codes, and competing-risk event selection.
plot.variable() now returns partial.summary with means, standard
deviations, standard errors, and finite prediction counts. Standard
errors consistently use the empirical spread and available row count.
Improved graphical argument handling and cached partial-plot reuse,
together with axis limits, labels, and horizontal layouts in
plot.subsample().
Corrected nonparametric VIMP p-values to use the same centered subsampling distribution as confidence intervals. Subsampling and double-bootstrap summaries now align outcomes, predictors, and class/event columns by name and preserve unavailable statistics. Fixed performance-only double bootstrapping when the original forest already contains VIMP, and singleton-stratum sampling.
Added a training-data Kaplan--Meier null Brier reference to
plotBrierAUC(), enabled by default through brier.null = TRUE.
The reference uses the same evaluation rows and censoring weights as
the forest score.
Added threshold = "auto" and threshold = "bayes" to
get.imbalanced.performance(). Improved probability-column alignment,
consistent exclusion of unavailable outcomes and predictions, and
handling of zero-valued F-scores and threshold optimization.
Corrected AUC and Brier handling when scores are unavailable, and preserved available multivariate errors when another response has no error output.
Quantile grow objects now store numerical training residuals as
residual and residual.oob, also retained in the saved forest,
with source metadata recorded separately. These replace the legacy
yvar.grow and res.grow fields.
Normalize data-frame subclasses before training and prediction.
Removed the lsos export.
Added dedicated help topics for classification performance, multivariate extraction, and fast save/load utilities. Expanded documentation for quantile regression, imputation, partial dependence, subsampling, and plotting.
Expanded get.brier.survival() to support user-selected prediction
horizons, optional pointwise confidence intervals, and optional retention
of the subject-by-time IPCW loss matrix. The censoring distribution is
estimated from the full grow data, while predictions are scored against
their correctly aligned grow or test outcomes.
Added get.auct.survival() for cumulative/dynamic time-dependent AUC using
the time-specific risk 1 - S(t). The implementation uses efficient
weighted rank calculations, gives half credit to ties, and returns case and
control counts together with IPCW effective sample sizes and maximum
normalized weights.
Added plotBrierAUC(), a base-R helper for plotting Brier and AUC(t) curves
with optional pointwise confidence bands. No new package dependencies are
required.
Added fixed-fit conditional standard errors. Brier-score uncertainty uses the delete-one jackknife of subject-level IPCW losses, which is equivalent to the empirical influence-value calculation when predictions and censoring weights are held fixed. AUC(t) uncertainty uses a stratified delete-one jackknife that separately deletes cases and controls and renormalizes the remaining IPCW weights; with equal weights it reduces to the ordinary DeLong variance.
Corrected plot.survival() and the underlying Brier calculations for
prediction objects. Test predictions are now paired with test outcomes,
arbitrary subsets retain their proper outcome alignment, and prediction
objects without outcomes are limited to survival-curve displays rather
than incorrectly calculating Brier score or CRPS.
Restored compatibility with reduced objects returned by
rfsrc.fast(..., forest = FALSE) for the default Kaplan--Meier censoring
model. Requests for cens.model = "rfsrc" now give an informative error
when stored grow or evaluation covariates are unavailable.
New hybrid proxmity and distance that compares test observations (rows)
with original training observations.
impute.learn() now supports training-time storage of OOD calibration objects through save.ood = TRUE (default), allowing deployment pipelines to return row-level anomaly summaries in addition to imputed values.impute.learn() now accepts optional OOD weight values at fit time. These can be supplied as named target weights, are stored in the manifest, and are reused automatically by impute.ood() when score-time weights are not supplied.score and a calibrated score.percentile, with optional target-level details when return.details = TRUE.impute.ood() now supports generalized row aggregation through aggregate and aggregate.args, allowing users to experiment with row-level anomaly metrics beyond the default weighted mean. Initial options include weighted mean, weighted L_p, weighted L_p after a log-tail transform, top-k, and a bounded product metric on 1 - u_j.newdata are now tracked row-wise and are assigned maximal row-level OOD scores so schema and category anomalies are easy to identify.cache.learners support and richer diagnostics.weight vector is supplied, weights are matched by target name; omitted targets receive weight 0, and extra names are ignored.score.percentile remains available for arbitrary target subsets and test-time weight overrides rather than being limited to the original training-time weighting scheme.target.mode = "all", impute.learn() still fits deployable predictive-imputation learners so later score-time missingness and OOD scoring can be handled without retraining.cache.learners normalization in the OOD scoring path.1.score output even when legacy objects do not contain enough saved OOD information to rebuild score.percentile under the new calibration logic.impute.learn help topic to document impute.ood(), OOD score interpretation, saved weights, test-time overrides, and unseen-level diagnostics.target.mode = "all", weighted OOD scoring, and alternate row aggregators.impute.learn() now supports training-time storage of out-of-distribution (OOD) calibration references through save.ood = TRUE (default), enabling a new test-time OOD scoring workflow via impute.ood() / impute.ood.rfsrc().impute.ood() scores new cases by masked reconstruction across the learned imputation targets and returns row-level OOD scores, plus score percentiles when the saved row-level calibration is directly reusable.impute.ood() usage, arguments, return values, and examples to the existing impute.learn help topic instead of creating a separate help page.target.mode = "all" is the recommended training configuration when OOD scoring is intended for deployment use.cache.learners argument normalization in the OOD scoring path.