vpcCensTad() (and
vpcCens()/vpcPlot()/vpcPlotTad()
with cens = TRUE and a non-time idv); the
censored VPC now passes the sim/obs column
mappings to vpc::vpc_cens() explicitly instead of relying
on column guessing (nlmixr2#390).dv is now mapped to the sim column instead of
being copied into a new dv column, so vpc
groups the simulated data by replicate as it does for the uncensored
VPC.quantile() “missing values and NaNs not
allowed” error in prediction-corrected
vpcPlot()/vpcPlotTad() on censored (LLOQ/ULOQ)
fits with the vpc backend; censored records are now dropped
before the pred-corrected VPC (which is shown for non-censored data
only), matching the vpc package’s stated behavior
(nlmixr2#390).vpcPlot()/vpcPlotTad() with
method = "tidyvpc", cens = TRUE, which previously errored
that the observed data had no cens column; the censoring
column is now retained when the observed dataset is rebuilt for
pred-correction.plot() on a fit with between-subject variability (BSV)
now adds a nested "bsv" section (inside each
data/compartment group) with QQ plots for each BSV parameter, BSV-BSV
correlation plots (when more than one BSV parameter is present) and, via
the new covariate argument, BSV-by-covariate plots
(box-and-whisker for categorical or low-cardinality covariates, scatter
plus a linear trend with confidence interval for continuous ones).
Covariate values are taken from each subject’s first record, so they are
assumed time-invariant (#51).plot() (for fits and
augPred objects) are now gglist objects from
the ggtibble package instead of the internal
nlmixr2PlotList class. They still print/plot all figures at
once and support broadcasting ggplot2 additions
(e.g. plot(fit) + ggplot2::theme_bw()), and the top-level
object remains a named, nested collection
(plot(fit)[["Endpoint: ..."]]). The collection can also be
converted to a ggtibble for reporting with
ggtibble::as_ggtibble().augPred plots are now paginated with
ggforce::facet_wrap_paginate(), removing the hand-written
16-IDs-per-page chunking. Requires
ggtibble (>= 1.0.3.9000) and ggforce; the
minimum R version is now 4.3.plot() on a fit (and on an augPred object)
is now about 3x faster. The paginated individual plots were expanded
one-per-page with ggtibble::as_gglist(), which deep-copies
the plot through serialize()/unserialize();
because those plots are built inside functions that hold the whole fit,
each copy walked the entire fit object. The pages are now produced by
re-adding the paginated facet for each page instead.rxode2::.linCmtSensB() test guards.
That internal was removed from rxode2 in 2025, so the
try()/skip_if_not() checks always fell through
and never skipped. linCmt() gradients are now always
available, so the guards are unnecessary and the tests run
unconditionally.tidyvpc
packageOps method (removing
+ method) to work with ggplot2 version 4 (#39)+vpcPlot() where input data frame for models
did not stratify all the time when the columns were upper case.plot() now returns a named list of lists so that
users can more easily choose which plots to include, if all plots are
not desired. Or the user could use those names as the basis of figure
captions (fix #8).
Models without eta values (between subject variability) now have more consistent plotting to models with eta values (fix #18).
The package was updated to align with changes in ggplot2.
The package was updated to skip tests with "focei"
and linCmt()
Added fixes for upcoming ‘ggplot2’ 3.4 release
Added changes for the generalized log-likelihood supported by ‘nlmixr2est’
Added a NEWS.md file to track changes to the
package.