MyNixOS website logo
Description

Analysis of Broth Microdilution Assays.

A framework for analyzing broth microdilution assays in various 96-well plate designs, visualizing results and providing descriptive and (simple) inferential statistics (i.e. summary statistics and sign test). The functions are designed to add metadata to 8 x 12 tables of absorption values, creating a tidy data frame. Users can choose between clean-up procedures via function parameters (which covers most cases) or user prompts (in cases with complex experimental designs). Users can also choose between two validation methods, i.e. exclusion of absorbance values above a certain threshold or manual exclusion of samples. A function for visual inspection of samples with their absorption values over time for certain group combinations helps with the decision. In addition, the package includes functions to subtract the background absorption (usually at time T0) and to calculate the growth performance compared to a baseline. Samples can be visually inspected with their absorption values displayed across time points for specific group combinations. Core functions of this package (i.e. background subtraction, sample validation and statistics) were inspired by the manual calculations that were applied in Tewes and Muller (2020) <doi:10.1038/s41598-020-67600-7>.

microdiluteR

GitHub R packageversion GitHubLicense R CMDcheck codecov GitHub commitactivity SayThanks

:notebook: Background

The microdiluteR package is designed to help researchers tidy up data from photometer plates and provides functions to easily add metadata, regardless of whether the user is processing a single plate or multiple plates with complex metadata structures. This package was developed with a special focus on the analysis of broth microdilution assays. A detailed tutorial can be found here.

:floppy_disk: Installation

You can install the development version of microdiluteR from GitHub with:

# install.packages("devtools") # if not installed already
devtools::install_github("silvia-eckert/microdiluteR")

:joystick: Usage

You can load microdiluteR as follows:

library(microdiluteR)

Let’s try out the main function tidy_plates() with example data:

data(bma)
bma[1] # file name is bma_grp1_exp2_T0
#> $bma_grp1_exp2_T0
#>       1     2     3     4     5     6     7     8     9    10    11    12
#> A 0.342 0.354 0.360 0.360 0.352 0.363 0.361 0.352 0.356 0.351 0.366 0.375
#> B 0.362 0.391 0.375 0.363 0.383 0.366 0.380 0.378 0.339 0.387 0.377 0.362
#> C 0.344 0.346 0.345 0.347 0.350 0.356 0.348 0.343 0.348 0.351 0.351 0.353
#> D 0.361 0.367 0.351 0.364 0.353 0.362 0.361 0.367 0.363 0.356 0.357 0.355
#> E 0.388 0.473 0.400 0.358 0.388 0.340 0.335 0.396 0.411 0.404 0.397 0.407
#> F 0.456 0.465 0.469 0.469 0.462 0.468 0.455 0.477 0.487 0.488 0.498 0.471
#> G 0.334 0.340 0.357 0.332 0.329 0.342 0.333 0.317 0.360 0.332 0.335 0.328
#> H 0.334 0.332 0.339 0.333 0.339 0.334 0.342 0.335 0.361 0.327 0.330 0.341

For the example data, the corresponding metadata is stored as an attribute:

attr(bma, "metadata")
#>   plate_axis treatment concentration
#> 1          A       10%       100 ppm
#> 2          B       10%       200 ppm
#> 3          C       30%       100 ppm
#> 4          D       30%       200 ppm
#> 5          E      100%       100 ppm
#> 6          F      100%       200 ppm
#> 7          G   Control       100 ppm
#> 8          H   Control       200 ppm

Let’s add the metadata and create a tidy data frame for further processing:

tidy_data <- tidy_plates(bma[1],
                         how_many = "single",
                         direction = "horizontal",
                         validity_method = "threshold",
                         threshold = 0.355, # values above this are set as invalid
                         group_ID = "Group 1", # optional
                         experiment_name = "Experiment A", # optional
                         treatment_labels = rep(c("10%", "30%", "100%", "Control"), each = 2),
                         concentration_levels = rep(c(100,200), times = 4))

# Let's rename some columns for convenience
names(tidy_data)[names(tidy_data) == 'Position'] <- 'Pos'
names(tidy_data)[names(tidy_data) == 'Value'] <- 'Val'
names(tidy_data)[names(tidy_data) == 'Treatment'] <- 'Treat'
names(tidy_data)[names(tidy_data) == 'Concentration'] <- 'Conc'
names(tidy_data)[names(tidy_data) == 'Timepoint'] <- 'TP'

This is the resulting table:

tidy_data
#> # A tibble: 96 × 9
#>    Pos     Val Validity Treat  Conc TP    File             Group   Experiment  
#>    <chr> <dbl> <chr>    <chr> <dbl> <chr> <chr>            <chr>   <chr>       
#>  1 A-1   0.342 valid    10%     100 T0    bma_grp1_exp2_T0 Group 1 Experiment A
#>  2 A-2   0.354 valid    10%     100 T0    bma_grp1_exp2_T0 Group 1 Experiment A
#>  3 A-3   0.36  invalid  10%     100 T0    bma_grp1_exp2_T0 Group 1 Experiment A
#>  4 A-4   0.36  invalid  10%     100 T0    bma_grp1_exp2_T0 Group 1 Experiment A
#>  5 A-5   0.352 valid    10%     100 T0    bma_grp1_exp2_T0 Group 1 Experiment A
#>  6 A-6   0.363 invalid  10%     100 T0    bma_grp1_exp2_T0 Group 1 Experiment A
#>  7 A-7   0.361 invalid  10%     100 T0    bma_grp1_exp2_T0 Group 1 Experiment A
#>  8 A-8   0.352 valid    10%     100 T0    bma_grp1_exp2_T0 Group 1 Experiment A
#>  9 A-9   0.356 invalid  10%     100 T0    bma_grp1_exp2_T0 Group 1 Experiment A
#> 10 A-10  0.351 valid    10%     100 T0    bma_grp1_exp2_T0 Group 1 Experiment A
#> # ℹ 86 more rows

:heart: Logo generated with hexSticker.

Metadata

Version

1.0.1

License

Unknown

Platforms (75)

    Darwin
    FreeBSD
    Genode
    GHCJS
    Linux
    MMIXware
    NetBSD
    none
    OpenBSD
    Redox
    Solaris
    WASI
    Windows
Show all
  • aarch64-darwin
  • aarch64-genode
  • aarch64-linux
  • aarch64-netbsd
  • aarch64-none
  • aarch64_be-none
  • arm-none
  • armv5tel-linux
  • armv6l-linux
  • armv6l-netbsd
  • armv6l-none
  • armv7a-darwin
  • armv7a-linux
  • armv7a-netbsd
  • armv7l-linux
  • armv7l-netbsd
  • avr-none
  • i686-cygwin
  • i686-darwin
  • i686-freebsd
  • i686-genode
  • i686-linux
  • i686-netbsd
  • i686-none
  • i686-openbsd
  • i686-windows
  • javascript-ghcjs
  • loongarch64-linux
  • m68k-linux
  • m68k-netbsd
  • m68k-none
  • microblaze-linux
  • microblaze-none
  • microblazeel-linux
  • microblazeel-none
  • mips-linux
  • mips-none
  • mips64-linux
  • mips64-none
  • mips64el-linux
  • mipsel-linux
  • mipsel-netbsd
  • mmix-mmixware
  • msp430-none
  • or1k-none
  • powerpc-netbsd
  • powerpc-none
  • powerpc64-linux
  • powerpc64le-linux
  • powerpcle-none
  • riscv32-linux
  • riscv32-netbsd
  • riscv32-none
  • riscv64-linux
  • riscv64-netbsd
  • riscv64-none
  • rx-none
  • s390-linux
  • s390-none
  • s390x-linux
  • s390x-none
  • vc4-none
  • wasm32-wasi
  • wasm64-wasi
  • x86_64-cygwin
  • x86_64-darwin
  • x86_64-freebsd
  • x86_64-genode
  • x86_64-linux
  • x86_64-netbsd
  • x86_64-none
  • x86_64-openbsd
  • x86_64-redox
  • x86_64-solaris
  • x86_64-windows