Analyzing models

cameo uses and extends the model data structures defined by cobrapy, our favorite COnstraints-Based Reconstruction and Analysis tool for Python. cameo is thus 100% compatible with cobrapy. For efficiency reasons though cameo implements its own analysis methods that take advantage of a more advanced solver interface.

from cameo import models
model = models.bigg.e_coli_core

Flux Variability Analysis

Flux variability analysis (FVA) enables the computation of lower and upper bounds of reaction fluxes.

from cameo import flux_variability_analysis
fva_result = flux_variability_analysis(model)
fva_result.data_frame
upper_bound lower_bound
ACALD 9.375217e-16 -2.000000e+01
ACALDt 0.000000e+00 -2.000000e+01
ACKr -1.862346e-15 -2.000000e+01
ACONTa 2.000000e+01 -4.825168e-16
ACONTb 2.000000e+01 -1.999683e-16
ACt2r 0.000000e+00 -2.000000e+01
ADK1 1.666100e+02 0.000000e+00
... ... ...
SUCDi 1.000000e+03 0.000000e+00
SUCOAS -3.552714e-15 -2.000000e+01
TALA 2.000000e+01 -1.545362e-01
THD2 3.332200e+02 0.000000e+00
TKT1 2.000000e+01 -1.545362e-01
TKT2 2.000000e+01 -4.663728e-01
TPI 1.000000e+01 -1.000000e+01

95 rows × 2 columns

fva_result.plot(index=fva_result.data_frame.index[:25])

One very useful application of FVA is determining if alternative optimal solution exist.

fva_result2 = flux_variability_analysis(model,fraction_of_optimum=0.5)
fva_result2.data_frame
upper_bound lower_bound
ACALD 0.000000e+00 -12.602453
ACALDt 3.774758e-15 -12.602453
ACKr 0.000000e+00 -13.358852
ACONTa 1.383029e+01 0.471437
ACONTb 1.383029e+01 0.471437
ACt2r -6.527569e-14 -13.358852
ADK1 8.433833e+01 0.000000
... ... ...
SUCDi 1.000000e+03 0.000000
SUCOAS 0.000000e+00 -13.358852
TALA 1.328068e+01 -0.154536
THD2 1.686767e+02 0.000000
TKT1 1.328068e+01 -0.154536
TKT2 1.312294e+01 -0.466373
TPI 9.565355e+00 -3.793497

95 rows × 2 columns

fva_result2.plot()
from cameo.visualization import plotting

Phenotpic Phase Plane

The phenotypic phase plane is a modeling technique was developed to do a theoretical accessement of what cell can or cannot do in terms of the stoichiometric constraints [Edawards et al. 2001].

The phenotipic phase plane between growth and a product of interest yields the production envelope: a representation between the trade of between production of the desired product and growth.

from cameo import phenotypic_phase_plane
model.reactions.EX_o2_e.lower_bound = -10
result = phenotypic_phase_plane(model,
                                variables=[model.reactions.BIOMASS_Ecoli_core_w_GAM],
                                objective=model.reactions.EX_succ_e,
                                points=10)
result.plot()

The production envelope allows is a quick way to inspect the limitations of the system to design and how the production relates for with growth. In the previous example, succinate prudction is completly decoupled from growth and by decreasing the growth rate it is theoretically possible to produce up to 15 times more succinate.

result.plot(points=[(0.52, 0), (0.23, 12.2)], points_colors=["green", "red"])

The production envelope can show the coupling between growth and production. There is no stoichiometric couple between growth and production for succinate under aerobic conditions, but that is not the case for acetate under anaerobic conditions.

result = phenotypic_phase_plane(model,
                                variables=[model.reactions.BIOMASS_Ecoli_core_w_GAM],
                                objective=model.reactions.EX_ac_e)
result.plot()
result.data_frame
BIOMASS_Ecoli_core_w_GAM objective_lower_bound objective_upper_bound
0 0.559051 9.90568 11.503269
1 0.529627 2.62796 11.950466
2 0.500203 0.00000 12.397662
3 0.470779 0.00000 12.844858
4 0.441356 0.00000 13.292055
5 0.411932 0.00000 13.739251
6 0.382508 0.00000 14.186448
... ... ... ...
13 0.176542 0.00000 17.316822
14 0.147119 0.00000 17.764018
15 0.117695 0.00000 18.211215
16 0.088271 0.00000 18.658411
17 0.058847 0.00000 19.105607
18 0.029424 0.00000 19.552804
19 0.000000 0.00000 20.000000

20 rows × 3 columns

One can imediatly see if a design is feasible within the new defined constraints.

result.plot(points=[(0.2, 8), (0.2, 2)], points_colors=["green", "red"])

The computed data can be inspected in the format of a pandas data frame by calling result.data_frame

result.data_frame
BIOMASS_Ecoli_core_w_GAM objective_lower_bound objective_upper_bound
0 0.559051 9.90568 11.503269
1 0.529627 2.62796 11.950466
2 0.500203 0.00000 12.397662
3 0.470779 0.00000 12.844858
4 0.441356 0.00000 13.292055
5 0.411932 0.00000 13.739251
6 0.382508 0.00000 14.186448
... ... ... ...
13 0.176542 0.00000 17.316822
14 0.147119 0.00000 17.764018
15 0.117695 0.00000 18.211215
16 0.088271 0.00000 18.658411
17 0.058847 0.00000 19.105607
18 0.029424 0.00000 19.552804
19 0.000000 0.00000 20.000000

20 rows × 3 columns

model.reactions.EX_o2_e.lower_bound = 0
result2 = phenotypic_phase_plane(model,
                                 variables=[model.reactions.BIOMASS_Ecoli_core_w_GAM],
                                 objective=model.reactions.EX_ac_e,
                                 points=10)
result2.plot()

Flux Balance Impact Degree

from cameo.flux_analysis.analysis import flux_balance_impact_degree
model.reactions.EX_o2_e.lower_bound = -10
%time fbid = flux_balance_impact_degree(model, ["EX_o2_e"])
CPU times: user 312 ms, sys: 6.53 ms, total: 318 ms
Wall time: 595 ms
fbid

Flux Balance Impact Degree

  • Degree: 9
  • Reactions: 62
perturbed
ACALD False
ACALDt False
ACKr False
ACt2r False
ADK1 False
ALCD2x False
ATPM False
... ...
PYK False
PYRt2 False
SUCCt2_2 False
SUCCt3 False
SUCDi False
THD2 False
TPI False

62 rows × 1 columns