Bacteria and Their Most Probable Mumber (MPN)

Analyzing drinking water or food for viable bacteria and other microbes is important to prevent epidemic infections. In practice it can be difficult to count the number of viable bacteria directly. It is thus common to set-up a dilution series of the bacterial sample with multiple replicates at each dilution step in dedicated tubes or microplate wells. The actual measurement then reveals whether there was growth in the wells or not. The most probable number (MPN) method is a statistical method to estimate the number of viable cells in the original sample, i.e. it estimates its bacterial density. The assumption of the analysis is that whenever there is one or more bacteria present in a dilution, it exhibits growth. Another assumption is that the bacteria are randomly and homogeneously distributed in the sample (an assumption which might be violated to some extent in practice).

Assume we have a liquid of volume V with (a yet unknown) bacterial density \delta=N/V and we take a sample of volume v of this liquid and incubate it in a bacterial growth medium. N denotes the number of bacteria in the liquid. The probability that our sample does not contain any bacterium (i.e. sterile) is:

    \[p = \left(1-\frac{v}{V} \right)^N\]

Compare the calculation of this probability to a problem that is often stated and hated in statistics classes. Rolling a dice N times and calculating the probability of not throwing a single 6, given the probability p_6=1/6 of throwing a 6 in one dice roll:

    \[p = \left(1-p_6\right)^N\]

Thus, v/V in the penultimate equation corresponds to the probability of having a single bacterium in the sample of volume v. v is typically small compared to V and \left(1-\frac{v}{V} \right)^N can well be approximated by an exponential:

    \[p = \left(1-\frac{v}{V} \right)^N \approx \exp(-v N/V) = \exp(-v \delta)\]

Let’s now assume we took n samples each of volume v. The probability of observing s sterile and correspondingly n-s fertile samples is:

    \[P(s|\delta) = \binom{n}{s} p^s p^{n-s} = \binom{n}{s} \exp(-s v \delta)\left(1-\exp(-v \delta)\right)^{n-s}\]

This probability P(s|\delta) is a function of the bacterial density \delta that has a maximum at the most probable number of \delta. We can find \delta by maximizing the log-likelihood of this function (while ignoring the binomial coefficient \binom{n}{s}) which leads us to the following eqaution:

    \[\frac{\left(n-s\right)v\exp(-v\delta)}{1-\exp(-v\delta)} -sv= 0\]

We’d need to find the root w.r.t. \delta to get our most probable number. In practice, however, a single dilution level with multiple samples (as was assumed above) often results in all tubes being either fertile (s=0) or sterile (s=n). This would result in the trivial roots \delta \rightarrow \infty and \delta=0, respectively, being useless. Therefore multiple dilutions with multiple replicates are applied and we come-up with a more general root-equation:

    \[\sum_{k=1}^{D}\left(\frac{\left(n_k-s_k\right)v_k\exp(-v_k\delta)}{1-\exp(-v_k\delta)} -sv_k\right)= 0\]

where D denotes the number of dilution levels. In practice, D=3 is quite common but D can be bigger of course. The number of replicate tubes often depends on the sample format and whether they are measured in test tubes or microplates. In the latter case 8 replicates per dilution level are commonly used as 96 well plates (8 rows, 12 columns) is an often used plate format.

Below you can find an Excel LAMBDA function that calculates the most probable number (MPN) based on the input of an array n for the number of replicates per dilution level, an array s for the number of sterile replicates and an array v for the volumes of the original sample in the corresponding dilution (in ml). You can optionally set the stats-variable to TRUE to also get the confidence intervals for the MPN.

=LAMBDA(n,s,v,[d0],[stats], LET(
url,"https://dataanalysistools.de",
d0,IF(ISOMITTED(d0),1,d0),
stats, IF(ISOMITTED(stats),FALSE,stats),
iter, SEQUENCE(200),
result, REDUCE(d0, iter, LAMBDA(acc,value, acc + (SUM((n-s)*v/(EXP(v*acc)-1))-SUM(s*v))/(SUM(n*v^2/(EXP(v*acc)-1))))),
fisher, SUM(n*v^2/(EXP(v*result)-1)),
cilow, result/EXP(1.96/(SQRT(fisher)*result)),
cihigh, result*EXP(1.96/(SQRT(fisher)*result)),
IF(stats,HSTACK(result,cilow,cihigh),result)))

Open the Name Manager under Formulas in Excel, create a new variable/formula that you name MPN and copy the code into the text field next to Refers to:. Then you can use this formula in Excel. Please note that LAMBDA-functions can only be created in Office 365.

The data obtained in these dilution assays is closely related to data obtained with quantal dose-response assays (see https://dataanalysistools.de/2023/09/21/analysis-of-bioassays/) and are sometimes also analyzed by using the Spearman-Kärber method, a non-parametric method to analyyze quantal response data (see https://dataanalysistools.de/2020/05/05/spearman-kaerber-analysis-and-the-creutzfeld-jakob-disease/).

Dr. Mario Schneider

Mario is an analytical chemist with a strong focus on chemometrics and scientific data analysis. He holds a PhD in biophysics and is the author of a book on data analysis for scientists. In his spare time he is a MATLAB, R, Excel and Python enthusiast and experiments with machine learning algorithms.

Leave a Reply