Code repository corresponding to paper "Detecting differential growth of microbial populations with Gaussian process regression."
- git (or download repository as tarball)
- python (virtualenv recommended)
git clone https://github.com/ptonner/gp_growth_phenotype.git
virtualenv .
source bin/activate
pip install -r requirements.txt
Input to the B-GREAT method should come from two dataframes, data (n x p) and meta (p x k) where n, p, and k are:
- n: number of time-points
- p: number of time-course measurements (replicates)
- k: number of covariates to be tested, e.g. strain, condition.
The index of data is assumed to be the time column. Each row of meta should correspond to a single column of data, e.g. the number of columns in data should equal the number of rows in meta.
import pandas as pd
data = pd.read_csv("path/to/data.csv",index_col=0)
meta = pd.read_csv("path/to/meta.csv")
assert data.shape[1] == meta.shape[0]
These two variables should then be given to bgreat for use in analysis.
import bgreat
bgreat.setGlobals(_data=data,_meta=meta)
For a single effect on growth, a single column in meta will be used for testing differential growth. meta should include a column called strain that defines the strain being growth in each column of data. A specific value in the strain column should correspond to the 'parent' or 'control' strain, and is given to bgreat through the setGlobals
function. Additionally, a column should be added to meta called "strain-regression"
which represents the column used in building the GP regression model. It should contain 1's and 0's corresponding to a non-parent or parent strain sample, respectively.
parent = 'my-parent'
meta['strain-regression'] = (meta.strain!=parent).astype(int)
bgreat.setGlobals(_parent=parent,_control=control)
A list of mutants can then be given to calculate the Bayes factor score, with permutation testing and FDR calculation.
mutants = ['m1','m2',...]
results = testMutants(mutants)
Interaction testing requires an additional variable, the control condition, as well as two additional columns in meta - "condition"
and "interaction"
control = 'my-control'
meta['interaction'] = ((meta.Condition!=control) & (meta.strain!=parent)).astype(int)
meta['condition'] = (meta.Condition!=control).astype(int)
bgreat.setGlobals(_control=control,_meta=meta)
results = bgreat.testMutantCondition(mutants)