original_standard_dg_prime vs. standard_dg_prime

55 views
Skip to first unread message

Dan Olson

unread,
Nov 3, 2023, 9:48:30 PM11/3/23
to eQuilibrator Users
In the PathwayMDFSolution object, I'm looking at the reaction_df dataframe and I'm trying to understand the difference between the "original_standard_dg_prime" column and the "standard_dg_prime" column.

For most of my reactions, the difference between the two columns is small (< 0.5 kJ/mol), but for reactions involving CO2 (KEGG C00011), the difference is about 8 kJ/mol.

Can anyone explain how the conversion from original_standard_dg_prime to standard_dg_prime is calculated, and why the CO2 has such a big effect?

Thanks,
Dan

Dan Olson

unread,
Nov 3, 2023, 10:18:42 PM11/3/23
to eQuilibrator Users
Also, this results in a discrepancy between the results from the equilibrator-api and the eQuilibrator website calculations.

One example is the phosphoenolpyruvate carboxykinase reaction (EC 4.1.1.49)
ADP + CO2 + Phosphoenolpyruvate <=> ATP + Oxaloacetate

Using the following concentrations (optimized concentrations from one example I'm working with):
ATP (KEGG C00002): 12.1 uM
ADP (KEGG C00008): 100 uM
CO2 (KEGG C00011): 10 uM
Oxaloacetate (KEGG C00036): 1 uM
Phosphoenolpyruvate (KEGG C00074): 50 uM

equilibrator-api:
original_standard_dg_prime = -10.3 kJ/mol
standard_dg_prime = -18.1 kJ/mol
physiological_dg_prime = -1.0 kJ/mol
optimized_dg_prime = -4.6 kJ/mol

eQuilibrator website:
original_standard_dg_prime = -10.3 kJ/mol
physiological_dg_prime = 6.8 kJ/mol
optimized_dg_prime = 3.3 kJ/mol (after adjusting reactant abundance to match the concentrations above)

-Dan




--
You received this message because you are subscribed to a topic in the Google Groups "eQuilibrator Users" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/equilibrator-users/npoxy_AD-Mg/unsubscribe.
To unsubscribe from this group and all its topics, send an email to equilibrator-us...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/equilibrator-users/3a6ff3b9-5442-4b4f-8bbd-66634e5913b6n%40googlegroups.com.

Elad Noor

unread,
Nov 4, 2023, 8:55:23 AM11/4/23
to eQuilibrator Users
Hello Dan, to answer your the first question: the "original_standard_dg_prime" column contains the mean estimated values of the ΔG'0 (as would also appear on the website). However, there is uncertainty in the estimate and therefore the MDF solver can adjust it as part of the minimization problem (based on some multivariate likelihood threshold that is set by "stdev_factor" in the configuration table in the SBtab file).
The "standard_dg_prime" are the values after this adjustment has been made. Reactions with higher uncertainty, and/or ones that are more constraining the minimal driving force, will be more strongly "adjusted". I guess CO2 is important here and therefore reactions involving it are adjusted more as you observed.

The website and equilibrator-pathway are essentially running the exact same code. Are you sure that you used the same SBtab input file in both cases (perhaps the value of "stdev_factor" is different, or the bounds on one of the metabolites)?
If indeed that's not the issue, there might be some bug and I'll be happy to take a look - please send me your .TSV file if possible.

-Elad



Karel Olavarria

unread,
Apr 21, 2025, 3:44:01 PMApr 21
to eQuilibrator Users
Hello colleagues,

Thanks Elad for the previously provided answer. I found this thread while looking for answers to a similar question. I am obtaining different standard deltaG values for the same reaction when this reaction is participating in different pathways. Indeed, the difference between the standard deltaG values is very large. Important information: it is a reaction whose standard deltaG calculated by group contribution has a very large uncertainty). Still, I have two further questions/petitions:
1) Could you elaborate more on this fragment of your answer: "there is uncertainty in the estimate and therefore the MDF solver can adjust it as part of the minimization problem (based on some multivariate likelihood threshold that is set by "stdev_factor" in the configuration table in the SBtab file).
The "standard_dg_prime" are the values after this adjustment has been made. Reactions with higher uncertainty, and/or ones that are more constraining the minimal driving force, will be more strongly "adjusted". "
2) Using the API, how can I set the input data for the function that calculates the MDF such that the standard deltaG is treated as a constant (not adjusted during the optimization procedure)?

Thank you very much in advance,

Karel Olavarria

Elad Noor

unread,
Apr 22, 2025, 3:16:04 AMApr 22
to eQuilibrator Users
Dear Karel,

1) Each reaction in the model is assigned a ΔG'0 normal distribution (which has a mean value and uncertainty*). The MDF algorithm doesn't use just the mean value, but is allowed to pick a value from the distribution, as long as it is within the 95% (default value) confidence interval. The standard_dg_prime values are the ones chosen by MDF, and therefore can be different than the "original_standard_dg_prime" values.

* I simplified here a bit. All the ΔG'0 values are actually a multivariate normal distribution, but this is a detail which might not be relevant to your question.

2) You achieve this by setting the confidence interval to 0. You can do this either in the SBtab (.tsv) configuration file, or in the script running from python, like in this example (last line of code in cell #3):
One note that might be important, I think it would be good set dg_confidence to 0.01 or a similar small value rather than 0. If some of the reactions have completely unknown ΔGs (like reactions with rare groups or even undefined structures), then you still want to allow for some flexibility. They are usually assigned a default mean value of 0 kJ/mol and an uncertainty of 10^5, so only they will effectively be able to adjust (and probably should).

Best,
Elad

Karel Olavarria

unread,
Apr 22, 2025, 7:29:15 AMApr 22
to Elad Noor, eQuilibrator Users
Dear Elad,

Thank you very much for your answers. I will implement the suggested changes to address the highly uncertain dGst values.

Best regards,

Karel

--
You received this message because you are subscribed to the Google Groups "eQuilibrator Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to equilibrator-us...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/equilibrator-users/9fb408b3-d0d2-4efd-b11b-354c28273f89n%40googlegroups.com.


--
Karel

Karel Olavarria

unread,
Apr 24, 2025, 10:08:51 AMApr 24
to eQuilibrator Users

Dear Elad,

After reading your last message, I've been investigating what is behind the standard free energy variations (standard_dg_prime) provided by eQuilibrator.

According to my understanding, eQuilibrator checks the consistency of the original standard free energy values (original_standard_dg_prime) in the context of the provided pathway. I mean: eQuilibrator checks if for each metabolite the relationship S^T*dGst=0 is satisfied, i.e., the sum of the standard free energies of the reactions in which each metabolite participates multiplied by the corresponding stoichiometric coefficient must be zero. In other words, there can be no free energy created or dissipated outside of the reactions.

Most likely, the set of original_standard_dg_prime calculated using the group contribution method (or “manually” supplied by the user) violates this principle. That is, the original_standard_dg_prime for a given reaction will always be the same, regardless of the pathway. However, using the same original_standard_dg_prime value for a given reaction, despite the context of the pathway, likely leads to inconsistencies with the S^T*dGst=0 principle.

If I understood correctly, each original_standard_dg_prime estimate, calculated using the group contribution method, has an associated uncertainty. eQuilibrator considers these uncertainties to find a set of adjusted dGst values ​​(standard_dg_prime) such that the condition S^T*ΔG=0 is met by all the metabolites. As a result of this adjustment, the standard_dg_prime values ​​for the same reaction but participating in different pathways may be different, since the standard_dg_prime for this reaction must allow the fulfillment of the condition S^T*ΔG=0 for all the metabolites of the pathway. According to your last answer, this adjustment also takes into account the “degree” of influence of the specific reaction in the MDF calculation.

If I understood correctly your last message, there is a way to “manually” give eQuilibrator original_standard_dg_prime values, ​​associated with their errors; and eQuilibrator should execute the adjustment of these “manually” introduced original_standard_dg_prime values to obtain a set of adjusted dGst values ​​(standard_dg_prime).

Therefore, I manually changed the numbers in the “reaction gibbs energy” fields of the file "fermentation_pathway_with_dgs.tsv" found in the equilibrator github, and I executed the following code:

from equilibrator_api import ComponentContribution

from equilibrator_pathway import ThermodynamicModel

import matplotlib.pyplot as plt

from equilibrator_pathway.ecm_model import EnzymeCostModel

comp_contrib = ComponentContribution()

pp = ThermodynamicModel.from_sbtab("fermentation_pathway_with_dgs.tsv", comp_contrib=comp_contrib)

pp.update_standard_dgs()

pp.dg_confidence = 0.95  # 0.00

mdf_sol = pp.mdf_analysis()

mdf_sol.reaction_df

 

The code ran without “computational” problems. However, the manually introduced dGst values were ignored: eQuilibrator performed the adjustment without printing the manually introduced dGst values. When running the same code but commenting the line pp.update_standard_dgs(), the manually introduced dGst were printed in the output, but no adjustment was performed.

 

Here are my three questions:

1)     Am I understanding the problem correctly?

2)     How could I parse, using the TSV file or otherwise, the uncertainties associated with the manually introduced dGst?

3)     What should I do to make eQuilibrator adjust the manually introduced dGst values to fulfill the S^T*dGst=0 principle?

Elad Noor

unread,
Apr 27, 2025, 10:14:12 AMApr 27
to eQuilibrator Users
Hi,

1) Regarding the explanation about the constraints on the standard reaction ΔG's, I prefer describing the first law of thermodynamics means that the vector of ΔG' (either in standard conditions, or in any other condition) must be orthogonal to the kernel of S. In other words, any vector that satisfies S*v = 0 (i.e. an internal cycle) must also satisfy ΔG' * v = 0. You can see how I tried to explain it here: https://doi.org/10.48550/arXiv.1803.04999.
Regardless, following the multivariate distribution provided to you from eQuilibrator, this constraint will be satisfied always (i.e. the covariance matrix takes this into account).
I agree that if you provide ΔG'0 values manually, this constraint can be violated, but that's really something you'll have to ensure yourself. Also, running the MDF analysis on several pathways one by one will indeed adjust the ΔG'0 values in ways that could be inconsistent. I'm not sure why you are specifically concerned about the "first law" though, the problem is more fundamental than that and you should not try to combine the adjusted values together into one model anyway.

2) Sorry, we do not support uncertainties for manually provided ΔGs using SBtabs. The main reason is that (due to the problem you pointed to), the only way is to provide a complete covariance matrix and TSV files are not suitable for that. However, you can do it yourself using python if this is important for you (i.e. using the constructor for StoichiometricModel). Also, note that running `pp.update_standard_dgs()` overrides the manually provided values so you probably should remove that line.

3) The answer should be clear by now, but in short this is not really an option.

Best,
Elad
Reply all
Reply to author
Forward
0 new messages