An R package to calculate MPN (most probable number) from IDEXX Quanti-Tray, Quanti-Tray/2000, and Quanti-Tray/Legiolert tests.
devtools::install_github("jknappe/quantitray")
library(quantitray)
Quanti-Tray tests allow to quantify bacterial counts in water samples. IDEXX Technologies offer three types of Quanti-Tray trays: Quanti-Tray (with 51 large wells), Quanti-Tray/2000 (with 49 large trays and 48 small trays), and Quanti-Tray/Legiolert (with 6 large trays and 90 small wells).
For detailed description on how to use the tests and interprete the test results, please refer to the documentation provided by the manufacturer here: https://www.idexx.com/en/water/water-products-services/quanti-tray-system/
Quanti-Tray and Quanti-Tray/2000 are used for quantifying coliforms, E. coli, enterococci, Pseudomonas aeruginosa, and Heterotrophic Plate Counts (HPC).Quanti-Tray/Legiolert is used for quantifying Legionella pneumophila.
The manufacturer provides printable lookup tables on its website to convert from well counts to bacterial counts.
The manufacturer also provides a 'Windows'-based software solution for download on its website to convert from well counts to bacterial counts.
This package offers a set of functions to convert well counts to bacterial counts in R using the lookup tables provided by the manufacturer.
This package introduces conversion functions from well counts to bacterial counts:
quantify_mpn(large, small, method)
to convert well counts to numeric point estimate MPN (in MPN/100 ml)quantify_95lo(large, small, method)
to convert well counts to numeric lower 95% confidence interval MPN (in MPN/100 ml)quantify_95hi(large, small, method)
to convert well counts to numeric upper 95% confidence interval MPN (in MPN/100 ml)
large
needs to be a positive integer representing the number of positive large wells counted (mandatory for all methods)small
needs to be a positive integer representing the number of positive small wells counted (mandatory for methods "qt-2000" and "qt-legio)method
specifies the Quanti-Tray method used: "qt" for Quanti-Tray, "qt-2000" for Quanti-Tray/2000, "qt-legio" for Quanti-Tray/Legiolert (mandatory)
To provide coherent function output (numeric values or a list of numeric values), values above and below the method detection limit are handled as follows:
- For results below the detection limit (no positive wells), the quare root of the method detection limit is returned as point estimate.
- For results above the method detection limit (all positive wells), only the lower confidence interval is returned as numeric value, whereas point estimate and upper confidence interval are returned as
NA
.
The lookup tables provided by the manufacturer can be accessed in R after the package is loaded. This might be useful to implement reverse lookups.
quanti_51
provides data for the QuantiTray (including MPN point estimate and 95% confidence intervals)quanti_96
provides data for the QuantiTray/Legiolert (only MPN point estimate; confidence intervals are not provided)quanti_97
provides data for the QuantiTray/2000 (including MPN point estimate and 95% confidence intervals)
The conversion functions can be used to convert a single result. Note, that when using the Quanti-Tray test with 51 wells (argument method = "qt"
), only large wells (argument large
) need to be defined.
library(quantitray)
# Quanti-Tray test with 51 wells
quantify_mpn(large = 42, method = "qt")
## [1] 88.5
# Quanti-Tray/2000 test with 97 wells
quantify_mpn(large = 42, small = 23, method = "qt-2000")
## [1] 156.13
# Quanti-Tray/Legiolert test with 96 wells
quantify_mpn(large = 5, small = 23, method = "qt-legio")
## [1] 78.8
Note, that when using the Quanti-Tray/Legiolert test with 96 wells (argument method = "qt-legio"
), confidence intervals cannot be calculated (as the lookup tables provided by the manufacturer only include information for the point estimate).
library(quantitray)
# Quanti-Tray test with 51 wells
quantify_95lo(large = 42, method = "qt")
## [1] 63.9
# Quanti-Tray test with 51 wells
quantify_95hi(large = 42, method = "qt")
## [1] 126.2
# Quanti-Tray/2000 test with 97 wells
quantify_95lo(large = 42, small = 23, method = "qt-2000")
## [1] 120.45
# Quanti-Tray/2000 test with 97 wells
quantify_95hi(large = 42, small = 23, method = "qt-2000")
## [1] 200.41
All conversions are vectorized and can be used within pipes.
library(quantitray)
library(tidyverse)
counts_qt2000 <-
tibble(l_well = seq(0, 4, 1), s_well = seq(0, 8, 2))
results_qt2000 <-
counts_qt2000 %>%
mutate(qt_95lo = quantify_95lo(l_well, s_well, "qt-2000"),
qt_mpn = quantify_mpn(l_well, s_well, "qt-2000"),
qt_95hi = quantify_95hi(l_well, s_well, "qt-2000"))
results_qt2000
## # A tibble: 5 x 5
## l_well s_well qt_95lo qt_mpn qt_95hi
## <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 0 0 0 0 3.67
## 2 1 2 0.62 3.01 7.33
## 3 2 4 2.32 6.09 12.1
## 4 3 6 4.42 9.24 16.9
## 5 4 8 6.94 12.5 20.5