Exercise 4.1: Determining a dissociation constants

Data set download


The data set we will consider in this problem comes from a paper by Rasson and coworkers. The text below is long, and sets up a problem we will approach again in future problem sets.

The authors were investigating the biochemistry of Spire-actin interactions. Spire is an actin binding protein that can nucleate actin filaments. In particular, it has four domains (called \(S_A\), \(S_B\), \(S_C\), and \(S_D\)), which bind monomeric actin. These four domains, acting in concert, can line up actin monomers to help in nucleation. In this problem, we will determine the dissociation constant, \(K_d\), describing binding of \(S_D\) to monomeric actin.

The strategy to determine \(K_d\) is to perform a titration experiment. Consider the chemical reaction describing \(S_D\)-actin binding.

\begin{align} \text{actin}\cdot S_D \rightleftharpoons \text{actin} + S_D, \end{align}

which has dissociation constant \(K_d\). (In this system actin does not polymerize and stay monometic because it is treated with Latrunculin.) Let \(c_a\) be the equilibrium concentration of actin and \(c_d\) be the equilibrium concentration of \(S_D\), and \(c_{ad}\) be the equilibrium concentration of bound actin-\(S_D\). Then, at equilibrium,

\begin{align} K_d = \frac{c_a c_d}{c_{ad}}. \end{align}

If we started with a total actin concentration of \(c_a^0\) and a total \(S_D\) concentration of \(c_d^0\), we also have

\begin{align} c_a^0 = c_a + c_{ad}, \\[1mm] c_d^0 = c_d + c_{ad}, \end{align}

by conservation of mass. With these relations, we can now write \(c_{ad}\) in terms of \(c_a^0\) and \(c_d^0\), which are known quantities (this is what we pipetted into our solution).

\begin{align} K_d &= \frac{(c_a^0 - c_{ad})(c_d^0 - c_{ad})}{c_{ad}},\\[1mm] \Rightarrow\;&\;\;c_{ad}^2 - (K_d + c_a^0 + c_d^0)c_{ad} + c_a^0 c_d^0 = 0. \end{align}

The solution to this quadratic equation gives \(c_{ad}\) as a function of \(K_d\). Note that we must choose one of the two roots, the one that is physical. The physical root satisfies \(0 < c_{ad} < \min(c_a^0, c_d^0)\). In this case, it is

\begin{align} c_{ad} = \frac{1}{2}\left(K_d + c_a^0 + c_d^0 - \sqrt{\left(K_d + c_a^0 + c_d^0\right)^2 - 4c_a^0c_d^0}\right). \end{align}

In a titration experiment, we fix \(c_d^0\) and vary \(c_a^0\), and measure \(c_{ad}\) to get a curve. From the curve, we can perform a parameter estimation to get \(K_d\).

The problem with this approach is that we do not have a direct way of measuring \(c_{ad}\). The authors instead employed fluorescence anisotropy. I will not go into the details here of how it works, but will simply say that larger complexes rotate more slowly, and therefore give a higher fluorescence anisotropy signal (which is dimensionless) than do smaller complexes.

So, the authors fluorescently tagged \(S_D\). We will call this molecule \(S_{D^*}\), with concentration \(c_{d^*}\). When free in solution, this molecule gives an anisotropy signal of \(r_f\). When bound to actin, it gives an anisotropy signal of \(r_b\). So, the total anisotropy signal we detect is

\begin{align} r = \frac{1}{c_{d^*}^0}\,\left(r_f c_{d^*} + r_b c_{ad^*}\right). \end{align}

Clearly, when all \(S_{D^*}\) is free, the anisotropy signal is \(r_f\) and when all \(S_{D^*}\) is bound to actin, the signal is \(r_b\). Remembering conservation of mass, \(c_{d^*} = c_{d^*}^0 - c_{ad^*}\), we have

\begin{align} r = \frac{1}{c_{d^*}^0}\,\left(r_f (c_{d^*}^0 - c_{ad^*}) + r_b c_{ad^*}\right) = r_f + \frac{r_b-r_f}{c_{d^*}^0}\, c_{ad^*}. \end{align}

Now, returning to our equilibrium expression, we have

\begin{align} c_{ad^*} = \frac{1}{2}\left(K_d^* + c_a^0 + c_{d^*}^0 - \sqrt{\left(K_d^* + c_a^0 + c_{d^*}^0\right)^2 - 4c_a^0c_{d^*}^0}\right), \end{align}

so we can write the measured anisotropy \(r\) as a function of \(K_d^*\) and the known quantities \(c_a^0\) and \(c_{d^*}^0\). Note that we now have three parameters in our mathematical model, \(K_d^*\), \(r_f\), and \(r_b\), since the latter two are not known a priori. The parameter we are most interested in is \(K_d^*\), the dissociation constant for the fluorescently labeled Spire-D and actin.

Your job in this exercise is to obtain an estimate and credible region for the parameter \(K_{d}^*\). You can load and tidy the data set using the code below.

# Load and tidy data frame for dissociation
df = pl.read_csv(
    os.path.join(data_path, "rasson_dissociation_anisotropy.csv"), comment_prefix="#"
)

df_1 = df[["[SDfluor] (uM)", "[actin] (uM) trial 1", "anisotropy trial 1"]].rename(
    {"[actin] (uM) trial 1": "[actin] (uM)", "anisotropy trial 1": "anisotropy"}
).with_columns(trial=1)
df_2 = df[["[SDfluor] (uM)", "[actin] (uM) trial 2", "anisotropy trial 2"]].rename(
    {"[actin] (uM) trial 2": "[actin] (uM)", "anisotropy trial 2": "anisotropy"}
).with_columns(trial=2)

df = pl.concat((df_1, df_2))