Conversion reaction

[1]:
# install if not done yet
# !apt install libatlas-base-dev swig
# %pip install pypesto[amici] --quiet
[2]:
import importlib
import os
import sys

import amici
import amici.plotting
import numpy as np

import pypesto
import pypesto.optimize as optimize
import pypesto.visualize as visualize

# sbml file we want to import
sbml_file = "conversion_reaction/model_conversion_reaction.xml"
# name of the model that will also be the name of the python module
model_name = "model_conversion_reaction"
# directory to which the generated model code is written
model_output_dir = "tmp/" + model_name

Compile AMICI model

[3]:
# import sbml model, compile and generate amici module
sbml_importer = amici.SbmlImporter(sbml_file)
sbml_importer.sbml2amici(model_name, model_output_dir, verbose=False)

Load AMICI model

[4]:
# load amici module (the usual starting point later for the analysis)
sys.path.insert(0, os.path.abspath(model_output_dir))
model_module = importlib.import_module(model_name)
model = model_module.getModel()
model.requireSensitivitiesForAllParameters()
model.setTimepoints(np.linspace(0, 10, 11))
model.setParameterScale(amici.ParameterScaling.log10)
model.setParameters([-0.3, -0.7])
solver = model.getSolver()
solver.setSensitivityMethod(amici.SensitivityMethod.forward)
solver.setSensitivityOrder(amici.SensitivityOrder.first)

# how to run amici now:
rdata = amici.runAmiciSimulation(model, solver, None)
amici.plotting.plotStateTrajectories(rdata)
edata = amici.ExpData(rdata, 0.2, 0.0)
../_images/example_conversion_reaction_6_0.png

Optimize

[5]:
%%time
# create objective function from amici model
# pesto.AmiciObjective is derived from pesto.Objective,
# the general pesto objective function class
objective = pypesto.AmiciObjective(model, solver, [edata], 1)

# create optimizer object which contains all information for doing the optimization
optimizer = optimize.ScipyOptimizer(method="ls_trf")

# create problem object containing all information on the problem to be solved
problem = pypesto.Problem(objective=objective, lb=[-2, -2], ub=[2, 2])

# do the optimization
result = optimize.minimize(
    problem=problem, optimizer=optimizer, n_starts=10, filename=None
)
CPU times: user 170 ms, sys: 1.86 ms, total: 172 ms
Wall time: 172 ms

Visualize

[6]:
visualize.waterfall(result)
visualize.parameters(result)
visualize.optimization_scatter(result=result)
[6]:
<seaborn.axisgrid.PairGrid at 0x760aad03a550>
../_images/example_conversion_reaction_10_1.png
../_images/example_conversion_reaction_10_2.png
../_images/example_conversion_reaction_10_3.png

Profiles

[7]:
import pypesto.profile as profile

profile_options = profile.ProfileOptions(
    min_step_size=0.0005,
    delta_ratio_max=0.05,
    default_step_size=0.005,
    ratio_min=0.01,
)

result = profile.parameter_profile(
    problem=problem,
    result=result,
    optimizer=optimizer,
    profile_index=np.array([0, 1]),
    result_index=0,
    profile_options=profile_options,
    filename=None,
)
Next guess for k1 in direction -1 is -0.1297. Step size: -0.0248.
Optimization successful for k1=-0.1297. Start fval -7.896669, end fval -7.941554.
Next guess for k1 in direction -1 is -0.1352. Step size: -0.0055.
Optimization successful for k1=-0.1352. Start fval -7.938554, end fval -7.938554.
Next guess for k1 in direction -1 is -0.1418. Step size: -0.0066.
Optimization successful for k1=-0.1418. Start fval -7.934056, end fval -7.934056.
Next guess for k1 in direction -1 is -0.1498. Step size: -0.0080.
Optimization successful for k1=-0.1498. Start fval -7.927308, end fval -7.927308.
Next guess for k1 in direction -1 is -0.1596. Step size: -0.0097.
Optimization successful for k1=-0.1596. Start fval -7.917182, end fval -7.917183.
Next guess for k1 in direction -1 is -0.1713. Step size: -0.0118.
Optimization successful for k1=-0.1713. Start fval -7.902004, end fval -7.902004.
Next guess for k1 in direction -1 is -0.1855. Step size: -0.0142.
Optimization successful for k1=-0.1855. Start fval -7.879253, end fval -7.879253.
Next guess for k1 in direction -1 is -0.2025. Step size: -0.0170.
Optimization successful for k1=-0.2025. Start fval -7.845149, end fval -7.845150.
Next guess for k1 in direction -1 is -0.2229. Step size: -0.0204.
Optimization successful for k1=-0.2229. Start fval -7.794009, end fval -7.794011.
Next guess for k1 in direction -1 is -0.2472. Step size: -0.0243.
Optimization successful for k1=-0.2472. Start fval -7.717274, end fval -7.717278.
Next guess for k1 in direction -1 is -0.2760. Step size: -0.0288.
Optimization successful for k1=-0.2760. Start fval -7.602222, end fval -7.602233.
Next guess for k1 in direction -1 is -0.3099. Step size: -0.0340.
Optimization successful for k1=-0.3099. Start fval -7.429829, end fval -7.429855.
Next guess for k1 in direction -1 is -0.3498. Step size: -0.0399.
Optimization successful for k1=-0.3498. Start fval -7.171375, end fval -7.171443.
Next guess for k1 in direction -1 is -0.3964. Step size: -0.0467.
Optimization successful for k1=-0.3964. Start fval -6.783410, end fval -6.783589.
Next guess for k1 in direction -1 is -0.4508. Step size: -0.0543.
Optimization successful for k1=-0.4508. Start fval -6.202404, end fval -6.202946.
Next guess for k1 in direction -1 is -0.5139. Step size: -0.0632.
Optimization successful for k1=-0.5139. Start fval -5.332215, end fval -5.334560.
Next guess for k1 in direction -1 is -0.5872. Step size: -0.0733.
Optimization successful for k1=-0.5872. Start fval -4.028978, end fval -4.048185.
Next guess for k1 in direction -1 is -0.6707. Step size: -0.0835.
Optimization successful for k1=-0.6707. Start fval -2.106398, end fval -2.207262.
Next guess for k1 in direction 1 is -0.0798. Step size: 0.0251.
Optimization successful for k1=-0.0798. Start fval -7.896729, end fval -7.941807.
Next guess for k1 in direction 1 is -0.0741. Step size: 0.0058.
Optimization successful for k1=-0.0741. Start fval -7.938933, end fval -7.938933.
Next guess for k1 in direction 1 is -0.0670. Step size: 0.0071.
Optimization successful for k1=-0.0670. Start fval -7.934624, end fval -7.934624.
Next guess for k1 in direction 1 is -0.0581. Step size: 0.0088.
Optimization successful for k1=-0.0581. Start fval -7.928163, end fval -7.928163.
Next guess for k1 in direction 1 is -0.0472. Step size: 0.0109.
Optimization successful for k1=-0.0472. Start fval -7.918476, end fval -7.918476.
Next guess for k1 in direction 1 is -0.0335. Step size: 0.0137.
Optimization successful for k1=-0.0335. Start fval -7.903949, end fval -7.903949.
Next guess for k1 in direction 1 is -0.0164. Step size: 0.0171.
Optimization successful for k1=-0.0164. Start fval -7.882166, end fval -7.882166.
Next guess for k1 in direction 1 is 0.0053. Step size: 0.0217.
Optimization successful for k1=0.0053. Start fval -7.849499, end fval -7.849500.
Next guess for k1 in direction 1 is 0.0330. Step size: 0.0277.
Optimization successful for k1=0.0330. Start fval -7.800504, end fval -7.800505.
Next guess for k1 in direction 1 is 0.0692. Step size: 0.0361.
Optimization successful for k1=0.0692. Start fval -7.726998, end fval -7.727002.
Next guess for k1 in direction 1 is 0.1178. Step size: 0.0486.
Optimization successful for k1=0.1178. Start fval -7.616742, end fval -7.616751.
Next guess for k1 in direction 1 is 0.1877. Step size: 0.0699.
Optimization successful for k1=0.1877. Start fval -7.451309, end fval -7.451342.
Next guess for k1 in direction 1 is 0.2877. Step size: 0.1000.
Optimization successful for k1=0.2877. Start fval -7.234174, end fval -7.238766.
Next guess for k1 in direction 1 is 0.3877. Step size: 0.1000.
Optimization successful for k1=0.3877. Start fval -7.086045, end fval -7.088559.
Next guess for k1 in direction 1 is 0.4877. Step size: 0.1000.
Optimization successful for k1=0.4877. Start fval -7.004346, end fval -7.005300.
Next guess for k1 in direction 1 is 0.5877. Step size: 0.1000.
Optimization successful for k1=0.5877. Start fval -6.969470, end fval -6.969698.
Next guess for k1 in direction 1 is 0.6877. Step size: 0.1000.
Optimization successful for k1=0.6877. Start fval -6.958333, end fval -6.958364.
Next guess for k1 in direction 1 is 0.7877. Step size: 0.1000.
Optimization successful for k1=0.7877. Start fval -6.955825, end fval -6.955827.
Next guess for k1 in direction 1 is 0.8877. Step size: 0.1000.
Optimization successful for k1=0.8877. Start fval -6.955459, end fval -6.955459.
Next guess for k1 in direction 1 is 0.9877. Step size: 0.1000.
Optimization successful for k1=0.9877. Start fval -6.955428, end fval -6.955428.
Next guess for k1 in direction 1 is 1.0877. Step size: 0.1000.
Optimization successful for k1=1.0877. Start fval -6.955426, end fval -6.955426.
Next guess for k1 in direction 1 is 1.1877. Step size: 0.1000.
Optimization successful for k1=1.1877. Start fval -6.955426, end fval -6.955426.
Next guess for k1 in direction 1 is 1.2877. Step size: 0.1000.
Optimization successful for k1=1.2877. Start fval -6.955426, end fval -6.955426.
Next guess for k1 in direction 1 is 1.3877. Step size: 0.1000.
Optimization successful for k1=1.3877. Start fval -6.955426, end fval -6.955426.
Next guess for k1 in direction 1 is 1.4877. Step size: 0.1000.
Optimization successful for k1=1.4877. Start fval -6.955426, end fval -6.955426.
Next guess for k1 in direction 1 is 1.5877. Step size: 0.1000.
Optimization successful for k1=1.5877. Start fval -6.955426, end fval -6.955426.
Next guess for k1 in direction 1 is 1.6877. Step size: 0.1000.
Optimization successful for k1=1.6877. Start fval -6.955426, end fval -6.955426.
Next guess for k1 in direction 1 is 1.7877. Step size: 0.1000.
Optimization successful for k1=1.7877. Start fval -6.955426, end fval -6.955426.
Next guess for k1 in direction 1 is 1.8877. Step size: 0.1000.
Optimization successful for k1=1.8877. Start fval -6.955426, end fval -6.955426.
Next guess for k1 in direction 1 is 1.9877. Step size: 0.1000.
Optimization successful for k1=1.9877. Start fval -6.955426, end fval -6.955426.
Next guess for k1 in direction 1 is 2.0000. Step size: 0.0123.
Optimization successful for k1=2.0000. Start fval -6.904985, end fval -6.955426.
Next guess for k2 in direction -1 is -0.4300. Step size: -0.0311.
Optimization successful for k2=-0.4300. Start fval -7.896663, end fval -7.941398.
Next guess for k2 in direction -1 is -0.4369. Step size: -0.0069.
Optimization successful for k2=-0.4369. Start fval -7.938320, end fval -7.938321.
Next guess for k2 in direction -1 is -0.4453. Step size: -0.0084.
Optimization successful for k2=-0.4453. Start fval -7.933706, end fval -7.933706.
Next guess for k2 in direction -1 is -0.4556. Step size: -0.0103.
Optimization successful for k2=-0.4556. Start fval -7.926785, end fval -7.926787.
Next guess for k2 in direction -1 is -0.4681. Step size: -0.0125.
Optimization successful for k2=-0.4681. Start fval -7.916406, end fval -7.916406.
Next guess for k2 in direction -1 is -0.4833. Step size: -0.0152.
Optimization successful for k2=-0.4833. Start fval -7.900829, end fval -7.900831.
Next guess for k2 in direction -1 is -0.5019. Step size: -0.0185.
Optimization successful for k2=-0.5019. Start fval -7.877478, end fval -7.877481.
Next guess for k2 in direction -1 is -0.5244. Step size: -0.0225.
Optimization successful for k2=-0.5244. Start fval -7.842475, end fval -7.842481.
Next guess for k2 in direction -1 is -0.5517. Step size: -0.0273.
Optimization successful for k2=-0.5517. Start fval -7.790006, end fval -7.790019.
Next guess for k2 in direction -1 is -0.5850. Step size: -0.0332.
Optimization successful for k2=-0.5850. Start fval -7.711353, end fval -7.711388.
Next guess for k2 in direction -1 is -0.6254. Step size: -0.0405.
Optimization successful for k2=-0.6254. Start fval -7.593449, end fval -7.593528.
Next guess for k2 in direction -1 is -0.6748. Step size: -0.0494.
Optimization successful for k2=-0.6748. Start fval -7.416696, end fval -7.416865.
Next guess for k2 in direction -1 is -0.7357. Step size: -0.0608.
Optimization successful for k2=-0.7357. Start fval -7.151732, end fval -7.152150.
Next guess for k2 in direction -1 is -0.8116. Step size: -0.0760.
Optimization successful for k2=-0.8116. Start fval -6.754720, end fval -6.755726.
Next guess for k2 in direction -1 is -0.9116. Step size: -0.1000.
Optimization successful for k2=-0.9116. Start fval -6.143083, end fval -6.145851.
Next guess for k2 in direction -1 is -1.0116. Step size: -0.1000.
Optimization successful for k2=-1.0116. Start fval -5.472096, end fval -5.475206.
Next guess for k2 in direction -1 is -1.1116. Step size: -0.1000.
Optimization successful for k2=-1.1116. Start fval -4.785340, end fval -4.788021.
Next guess for k2 in direction -1 is -1.2116. Step size: -0.1000.
Optimization successful for k2=-1.2116. Start fval -4.120144, end fval -4.122397.
Next guess for k2 in direction -1 is -1.3116. Step size: -0.1000.
Optimization successful for k2=-1.3116. Start fval -3.503938, end fval -3.505736.
Next guess for k2 in direction -1 is -1.4116. Step size: -0.1000.
Optimization successful for k2=-1.4116. Start fval -2.952538, end fval -2.954022.
Next guess for k2 in direction 1 is -0.3685. Step size: 0.0303.
Optimization successful for k2=-0.3685. Start fval -7.896486, end fval -7.941922.
Next guess for k2 in direction 1 is -0.3616. Step size: 0.0069.
Optimization successful for k2=-0.3616. Start fval -7.939106, end fval -7.939106.
Next guess for k2 in direction 1 is -0.3531. Step size: 0.0085.
Optimization successful for k2=-0.3531. Start fval -7.934883, end fval -7.934883.
Next guess for k2 in direction 1 is -0.3427. Step size: 0.0105.
Optimization successful for k2=-0.3427. Start fval -7.928551, end fval -7.928552.
Next guess for k2 in direction 1 is -0.3297. Step size: 0.0130.
Optimization successful for k2=-0.3297. Start fval -7.919057, end fval -7.919057.
Next guess for k2 in direction 1 is -0.3136. Step size: 0.0161.
Optimization successful for k2=-0.3136. Start fval -7.904818, end fval -7.904819.
Next guess for k2 in direction 1 is -0.2936. Step size: 0.0200.
Optimization successful for k2=-0.2936. Start fval -7.883466, end fval -7.883468.
Next guess for k2 in direction 1 is -0.2686. Step size: 0.0251.
Optimization successful for k2=-0.2686. Start fval -7.851446, end fval -7.851452.
Next guess for k2 in direction 1 is -0.2369. Step size: 0.0317.
Optimization successful for k2=-0.2369. Start fval -7.803436, end fval -7.803450.
Next guess for k2 in direction 1 is -0.1962. Step size: 0.0407.
Optimization successful for k2=-0.1962. Start fval -7.731450, end fval -7.731492.
Next guess for k2 in direction 1 is -0.1426. Step size: 0.0537.
Optimization successful for k2=-0.1426. Start fval -7.623506, end fval -7.623627.
Next guess for k2 in direction 1 is -0.0676. Step size: 0.0749.
Optimization successful for k2=-0.0676. Start fval -7.461646, end fval -7.462069.
Next guess for k2 in direction 1 is 0.0324. Step size: 0.1000.
Optimization successful for k2=0.0324. Start fval -7.258280, end fval -7.259453.
Next guess for k2 in direction 1 is 0.1324. Step size: 0.1000.
Optimization successful for k2=0.1324. Start fval -7.105335, end fval -7.106239.
Next guess for k2 in direction 1 is 0.2324. Step size: 0.1000.
Optimization successful for k2=0.2324. Start fval -7.014873, end fval -7.015128.
Next guess for k2 in direction 1 is 0.3324. Step size: 0.1000.
Optimization successful for k2=0.3324. Start fval -6.973488, end fval -6.973520.
Next guess for k2 in direction 1 is 0.4324. Step size: 0.1000.
Optimization successful for k2=0.4324. Start fval -6.959388, end fval -6.959401.
Next guess for k2 in direction 1 is 0.5324. Step size: 0.1000.
Optimization successful for k2=0.5324. Start fval -6.956012, end fval -6.956014.
Next guess for k2 in direction 1 is 0.6324. Step size: 0.1000.
Optimization successful for k2=0.6324. Start fval -6.955479, end fval -6.955479.
Next guess for k2 in direction 1 is 0.7324. Step size: 0.1000.
Optimization successful for k2=0.7324. Start fval -6.955429, end fval -6.955429.
Next guess for k2 in direction 1 is 0.8324. Step size: 0.1000.
Optimization successful for k2=0.8324. Start fval -6.955426, end fval -6.955426.
Next guess for k2 in direction 1 is 0.9324. Step size: 0.1000.
Optimization successful for k2=0.9324. Start fval -6.955426, end fval -6.955426.
Next guess for k2 in direction 1 is 1.0324. Step size: 0.1000.
Optimization successful for k2=1.0324. Start fval -6.955426, end fval -6.955426.
Next guess for k2 in direction 1 is 1.1324. Step size: 0.1000.
Optimization successful for k2=1.1324. Start fval -6.955426, end fval -6.955426.
Next guess for k2 in direction 1 is 1.2324. Step size: 0.1000.
Optimization successful for k2=1.2324. Start fval -6.955426, end fval -6.955426.
Next guess for k2 in direction 1 is 1.3324. Step size: 0.1000.
Optimization successful for k2=1.3324. Start fval -6.955426, end fval -6.955426.
Next guess for k2 in direction 1 is 1.4324. Step size: 0.1000.
Optimization successful for k2=1.4324. Start fval -6.955426, end fval -6.955426.
Next guess for k2 in direction 1 is 1.5324. Step size: 0.1000.
Optimization successful for k2=1.5324. Start fval -6.955426, end fval -6.955426.
Next guess for k2 in direction 1 is 1.6324. Step size: 0.1000.
Optimization successful for k2=1.6324. Start fval -6.955426, end fval -6.955426.
Next guess for k2 in direction 1 is 1.7324. Step size: 0.1000.
Optimization successful for k2=1.7324. Start fval -6.955426, end fval -6.955426.
Next guess for k2 in direction 1 is 1.7883. Step size: 0.0560.
Optimization successful for k2=1.7883. Start fval -6.905699, end fval -6.905699.
Next guess for k2 in direction 1 is 1.8110. Step size: 0.0227.
Optimization successful for k2=1.8110. Start fval -6.780142, end fval -6.780142.
Next guess for k2 in direction 1 is 1.8367. Step size: 0.0258.
Optimization successful for k2=1.8367. Start fval -6.541129, end fval -6.541129.
Next guess for k2 in direction 1 is 1.8666. Step size: 0.0299.
Optimization successful for k2=1.8666. Start fval -6.131361, end fval -6.131361.
Next guess for k2 in direction 1 is 1.9016. Step size: 0.0350.
Optimization successful for k2=1.9016. Start fval -5.466406, end fval -5.466406.
Next guess for k2 in direction 1 is 1.9428. Step size: 0.0412.
Optimization successful for k2=1.9428. Start fval -4.419470, end fval -4.419470.
Next guess for k2 in direction 1 is 1.9919. Step size: 0.0491.
Optimization successful for k2=1.9919. Start fval -2.799478, end fval -2.799478.
[8]:
# specify the parameters, for which profiles should be computed
ax = visualize.profiles(result)
../_images/example_conversion_reaction_13_0.png

Sampling

[9]:
import pypesto.sample as sample

sampler = sample.AdaptiveParallelTemperingSampler(
    internal_sampler=sample.AdaptiveMetropolisSampler(), n_chains=3
)

result = sample.sample(
    problem, n_samples=1000, sampler=sampler, result=result, filename=None
)
Initializing betas with "near-exponential decay".
Elapsed time: 0.9558760800000003
[10]:
ax = visualize.sampling_scatter(result, size=[13, 6])
/home/docs/checkouts/readthedocs.org/user_builds/pypesto/envs/v0.5.7/lib/python3.11/site-packages/pypesto/visualize/sampling.py:1223: UserWarning: Burn in index not found in the results, the full chain will be shown.
You may want to use, e.g., `pypesto.sample.geweke_test`.
  nr_params, params_fval, theta_lb, theta_ub, _ = get_data_to_plot(
../_images/example_conversion_reaction_16_1.png

Predict

[11]:
# Let's create a function, which predicts the ratio of x_1 and x_0
import pypesto.predict as predict


def ratio_function(amici_output_list):
    # This (optional) function post-processes the results from AMICI and must accept one input:
    # a list of dicts, with the fields t, x, y[, sx, sy - if sensi_orders includes 1]
    # We need to specify the simulation condition: here, we only have one, i.e., it's [0]
    x = amici_output_list[0]["x"]
    ratio = x[:, 1] / x[:, 0]
    # we need to output also at least one simulation condition
    return [ratio]


# create pypesto prediction function
predictor = predict.AmiciPredictor(
    objective, post_processor=ratio_function, output_ids=["ratio"]
)

# run prediction
prediction = predictor(x=model.getUnscaledParameters())
[12]:
dict(prediction)
[12]:
{'conditions': [{'timepoints': array([ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10.]),
   'output_ids': ['ratio'],
   'x_names': ['k1', 'k2'],
   'output': array([0.        , 1.95196396, 2.00246152, 2.00290412, 2.00290796,
          2.00290801, 2.00290801, 2.00290799, 2.002908  , 2.00290801,
          2.002908  ]),
   'output_sensi': None,
   'output_weight': None,
   'output_sigmay': None}],
 'condition_ids': ['condition_0'],
 'comment': None,
 'parameter_ids': ['k1', 'k2']}

Analyze parameter ensembles

[13]:
# We want to use the sample result to create a prediction
from pypesto.ensemble import ensemble

# first collect some vectors from the sampling result
vectors = result.sample_result.trace_x[0, ::20, :]

# create the collection
my_ensemble = ensemble.Ensemble(
    vectors,
    x_names=problem.x_names,
    ensemble_type=ensemble.EnsembleType.sample,
    lower_bound=problem.lb,
    upper_bound=problem.ub,
)

# we can also perform an approximative identifiability analysis
summary = my_ensemble.compute_summary()
identifiability = my_ensemble.check_identifiability()
print(identifiability.transpose())
parameterId               k1        k2
parameterId               k1        k2
lowerBound                -2        -2
upperBound                 2         2
ensemble_mean      -0.251899 -0.391859
ensemble_std        0.146978  0.195603
ensemble_median    -0.251899 -0.391859
within lb: 1 std        True      True
within ub: 1 std        True      True
within lb: 2 std        True      True
within ub: 2 std        True      True
within lb: 3 std        True      True
within ub: 3 std        True      True
within lb: perc 5       True      True
within lb: perc 20      True      True
within ub: perc 80      True      True
within ub: perc 95      True      True
[14]:
# run a prediction
ensemble_prediction = my_ensemble.predict(
    predictor, prediction_id="ratio_over_time"
)

# go for some analysis
prediction_summary = ensemble_prediction.compute_summary(
    percentiles_list=(1, 5, 10, 25, 75, 90, 95, 99)
)
dict(prediction_summary)
[14]:
{'mean': <pypesto.result.predict.PredictionResult at 0x760aac851410>,
 'std': <pypesto.result.predict.PredictionResult at 0x760aac8772d0>,
 'median': <pypesto.result.predict.PredictionResult at 0x760aac877450>,
 'percentile 1': <pypesto.result.predict.PredictionResult at 0x760aac877c50>,
 'percentile 5': <pypesto.result.predict.PredictionResult at 0x760aac874ad0>,
 'percentile 10': <pypesto.result.predict.PredictionResult at 0x760aac8746d0>,
 'percentile 25': <pypesto.result.predict.PredictionResult at 0x760aac875f50>,
 'percentile 75': <pypesto.result.predict.PredictionResult at 0x760aac876450>,
 'percentile 90': <pypesto.result.predict.PredictionResult at 0x760aac875ed0>,
 'percentile 95': <pypesto.result.predict.PredictionResult at 0x760aac875d90>,
 'percentile 99': <pypesto.result.predict.PredictionResult at 0x760aac8766d0>}