bifrost 0.2.2
- The console IC-history plot now pads both ends of the iteration axis so baseline and final points do not overwrite its frame at typical text widths.
- Progress refreshes every 100 ms. Spinner frames follow elapsed time so progress-bar updates do not reset the animation’s timing.
- Searches now default to
start_strategy = "legacy_1.2.1": data-dependent BM/BMM starting values following the mvMORPH 1.2.1 development initializer used for the cached vignettes (including the singleton safeguard added after the CRAN 1.2.1 release), supplied to the installed mvMORPH throughstart. This establishes an explicit initialization baseline without pinning or modifying mvMORPH. Setstart_strategy = "native"to use mvMORPH’s own initialization (required for EmpBayes). Explicitstartandgrid.search = FALSEtake precedence. Results and fitted models record the requested/actual strategy and mvMORPH version. The compatibility policy retains the older strategy’s scale dependence, random second-tip selection for singleton regimes, and convergence limitations. Reproducing the cached jaw sweep also requires its sequentialset.seed(1)workflow; a standalone threshold run has a different random state. - Turning
progresson or off now preserves the same fitting random sequence and results for the same seed and search settings. Background serial fits continue the caller’s random stream, including draws consumed before a fit fails; parallel fits use the same per-item streams as the non-progress path. - Progress reporting now preserves numerical-thread environment settings for single-fit stages, including the greedy search, serial IC weights, and searches with
num_cores = 1. Concurrent candidate and IC-weight fits request one numerical thread per worker using startup settings andRhpcBLASctlruntime controls. Worker pools are refreshed and cleaned up so their thread settings do not carry over into later stages or the caller’s Future plan.
bifrost 0.2.1
- Updated the primary package citation to the accepted, in-press article in Methods in Ecology and Evolution, retaining a separately labeled bioRxiv preprint link. Aligned the README citation guidance and publication badges, and completed the application paper’s volume and page details.
- GitHub source archives now omit website articles, empirical example data, development tooling, and maintainer files already absent from the CRAN package. Package code, help, tests, licensing, and citation metadata remain included. Repository clones retain the complete tracked source.
- Added validated
CITATION.cffmetadata for GitHub citations and Zenodo release archiving, with the in-press package paper as the preferred citation. The file is excluded from the R source-package build. - Removed the standalone software manual entry from the recommended citations; software authors and version remain recorded in
CITATION.cff. - Clarified the distinction between the CRAN release, the planned GitHub release, and development source.
bifrost 0.2.0
CRAN release: 2026-09-28
Changes for existing users
Indexed predictor terms now require one column each. The previously working
trait_data[, 1:2] ~ trait_data[, 3:4]shorthand is rejected. Usetrait_data[, 1:2] ~ trait_data[, 3] + trait_data[, 4], or preferably named columns:cbind(y1, y2) ~ x1 + x2. Multiple predictors remain supported.Increased the minimum supported R version from 4.1 to 4.2.
Search defaults are now
min_descendant_tips = 10andshift_acceptance_threshold = 20, matching the focal settings of Berv et al. (2026). These defaults can change search results when arguments are omitted.Searches with
IC = "BIC"now default tomethod = "LL". An explicitly supplied method takes precedence; GIC searches retain themvgls()default.-
Removed
plot_ic_acceptance_matrix(). For abifrost_searchor compatible search-result list, useplot(icTrajectory(x)). Legacy callers using a raw two-columnmatrix_dataobject can migrate with:legacy <- list( baseline_ic = baseline_ic, IC_used = "GIC", model_fit_history = list(ic_acceptance_matrix = matrix_data) ) plot(icTrajectory(legacy))Plotting arguments map from
plot_titletomain,plot_rate_of_improvementtoshow_delta, andrate_limitstodelta_limits. Supplybaseline_ictoicTrajectory(). Vignettes and empirical datasets are now distributed through the package website rather than the CRAN package. Replace former
system.file("extdata", ...)paths withbifrost_example_file(). The first uncached request downloads the checksum-verified artifact tracked on GitHubmain; subsequent calls use the verified cache unlessrefresh = TRUE. Installation, attachment, and package examples do not require these downloads.runSearchTuningGrid()now pairs simulated datasets across settings in both serial and parallel runs. Separate GIC and BIC calls with matching simulation inputs and seeds are also paired. Previously seeded grid results will change; existing cached results are not replaced. Returned objects recordpaired_settingsandstudy_seeds.
Search and result inspection
- Fixed a regression in formula normalization that added an intercept to formulas explicitly using
0 +or- 1. Searches now preserve the requested intercept setting for numeric and factor predictors. - Expanded formula support to accept formula objects, numeric response-only data frames for intercept-only searches, and named-column data-frame formulas for pGLS-style workflows.
- Added
icTrajectory()and its plot method for inspecting search histories. Results now record candidate nodes, resolved progress settings, and detailed proposal histories, including accepted, rejected, and errored fits. - Added persistent, Future-compatible progress displays for candidate scoring, shift evaluation, and IC-weight re-estimation. Use
progress = FALSEto disable them independently ofverboseoutput. - Strengthened validation of descendant-tip cutoffs, shift-acceptance thresholds, and conflicting uncertainty-weight options. Diagnostics flag small clade sizes, low acceptance thresholds, and searches with no eligible candidates. Simulation runs muffle repeated settings advisories while preserving fitting and optimizer warnings.
- Baseline-only results consistently retain regime label
"0"and the fitted global BM covariance inVCVs[["0"]]. Covariance summaries no longer issue the proportional multi-regime warning for this single covariance. - Fixed printing of expression-valued search inputs.
Rates, shifts, and regime covariance
- Added
rateMap()and supporting methods for inspecting branch-rate patterns. Legends respect uneven category breaks.generateViridisColorScale()requires numeric input and uses sorted rank rather than numeric distance. - Added
lineage_rates()and tools for summarizing shift nodes, transitions, waiting times, and magnitudes; fitting and bootstrapping rate distributions; and comparing shift magnitudes. - Added
fit_regime_covariances(),fit_regime_covariance_runs(), module diagnostics, correlation-matrix PCA, integration summaries, andregime_integration_pgls()for post-hoc analyses of fitted regimes. - Covariance validation now uses a tolerance relative to matrix scale, so tiny asymmetric or indefinite matrices cannot pass merely because their entries are small. Valid covariance summaries are unchanged.
Simulation and tuning
- Added reproducible simulation templates, null and shifted datasets, false-positive and shift-recovery studies, recovery evaluation, and fixed-IC tuning grids.
- Added empirical null, proportional-shift, and integration-rate robustness workflows based on fitted residual covariance. Generators default to
simulation_generator = "original"to reproduce the published operations; the full-covariance Wishart/spectral generator is available with"empirical". - Added
selectTunedSearchParameters()to filter settings using false-positive and evaluability safeguards and rank feasible settings by fuzzy balanced accuracy by default. - Tuning recommendations now retain
methodanderrorsettings inherited from the simulation template. Explicit search overrides remain authoritative; simulation fits, scores, and the selection rule are unchanged. - Fixed recovery evaluation for successful searches with a
NULLshift-node vector. Zero-shift results now contribute missed shifts to strict, fuzzy, and weighted summaries. Saved results can be reassessed without refitting; failed or incomplete records remain excluded. - Fixed F1 scores incorrectly reported as
NAwhen recovery is zero. Undefined cases retainNA. Corrected the supplementary replicate metrics and their export pipeline; pooled vignette summaries and selected settings are unchanged. - Reduced data transfer to parallel workers. Parallel search and simulation preserve the caller’s Future plan and reproducible RNG state while avoiding nested worker oversubscription.
Documentation and maintenance
- Added runnable help examples and website guides for rate maps, avian skeleton analyses, simulation, and tuning, with downloadable PDFs and Colab notebooks. Longer help examples use bounded
\donttest{}blocks exercised in CI. - Updated citation metadata for the published Nature Ecology & Evolution article and added a CRAN downloads chart to the README and website.
- Added minimum dependency versions
future (>= 1.49.0)andphytools (>= 2.0-3), addedplotrix, corrected dependency declarations, and moved website-only dependencies toConfig/Needs/website. - Improved validation and error handling across lineage-rate, regime-integration, simulation, and tuning workflows, and reorganized search internals while preserving existing positional arguments.
- Replaced the fragile method-forwarding test affected by mvMORPH 1.2.2 with balanced examples that check the requested method and a finite GIC. This changes the tests, not the BMM starting-value calculation in mvMORPH.
bifrost 0.1.4
CRAN release: 2026-04-17
- Documentation / vignettes:
- Added a new “Quick Start with bifrost” vignette with a minimal end-to-end simulated example.
- Clarified
searchOptimalConfiguration()documentation around acceptable tree inputs, recommendedmvgls()methods ("H&L"vs"LL"), and the role oferror = TRUE. - Reworked the README to foreground installation, documentation, and citation guidance.
- Added two pkgdown-only background articles on multivariate Brownian motion / shifts and on whole-tree PCA / model-selection issues.
- Citation / metadata:
- Updated package authorship metadata to reflect the current author list.
- Updated
citation("bifrost")for the live bioRxiv preprint and the application paper. - Added the foundational
mvMORPHcitations to the package citation metadata. - Added a formatted citation section and dynamic bioRxiv badge to the README.
- Maintenance:
- Disabled a deprecated vignette-preview step in GitHub Actions CI.
bifrost 0.1.3
CRAN release: 2026-01-21
- Addressed CRAN reviewer feedback following review of 0.1.2:
- Added explicit return-value documentation (
@return/\value{}) for the exportedprint.bifrost_search()method, clarifying that the function returns the input object invisibly and is called for its printing side effects.
- Added explicit return-value documentation (
- Plotting:
-
plot_ic_acceptance_matrix()gains an optionalbaseline_icargument to plot and computediff(IC)relative to the true no-shift baseline (useful whenmatrix_databegins at the first evaluated shift model rather than the true baseline).
-
- Documentation / vignettes:
- Updated the jaw-shape vignette with additional static figures (evolutionary correlation heatmap, IC-trajectory plot, and branch-rate visualization) and improved plotting annotations.
bifrost 0.1.2
- Addressed CRAN reviewer feedback following review of 0.1.1:
- Plotting:
- Added
rate_limitsargument toplot_ic_acceptance_matrix()(defaultc(-400, 150)) to control the secondary y-axis limits for the rate-of-improvement overlay (validated numeric length-2, finite).
- Added
- Search results output:
- Added a
bifrost_searchS3 class andprint.bifrost_search()method forsearchOptimalConfiguration()results (compact console summary; optional ASCII IC-history plot viatxtplotwhenstore_model_fit_history = TRUE; prints IC weights when present). - Print output includes a citation hint (
citation("bifrost")); package citation metadata updated ininst/CITATION.
- Added a
- IC weights / no-shift behavior:
- Standardized
ic_weightsoutput across serial and parallel uncertainty-weight modes; always returns adata.framewith consistent columns, and returns an emptydata.framewith the same schema when no shifts are detected. - When no shifts are detected,
model_no_uncertaintynow returns the baselinemvglsmodel (instead ofNULL).
- Standardized
- Documentation / vignettes / tests:
- Updated jaw-shape vignette chunk printing of
ic_weightsto avoid RStudio paged/Unicode rendering issues. - Expanded and stabilized unit tests and CI configuration (including
Config/testthat/parallel: false).
- Updated jaw-shape vignette chunk printing of
bifrost 0.1.1
- Addressed CRAN reviewer feedback following review of 0.1.0:
- Replaced all uses of shorthand
T/FwithTRUE/FALSE. - Ensured all informational output is suppressible via
message()/warning()and controlled by averboseflag. - Redirected all on-disk output generated during model fitting to
tempdir()to comply with CRAN file system policies and avoid writing to the user’s working directory. - Ensured graphical parameters and global options are restored using immediate
on.exit()calls. - Refined parallelization behavior to be CRAN-safe and cross-platform:
- Parallel candidate evaluation uses
futurewithmulticoreon Unix outside RStudio andmultisessionotherwise. - BLAS/OpenMP threads are capped to one per worker during parallel execution to avoid CPU oversubscription.
- Sequential execution remains the default when
num_cores = 1.
- Parallel candidate evaluation uses
- Improved documentation clarity around parallel execution, verbosity, and model fit history storage.
- Replaced all uses of shorthand
