plotTimeProfile()now defaults toshowLegendPerDataset = "all", showing individual dataset names for both observed and simulated data by default (#1844).DataSet$setValues()and plotting functions (plotTimeProfile(),plotPredictedVsObserved(),plotResidualsVsCovariate(),plotResidualsAsHistogram(),plotQuantileQuantilePlot()) now warn and replace negativeyErrorValueswithNAinstead of silently accepting them (#1756).- Fixed
plotPredictedVsObserved()error bar mapping: whenpredictedAxis = "x", error bars are now correctly placed on the y-axis (#1715).
- Added five new plotting functions powered by
{ospsuite.plots}:plotTimeProfile(),plotPredictedVsObserved(),plotResidualsVsCovariate(),plotResidualsAsHistogram(), andplotQuantileQuantilePlot(). These functions acceptDataCombinedobjects or data frames and handle mixed error types and unit conversion directly, without requiring data preprocessing (#1652). - The
{tlf}-based plotting functionsplotIndividualTimeProfile(),plotPopulationTimeProfile(),plotObservedVsSimulated(),plotResidualsVsTime(), andplotResidualsVsSimulated()are now soft-deprecated in favor of the{ospsuite.plots}-based equivalents and will be removed in version 14.0. (#1739)
- Fixed
validateDimension()error message not showing the actual dimension name (#1822). - Plotting functions based on {ospsuite.plots} now produce a warning and return
NULLwhenDataCombinedhas no plottable entries (#1709). - Updated
{ospsuite.plots}option key references to match camelCase naming convention (e.g.,watermarkEnabled,defaultPercentiles) (#1818). - Added
addResidualColumn()to unify residual computation acrosscalculateResiduals()and the residual plot functions. Supports"log","linear"(or"lin"), and"ratio"scaling. For log scaling, zero or negative values now produceNaNwith a warning instead of an epsilon-based approximation (#1713). - Plotting functions now document all passable
...arguments via@inheritDotParams, improving IDE autocompletion forplotPredictedVsObserved()andplotResidualsAsHistogram()(#1817). - Added
dataSetsFromDataFrame()function that creates a list ofDataSetobjects from adata.framewith the same structure as returned bydataSetToDataFrame(). This is the inverse operation ofdataSetToDataFrame()and allows creatingDataSetobjects from data frames without requiring an Excel file. (#1495) - Added
populationFromDataFrame()function to create aPopulationobject from a data.frame, the reverse ofpopulationToDataFrame(). If noIndividualIdcolumn is present, sequential IDs are automatically generated. (#1807) loadDataSetsFromExcel()now accepts asheetsparameter to specify which sheets to load. Whensheets = NULL(default), the function uses sheets defined in the importer configuration. If the configuration has no sheets defined, all sheets are loaded. Whensheetsis a character vector, those specific sheets are loaded, overriding any sheets in the configuration. TheimportAllSheetsparameter is now deprecated and will be removed in version 14 (#1760).toDisplayUnit()now accepts an optionalunitparameter to specify the source unit of the values, consistent withtoUnit()andtoBaseUnit()functions. When not specified, values are assumed to be in base unit (maintaining backward compatibility). (#1762)addOutputs()andsetOutputs()now throw an error by default when the provided path is not found. This behavior can be disabled by settingstopIfNotFound = FALSE(#1734).ospUnits$Dimensionless$UnitlessandospUnits$Fraction$Unitlessnow return an empty string""instead of the literal string"Unitless"(#1754).- Added read-only
valueOriginproperty toQuantityclass (includingParameterand other derived classes) to access the value origin from the underlying .NET object. This is useful for generating automated reports that track parameter value provenance (#1751). createImporterConfigurationForFile()now automatically sets thesheetsattribute when asheetparameter is provided, eliminating the need to manually set it before usingloadDataSetsFromExcel()(#1755).- Fixed
getSteadyState()to correctly applylowerThresholdfor both positive and negative values. The threshold now filters values in the interval[-lowerThreshold, lowerThreshold]instead of only values below the threshold (#1792). runSimulations()now throws an error if any simulation has no output selections defined, instead of silently returning empty results. (#1404)exportResultsToCSV()now validates that the input is a singleSimulationResultsobject and rejects lists of results, preventing downstream .NET interop failures (#1752).
- R version >=4.4 is required
- ospsuite.utils version >=1.10.0 is required
- This package no longer re-exports
%||%.ospsuite::%||%will not work.
- Computational core libraries updated to match OSPS Version 12 update 2 release.
- Using native operator
%||%instead of importing from theospsuite.utilspackage.
- Added support for macOS (both Intel and Apple Silicon architectures). (#1621)
- Added optional
namesparameter todataSetToTibble()function to support custom naming of datasets. This is particularly useful when multiple datasets have the same original name. The naming logic has been moved from the private.dataSetToDataFrame()method inDataCombinedtodataSetToTibble()for better code reuse and maintainability. (#1627)
- OSPSuite binaries were updated to match OSPSuite v12.1 release.
- Fixed tests expectations for better compatibility with latest version of
{ospsuite.utils}package. (#1570) - Revised "get started" (https://www.open-systems-pharmacology.org/OSPSuite-R/articles/ospsuite.html) documentation page to make it more accesible to new users. (#1571)
{ospsuite}now requires{ospsuite.utils}version >= 1.7.0.- Classes
SimulationBatchRunValuesandSimulationBatchOptionsare not exported any more. They should not be used directly.
DataImporterConfigurationnow supports getting and setting of the Lower Limit of Quantification (LLOQ) column name via a new fieldlloqColumn. If the column name is not set (valueNULL), LLOQ values will be imported from the measurement column if values are written in the form '< xxx' (e.g., '<0.001'). Otherwise, the values will be imported from the specified column (#722)
- Added
showLegendPerDatasetparameter toplotIndividualTimeProfile()andplotPopulationTimeProfile()to optionally display separate legend entries for each dataset. This is experimental. - Improved print outputs for all classes
- Classes do not inherit from the deprecated
Printableclass from the{ospsuite.utils}package. - Print methods for all classes are now implemented using the
ospPrint\*functions introduced in version 1.6.2. of the{ospsuite.utils}package. ParameterRange$printValue()is deprecated. UsegetPrintValue()in conjunction with a print method of your choice.- Private method
Quantity$printQuantity()removed.Quantity$printValue()andQuantity$printQuantityValue()are deprecated. UsegetPrintValue()in conjunction with a print method of your choice. SnapshotParameter$printValue()is deprecated. UsegetPrintValue()in conjunction with a print method of your choice.- Added snapshot tests for all print methods.
calculateResiduals()forDataCombinednow supports full pairwise residual computation between multiple observed and simulated datasets within a group.- The
nameproperty of aSimulationcan now be changed (#1245) calculateResidualsnow handles single-point simulated datasets via direct x-value matching instead of interpolation. Unmatched observed x-values returnNA(#1559).
- New
runSimulationsFromSnapshot()to run simulations from.jsonsnapshots files, - New
convertSnapshot()to convert project snapshots between.jsonand.pksim5files. - New
getMolWeightFor()to retrieve molecular weight for molecule ofQuantity.
- The package fully supports Linux.
- The package loses dependency
{rClr}and gains{rSharp}. - The package does not require a local installation of PK-Sim any more. All required dependencies are shipped with the package.
- The single argument of the
getBaseUnit()function is now namedquantityOrDimension(wasdimensionpreviously). It can now use objects of classQuantityas inputs, to be consistent with thetoBaseUnit()function.
- The package gains
{openxlsx}and{lifecycle}dependencies. - Added a function
getSteadyState()to calculate steady state values for simulations. This function is of particular use for models of endogenous substrates, where changing a parameter value (e.g., the production rate) will change the steady-state values of the substrate. The steady-state is considered to be the last values of the molecules amounts and state variable parameters in the simulation with sufficiently long simulation time, i.e., where the rates of the processes do not (significantly) change. The steady-state is NOT analytically calculated or estimated in any other way than simulating for the given time. - Added a function
exportSteadyStateToXLS()to export steady state values calculated for one simulation using thegetSteadyState()to an Excel file that can be imported in MoBi. - Lower limit of quantification (LLOQ) is plotted as dotted lines for
plotIndividualTimeProfile()andplotPopulationTimeProfile(). plotPopulationTimeProfile()provides two new aggregations methods:arithmeticandgeometricaverage and the ability to chose the number of standard deviations to display around the mean through thensdargument.- Function
calculateResiduals()uses natural logarithm (log()) when calculating residuals withscaling = "log"as opposed tolog10()as it was done before. This also affects figures created byplotObservedVsSimulated(),plotResidualsVsSimulated(), andplotResidualsVsTime(). (#1091, #1087). plotPopulationTimeProfile()has a newaggregationargument that allow the user to choose between quantiles, arithmetic and geometric aggregations of y.
- Named
Simulationlists can be passed torunSimulations()so that the results are returned as a named list using the same names instead of the simulation id. If no name is provided, the simulation id is used as before. (#1383) - The order of columns of the data frame returned by
DataCombined$toDataFrame()has changed. DataCombined$toDataFrame()shows the data in the order as the data sets were added and not alphabetically sorted.DataCombined$removeGroupAssignment()does not show a warning if specified name is not present in theDataCombined.DataCombined$removeGroupAssignment()does not produce an error if specified names are not unique.- Fixed Passing font size options from plotConfiguration objects to tlf objects (#1198)
- Legend now have transparent background by default and can be customized
through new
DefaultPlotConfigurationfields (#1216) plotObsVsPred()now have foldDistance argument set toNULLby default (previously 2). The function will not add any fold lines on the plot by default but display identity line. Set this argument toFALSEto not draw any lines.DefaultPlotConfigurationhas a new setting:displayLLOQ(default TRUE) to control plotting of LLOQ lines.DefaultPlotConfiguration'sxLimitsandyLimitsarguments are deprecated and replaced byxAxisLimitsandyAxisLimits. Use them to zoom in the plot while preserving all data points. UsexValuesLimitsandyValuesLimitsto filter out data point outside of these range. More detailed explanations in the ggplot2 coord_cartesian documentation.addSimulationResultsandaddDataSetsmethods of theDataCombinedclass now support an optionalsilentargument which silences the checks for data set names. If you expect to replace data sets inDataCombinedobjects repeatedly, consider switching the parameter from the defaultFALSEvalue toTRUE.simulationResultsToDataFrame()is faster than before (#1317, @Felixmil).DataCombinedgets a new methodsetDataTypes()to change data types (observed or simulated) for existing data sets. This method is useful when you want to enforce a certain data type, e.g., for adding artificial data set as simulated results.- New function
setOutputs()to change outputs ofSimulationBatchobjects. It combinesclearOutputs()andsetOutputs()in one function. - New simulations life cycle flowcharts in the
vignette("efficient-calculations")vignette. - New internal function
.setEndSimulationTime()to set the end time of the simulation. The function will either extend or shorten the simulation time to the specified end time. - Using
runSimulation()is now soft deprecated in favor ofrunSimulations().
-
Adds new visualization functions:
plotObservedVsSimulated()for observed versus simulated data scatter plot.plotResidualsVsTime()for time versus residuals data scatter plot.plotResidualsVsSimulated()for simulated versus residuals data scatter plot.
-
Adds new helper functions to work with
DataCombinedobjects:convertUnits()to convert datasets inDataCombinedto common units.calculateResiduals()to calculate residuals for datasets inDataCombined.
-
The class
SimulationBatchgets a new propertyid. -
The output of
runSimulationBatches()is now a named list with names being the ids ofSimulationBatch. -
calculateResiduals()now useslog(base = 10)for calculation of residuals in logarithmic scale instead iflog(base = exp(1)) -
calculateResiduals()does also return residuals for entries where simulated or observed value is 0 in logarithmic scale. These values were ignored in previous versions. If the observed or simulated value is zero or negative, it is replaced by an arbitrary small valuegetOSPSuiteSetting("LOG_SAFE_EPSILON")(1e-20 by default).
SimulationBatch$addRunValues()will throw an error when any start value isNaN.SimulatioBatchgets methodsgetVariableParameters()andgetVariableMolecules()that return list of parameter resp. molecule paths that are defined variable.
-
Signature for
toUnitfunction has changed.molWeightis now the fifth, whilesourceUnitis the fourth parameter (#837). -
DataImporterConfiguration: fieldstimeUnitFromColumnandmeasurementUnitFromColumnare renamed toisTimeUnitFromColumnandisMeasurementUnitFromColumn -
The constructor for
DataImporterConfigurationdoes not accept a path to a configuration file any more. Use the functionloadDataImporterConfiguration()to create a configuration object from a file. -
The constructor for
DataSetobjects requires anameargument. -
All
validate*()helper functions and"%||%"infix operators are no longer exported. Please have a look at the new utility package, from which these functions are now exported: https://www.open-systems-pharmacology.org/OSPSuite.RUtils/. -
The
pkAnalysesAsDataFrame()function changes column data types forQuantityPath,Parameter, andUnitfromfactortocharacter(#673).
-
Adds new
DataCombinedclass that combines observed data (DataSet) and simulated data (SimulationResults) into a single object. Especially important is the$toDataFrame()method of this object that returns a data frame containing combined data from observed and simulated data, which can be further used for visualizations or other analysis. -
Adds new visualization functions:
-
plotIndividualTimeProfile()andplotPopulationTimeProfile()to create time-profile plots. -
Adds a new class
DefaultPlotConfigurationto provide plot configurations for plotting functions. -
Adds
simulationResultsToDataFrame()function to convertSimulationResultsobjects into a data frame. -
All
*ToDataFrame()functions also get*ToTibble()variants to extract a tibble data frame instead of a classical data frame. -
Following functions are marked for deprecation and will be removed in future releases:
pkAnalysesAsDataFrame()is nowpkAnalysesToDataFrame()populationAsDataFrame()is nowpopulationToDataFrame()
Version compatible with the OSPSuite V10.
- Enable Batch Simulation Run (#444).
- Export of population to CSV (#423).
- Support aging data for population calculation (#295).
- Enums to look up units and dimensions (#478).
- Support R4 (#531).
- extend setParameterValuesByPath function (#541).
- DataSet: load from PKML (#575).
- Efficient calculations, see this vignette.
- Cannot calculate PK-Parameters of a population when one individual simulation failed (#436).
- Usability issue when creating a population (#473).
- Unnecessary Debug output in some plot tasks (#503).
- uniqueEntities: Error when passing only one entity (#515).
- R-Toolbox bug? getAllParametersMatching(). (#428).
- Add CL parameter to the list of StandardPKPArameters (#582).
- toBaseUnit and toUnit should support null as input (and return null). (#583).
- ospsuite::toBaseUnit should be case insensitive (#614).
- Integer variables not handled by some functions (#553).
- Version compatible with the OSPSuite V9.
- Initial Release