choderalab / bayesian-itc

Python tools for the analysis and modeling of isothermal titration calorimetry (ITC) experiments.
GNU General Public License v3.0
5 stars 10 forks source link

Simple model for a calibration #43

Closed bas-rustenburg closed 9 years ago

bas-rustenburg commented 9 years ago

Related to what I mentioned in #42.

jchodera commented 9 years ago

I love the idea of adding experiment classes for various kinds of "calibration" experiments. There are a few main classes of experiments we should consider:

Experiments without injections

These just monitor the baseline without any injections. Statistics about the measurement noise $\sigma$ and baseline drift behavior can be obtained this way.

Water-into-water and buffer-into-buffer

These report on both the baseline drift, the measurement noise, and the mechanical heats of injection without any heats of mixing.

Titrant-into-buffer and buffer-into-titrand

These report on the baseline drift, measurement noise, mechanical heats of injection, and heats of mixing for the titrant and titrand species.

All of these kinds of experiments may be useful, but we have to make sure the model is modular enough to separate these contributions into separate variables. We will probably have to do some tinkering with the model to allow this, since I believe the current model lumps mechanical heats of injection and heats of mixing into a single variable $H_0$, and also doesn't properly scale the measurement noise $\sigma$ per integrated injection based on the injection volume and injection time.

bas-rustenburg commented 9 years ago

I love the idea of adding experiment classes for various kinds of "calibration" experiments.

The implementation should be straightforward for most, unless we really want one model that can do all of these based on variable input.

All of these kinds of experiments may be useful, but we have to make sure the model is modular enough to separate these contributions into separate variables.

I'm hoping to design a new BindingModel scaffold that can handle adding these calibrations on top of an experiment. And subclasses like Competitive or TwoComponent models can then determine how to interpret the heats as functions of the available model variables. Does that sound like a good basic strategy?

I believe the current model lumps mechanical heats of injection and heats of mixing into a single variable $H_0$

Yes, that is correct. I suppose in the new model, we could derive heats of mixing from a combination of titant-buffer and buffer-titrand experiments. Then, mechanical heats could be taken from buffer-buffer. Would water-water actually yield the same mechanical heats? (If not, what physical property is the cause of that?)

also doesn't properly scale the measurement noise $\sigma$ per integrated injection based on the injection volume and injection time.

Do you mean we should divide the noise by the injection volume and time? Or do you mean using models like in the Tellinghuisen paper on statistical errors.

jchodera commented 9 years ago

I'm hoping to design a new BindingModel scaffold that can handle adding these calibrations on top of an experiment. And subclasses like Competitive or TwoComponent models can then determine how to interpret the heats as functions of the available model variables. Does that sound like a good basic strategy?

A simple but somewhat flexible approach would be to build an ExperimentSet class that can contain multiple Experiment objects, and has a method to generate the pymc model for the whole set. The fundamental parameters to be inferred would be defined there. We could have several Experiment subclasses that each define a model for the observed heats in terms of the fundamental parameters:

Each experiment included in the set would give more information about some of the parameters.

A more general but more complex approach would be to ditch the idea of having Experiment subclasses and focus on the idea of defining Solution objects for the titrant and titrand, and a general reaction definition scheme for how the various components of these solutions can interact in terms of some parameters that are to be inferred.

Yes, that is correct. I suppose in the new model, we could derive heats of mixing from a combination of titant-buffer and buffer-titrand experiments. Then, mechanical heats could be taken from buffer-buffer. Would water-water actually yield the same mechanical heats? (If not, what physical property is the cause of that?)

We would have some fundamental parameters defined for the model (with priors) and each experiment would come with a model for how the observed heats (and other quantities, like baseline noise) are related to the fundamental parameters. This would involve separating mechanical heats from dilution heats. Each of those experiment classes would give information about multiple parameters.

Do you mean we should divide the noise by the injection volume and time? Or do you mean using models like in the Tellinghuisen paper on statistical errors.

There are a number of models articulated in that paper, but unfortunately none of them capture the injection time spacing and volume dependence that we need. You could imagine that if there is simple uncorrelated Gaussian noise with variance \sigma^2 added to each sample of differential power, summing up N of these would lead to a variance of N \sigma^2. On the other hand, if we had a different time between injections 2N, then we would expect a variance of 2N \sigma^2.

bas-rustenburg commented 9 years ago

Made some changes to the repo in #53 that break this. Merging is proving tough, I think it's better to start a new branch, but salvage some design ideas from this one.