The goal of designit is to generate optimal sample allocations for experimental designs.
You can install the development version from GitHub with:
# install.packages("devtools")
::install_github("BEDApub/designit") devtools
The main class used is BatchContainer
, which holds the
dimensions for sample allocation. After creating such a container, a
list of samples can be allocated in it using a given assignment
function.
library(tidyverse)
library(designit)
data("longitudinal_subject_samples")
# we use a subset of longitudinal_subject_samples data
<- longitudinal_subject_samples %>%
subject_data filter(Group %in% 1:5, Week %in% c(1,4)) %>%
select(SampleID, SubjectID, Group, Sex, Week) %>%
# with two observations per patient
group_by(SubjectID) %>%
filter(n() == 2) %>%
ungroup() %>%
select(SubjectID, Group, Sex) %>%
distinct()
head(subject_data)
#> # A tibble: 6 × 3
#> SubjectID Group Sex
#> <chr> <chr> <chr>
#> 1 P01 1 F
#> 2 P02 1 M
#> 3 P03 1 M
#> 4 P04 1 F
#> 5 P19 1 M
#> 6 P20 1 F
BatchContainer
and assigning samples# a batch container with 3 batches and 11 locations per batch
<- BatchContainer$new(
bc dimensions = list("batch" = 3, "location" = 11),
)
# assign samples randomly
set.seed(17)
<- assign_random(bc, subject_data)
bc
$get_samples() %>%
bcggplot() +
aes(x = batch, fill = Group) +
geom_bar()
Random assignmet of samples to batches produced an uneven distribution.
# set scoring functions
<- list(
scoring_f # first priority, groups are evenly distributed
group = osat_score_generator(batch_vars = "batch",
feature_vars = "Group"),
# second priority, sexes are evenly distributed
sex = osat_score_generator(batch_vars = "batch",
feature_vars = "Sex")
)
<- optimize_design(
bc scoring = scoring_f, max_iter = 150, quiet = TRUE
bc,
)
$get_samples() %>%
bcggplot() +
aes(x = batch, fill = Group) +
geom_bar()
# show optimization trace
$plot_trace() bc
See vignettes vignette("basic_examples")
.
The logo is inspired by DALL-E 2 and pipette icon by gsagri04.