{
"cells": [
{
"cell_type": "markdown",
"id": "03812395",
"metadata": {},
"source": [
"# Experimental data\n",
"\n",
"In contrast to theoretical or computational landscapes, like the Serine codon model shown in previous sections, empirical landscapes are based on experimental data. Such data is typically noisy and incomplete, so we need to apply additional methods to obtain reliable estimates of the phenotype of every possible genotype in order to visualize the genotype-phenotype map. In this section, we will illustrate the two methods available in `gpmap-tools` for inference of complete genotype-phenotype maps $f$ from noisy measurements `y` at a subset of sequences `X`. Optionally, the variance associated to the measurement `y_var` can be provided.\n",
"\n",
"> **Note:** these methods only work for sequences of the same length\n",
"\n",
"- **Minimum epistasis interpolation (MEI)** finds the genotype-phenotype map that minimizes the sum of squared P-th epistatic coefficients $\\bar{\\epsilon_P^2}$ while exactly matching the data `y` at sequences `X` ([read more](https://www.nature.com/articles/s41467-020-15512-5)).\n",
"- **Empirical VC regression** estimates a prior distribution characterized by the variance explained by interactions of every possible order from the empirical distance-correlation function computed from the available data. Then, it uses this prior distribution to perform Gaussian process regression to infer a complete genotype-phenotype map ([read more](https://doi.org/10.1073/pnas.2204233119)).\n",
"\n",
"In this section, we will illustrate how to use these methods using simulated and real data and how to use them to evaluate the evidence supporting specific hypotheses about the genotype-phenotype map."
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "f34627a2",
"metadata": {},
"outputs": [],
"source": [
"# Import required libraries\n",
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"from scipy.stats import pearsonr, norm\n",
"from gpmap.datasets import DataSet\n",
"from gpmap.inference import VCregression, MinimumEpistasisInterpolator\n",
"from gpmap.plot.mpl import plot_hyperparam_cv, init_fig"
]
},
{
"cell_type": "markdown",
"id": "48dc85f2",
"metadata": {},
"source": [
"## Inference from simulated data\n",
"\n",
"We first illustrate how to use these methods using simulated data. In this case, we know what the true genotype-phenotype map is and can compare the model inferences with the real values. \n",
"\n",
"### How to sample functions from the prior distribution\n",
"\n",
"We will simulate data from the Variance Component regression model. In order to do so, we need to define the configuration of sequence space, the variance associated to interactions of every possible order `lambdas`, standard deviation of the measurement noise `sigma` and the fraction of genotypes that are not measured in the experiment `p_missing`."
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "838329b0",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
y_true
\n",
"
y
\n",
"
y_var
\n",
"
\n",
" \n",
" \n",
"
\n",
"
AAAAAA
\n",
"
-1.212747
\n",
"
-1.398312
\n",
"
0.04
\n",
"
\n",
"
\n",
"
AAAAAC
\n",
"
-3.876249
\n",
"
-3.494929
\n",
"
0.04
\n",
"
\n",
"
\n",
"
AAAAAG
\n",
"
0.140375
\n",
"
-0.066060
\n",
"
0.04
\n",
"
\n",
"
\n",
"
AAAAAT
\n",
"
1.159327
\n",
"
1.123854
\n",
"
0.04
\n",
"
\n",
"
\n",
"
AAAACA
\n",
"
0.336225
\n",
"
0.006149
\n",
"
0.04
\n",
"
\n",
"
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
\n",
"
\n",
"
TTTTGT
\n",
"
-4.808467
\n",
"
-4.818905
\n",
"
0.04
\n",
"
\n",
"
\n",
"
TTTTTA
\n",
"
-6.423852
\n",
"
-6.490532
\n",
"
0.04
\n",
"
\n",
"
\n",
"
TTTTTC
\n",
"
-0.621695
\n",
"
-0.666689
\n",
"
0.04
\n",
"
\n",
"
\n",
"
TTTTTG
\n",
"
-4.882427
\n",
"
-4.986013
\n",
"
0.04
\n",
"
\n",
"
\n",
"
TTTTTT
\n",
"
-2.149232
\n",
"
-2.358559
\n",
"
0.04
\n",
"
\n",
" \n",
"
\n",
"
3658 rows × 3 columns
\n",
"
"
],
"text/plain": [
" y_true y y_var\n",
"AAAAAA -1.212747 -1.398312 0.04\n",
"AAAAAC -3.876249 -3.494929 0.04\n",
"AAAAAG 0.140375 -0.066060 0.04\n",
"AAAAAT 1.159327 1.123854 0.04\n",
"AAAACA 0.336225 0.006149 0.04\n",
"... ... ... ...\n",
"TTTTGT -4.808467 -4.818905 0.04\n",
"TTTTTA -6.423852 -6.490532 0.04\n",
"TTTTTC -0.621695 -0.666689 0.04\n",
"TTTTTG -4.882427 -4.986013 0.04\n",
"TTTTTT -2.149232 -2.358559 0.04\n",
"\n",
"[3658 rows x 3 columns]"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.random.seed(0)\n",
"lambdas_true = np.array([1e4, 1e3, 2e2, 1e0, 1e-1, 3e-3, 1e-5])\n",
"\n",
"model = VCregression(seq_length=6, alphabet_type='dna', lambdas=lambdas_true)\n",
"data = model.simulate(sigma=0.2, p_missing=0.1)\n",
"test = data.loc[np.isnan(data[\"y\"]), :].copy()\n",
"train = data.dropna()\n",
"train"
]
},
{
"cell_type": "markdown",
"id": "4090bcb3",
"metadata": {},
"source": [
"### How to compute the minimum epistasis interpolation solution\n",
"\n",
"This can be done very simply by defining a `MinimumEpistasisInterpolator` object with the right configuration of sequence space and the order of local epistatic coefficients we aim to penalize. In this case, we set `P=2` to minimize the sum of squared epistatic coefficients."
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "dc8c2ad2",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"test = test.join(mei, rsuffix=\"_mei\")\n",
"r2 = pearsonr(test['y_mei'], test['y_true'])[0] ** 2\n",
"fig, axes = plt.subplots(1, 1, figsize=(4, 4))\n",
"axes.scatter(x=test['y_true'], y=test['y_mei'], c='black', alpha=0.5, s=5, lw=0)\n",
"ticks = np.arange(-10, 9, 2)\n",
"axes.axline((0, 0), (1, 1), lw=0.75, linestyle='--', c='grey')\n",
"axes.set(xlabel=r'$y_{True}$', ylabel=r'$y_{pred}$', aspect='equal', xlim=(-15, 10), ylim=(-15, 10))\n",
"axes.text(0.03, 0.97, r'$R^2$=' + '{:.3f}'.format(r2), transform=axes.transAxes,\n",
" va='top')"
]
},
{
"cell_type": "markdown",
"id": "ce611af4",
"metadata": {},
"source": [
"This comparison shows a very high correlation between the predictions and the real phenotypic values, but the extremely low and high values tend to be over and underestimated, respectively. \n",
"\n",
"### How to estimate Variance Components $\\lambda$'s\n",
"\n",
"We next illustrate how to use Variance Component regression on the same simulated data for comparison. The first step is the estimation of the variance components from the data. The covariance matrix $K$ under the prior is given by\n",
"\n",
"$$K = \\sum_k \\lambda_k K_k$$\n",
"\n",
"We define the $\\lambda_k$ through kernel alignment. This is achieved by finding the non-negative linear combination of the covariance matrices $K_k$ associated to each pure interactions of order $k$ that that minimize the Frobenius norm of the difference with the empirical second moment matrix $(y - \\bar y)^T(y - \\bar y)$ \n",
"\n",
"$$\\hat\\lambda = \\arg \\min_{\\lambda} \\lVert (y - \\bar y)(y - \\bar y)^T - (\\sum_k \\lambda_k K_k)_{xx} \\lVert_F^2$$\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "5ccde983",
"metadata": {},
"outputs": [],
"source": [
"model = VCregression(seq_length=6, alphabet_type=\"dna\", )\n",
"model.fit(X=train.index.values, y=train.y.values, y_var=train.y_var.values)\n",
"vc = model.lambdas_to_variance(model.lambdas)\n",
"vc_p = vc / vc.sum() * 100"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "c6131627",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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Q++++65CQkJ0zz33KDMzUwMGDFBwcLAWLVqk1NRUlzvvAQBc17NnTx06dEjSN7NYExISDE4EdD902IOn63BRymaz6bPPPtPhw4edj9dff90d2QAAcGtnpoqKCs2ZM0elpaUKCQnRqFGj9O677+r73/++JOmJJ56Qn5+fZs6cqdraWk2ePFlPP/20O4YBALiIu+++W88995weffRRo6MA3U59fb2KiooUHR3NgubwWG0qSn311Vf69NNPmxSgvvjiC9XX1ysgIEBXXnmlRo4c2VlZAQA+qLEzU3x8fJPt7enM9Nxzz7X6elBQkLO5BQCg8zU0NGjdunV6//33lZycrD59+jR5ffXq1QYlA7zb+fPndfLkScXFxcnPr0Or9gCdyuWi1N13362XX35ZJpNJvXv3ltVq1dSpU7Vs2TKNHDlSw4YNk7+/f2dmBQD4IDozAUD3dfjwYV1zzTWSpM8//7zJa3QGA9qnsrJS58+fp8MevILLRanNmzfrqaee0j333KOGhgb98pe/1J///GeNGDFCt9xyS7cuSDV+am6z2YyOAgA+h85MANB9bd++3egIQLdSUVEhPz8/OuzBa7g8j++BBx7QnDlzFBQUpL59++rJJ5/URx99pO3bt+uqq67Stm3bOjOnocxms44cOaJ9+/YZHQUAfI7JZNIvf/lLOjMBQDdTX1+vm266SV988YXRUQCv53A4VFRUpKCgIIWFhRkdB3CZy0WpVatWqV+/fk22JScna+/evcrIyNDs2bN155136uTJk24PCQDwXVVVVTpz5oyzM9O4cePUt29fnTlzRtXV1UbHAwC007e77wFoP7vdroKCAg0cOFDBwcFGxwHapMMrnplMJmVkZOjIkSOqra3ViBEj3JELAABJ0o9+9CNt3Lix2fZXXnlFP/rRjwxIBABwl8buewDap66uTidOnNCQIUPUq1cvo+MAbdam7nutGTJkiF577TVt3brVXYcEAEAff/zxRbsvTZw4Ub/85S8NSAQAcBe67wGus9lsysnJUWlpqSIjI5WcnKyzZ8/SYQ9ezW1FqUZTp0519yEBAD6strZWDQ0NzbbX19fr66+/NiARAMBd6L4HuGbLli3KyMhQUVGRJCk0NFRxcXH69a9/rdjYWIPTAe3n9qKUp5sxY4Z27Nihm266SZs3bzY6DgDgEsaNG6e//OUv+uMf/9hk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Zoxuv/12DR48WKNHj+62n8QAbeUN5+rWePp5/FK85TzfEk8//7uCawS6M39/f/Xu3VuSVFtbK4fDIUc3bRA/ceJE9evXz+gYbtUdx/RtvvTzaRSKUh7s1KlTstlsCg8Pb7I9PDxcZWVlBqXqPux2uxYvXqzrrrtOV199tdFxmvn000/Vt29fBQYG6mc/+5lef/11JSQkGB2riY0bN+rAgQNatWqV0VFalZKSovXr12vbtm165plnlJ+fr/Hjx+vcuXNGR3P66quv9Mwzz2jYsGF69913dd999+n+++/XCy+8YHQ0wFCefq5ujTecxy/FW87zLfGG878ruEZ4LlfW8evo+rAmk0kTJkzQ2LFj9dJLL7kpueu6YoyVlZVKTExUdHS0fv7znyssLMxN6V3XFeP0NL4wZneM0RN+PlvjjjEaeZ6hKAWfZTabdfjwYW3cuNHoKBc1fPhw5eXl6eOPP9Z9992nuXPn6siRI0bHciosLFRGRoZeeuklBQUFGR2nVVOmTNHtt9+uUaNGafLkyXr77bdVWVmpV155xehoTna7Xddcc41Wrlyp0aNH695779WCBQu0Zs0ao6MBhvL0c3VrPP08finedJ5viTec/13BNcJzXWodP1fWh21cq+a7j5KSEknShx9+qNzcXL355ptauXKlDh061CVja9QVYwwNDdXBgweVn5+vDRs2qLy8vEvG9m1dMU5P444xezp3jNETfj5b444xGnqeMeSmQbiktrbW4e/v32w9kDlz5jhuvfVWY0K5QF6whonZbHZER0c7vvrqK6OjuOymm25y3HvvvUbHcHr99dcdkhz+/v7OhySHyWRy+Pv7OxoaGoyO2KoxY8Y4HnroIaNjOMXGxjruueeeJtuefvppR1RUlEGJ0B14w/m4Nd54rm6Np53HL8Xbz/Mt8bTzvyu4RniHi51z3b0+7JIlSxzPP/98B1J2TFeM8b777nO8+uqrHYnZYZ05zu3bt3vk+ksdGbOnjum73PH36gk/n61xxxi7+jzDTCkPFhAQoOTkZGVnZzu32e12ZWdne+WaFJ7A4XBo4cKFev311/XBBx/osssuMzqSy+x2u2pra42O4XTTTTfp008/VV5envMxZswY3XXXXcrLy5O/v7/REVtUU1OjL7/8UpGRkUZHcbruuuuatbz//PPPFRcXZ1AiwDjefK5ujaedxy/Fm8/zLfHE878ruEZ4J3esD2u1Wp23m9bU1OiDDz7QVVdd1Sl528MdYywvL3eOsaqqSrt27dLw4cM7JW97+eJav74wZlfG6A0/n61xZYxGn2d6dNk7oV0yMzM1d+5cjRkzRuPGjVNWVpasVqvmzZtndLQmampqdPz4cefz/Px85eXlacCAAYqNjTUwWVNms1kbNmzQ3/72N/Xr18+5NldISIh69eplcLr/Z+nSpZoyZYpiY2N17tw5bdiwQTt27NC7775rdDSnfv36NVvfpU+fPho4cKDHrfuyZMkSTZs2TXFxcSopKdHy5cvl7++vO+64w+hoTg888IC+973vaeXKlfrhD3+ovXv36i9/+Yv+8pe/GB0NXsZbzset8ZZzdWu84Tx+Kd50nm+JN5z/XcE1wju1tj7sZ5995tIxysvLNWPGDEnfNE1YsGCBxo4d6/as7eWOMZ44cUL33nuvcwHpRYsWaeTIkZ0Rt93cMU5JSktL08GDB2W1WhUdHa1XX33VYycbuDpmbxrTd7kyRm/4+WyNK2M0+jxDUcrDzZ49WydPntSyZctUVlampKQkbdu2rdkPldH279+vSZMmOZ9nZmZKkubOnav169cblKq5Z555RtI3XSK+7fnnn9dPfvKTrg/UgoqKCs2ZM0elpaUKCQnRqFGj9O677+r73/++0dG8UlFRke644w6dPn1agwYN0vXXX689e/Zo0KBBRkdzGjt2rF5//XUtXbpUjzzyiC677DJlZWXprrvuMjoavIy3nI9b4y3n6tZwHvcM3nD+dwXXCN81dOhQHTx40OgYnWrcuHHKy8szOkaXeP/9942O4HbdcUzf5gs/n0afZyhKeYGFCxdq4cKFRsdo1cSJE72iNaY3ZJSk5557zugI7bJjxw6jI1yUtyyQfMstt+iWW24xOga8nLecj1vj7fkl7z2PX4qnnudb4i3nf1dwjfA+YWFh8vf3b7Yocnl5uSIiIgxK5V6+MEbJd8b5bb4wZsboGWNkTSkAAAAAcDNfWB/WF8Yo+c44v80XxswYPWOMzJQCAAAAgHa41Dp+3rI+bGt8YYyS74zz23xhzIzRC8bYZX3+AAAAAKAb2b59u0NSs8fcuXOd+/zxj390xMbGOgICAhzjxo1z7Nmzx7jA7eALY3Q4fGec3+YLY2aM3/DkMZocjm6wcAMAAAAAAAC8CmtKAQAAAAAAoMtRlAIAAAAAAECXoygFAAAAAACALkdRCgAAAAAAAF2OohTggSZOnKjFixcbHQMA4MG4VgAAAG9HUQoAAAAAAABdjqIUAAAAAAAAuhxFKcALbN26VSEhIXrppZeMjgIA8FBcKwAAgLfpYXQAAK3bsGGDfvazn2nDhg265ZZbjI4DAPBAXCsAAIA3YqYU4MEsFov++7//W2+99Ra/ZAAALoprBQAA8FbMlAI81ObNm1VRUaGPPvpIY8eONToOAMADca0AAHSWhx56SE888YRmzpypDRs2GB0H3RQzpQAPNXr0aA0aNEjr1q2Tw+EwOg4AwANxrQCA7sFkMrX6+M1vftPlmZYuXao//OEPevnll3X8+PEuf3/4BopSgIf6j//4D23fvl1/+9vftGjRIqPjAAA8ENcKAOgeSktLnY+srCwFBwc32bZkyZJmX1NXV9epmUJCQnTPPffIz89Pn376aae+F3wXRSnAg11xxRXavn27XnvtNS1evNjoOAAAD8S1AgC8X0REhPMREhIik8nUZFvfvn01ceJELVy4UIsXL1ZYWJgmT54sSYqPj1dWVlaT4yUlJTlnV9ntdq1atUqXXXaZevXqpcTERG3evNmlXA0NDerdu7cOHz7szuECTqwpBXi44cOH64MPPtDEiRPl7++vP/zhD0ZHAgB4GK4VAOAbXnjhBd1333366KOPXP6aVatW6X//93+1Zs0aDRs2TLt27dLdd9+tQYMGacKECa1+7a9+9SvV1NRQlEKnoSgFeKAdO3Y0eX7llVeqvLzcmDAAAI/EtQIAfM+wYcP0+9//3uX9a2trtXLlSr3//vtKTU2VJA0dOlQffvih/vznP7dalMrNzdWaNWs0derUixal/va3v2n79u3NZmkBbUFRCgAAAAAAL5CcnNym/Y8fP67z58/r+9//fpPtdXV1Gj16dItfZ7fb9dOf/lQLFy5USkqK7r77btXX16tnz57OfQ4dOqTExMS2DQD4DopSAAAAAAB4gT59+jTb5ufn16wDa319vSSppqZGkrR161YNGTKkyT6BgYEtvs8f//hHnTp1So888ogKCgpUX1+vzz77TCNHjnTuc+jQIU2dOlXV1dX68Y9/rKlTp+ree+9t99jgmyhKAQAAAADgpQYNGqTS0lLn8+rqauXn50uSEhISFBgYqIKCgkuuH9WouLhYv/71r/Xyyy+rT58+GjZsmAIDA3X48OEmRamjR4+qV69emjJlin7zm980m40FuIKiFAAAAAAAXurGG2/U+vXrNW3aNIWGhmrZsmXy9/eXJPXr109LlizRAw88ILvdruuvv15VVVX66KOPFBwcrLlz5zY73v33368pU6Zo6tSpkqQePXroyiuvbLKu1Ndff63i4mLdeeed+t///V9dddVVXTNYdDsUpQAAAAAA8FJLly5Vfn6+brnlFoWEhOi3v/2tc6aUJP32t7/VoEGDtGrVKn311VcKDQ3VNddco//5n/9pdqy///3v+uCDD3T06NEm20eOHNmkKHX48GGlpqaquLhYPXpQVkD7mRzfvfkUAAAAAACgBc8995wqKio0efJkLViwQDt37lTfvn2NjgUv5Gd0AAAAAAAA4D0OHTqkq6++Wtdcc43++7//W/Pnzzc6ErwUM6UAAAAAAADQ5ZgpBQAAAAAAgC5HUQoAAAAAAABdjqIUAAAAAAAAuhxFKQAAAAAAAHQ5ilIAAAAAAADochSlAAAAAAAA0OUoSgEAAAAAAKDLUZQCAAAAAABAl6MoBQAAAAAAgC5HUQoAAAAAAABdjqIUAAAAAAAAuhxFKQAAAAAAAHS5/x/2kL3oPp1AkwAAAABJRU5ErkJggg==",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"k = np.arange(model.lambdas.shape[0])\n",
"\n",
"fig, subplots = plt.subplots(1, 3, figsize=(12, 3.5))\n",
"\n",
"axes = subplots[0]\n",
"axes.bar(x=k, height=model.lambdas, color='black')\n",
"axes.set(xlabel='k', ylabel=r'$\\lambda_k$', yscale='log',\n",
" xticks=np.arange(7))\n",
"\n",
"axes = subplots[1]\n",
"axes.bar(x=k[1:], height=vc_p, color='black')\n",
"axes.set(xlabel='k', ylabel='% variance explained')\n",
"\n",
"axes = subplots[2]\n",
"axes.scatter(lambdas_true, model.lambdas, c='black')\n",
"lims = (1e-5, 1e6)\n",
"axes.plot(lims, lims, c='grey', lw=0.3, alpha=0.5)\n",
"axes.set(xscale='log', yscale='log',\n",
" xlabel=r'True $\\lambda_k$',\n",
" ylabel=r'Inferred $\\lambda_k$',\n",
" xlim=lims, ylim=lims)\n",
"\n",
"fig.tight_layout()"
]
},
{
"cell_type": "markdown",
"id": "cff9aee0",
"metadata": {},
"source": [
"We can see that the inferred variance components are very similar in log scale to the true data-generating parameters. \n",
"\n",
"However, when data is sparse, kernel alignment is a hard problem and we need to regularize towards simpler solutions. While we could shrink towards additivity, another good general choice that still models high order interactions is towards exponential decay of the variance components. We can do it by setting `cross_validation=True` and penalizing the second order moments of the $\\log \\lambda_k$ as a function of $k$. It will automatically split the data into different folds and perform kernel alignment under different regularization strength to find the penalization constant that best generalizes to the validation set according to a metric. These metrics can be\n",
"the Frobenius of the difference between the prior and second moment matrix, $R^2$ on the or the log-likelihood of the predictions on the validation set. This can be specified through the argument `cv_loss_function='r2'` ,`cv_loss_function='logL'`."
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "d1050335",
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 100/100 [00:10<00:00, 9.20it/s]\n"
]
}
],
"source": [
"cvmodel = VCregression(cross_validation=True, cv_loss_function='logL', max_log_beta=5)\n",
"cvmodel.fit(X=train.index.values, y=train.y.values, y_var=train.y_var.values)"
]
},
{
"cell_type": "markdown",
"id": "a8af51e5",
"metadata": {},
"source": [
"We can visualize the hyperparameter optimization curves during the cross-validation procedure as follows"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "af857d36",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, axes = plt.subplots(1, 1, figsize=(5, 4.5))\n",
"plot_hyperparam_cv(cvmodel.cv_loss_df, axes, x='log_beta', y='loss', show_folds=True,\n",
" xlabel=r'$\\log\\beta$', ylabel=r'$-log(\\L)$', highlight='min')"
]
},
{
"cell_type": "markdown",
"id": "a9dcb37f",
"metadata": {},
"source": [
"### How to obtain phenotypic predictions under a VC prior\n",
"\n",
"Once we know the parameters of the Variance Component prior, we can compute the posterior distribution for the complete genotype-phenotype map with the method `predict`"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "16df54ca",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"test = test.join(pred, rsuffix=\"_pred\")\n",
"r2 = pearsonr(test[\"y_pred\"], test[\"y_true\"])[0] ** 2\n",
"fig, axes = plt.subplots(1, 1, figsize=(4, 4))\n",
"axes.scatter(x=test[\"y_true\"], y=test[\"y_pred\"], c=\"black\", alpha=0.5, s=5, lw=0)\n",
"ticks = np.arange(-10, 9, 2)\n",
"axes.axline((0, 0), (1, 1), lw=0.75, linestyle=\"--\", c=\"grey\")\n",
"axes.set(\n",
" xlabel=r\"$y_{True}$\",\n",
" ylabel=r\"$y_{pred}$\",\n",
" aspect=\"equal\",\n",
" xlim=(-15, 10),\n",
" ylim=(-15, 10),\n",
")\n",
"axes.text(\n",
" 0.03,\n",
" 0.97,\n",
" r\"$R^2$=\" + \"{:.3f}\".format(r2),\n",
" transform=axes.transAxes,\n",
" va=\"top\",\n",
")\n"
]
},
{
"cell_type": "markdown",
"id": "78636627",
"metadata": {},
"source": [
"### How to calculate uncertainty of the predictions\n",
"\n",
"In the previous section, we have shown how to compute the posterior mean of the complete genotype-phenotype given the data and the estimated variance components. However, in cases where the ground truth is not known, it can be useful to have an idea about the uncertainty of the phenotypic predictions for new sequences. As we are using Gaussian process models with Gaussian likelihood function, we can compute, not only the posterior mean, but also the posterior variance and 95% probability credible interval for these sequences by setting `calc_variance=True`.\n",
"\n",
"> **Note**: Computing the variance for every possible sequence is usually unfeasible because we need to solve a system of $~\\alpha^\\ell$ equations for computing the variance of each sequence. Thus, in practice, this calculation can only be done for a small subset of sequences of interest.\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "1b2ad2fb",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 438/438 [00:19<00:00, 22.07it/s]\n"
]
},
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
y
\n",
"
y_var
\n",
"
std
\n",
"
ci_95_lower
\n",
"
ci_95_upper
\n",
"
y_true
\n",
"
\n",
" \n",
" \n",
"
\n",
"
AAAAGG
\n",
"
-4.655712
\n",
"
0.053484
\n",
"
0.231267
\n",
"
-5.118245
\n",
"
-4.193179
\n",
"
-4.490122
\n",
"
\n",
"
\n",
"
AAAATC
\n",
"
-4.664899
\n",
"
0.053372
\n",
"
0.231024
\n",
"
-5.126947
\n",
"
-4.202851
\n",
"
-4.563295
\n",
"
\n",
"
\n",
"
AAACGC
\n",
"
-3.764736
\n",
"
0.056246
\n",
"
0.237162
\n",
"
-4.239060
\n",
"
-3.290411
\n",
"
-3.762022
\n",
"
\n",
"
\n",
"
AAAGCT
\n",
"
-2.354579
\n",
"
0.053003
\n",
"
0.230223
\n",
"
-2.815025
\n",
"
-1.894133
\n",
"
-2.278915
\n",
"
\n",
"
\n",
"
AAAGGC
\n",
"
-4.055686
\n",
"
0.053139
\n",
"
0.230520
\n",
"
-4.516725
\n",
"
-3.594647
\n",
"
-4.166181
\n",
"
\n",
"
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
\n",
"
\n",
"
TTTCGT
\n",
"
-3.948662
\n",
"
0.056216
\n",
"
0.237100
\n",
"
-4.422861
\n",
"
-3.474463
\n",
"
-4.078485
\n",
"
\n",
"
\n",
"
TTTGAA
\n",
"
-7.868073
\n",
"
0.059309
\n",
"
0.243534
\n",
"
-8.355140
\n",
"
-7.381005
\n",
"
-7.812920
\n",
"
\n",
"
\n",
"
TTTGAT
\n",
"
-5.302352
\n",
"
0.056146
\n",
"
0.236952
\n",
"
-5.776257
\n",
"
-4.828448
\n",
"
-5.469751
\n",
"
\n",
"
\n",
"
TTTGTA
\n",
"
-10.177815
\n",
"
0.056164
\n",
"
0.236989
\n",
"
-10.651794
\n",
"
-9.703837
\n",
"
-10.371402
\n",
"
\n",
"
\n",
"
TTTTAA
\n",
"
-4.134156
\n",
"
0.056251
\n",
"
0.237174
\n",
"
-4.608504
\n",
"
-3.659809
\n",
"
-4.006536
\n",
"
\n",
" \n",
"
\n",
"
438 rows × 6 columns
\n",
"
"
],
"text/plain": [
" y y_var std ci_95_lower ci_95_upper y_true\n",
"AAAAGG -4.655712 0.053484 0.231267 -5.118245 -4.193179 -4.490122\n",
"AAAATC -4.664899 0.053372 0.231024 -5.126947 -4.202851 -4.563295\n",
"AAACGC -3.764736 0.056246 0.237162 -4.239060 -3.290411 -3.762022\n",
"AAAGCT -2.354579 0.053003 0.230223 -2.815025 -1.894133 -2.278915\n",
"AAAGGC -4.055686 0.053139 0.230520 -4.516725 -3.594647 -4.166181\n",
"... ... ... ... ... ... ...\n",
"TTTCGT -3.948662 0.056216 0.237100 -4.422861 -3.474463 -4.078485\n",
"TTTGAA -7.868073 0.059309 0.243534 -8.355140 -7.381005 -7.812920\n",
"TTTGAT -5.302352 0.056146 0.236952 -5.776257 -4.828448 -5.469751\n",
"TTTGTA -10.177815 0.056164 0.236989 -10.651794 -9.703837 -10.371402\n",
"TTTTAA -4.134156 0.056251 0.237174 -4.608504 -3.659809 -4.006536\n",
"\n",
"[438 rows x 6 columns]"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pred = model.predict(test.index.values, calc_variance=True)\n",
"pred['y_true'] = data.loc[pred.index.values, 'y_true']\n",
"pred"
]
},
{
"cell_type": "markdown",
"id": "7f3de01f",
"metadata": {},
"source": [
"We can now check that predictions are well calibrated, this is, that the true value lies withing the 95% probability predicted interval close to the expected 95% probability; and show the error bars in the scatterplot to visualize if uncertainty is uniformly distributed along the whole range of true phenotypic values."
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "f6fdaad7",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.03, 0.97, 'Calibration=98.63%')"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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gDY4OKipqnpW33+2GXAy7Gin0djYGF555RXcfvvtsNvtJzyeGJIVBAGPP/44Wlpa8Nxzz+Gvf/0rvva1r03pvd544w20trbib3/7G/793/8dv//970/YT/e5556DKIp455138OSTT37oe2/YsAGPPfYYnE4n+vv70d/fP6kzS1BVFR/72McwNjaGv//973jttddw5MgRXHfddZOed/jwYbz44ot46aWX8NJLL+Hvf/87vve97+mPP/zww0hNTT3tV1dXFwBAkiSIojipy7RarQCAt99+GwBQUVGBjIwMPPXUU5BlGZFIBE899RQqKytRXFx80s9xaGgITU1NyMrKwoYNG5CdnY0LL7xQf82TGRsbw69+9Sts2LABZrMZAFBbW4vXX38dqqri1VdfxcqVKwEA9957L26//XYUFBSc8vWIaHolNgjIyspK2nDxJOcc1QvU2fw109TUpAHQfv/730/pvf7jP/5Dy8jI0G+fSUfrdru1UCik3/ezn/1MS01N1Tu+Cy+8UKurqzvn9044tqN99dVXNaPROKlLa2lp0QBo27dv12u22WyTOth7771XW7dunX57dHRUa2trO+2Xoiiapmnavn37NJPJpP3gBz/QJEnSxsbGtGuuuUYDoD388MP6a+7du1crKyvTBEHQBEHQKioqtM7OzlMev9fr1QBobrdbe/rpp7WdO3dqX/nKVzRRFLVDhw5Neu7XvvY1zWazaQC0xsZGbWRkRH+sp6dHu/zyy7WCggLt8ssv13p6erS///3v2po1a7TR0VHt2muv1UpKSk4YeSCi6dXT06O9+uqrZ93JJrCjnaO0M1w2+vXXX8emTZuwZMkSOBwO3HDDDRgdHUU4HD7j96qtrZ10znT9+vUIBoPo7u7W76uvr5+R925tbUVBQcGkLq2qqgoulwutra36fcXFxZM2Tc7NzcXQ0JB+2+12o7y8/LRfJtMHl3pXV1fjueeew6OPPgqbzYacnByUlJQgOztb73IjkQg++9nP4rzzzsO2bdvwzjvvYMWKFbj88ssnTWw6lqqqAIAvfOELuOWWW1BXV4cf//jHqKiowNNPPz3puffeey927dqFV199FUajETfeeKP+33zJkiV46aWX0NXVhZdeegkejwdf+tKX8OSTT+I73/kOHA4HDh48iLa2Nvz85z8/48+aiM7czp07kZGRcdK1i5OJ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7+/Hj370o2SXlnQjIyOIx+Mn/Rk6cOBAkqqa+9atW4dnn30WFRUV6O/vx0MPPYTzzz8f+/btg8PhSHZ5c17id9PJfu6m8ntr0XS0X//61086genYr6n8g/3mN7+J8847D3V1dfiXf/kXfO1rX8MPf/jDGTyC2Tfdn9liNJXP8O6778bGjRuxcuVK3HbbbXj00Ufxk5/8ZNL2jURTcdlll+Haa6/FypUrsXXrVrz88suYmJjAb3/722SXtqgsmo52LmzFN99M52eWk5NzwgzRwcFB/bGF6lw+w3Xr1iEWi6GzsxMVFRUzUN384fF4YDQa9Z+ZhMHBwQX98zPdXC4Xli1bhvb29mSXMi8kfrYGBweRm5ur3z84OIhVq1ad8essmqDlVnxTN52f2fr16/Hd734XQ0NDyMrKAgC89tprcDqdqKqqmpb3mIvO5TPcvXs3BEHQP6/FTBRF1NfX44033tBn96uqijfeeAN33HFHcoubR4LBIA4fPowbbrgh2aXMCyUlJcjJycEbb7yhB6vf70dTU9OHXpVyrEUTtFPBrfim7sM+sy1btqCqqgo33HADfvCDH2BgYADf+MY3cPvtty+oP07OltfrRVNTEy666CI4HA54vV7cdddd+MxnPoP09PRklzcn3H333bjpppuwZs0aNDQ04LHHHkMoFMItt9yS7NLmrK9+9au48sorUVRUhL6+PjzwwAMwGo24/vrrk13anBEMBid1+B0dHdi9ezfcbjcKCwvxla98Bd/5znewdOlSlJSU4Jvf/Cby8vKmdjnnNM6MXjBuuukmDcAJX2+++aamaZr25z//WVu1apWWmpqq2e12rba2VnvyySe1eDye3MKT6MM+M03TtM7OTu2yyy7TrFar5vF4tHvuuUdTFCV5Rc8hzc3N2rp167S0tDQtJSVFq6ys1B5++GEtGo0mu7Q55Sc/+YlWWFioiaKoNTQ0aNu2bUt2SXPaddddp+Xm5mqiKGpLlizRrrvuOq29vT3ZZc0pb7755kl/d910002apn1wic83v/lNLTs7W7NYLNqmTZu0gwcPTuk9uE0eERHRDFo0s46JiIiSgUFLREQ0gxi0REREM4hBS0RENIMYtERERDOIQUtERDSDGLREREQziEFLREQ0gxi0REREM4hBS0RENIMYtEQLXH5+Pv73//7fk+579913YbPZcPTo0SRVRbR4MGiJFrh169Zhx44d+m1N0/CVr3wFd911F4qKipJYGdHiwKAlWuAaGxsnBe0vfvELdHd347777sOTTz6JVatWoaamBqIoYtWqVVi1ahWeeOKJJFZMtLBw9x6iBe4f//gHNm7cCJ/PB4PBgIqKCjz00EP47Gc/qz/n/fffx6233oqmpqaTvkY8HofRaJytkokWFHa0RAtcfX09BEHAzp078f3vfx+ZmZknbJbe0tKC6urqSfddddVV+NKXvoS1a9fimWeewerVqzE+Pg7gg3O81113HQCgra0Nl19+Oerr63HBBRdgaGhodg6MaJ5g0BItcDabDTU1Nfjd736Hf/3Xf8WPf/xjCMLkf/r79u07IWj37t2LiooK7NixAzfffDN8Ph/S09P1x2pqaiBJEr70pS/h5z//OZqbm/GpT30K//Zv/zZrx0Y0HzBoiRaBxsZG/OQnP8HWrVuxcePGEx5vaWnBihUr9NuBQADxeBx33nknAODQoUNYunSp/vi+ffuwYsUKvPjii2hpacEVV1yBVatW4X/9r/8Fs9k848dDNJ+Ykl0AEc282tpamM1m/PCHPzzp48d3tC0tLdiwYcOkx48N4vfeew9f+cpX8Mwzz+DRRx/F9ddfP3PFE81z7GiJFoEXXngBd9xxB8rLy094LBKJYHx8HPn5+fp9iaHhhLGxMbhcLgDAO++8g5aWFpSWliInJwd/+ctf9Oe9//77M3cQRPMUO1qiBUpVVQwPD+Opp55CW1sb/vjHP570ea2trVi+fPmk+/bu3YvNmzfrty+77DJ87GMfw6FDh1BUVITKykoYDAbccssteP3117F8+XJYLBZs3boVP/jBD2b0uIjmG17eQ7RA/e1vf8PFF1+M5cuX45lnnsG6deuSXRLRosSgJSIimkE8R0tERDSDGLREREQziEFLREQ0gxi0REREM4hBS0RENIMYtERERDOIQUtERDSDGLREREQziEFLREQ0gxi0REREM+j/B9nmCMGS9AGCAAAAAElFTkSuQmCC",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"perc = np.mean((pred['y_true'] > pred['ci_95_lower']) & (pred['y_true'] < pred['ci_95_upper'])) * 100\n",
"fig, axes = plt.subplots(1, 1, figsize=(5, 5))\n",
"axes.errorbar(x=pred['y_true'], y=pred['y'], yerr=2 * pred['std'], c='black', markersize=3, fmt='o', alpha=0.2)\n",
"axes.axline((0, 0), (1, 1), lw=0.5, c='grey', linestyle='--')\n",
"axes.set(\n",
" xlabel=r\"$y_{True}$\",\n",
" ylabel=r\"$y_{pred}$\",\n",
" aspect=1,\n",
" xlim=(-15, 10),\n",
" ylim=(-15, 10),\n",
")\n",
"axes.text(0.03, 0.97, 'Calibration={:.2f}%'.format(perc), transform=axes.transAxes, va='top')"
]
},
{
"cell_type": "markdown",
"id": "1367584e",
"metadata": {},
"source": [
"### How to estimate mutational effects and epistatic coefficients under the prior\n",
"\n",
"Because the posterior distribution of the sequence function relationship is also a multivariate gaussian, \n",
"\n",
"$$\n",
"f \\sim MvNormal(\\mu, \\Sigma)\n",
"$$\n",
"\n",
"We can easily compute the posterior for any linear combination represented by $B$ of a multivariate normal distribution\n",
"\n",
"$$\n",
"Bf \\sim MvNormal(B\\mu, B\\Sigma B^T)\n",
"$$\n",
"\n",
"Without any prior distribution, we can assume that $\\Sigma=D_{\\sigma^2}$ and $\\mu=y$, and use the following function to compute the posterior distribution for specific linear combinations given by the contrast matrix $B$ \n"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "6ffa31e3",
"metadata": {},
"outputs": [],
"source": [
"def make_contrasts(df, contrast_matrix):\n",
" f = df['y']\n",
" Sigma = np.diag(df['y_var'])\n",
" B = contrast_matrix.T.values\n",
" mu = B @ f\n",
" std = np.sqrt(np.diag(B @ Sigma @ B.T))\n",
" posterior = norm(mu, std)\n",
" p = posterior.cdf(0.)\n",
" p = np.max(np.vstack([p, 1-p]), axis=0)\n",
" contrasts = pd.DataFrame({'estimate': mu, 'std': std, \n",
" 'ci_95_lower': mu - 2 * std, \n",
" 'ci_95_upper': mu + 2 * std, \n",
" 'p(|x|>0)': p}, \n",
" index=contrast_matrix.columns)\n",
" return(contrasts)"
]
},
{
"cell_type": "markdown",
"id": "36d4871b",
"metadata": {},
"source": [
"Lets start by estimating mutational effects from`TTTTTT` to `TTTTTC`:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "4cd6a1cb",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"test = pred.loc[X_test, :]\n",
"r2 = pearsonr(test['y_pred'], test['y'])[0] ** 2\n",
"lim = (-9, 3)\n",
"bins = np.linspace(lim[0] + 0.5, lim[1] - 0.5, 100)\n",
"\n",
"fig, subplots = plt.subplots(1, 2, figsize=(8, 4))\n",
"\n",
"axes = subplots[0]\n",
"axes.hist2d(x=test['y_pred'], y=test['y'], cmap='binary', bins=bins)\n",
"axes.axline((0, 0), (1, 1), lw=0.5, linestyle='--', c='grey')\n",
"axes.set(xlabel=r'$y_{pred}$', ylabel=r'$y_{obs}$',\n",
" xlim=(lim[0] + 0.5, lim[1] - 0.5),\n",
" ylim=(lim[0] + 0.5, lim[1] - 0.5))\n",
"axes.text(0.05, 0.95, r'$R^2$=' + '{:.3f}'.format(r2),\n",
" transform=axes.transAxes, color='black', ha='left', va='top')\n",
"\n",
"axes = subplots[1]\n",
"axes.hist(pred.dropna()['y_pred'], label='Observed', alpha=0.3, density=True, bins=bins, color='black')\n",
"axes.hist(pred.loc[np.isnan(pred['y']), 'y_pred'], label='New', alpha=0.3, density=True, bins=bins, color='grey')\n",
"axes.set(xlabel=r'$y_{pred}$', ylabel='% of sequences')\n",
"axes.legend(loc=0)\n",
"\n",
"fig.tight_layout()"
]
},
{
"cell_type": "markdown",
"id": "7010e01d",
"metadata": {},
"source": [
"### Estimating local epistatic coefficients under the prior\n",
"\n",
"As previously shown, we are not only restricted to making calibrated predictions for previously uncharacterized or held out sequences, but we can also get calibrated estimates for linear combinations of them and use them to answer questions about specific mutational effects and how they change as we introduced more mutations.\n",
"\n",
"One of the main interactions in the GB1 dataset is that taking place between positions 41 and 54. In the wild-type sequence VDGV, G41L is highly deleterious, but becomes advantageous in the presence of V54G. Now, we can use our model to compute the posterior distribution for this epistatic coefficient given the whole dataset. \n",
"\n",
"We can select the 4 relevant sequences and show their measurement values"
]
},
{
"cell_type": "code",
"execution_count": 35,
"id": "9a36fe70",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
y
\n",
"
y_var
\n",
"
\n",
" \n",
" \n",
"
\n",
"
VDGV
\n",
"
0.000000
\n",
"
0.000027
\n",
"
\n",
"
\n",
"
VDGG
\n",
"
0.334153
\n",
"
0.003038
\n",
"
\n",
"
\n",
"
VDLV
\n",
"
-3.512487
\n",
"
0.105615
\n",
"
\n",
"
\n",
"
VDLG
\n",
"
1.140357
\n",
"
0.013197
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" y y_var\n",
"VDGV 0.000000 0.000027\n",
"VDGG 0.334153 0.003038\n",
"VDLV -3.512487 0.105615\n",
"VDLG 1.140357 0.013197"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"seqs = ['VDGV', 'VDGG', 'VDLV', 'VDLG']\n",
"df = data.loc[seqs, :]\n",
"df"
]
},
{
"cell_type": "markdown",
"id": "4b58446b",
"metadata": {},
"source": [
"We then define the contrast matrices for the coefficients of interest: the single point mutational effects as well as the epistatic coefficient between them."
]
},
{
"cell_type": "code",
"execution_count": 36,
"id": "7e2f77c2",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 3/3 [00:18<00:00, 6.08s/it]\n"
]
},
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
estimate
\n",
"
std
\n",
"
ci_95_lower
\n",
"
ci_95_upper
\n",
"
p(|x|>0)
\n",
"
\n",
" \n",
" \n",
"
\n",
"
G41L
\n",
"
-3.376735
\n",
"
0.277964
\n",
"
-3.932662
\n",
"
-2.820807
\n",
"
1.0
\n",
"
\n",
"
\n",
"
V54G
\n",
"
0.318694
\n",
"
0.055069
\n",
"
0.208557
\n",
"
0.428832
\n",
"
1.0
\n",
"
\n",
"
\n",
"
G41L:V54G
\n",
"
4.208261
\n",
"
0.303865
\n",
"
3.600531
\n",
"
4.815991
\n",
"
1.0
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" estimate std ci_95_lower ci_95_upper p(|x|>0)\n",
"G41L -3.376735 0.277964 -3.932662 -2.820807 1.0\n",
"V54G 0.318694 0.055069 0.208557 0.428832 1.0\n",
"G41L:V54G 4.208261 0.303865 3.600531 4.815991 1.0"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"contrast_matrix = pd.DataFrame({'G41L' : [-1, 0, 1, 0],\n",
" 'V54G' : [-1, 1, 0, 0],\n",
" 'G41L:V54G': [ 1, -1, -1, 1]},\n",
" index=seqs)\n",
"contrast = model.make_contrasts(contrast_matrix)\n",
"contrast"
]
},
{
"cell_type": "markdown",
"id": "93f38a16",
"metadata": {},
"source": [
"We can see that there is strong support in the posterior for the deleterious effect of G41L in the wild-type background, but also that this is strongly reversed in the presence of V54G. Lets now compare these estimates with the naive comparisons using the estimated measurement errors alone"
]
},
{
"cell_type": "code",
"execution_count": 37,
"id": "69545135",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
estimate
\n",
"
std
\n",
"
ci_95_lower
\n",
"
ci_95_upper
\n",
"
p(|x|>0)
\n",
"
\n",
" \n",
" \n",
"
\n",
"
G41L
\n",
"
-3.512487
\n",
"
0.325026
\n",
"
-4.162539
\n",
"
-2.862435
\n",
"
1.0
\n",
"
\n",
"
\n",
"
V54G
\n",
"
0.334153
\n",
"
0.055370
\n",
"
0.223413
\n",
"
0.444892
\n",
"
1.0
\n",
"
\n",
"
\n",
"
G41L:V54G
\n",
"
4.318691
\n",
"
0.349109
\n",
"
3.620472
\n",
"
5.016910
\n",
"
1.0
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" estimate std ci_95_lower ci_95_upper p(|x|>0)\n",
"G41L -3.512487 0.325026 -4.162539 -2.862435 1.0\n",
"V54G 0.334153 0.055370 0.223413 0.444892 1.0\n",
"G41L:V54G 4.318691 0.349109 3.620472 5.016910 1.0"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"make_contrasts(df, contrast_matrix)"
]
},
{
"cell_type": "markdown",
"id": "cfa8b3bf",
"metadata": {},
"source": [
"We can see how estimates are then shrunk towards 0 and uncertaintly is slightly reduced by using the prior that was estimated across the complete dataset"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "gpmap",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.18"
}
},
"nbformat": 4,
"nbformat_minor": 5
}