Memory in microbes: quantifying history-dependent behavior in a bacterium
(step 3–estimate memory in higher dimensions): The third step of the algorithm is to estimate the short and long-term memory exhibited by the combined activities of pairs of observables and by the triple of observables. To do this, we first used the script in S2.3 to combine cluster vectors from multiple read-outs. This script takes as its input two cluster vectors Clust1 and Clust2 and outputs a combined cluster vector Clust3 (e.g., if Clust1 = ClustSpo_short; and Clust2 = ClustAprE_short; then the output Clust3 is a vector capturing all combined short-term behaviors of Spo and AprE, for example (Spo,AprE) = (increasing, decreasing), (increasing, increasing) or (decreasing, decreasing)). Next, by calling Entropy_MutualInfo.m with inputs A = (the cell history vector M), and B = (the combined cluster vector Clust3), we calculate the mutual information between cell history and cell behavior, and thus the memory exhibited by the combined activity of the vector of observables contributing to Clust3. After computing short- and long-term memory for all four possible vector combinations of the observables, these estimates were divided by H(M) to estimate memory fidelities and normalized according to Definition (6) in Methods to estimate memory orthogonalities. Finally, we (step 4) calculated the mutual information between all pairs of observables using the cluster vectors from (step 1) as inputs to Entropy_MutualInfo.m.
We took this fixed-interval, clustering-based approach because of our desire to focus on how different cell histories can lead to qualitatively different stress response behaviors, and because a much larger data set would be required to use algorithms such as that suggested by Swinney to estimate mutual information at measurement intervals short enough to avoid excessive ‘blurring’ of the time series dynamics [74], [75]. See Section S3 in Supplemental Information for a detailed discussion of alternative approaches and why we chose the one we did, and Section S2 for Matlab scripts and programs, including a note on a bootstrap method for calculating confidence intervals that one could apply to data sets with a sufficient number of replicates (not present in this data set).