Overview
The sensitivity task aims at generating plots showing PK parameter sensitivity to variations of model input parameters. This vignette presents example workflows for setting up, evaluating and visualizing sensitivity analyses for both a mean model and a population.
Inputs files required for sensitivity analysis
The only input file required for running a sensitivity analysis on a
mean model is the .pkml
simulation file. The path to this
file (either the absolute path or the relative path with respect to the
workflowFolder
directory) is specified as a string:
simulationFile <- system.file("extdata", "caffeine-simulation.pkml",
package = "ospsuite.reportingengine"
)
For population sensitivity analyses, the user needs to similarly
specify paths to .csv
files containing data on the
populations to be studied:
populationFile1 <- system.file("extdata", "pop1.csv",
package = "ospsuite.reportingengine"
)
populationFile2 <- system.file("extdata", "pop2.csv",
package = "ospsuite.reportingengine"
)
Results obtained from the calculateSensitivity
task are
stored as csv files within the SensitivityResults
subdirectory of the workflowFolder
directory. These results
are required in order to perform the plotSensitivity
task,
which generates plots of the sensitivity analysis results.
Specification of quantities analyzed: model outputs and PK parameters
A sensitivity analysis will compute the variation in a scalar
function of a time-series trajectory of a model output in response to
variations in model variables. The model outputs are specified using
paths to simulated quantities within the model. The scalar functions are
PK parameter quantities such as C_max
or AUC
.
Although the sensitivity analysis for a mean model or an individual
within a population is evaluated for all PK parameters, the user has the
option of specifying the subset of PK parameters for which sensitivity
plots are to be generated. In addition, the user has the option to set
custom display names for both the selected model outputs and PK
parameters used in the sensitivity analysis.
Sets of output and PK parameter combinations for the sensitivity analysis are defined as follows:
output1 <- Output$new(
path = "Organism|Lung|Interstitial|Caffeine|Concentration", displayName = "op1",
pkParameters = c(
PkParameterInfo$new("C_max", "new_C_max"),
PkParameterInfo$new("MRT", "new_MRT")
)
)
and
output2 <- Output$new(
path = "Organism|ArterialBlood|Plasma|Caffeine|Concentration", displayName = "op2",
pkParameters = c(
PkParameterInfo$new("t_max", "new_t_max"),
PkParameterInfo$new("AUC_tEnd", "new_AUC_tEnd")
)
)
Here, output1
and output2
are
Output
objects. The path
input to the
constructors of these objects gives the path to the model output. For
example, the path
input for output1
points to
the concentration of caffeine in lung interstitial tissue,
Organism|Lung|Interstitial|Caffeine|Concentration
. This
model output is given the display name op1
. The PK
parameters chosen for this example are the C_max
and
MRT
, which are given the display names
new_C_max
and new_MRT
, respectively.
Similarly, output2
points to the model output with path
Organism|ArterialBlood|Plasma|Caffeine|Concentration
. The
PK parameters selected for output2
are t_max
and AUC_tEnd
, for which the respective display names
new_t_max
and new_AUC_tEnd
will be used.
Mean model workflow
The mean model workflow operates on SimulationSet
objects. These objects store the path to the model simulation
(.pkml
) file as well as the Output
objects
(described above). A descriptive name for the SimulationSet
object can be provided using the simulationSetName
field of
the SimulationSet
constructor. For the mean model workflow,
a SimulationSet
object is created as follows:
ms <- SimulationSet$new(
simulationSetName = "simulationSet1",
simulationFile = simulationFile,
outputs = c(output1, output2)
)
A mean model workflow object is then instantiated using the
SimulationSet
object ms
as follows:
mwf <- MeanModelWorkflow$new(
simulationSets = ms,
workflowFolder = "meanSensitivityExample"
)
In this mean model workflow, the tasks will consist of a sensitivity analysis followed by generation of plots of the sensitivity analysis results. These two tasks are activated as follows:
mwf$simulate$activate()
mwf$calculateSensitivity$activate()
mwf$plotSensitivity$activate()
The model parameters to be perturbed in the sensitivity analysis are next set:
mwf$calculateSensitivity$settings$variableParameterPaths <- c(
"Organism|Heart|Volume",
"Organism|Lung|Volume",
"Organism|Kidney|Volume",
"Organism|Brain|Volume",
"Organism|Muscle|Volume",
"Organism|LargeIntestine|Volume",
"Organism|PortalVein|Volume",
"Organism|Spleen|Volume",
"Organism|Skin|Volume",
"Organism|Pancreas|Volume",
"Organism|SmallIntestine|Mucosa|UpperIleum|Fraction mucosa",
"Organism|SmallIntestine|Volume",
"Organism|Lumen|Effective surface area variability factor",
"Organism|Bone|Volume",
"Organism|Stomach|Volume"
)
The properties of the sensitivity plots to be generated are set next.
The field totalSensitivityThreshold
is used to filter out
from the sensitivity plots any model variables that contribute little to
the total sensitivity of the model. The
maximalParametersPerSensitivityPlot
field limits the number
of model variables to be displayed in sensitivity plots. The axis font
size is set using the parameters xAxisFontSize
and
yAxisFontSize
.
mwf$plotSensitivity$settings <- SensitivityPlotSettings$new(
totalSensitivityThreshold = 0.9,
maximalParametersPerSensitivityPlot = 12,
xAxisFontSize = 10,
yAxisFontSize = 10
)
With the calculateSensitivity
and
plotSensitivity
tasks now set up, the sensitivity
evaluation and plot are started with the command
runWorkflow
:
mwf$runWorkflow()
The output report, containing the mean model sensitivity plots from this example, is shown below.
Report
Population model workflow
Unlike the mean model sensitivity analysis, a population sensitivity
analysis depends on the outcomes of the
calculatePKParameters
task for the population. This task,
in turn, turn depends on the results of the simulate
task
for the population. The population sensitivity analysis proceeds as
follows:
Step 1) The model is simulated for the entire population using the
simulate
task.Step 2) Using the
calculatePKParameters
task, the PK parameters of each user-specified model output are calculated for each individual in the population based on their simulation results (evaluated in Step 1). For each PK parameter, the computations in Step 2 result in a distribution of that parameter over the entire population.Step 3) The population sensitivity analysis of a PK parameter of a model output is composed of sensitivity analyses, similar to the mean model sensitivity analysis, conducted for a selection of individuals within the population. The individuals chosen for the sensitivity analysis are those with PK parameters values that lie closest to user-specified quantiles of the pk parameter distributions computed in Step 2.
In this example, the sensitivity analysis will be conducted for two populations in parallel. In the first step, the model outputs to be analyzed are defined:
populationOutputs <- c(output1, output2)
Next, PopulationSimulationSet
objects are defined for
each of the two populations:
ps1 <- PopulationSimulationSet$new(
simulationSetName = "popSimulationSet1",
simulationFile = simulationFile,
populationFile = populationFile1,
outputs = populationOutputs
)
ps2 <- PopulationSimulationSet$new(
simulationSetName = "popSimulationSet2",
simulationFile = simulationFile,
populationFile = populationFile2,
outputs = populationOutputs
)
With this setup, the sensitivity of PK parameters of
output1
and output2
will be analyzed for the
two populations. The two PopulationSimulationSet
objects
are then used to create a PopulationWorkflow
, the results
of which are to be placed in the root directory
./popSensitivityExample
:
pwf <- PopulationWorkflow$new(
simulationSets = list(ps1, ps2),
workflowFolder = "popSensitivityExample",
workflowType = PopulationWorkflowTypes$parallelComparison
)
Next, the required tasks of the workflow are activated. The sensitivity analysis and sensitivity plot tasks are activated using the commands
pwf$calculateSensitivity$activate()
pwf$plotSensitivity$activate()
The population sensitivity analysis depends on the PK parameter
calculations for the population, which in turn depend on population
simulation results. If these prerequisite tasks (simulate
and calculatePKParameters
) have not previously been run,
they must also be activated:
pwf$simulate$activate()
pwf$calculatePKParameters$activate()
The variables to be perturbed in the sensitivity analysis are specified as follows:
pwf$calculateSensitivity$settings$variableParameterPaths <- c(
"Organism|Heart|Volume",
"Organism|Lung|Volume",
"Organism|Kidney|Volume",
"Organism|Brain|Volume",
"Organism|Muscle|Volume",
"Organism|LargeIntestine|Volume",
"Organism|PortalVein|Volume",
"Organism|Spleen|Volume",
"Organism|Skin|Volume",
"Organism|Pancreas|Volume",
"Organism|SmallIntestine|Mucosa|UpperIleum|Fraction mucosa",
"Organism|SmallIntestine|Volume",
"Organism|Lumen|Effective surface area variability factor",
"Organism|Bone|Volume",
"Organism|Stomach|Volume"
)
The individuals within the population for which sensitivity will be
evaluated are those with PK parameter values (as evaluated in the
calculatePKParameters
task) that lie closes to
user-specified quantiles of the population’s PK parameter distributions.
These quantiles are specified as follows:
pwf$calculateSensitivity$settings$quantileVec <- c(0.25, 0.5, 0.75)
As with the mean model sensitivity plot, the population sensitivity
plot is configured using an instance of a
SensitivityPlotSettings
object:
pwf$plotSensitivity$settings <- SensitivityPlotSettings$new(
totalSensitivityThreshold = 0.9,
maximalParametersPerSensitivityPlot = 12,
xAxisFontSize = 10,
yAxisFontSize = 10
)
The population sensitivity workflow is run using the command:
pwf$runWorkflow()
The results of the population sensitivity analysis are found in
multiple .csv
files within the
SensitivityResults
sub-directory of the workflow folder, as
shown in the following figure:
#> [1] FALSE
Two sets of files make up the population sensitivity analysis results
for this example, each corresponding to one of the
PopulationSimulationSet
objects (named
popSimulationSet1
and popSimulationSet2
). For
each set, there is one index file. The name of the index file is
prefixed with the name of the PopulationSimulationSet
object and carries the suffix
-popSensitivityResultsIndex.csv
). The index file
popSimulationSet1-popSensitivityResultsIndex.csv
contains
the names of the individual sensitivity analysis results files (found
within the SensitivityResults
sub-directory of the workflow
folder) obtained for the PopulationSimulationSet
object
popSimulationSet1
. Its contents are shown in the following
figure:
#> [1] FALSE
Two output paths are shown corresponding to output1
(pink), output2
(blue). Note that, as per the definitions
of output1
and output2
, the only PK parameters
analyzed for those two outputs are C_max
and
MRT
for output1
and t_max
and
AUC_tEnd
for output2
. For each model output
and PK parameter combination, there are sensitivity analysis result
files for three individuals given under the Filename
column, each corresponding to one of the quantiles specified using
pwf$calculateSensitivity$settings$quantileVec
.
The output report, containing the population sensitivity plots from this example, is shown below.