BKMutate

Statistical Analysis of Induced Mutagenesis Experiments in Crop Plants

BKMutate is an R package for the statistical analysis of mutation breeding experiments — gamma rays, EMS, sodium azide and any other physical or chemical mutagen. Every analysis returns a tidy result object and a publication-ready colour figure through a single verb, bm_plot().


What makes it different

Mutagenic effectiveness and efficiency are the two numbers on which every mutation-breeding paper turns — and they are almost universally reported as bare point estimates, with no indication of uncertainty.

BKMutate treats them as what they actually are:

This lets you say whether two mutagens really differ, instead of comparing two numbers and hoping.

The package also uses Fieller’s theorem for LD50 confidence intervals — the correct, asymmetric interval for a ratio of two correlated coefficients — rather than the symmetric delta approximation used by most software.


Install

# from CRAN (after release)
install.packages("BKMutate")

# development version
# remotes::install_github("bkpraveenars-del/BKMutate")

Depends only on ggplot2. No compiled code, so no Rtools needed.


The five analyses

Function Analysis Answers
bm_dose() Dose-response, LD50 / GR50 + Fieller CI What dose kills half the population?
bm_effect() Effectiveness & efficiency with CIs Which mutagen gives most mutations per unit damage?
bm_spectrum() Chlorophyll mutation spectrum Which mutant classes does each mutagen induce?
bm_m2() Poisson / quasi-Poisson GLM for M2 counts Is the mutation rate really different?
bm_compare() Mutagen comparison, RBE Is mutagen A significantly better than B?

Quick tour

library(BKMutate)

## 1. LD50 with Fieller intervals
d   <- bm_data("dose")
ld  <- bm_dose(d, dose = "dose", n_total = "n_treated",
               n_affected = "n_survived", mutagen = "mutagen")
ld;  bm_plot(ld)

## 2. Effectiveness and efficiency WITH confidence intervals
m   <- bm_data("m2")
ef  <- bm_effect(m, mutagen = "mutagen", dose = "dose",
                 m2_total = "M2_plants", m2_mutants = "M2_mutants",
                 lethality_n = "lethality_n", lethality_x = "lethality_x",
                 sterility_n = "sterility_n", sterility_x = "sterility_x",
                 injury = "injury_pct")
ef
bm_plot(ef)                      # effectiveness with confidence bands
bm_plot(ef, type = "efficiency") # efficiency with error bars

## 3. Chlorophyll mutation spectrum
s   <- bm_spectrum(bm_data("spectrum"), "mutagen",
                   c("albina","xantha","chlorina","viridis"), "dose")
s;  bm_plot(s)

## 4. M2 counts with overdispersion handled properly
cts <- bm_m2(bm_data("counts"), "mutants", "mutagen", "dose", "plants")
cts; bm_plot(cts)

## 5. Formal comparison of mutagens
cmp <- bm_compare(ef, dose_fit = ld, reference = "Gamma")
cmp; bm_plot(cmp)

Data format (long format, one row per treatment)

Dose-responsemutagen, dose, n_treated, n_survived (or a continuous seedling_height for GR50)

M1 damage + M2 mutationmutagen, dose, M2_plants, M2_mutants, lethality_n, lethality_x, sterility_n, sterility_x, injury_pct

Spectrummutagen, dose, albina, xantha, chlorina, viridis

M2 family countsmutagen, dose, family, plants, mutants

Column names are yours to choose; you tell each function which is which.


Interpreting the key numbers


Bundled example data

bm_data("dose") · bm_data("m2") · bm_data("spectrum") · bm_data("counts")

Three mutagens (gamma rays in kR, EMS in %, sodium azide in mM) across five doses each. These are synthetic benchmark datasets generated from known parameters with a fixed seed, so the true LD50 and mutation rates are known and estimates can be checked against them.


License

GPL-3. Author: Dr. Praveen Kumar B. K., Department of Genetics and Plant Breeding, Agriculture University, Jodhpur, India.