Changelog
Source:NEWS.md
ggRandomForests v3.1.2
CRAN release: 2026-06-13
- CRAN fix: skip only the single test grow that trips the upstream
randomForestSRCgcc-UBSAN report atentry.c:184— the unsupervised isolation forest ingg_isopro(varPro::isopro(method = "unsupv")). Only an unsupervised grow has a 0-lengthyvar.wt, the vectorrfsrcGrowdecrements to an out-of-bounds pointer; supervised grows are unaffected. We verified this under-fsanitize=undefined: of every varPro/rfsrc grow in the test suite, onlyisopro(method = "unsupv")firesentry.c:184.make_iso_fit()therefore callsskip_on_cran()only formethod = "unsupv". ggRandomForests is pure R and unchanged. - The broader
skip_on_cran()guards added in v3.1.1 (thevarpro,uvarpro,ivarpro,beta.varpro, andisopro(method = "rnd")test fixtures) are removed: those grows are supervised (or synthetic-supervised) and gcc-UBSAN-clean, so they run on CRAN again, restoring that test coverage. The upstream issue is fixed inrandomForestSRCand pending a CRAN release.
ggRandomForests v3.1.1
- CRAN fix: the varPro tests now call
skip_on_cran()so they do not run on CRAN’s check machines, including the gcc-UBSAN additional check. They were triggering an upstreamrandomForestSRCsanitizer issue (a 0-length array access inrfsrcGrow,entry.c:184) that surfaces when anyvarProgrow (varpro(),beta.varpro(),uvarpro(),isopro(),ivarpro()) builds a forest. ggRandomForests is pure R and its code is unchanged; the varPro tests still run in our CI (the workflows setNOT_CRAN=true) and locally; they are skipped only on CRAN’s check machines, including the gcc-UBSAN check. The upstream issue has been reported to the randomForestSRC maintainers. - The
varprovignette now loads every varPro fit from a precomputed file (vignettes/varpro_precomputed.rds, built byvignettes/precompute_varpro.R), so the vignette performs no live varPro grow duringR CMD check. This removes the same upstream sanitizer path from the vignette build and trims check time. Each chunk falls back to a live fit if the precomputed object is absent, so the vignette remains reproducible from source.
ggRandomForests v3.1.0
CRAN release: 2026-06-11
- Fix:
gg_vimp()for single-outcome rfsrc forests now correctly flags variables with non-positive VIMP in thepositivecolumn (affecting plot coloring). The column was namedVIMP(uppercase) in single-outcome fits but the flag check accessed$vimp(lowercase), leavingpositivestuck atTRUEfor all variables. Surfaced by the Copilot review on PR #109. - Documentation pass. Deepened the varPro-family and rfsrc importance/partial/survival help pages against the upstream randomForestSRC and varPro documentation, and made the line between
gg_vimp()(permutation, Breiman-Cutler importance) andgg_varpro()(varPro release-rule importance) explicit and cross-linked. Vignette prose deepened with the same framing; one-line code-comment fixes; fixed a stale@returningg_roc()(documented ayvarcolumn the function does not return). No user-facing behaviour change. - Vignettes: the regression and survival partial-dependence surfaces are now rendered as static
ggplot2heat maps instead of interactiveplotlywidgets, and figures render at 96 dpi. This cuts the installed size from ~17 MB to ~5 MB (theplotlylibrary is no longer bundled into the vignette HTML).plotlyis dropped fromSuggests. - Check time: reduced the
R CMD checkvignette-rebuild and test timings to bring the overall CRAN check comfortably under budget (CRAN flagged the overall check time on the 3.1.0 submission). The regression and survival vignettes use lighter forests (ntree200 / 150, imputationntree100) and coarser partial-dependence grids. The varpro vignette’s threegg_partial_varpro()calls and the Bostonbeta.varpro()fit (~34 s combined) are precomputed offline byvignettes/precompute_varpro.Rand loaded fromvignettes/varpro_precomputed.rds, with an automatic live-computation fallback if the file is absent. Thegg_udependent()tests memoise the per-fit entropy matrix (varPro::get.beta.entropy(), ~1.5 s and a pure function of the fit) instead of recomputing it once per test. No user-facing behaviour change.
ggRandomForests v3.0.0
-
Version jump to 3.0.0. The varPro integration is a major scope expansion plus the
gg_partialpro()soft-deprecation, which is major-version territory. Survival / multivariate varPro families, ROC confidence intervals, and hazard estimates are deferred to v3.1.0. - CRAN-audit cleanup: the
gg_brier()/plot.gg_brier()examples move from\dontrunto\donttest(so they execute underR CMD check --as-cranand on CRAN;library(survival)added soSurv()resolves), the per-variablemessage()in the deprecatedsurv_partial.rfsrc()is removed (its one behaviour change: that function no longer prints a line per variable), and the README points to the new “varpro” vignette. - Fix: importance plots now consistently put the most-important variable at the top.
gg_varpro(),gg_beta_varpro(), andgg_ivarpro()previously built theirvariablefactor with descending levels, so aftercoord_flip()the most-important variable landed at the bottom — inverted relative togg_vimp(). All three now reverse the factor levels to match thegg_vimpconvention (and thevarImpPlot/vipstandard). Row order andsummary()output are unchanged (still most-important first). A new cross-function test pins the convention. - New vignette: “Exploring variable importance with varPro.” Walks the full gg_* varPro layer (gg_partial_varpro, gg_varpro, gg_udependent, gg_isopro, gg_beta_varpro, gg_ivarpro) on three worked examples — regression (Boston), classification (iris binary + multi-class), and survival (PBC). Includes a family-support matrix documenting which wrapper works for which forest family. Headline document for v3.0.0.
-
gg_ivarpro()andplot.gg_ivarpro(): tidy wrapper and per-variable-distribution / per-observation-profile plots forvarPro::ivarpro()(individual / local variable importance) across regression and classification (binary + multi-class) families. The long-format tidy frame is(obs, variable, local_imp, selected)for regression; classification adds aclasscolumn. NA cells are filtered out and sparsity is surfaced in provenance.which_obs(integer index) collapses to a single-observation profile; the plot switches from a jittered distribution view to a horizontal bar chart.which_class(response level name) collapses to a single class panel; binary fits default to the last factor level (positive class).cutoffacceptsNULL(per-class mean), a scalar, or a named numeric vector — matching the gg_beta_varpro classification contract. Optionalivarpro_fitargument lets callers cache the expensiveivarpro()call. Last of four Phase 4 sub-projects. -
gg_beta_varpro()adds varPro classification support (binary + multi-class). Binary fits default to a single positive-class panel (last factor level); multi-class fits return a long-format frame with aclasscolumn and plot asfacet_wrap(~ class). Optionalwhich_classselects a single class;cutoffaccepts a scalar or per-class named vector. Variables are stored as a factor whose levels are set bymean(|sum-of-class-beta|)descending so every facet shows rows in the same order. Motivating use case: 30-day mortality. - Provenance shape change for
gg_beta_varpro():attr(*, "provenance")$cutoffis now always a named numeric vector — length 1 named"regr"for regression, length K named with the response factor levels for classification. Downstream tooling should read it as a vector and select by name; the prior scalar shape is gone. -
gg_beta_varpro()andplot.gg_beta_varpro(): tidy wrapper and default horizontal bar chart forvarPro::beta.varpro()— the per-rule lasso-β refinement of variable importance. Aggregates per-rule β̂ by variable intobeta_mean = mean(|β̂|)and flags variables above a selection cutoff (defaultmean(beta_mean)). Optionalbeta_fitargument lets callers compute the expensivebeta.varpro()step once and reuse the result across multiple wrapper calls (different cutoffs, snapshot rebuilds, vignette knits).print/summary/autoplotS3 companions follow the existinggg_*conventions. Regression family only — classification, regr+, and survival are tracked under Phase 4d (see the spec for the endpoint map). Third of three Phase 4 sub-projects. -
gg_isopro()gains anewdataargument so a fittedvarPro::isopromodel can score new observations into the same tidygg_isoproframe. Internally the wrapper callspredict.isopro()twice: withquantiles = FALSEto populate thecase.depthcolumn (varPro’s native polarity, lower = more anomalous) and withquantiles = TRUEto computehowbad = 1 - quantile(the wrapper convention, higher = more anomalous). Both polarities are visible in the returned data frame, and the relationship is named in the roxygen. Theplot/print/summary/autoplotS3 companions work unchanged on the new tidy frame; to overlay training and test scores, bind the two extractor calls with amethodlabel column and pass the result toplot(). Second of three Phase 4 sub-projects. -
Fix (gg_isopro training-path polarity). Bug in the original
gg_isopro(PR #94): varPro’s$howbadon anisoprofit uses “lower = more anomalous” polarity (it is the quantile ofcase.depth), but the wrapper’s plot method and documentation both assume “higher = more anomalous”. Train scores and the new test-data scores were anti-correlated until this PR’s training-path flip (howbad = 1 - object$howbad) brought them into agreement. The fix surfaced because the test-data sanity check (training-as-newdata top-5 overlap) failed at 0/5 instead of 5/5 before the flip. Note: the two vdiffr baselines recorded in PR #94 (gg-isopro-defaultandgg-isopro-threshold) were recorded under the inverted polarity; they are visually flipped relative to the new behaviour but CI skips snapshots (VDIFFR_RUN_TESTS = false) so no failure surfaces. Re-record withVDIFFR_RUN_TESTS = truewhen convenient. - Documentation: pedagogical pass over the varPro wrappers (
gg_partial_varpro,gg_varpro,gg_udependentand theirplot.*methods). Each help page now has explicit “What X is doing”, “What’s in the output”, and “What you use this for” sections so a reader new to varPro can learn the underlying method (release rules, beta-entropy dependency, parametric / nonparametric / causal partial estimators) from the help page alone, not just the wrapper mechanics. No API or behavioural change. - Documentation: enable roxygen2 markdown package-wide via
Roxygen: list(markdown = TRUE)inDESCRIPTION. New roxygen blocks can use backticks and[fn()]link syntax; existing\code{}/\link{}markup keeps working. Two source-roxygen edits to keep R CMD check clean:randomForest[SRC]inR/help.R(markdown read it as an unfinished link) becomes plainrandomForestSRC; the95\%escape inR/gg_rfsrc.R::bootstrap_survivalbecomes a literal95%. No API or rendered-doc behavioural change beyond the conventions switch. - New
gg_isopro()andplot.gg_isopro(): tidy wrapper and ranked-elbow + density visualisation forvarPro::isoproisolation-forest anomaly scores.plot.gg_isopro()takespanel = c("both", "elbow", "density")and optionalthreshold(score-space) ortop_n_pct(quantile-space) to draw a reference line; if both are set,thresholdwins with a message. Amethodcolumn auto-triggers colour grouping for multi-method comparisons (usedplyr::bind_rows()on threegg_isopro()calls).print/summary/autoplotS3 companions follow the existinggg_*conventions. First of three Phase 4 sub-projects. -
plot.gg_variable(): fix render error on the default multi-class classification plot. The default-xvar selection was treatingyvar(the observed-class column) andoutcome(the multi-class pivot facet) as predictors; pivoting them intovarthen dropped the column the downstreamgeom_jitter(aes(color = yvar))referenced, and the patchwork errored when actually rendered. CI did not catch this because the existing test only asserted the patchwork class (lazy) and snapshots run withVDIFFR_RUN_TESTS = false. New test exercises a real build of every sub-plot. -
plot.gg_variable(): the same default-xvar selection used substringgrep("time", ...)/grep("event", ...), which silently dropped any predictor whose name contained those substrings – e.g. the documented veteran-data survival predictordiagtime. Switch to exact matching forevent/time/yvar/outcomeand an anchored prefix foryhat(yhatoryhat.<class>). New test exercisesdiagtimeon the veteran survival forest. -
gg_roc(): per-class one-vs-rest ROC curves (#88, closes #72).- New
per_classargument, defaultFALSE. Withper_class = TRUEon a forest of more than two classes,gg_roc()returns a long-formatgg_rocdata frame with aclassfactor column, plus a named AUC vector attribute with one entry per class, ordered by descending AUC. -
plot.gg_roc()gainspanel = c("overlay", "facet"). When the object has aclasscolumn,"overlay"colours the curves by class and"facet"gives each class its own panel. -
summary.gg_roc()prints the named per-class AUC values when aclasscolumn is present. - On a binary forest,
per_class = TRUEdoes nothing, the usual single-curve result comes back unchanged. - ROC confidence intervals are still to come, in v3.1.0 (issue #7 / #72-CIs).
- New
- New
gg_udependent(): varPro cross-variable dependency (Phase 3).-
gg_udependent()reads cross-variable dependency scores off auvarprofit, viavarPro::get.beta.entropy()andvarPro::sdependent(). It returns a tidy list:$edges(variable_from, variable_to, weight),$nodes(variable, degree, selected), and$graph, an igraph object. -
plot.gg_udependent()draws the dependency network with ggraph. Edge width and opacity scale with dependency strength; node colour marks the signal variables. The layout is configurable ("fr","kk","stress", and so on). -
ggraphadded toSuggests:.
-
- New
gg_varpro(): varPro variable importance (#85).-
gg_varpro()pulls per-tree importance scores from a fittedvarproobject and draws a boxplot of the per-tree z-score distribution for each variable. The hinges sit at the 15th and 85th percentiles and the whiskers at the 5th and 95th, so the box is not the usual Tukey one — it reports the percentiles it actually shows. Variables with aggregate z abovecutoff(default 0.79) are colour-highlighted. - With
faithful = TRUE, the individual per-tree z-scores are jittered over the box as semi-transparent points, with a white-outlined dot at the mean, the same view as varPro’s internalbxpoutput. - With
conditional = TRUE(classification forests only),gg_varpro()reads$conditional.zand draws class-conditional importance as afacet_wrap(~class, nrow=1)bar chart. - Set
local.std = FALSEto allowplot(..., type = "raw"), which shows raw per-tree importance instead of the z-normalised values.
-
-
gg_variable.randomForest: classification fix (#87).- For a classification forest,
gg_variable.randomForest()now stores per-class OOB vote fractions asyhat.<classname>columns, read fromobject$votes, the same layout therfsrcpath produces. It used to store a singleyhatfactor column of class labels (fromobject$predicted), and that column shape stopped the multi-class pivot inplot.gg_variablefrom ever running. The vote fractions are row-normalised to[0, 1], even when the forest was fit withnorm.votes = FALSE. -
plot.gg_variable, binary classification: withsmooth = TRUEthe x and y aesthetics are now mapped onto the smooth layer correctly. -
plot.gg_variable, multi-class numeric path:smooth = TRUEnow adds the smooth layer instead of skipping it silently. - Closes stale issues #81 (fixed in PR #83) and #82.
- For a classification forest,
- New
gg_partial_varpro(): varPro partial dependence (#84).-
gg_partial_varpro()takes over fromgg_partialpro()as the entry point for varPro partial dependence plots. It accepts an optionalobjectargument (the originatingvarprofit) which it uses for provenance-aware axis labels, and ascaleargument ("auto","mortality","rmst","surv","chf"). - Ensemble mortality labelling (Ishwaran et al. 2008): with
scale = "mortality", orscale = "auto"on a survival forest, the y-axis reads “Ensemble mortality (expected events)”. That is an unbounded relative-risk score, not a survival probability, and the documentation says so plainly so it is not misread. - Survival path C: with
scale = "surv"orscale = "chf",gg_partial_varpro()pulls the embedded rfsrc forest fromobject$rfand returns true S(t) or CHF partial curves through the existinggg_partial_rfsrcmachinery. -
varProis now a hard dependency (Imports:). -
gg_partialpro()is soft-deprecated: it warns, then hands off togg_partial_varpro(). It will be removed in the release after v3.0.0.
-
- randomForest engine validation and repair (#82). Fixes #80, #81, and a
plot.gg_errorlabel wart, and adds full randomForest regression test coverage. Details below.-
plot.gg_variable()now always returns a singleggplot(one variable) or apatchworkcomposite (several variables, or the default) — never a bare list. This matches the v2.7.3plot.gg_partial*change. A list used to come back for multiplexvar, which brokepatchwork/autoplot()/layer_data()composition (#80). -
gg_roc()andcalc_roc()forrandomForestnow build the ROC from class probabilities (OOB votes by default, honouringoob) rather than the degenerate three-point curve they produced before. Withwhich_outcome = "all"(the default forgg_roc(rf)) the result is a macro-averaged one-vs-rest ROC, and no warning. The shared.validate_which_outcomehelper andcalc_roc.rfsrcare byte-for-byte unchanged, so rfsrc behaviour is untouched (#81).
-
- Dependency modernization. This breaks scripts that relied on attachment.
randomForestSRCandrandomForestmove fromDepends:toImports:;igraph,callr, andvarProare added toSuggests:(varProlater moves up toImports:, with the first varPro-integration component).library(ggRandomForests)no longer putsrandomForestSRCorrandomForeston the search path. A script that calledrfsrc()orrandomForest()unqualified after onlylibrary(ggRandomForests)now needs its ownlibrary(randomForestSRC)/library(randomForest), or must qualify the calls. ggRandomForests itself is unaffected. It qualifies every call into its dependencies.
ggRandomForests v2.7.3
CRAN release: 2026-05-12
-
plot.gg_partial(),plot.gg_partial_rfsrc(), andplot.gg_partialpro()now always return a singleggplot/patchworkobject. Previously, when both continuous and categorical predictors were present, they returned a named listlist(continuous=, categorical=), which surprised users and madeautoplot()dispatch ambiguous. The two panels are now combined vertically viapatchwork::wrap_plots()(patchwork moved fromSuggeststoImports). Closes #77. -
autoplot()S3 methods for all 10gg_*classes, delegating to the correspondingplot.gg_*()method so objects work in|>pipelines,patchwork, andcowplotcompositions viaggplot2::autoplot(). -
print()andsummary()S3 methods for everygg_*data object (gg_error, gg_vimp, gg_rfsrc, gg_variable, gg_partial, gg_partial_rfsrc, gg_partialpro, gg_roc, gg_survival, gg_brier).print()is header-only — usehead()for rows.summary()returns a printablesummary.ggobject with per-class diagnostics. Eachgg_*constructor now attaches a"provenance"attribute (source, family, ntree, n, xvar.names) consumed by the new methods. - New
gg_brier()extractor andplot.gg_brier()method for time-resolved Brier scores and CRPS on survival forests (issue #9). WrapsrandomForestSRC::get.brier.survival()and adds the mortality-quartile decomposition, a 15-85 percent per-subject envelope, and running CRPS via trapezoidal integration. Supportscens.model = c("km", "rfsrc"),type = c("brier", "crps"), andenvelope(overall line + 15-85% ribbon). Multi-model comparison is left todplyr::bind_rows()on multiplegg_brieroutputs — see?gg_brierfor an example. - Visual unification of ribbon overlays across plot methods. All ribbons now use a shared alpha (
.gg_ribbon_alpha = 0.2) and a shared fill (.gg_ribbon_fill = "steelblue") for single-series cases (KM/NA CIs, bootstrap CIs,gg_brierenvelope); group-stratified ribbons keep their group-coloured fill. Statistical bounds unchanged — only styling. ggRandomForests v2.7.2 ===================== - Address CRAN reviewer (Benjamin Altmann) feedback on the v2.7.1 resubmission:
- Add methods references to
DESCRIPTION(Breiman 2001 and Ishwaran et al. 2008, with<doi:...>auto-links) per CRAN cookbook. - Drop the
man/shift.RdRd file:shift()is an internal utility and the example usedggRandomForests:::shift(...). Marked the function@noRdso it no longer generates a help page. - Replace
cat()insurv_partial.rfsrc()withmessage()so progress output is suppressible (suppressMessages()) and plays nicely inside notebooks / Shiny / quarto. - Restore the user’s
par()settings in thesurv_partial.rfsrc()example viaoldpar <- par(no.readonly = TRUE); on.exit(par(oldpar)).
- Add methods references to
ggRandomForests v2.7.1
- Fix
gg_partial_rfsrc()for survival forests:partial.rfsrc()was being called withoutpartial.type, causing a zero-length comparison (if (partial.type == "rel.freq") ...) inside the C-level prediction routine and aborting the call. Survival forests now passpartial.type = "surv"(default; configurable via the newpartial.typeargument accepting"surv","chf", or"mort"). This unblocks thepartial-depchunk in the survival vignette. - Fix
gg_partial_rfsrc()for survival forests with multiplepartial.timevalues:get.partial.plot.data()returns yhat as an[length(partial.values) x length(partial.time)]matrix, but the previous code assumed a vector and crashed on column-mismatch when assigningtime. The result is now reshaped to long form so each(x, time)pair is a single row. - Improve
plot.gg_partial_rfsrc()survival layout: predictor value is now on the x-axis with one curve per (rounded) time point coloured byTime, faceted by variable name. The previous default put time on the x-axis and one curve per predictor value, producing a saturated legend with dozens of nearly-identical lines. - Add
tests/testthat/test_plot_layer_data.R: regression suite that usesggplot2::layer_data()to verify eachplot.gg_*()method renders non-empty layers for every supported forest family. Catches the empty-figure class of bug (transform/plot column-name mismatch) without requiring visual inspection. -
ggrandomforests.news()now readsNEWS.md(the canonical change log R also surfaces viautils::news()). The legacy hand-maintainedinst/NEWShas been removed — it had silently drifted to v2.4.0 (June 2025) across three releases, so users running the helper saw stale version info. One source of truth, no more drift window. - Fix
plot.gg_vimp()legend duplication: the bar geom mapped bothfillandcolorto thepositivecolumn, but only the fill legend was titled “VIMP > 0”, leaving a redundant second legend titled “positive”. Both aesthetics now share the “VIMP > 0” title so ggplot merges them into a single legend by default. - Fix
plot.gg_vimp()for forests with all-positive VIMP: the bar geom previously mapped onlycolor(nofill), producing hollow / outline- only bars and an “Ignoring unknown labels: fill” warning wheneverlabs(fill = ...)was applied. Bothfillandcolorare now mapped unconditionally, so bars render filled in every case. - Add
@examplesblocks toplot.gg_partial_rfsrc()andplot.gg_partialpro(). The latter uses a self-contained mock of thevarpro::partialpro()output structure so the example runs without pulling invarproas a dependency.
ggRandomForests v2.7.0
- S3 design overhaul:
gg_partial(),gg_partialpro(), andgg_partial_rfsrc()now stamp their return values with S3 classes (gg_partial,gg_partialpro,gg_partial_rfsrcrespectively), enablingplot()dispatch without any boilerplate. - Add
plot.gg_partial(),plot.gg_partial_rfsrc(), andplot.gg_partialpro()S3 methods; continuous predictors render as line plots, categorical as bar charts, faceted by variable name. Survival forests produce curves over time; two-variable surface plots group byxvar2.name. - Convert
gg_survival()to an S3 generic dispatching on the class of its first argument. Newgg_survival.rfsrc()method extracts the survival response directly from the fitted forest (no separate data argument needed);gg_survival.default()preserves the existing interface. - Fix
plot.gg_survival()auto-coercion: previously calledgg_survival(rfsrc_obj)treating the forest as theintervalstring argument, causing a latent crash; replaced withinherits()guard. - Deprecate
surv_partial.rfsrc()via.Deprecated()with a pointer togg_partial_rfsrc(); all package tests updated to suppress the warning. - Fix
gg_partial_rfsrc()—make_eval_grid()usedunlist(dplyr::select())which coerced factor columns to integer codes; now usesnewx[[xname]]to preserve column class. Categorical detection extended to coveris.factor()andis.character()in addition to the cardinality check. - Add guards to
gg_partial_rfsrc(): all-NAxvalafter NA removal now emits a warning and skips the variable; all-NA grouping variable (xvar2) callsstop();n_evalandcat_limitare validated as single integers >= 2 near function entry. - Fix cyclomatic complexity across
gg_partial_rfsrc.R: refactored into eight top-level unexported helpers (validate_scalar_int,validate_partial_args,snap_partial_time,make_eval_grid,call_partial_rfsrc,partial_one_var,partial_no_group,partial_with_group,split_partial_result); all functions now score below thecyclocomp_linterlimit of 20. - Fix
@param partial.timedocumentation: “see the section above” corrected to “see the section below”. - Replace deprecated
tidyr::gather()withtidyr::pivot_longer()inplot.gg_vimp()andplot.gg_partialpro(). - Add
gg_survival.rfsrc,gg_survival.default,plot.gg_partial,plot.gg_partial_rfsrc, andplot.gg_partialprotoNAMESPACE; add corresponding@rdname/@exportroxygen tags. - Update tests: add
expect_s3_class()checks for all new classes; addplot()smoke tests forgg_partial,gg_partial_rfsrc,gg_partialpro; addgg_survival.rfsrctests for KM extraction,bystratification, and error on non-survival forest. - Add
plot.gg_partial,plot.gg_partial_rfsrc, andplot.gg_partialproto_pkgdown.ymlreference index.
ggRandomForests v2.7.0
- Fix critical visual bug in
plot.gg_rfsrc: allaes()calls used bare string literals instead of.data[[col]], causing every aesthetic to map to a constant string rather than the underlying data column. All plot types (regression, classification, survival) were affected. - Fix
aes()bare-string literals inplot.gg_rocmulti-class branch; remove unreachableif (crv < 2)dead-code branch. - Fix
bootstrap_survivalCI-band indexing ingg_rfsrc: negative index computed viacolnames()was a no-op on large datasets and a latent crash for data with ≤ 2 unique event times. - Fix
gg_rfsrc.rfsrc:is.null(df[, col])does not detect missing columns; replaced with!col %in% colnames()guard. - Fix
gg_rfsrc.randomForest: method used non-existentobject$xvar; now recovers the training frame via.rf_recover_model_frame(). - Fix legend suppression in
plot.gg_errorfor single-outcome forests where the data frame has novariablecolumn. - Fix
gg_vimpandplot.gg_vimp:1:nvarreplaced withseq_len(nvar)in both S3 methods;1:0silently returnedc(1, 0)instead ofinteger(0)whennvar == 0. - Migrate full test suite to testthat 3.x API:
expect_is→expect_s3_class/expect_type/expect_true(is.*());expect_equivalent→expect_equal(ignore_attr = TRUE); allcontext()calls removed; testthat 1.xexpect_that/is_identical_toremoved. - Add
.lintrpackage-level linter configuration; fix lintr spacing ingg_partial. - Improve GitHub Actions:
lint.yamlnow fails CI on any lint issue;R-CMD-check.yamltreats warnings as errors and uses Rtools 44;test-coverage.yamlduplicate codecov upload removed. - Add
covrandvdiffrtoSuggests.
ggRandomForests v2.6.1
- Fix model-label assignment in
gg_partialfor categorical variable data - Refactor
gg_partialandgg_partial_rfsrcto improve factor-level normalisation and categorical data handling
ggRandomForests v2.6.0
- Add and export new plotting functions; update existing plot documentation
- Improve unit and integration tests; overall coverage raised to 83%
- Remove
hvtiRutilitiesinternal dependency; clean up associated imports - Refactor
gg_partial_rfsrcto use.datapronoun for alldplyrcalls
ggRandomForests v2.5.0
- Initial
gg_partial_rfsrcfunction: computes partial dependence data directly from anrfsrcmodel viarandomForestSRC::partial.rfsrc, without requiring a separateplot.variablecall - Add support for a grouping variable (
xvar2.name) ingg_partial_rfsrc - Improved vignette formatting and namespace usage
ggRandomForests v2.4.0
- Updating to latest ggplot2 functions
- Utilize some namespace referencing
- Added pkgdown documentation
- Minor testing improvements
ggRandomForests v2.2.0
CRAN release: 2022-05-09
- Bring back the regression vignette
- Improve package tests and code coverage
- Clean up code with lintr
ggRandomForests v2.1.0
CRAN release: 2022-04-26
To pull this out of archive on randomForestSRC 3.1 build release. Fixed a plot bug for gg_error to show the actual curve (issue 35)
ggRandomForests v2.0.1
CRAN release: 2016-09-07
- Correct a bug in survival plots when predicting on future data without a known outcome.
- All Vignettes are now at https://github.com/ehrlinger/ggRFVignette
- All tests are being moved to https://github.com/ehrlinger/ggRFVignette
- Begin work on rewriting all checks to not use cached data. This will require more runtime, and hence we will run fewer of them on CRAN release.
- Minor bug and documentation fixes.
ggRandomForests v2.0.0
CRAN release: 2016-06-11
- Added initial support for the randomForest package
- Updated cache files for randomForestSRC 2.2.0 release.
- Remove regression vignettes to meet CRAN size limits. These remain available at the package source https://github.com/ehrlinger/ggRandomForests
- Minor bug and documentation fixes.
ggRandomForests v1.2.1
CRAN release: 2015-12-12
- Update cached datasets for randomForestSRC 2.0.0 release.
- Correct some vignette formatting errors (thanks Joe Smith)
ggRandomForests v1.2.0
CRAN release: 2015-11-15
- Convert to semantic versioning http://semver.org/
- Updates for release of ggplot2 2.0.0
- Change from reshape2::melt dependence to tidyr::gather
- Optimize tests for CRAN to optimize R CMD CHECK times.
ggRandomForests v1.1.4
CRAN release: 2015-03-29
combine.gg_partialbug when giving a single variable plot.variable object.Remove
dplyrdepends to transitions from “Imports” to “Suggests”.Argument for single outcome
gg_vimpplot for classification forests.Improvements to
gg_vimparguments for consistency.Add bootstrap confidence intervals to
gg_rfsrcfunction.Initial
partial.rfsrcfunction to replace therandomForestSRC::plot.variablefunction.Move cache data to
randomForestSRCv1.6.1 to take advantage ofrfsrcversion checking between function calls.Vignette updates for JSS submission of “ggRandomForests: Exploring Random Forest Survival”.
Vignette updates for arXiv submission of ggRandomForests: Random Forests for Regression
Some optimizations to reduce package size.
Remove all tests from CRAN build to optimise R CMD CHECK times.
Remove pdf vignette figure from CRAN build.
Return S3method calls to NAMESPACE for “S3 methods exported but not registered” for R V3.2+.
Misc Bug Fixes.
ggRandomForests v1.1.3
CRAN release: 2015-01-08
- Update “ggRandomForests: Visually Exploring a Random Forest for Regression” vignette.
- Further development of draft package vignette “Survival with Random Forests”.
- Rename vignettes to align with randomForestSRC package usage.
- Add more tests and example functions.
- Refactor
gg_functions into S3 methods to allow future implementation for other random forest packages. - Improved help files.
- Updated DESCRIPTION file to remove redundant parts.
- Misc Bug Fixes.
ggRandomForests v1.1.2
CRAN release: 2014-12-25
- Add package vignette “ggRandomForests: Visually Exploring a Random Forest for Regression”
- Add gg_partial_coplot, quantile_cuts and surface_matrix functions
- export the calc_roc and calc_auc functions.
- replace tidyr function dependency with reshape2 (melt instead of gather) due to lazy eval issues.
- reduce dplyr dependencies (remove select and %>% usage for base equivalents, I still use tbl_df for printing)
- Further development of package vignette “Survival with Random Forests”
- Refactor cached example datasets for better documentation, estimates and examples.
- Improved help files.
- Updated DESCRIPTION file to remove redundant parts.
- Misc Bug Fixes.
ggRandomForests v1.1.1
CRAN release: 2014-12-13
Maintenance release, mostly to fix gg_survival and gg_partial plots. * Fix the gg_survival functions to plot kaplan-meier estimates. * Fix the gg_partial functions for categorical variables. * Add some more S3 print functions. * Try to make gg_functions more consistent. * Further development of package vignette “Survival with Random Forests” * Modify the example cached datasets for better estimates and examples. * Improve help files. * Misc Bug Fixes.