A colour-first toolkit for the statistical analysis of induced
mutagenesis experiments in crop plants. It fits dose-response models to
physical and chemical mutagen data and estimates the median lethal and
growth-reduction doses (LD50, GR50) with confidence intervals obtained
from Fieller's theorem; quantifies first-generation biological damage
(lethality, injury and pollen sterility); and estimates mutagenic
effectiveness and mutagenic efficiency. Effectiveness and efficiency are
conventionally reported as point estimates only; this package treats
them as functions of binomial proportions and supplies interval estimates
by the delta method on the logarithmic scale and by the nonparametric
bootstrap. It further provides chlorophyll mutation spectrum analysis with
tests of homogeneity and diversity, generalised linear models for
second-generation mutant counts with formal assessment of overdispersion,
and formal comparison of mutagens including relative biological
effectiveness. Every analysis returns a tidy result object and a
publication-ready 'ggplot2' figure. Methods follow Konzak et al. (1965,
ISBN:9789201150653), Fieller (1954)
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().
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.
# 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.
| 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? |
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)
Dose-response — mutagen, dose, n_treated, n_survived
(or a continuous seedling_height for GR50)
M1 damage + M2 mutation — mutagen, dose, M2_plants, M2_mutants,
lethality_n, lethality_x, sterility_n, sterility_x, injury_pct
Spectrum — mutagen, dose, albina, xantha, chlorina, viridis
M2 family counts — mutagen, dose, family, plants, mutants
Column names are yours to choose; you tell each function which is which.
bm_m2() → counts are overdispersed; quasi-Poisson
standard errors are used automatically, because Poisson would overstate
significance.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.
GPL-3. Author: Dr. Praveen Kumar B. K., Department of Genetics and Plant Breeding, Agriculture University, Jodhpur, India.