https://github.com/bedapub/designit
Blocking and randomization for experimental design
https://github.com/bedapub/designit
design-of-experiments randomization rstats
Last synced: 22 days ago
JSON representation
Blocking and randomization for experimental design
- Host: GitHub
- URL: https://github.com/bedapub/designit
- Owner: bedapub
- License: other
- Created: 2022-10-13T09:23:40.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2026-01-14T12:40:39.000Z (about 2 months ago)
- Last Synced: 2026-01-14T16:46:17.491Z (about 2 months ago)
- Topics: design-of-experiments, randomization, rstats
- Language: HTML
- Homepage: https://bedapub.github.io/designit/
- Size: 24.9 MB
- Stars: 8
- Watchers: 5
- Forks: 1
- Open Issues: 21
-
Metadata Files:
- Readme: README.Rmd
- Changelog: NEWS.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
---
output:
github_document:
fig_width: 5
fig_height: 3
---
```{r, include = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
fig.path = "man/figures/README-"
)
```
[](https://lifecycle.r-lib.org/articles/stages.html#experimental)
[](https://bedapub.github.io/designit/)
The goal of designit is to generate optimal sample allocations for experimental designs.
## Installation
Install the released version of rlang from CRAN:
```{r echo=TRUE, eval=FALSE}
install.packages("designit")
```
You can install the development version from GitHub with:
```{r echo=TRUE, eval=FALSE}
# install.packages("devtools")
devtools::install_github("BEDApub/designit")
```
## Usage
### R in Pharma presentation
[](https://www.youtube.com/watch?v=mvPmSQJVy8o "Designit: a flexible engine to generate experiment layouts")
### Batch container
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.
### Creating a table with sample information
```{r samples_table, message=FALSE}
library(tidyverse)
library(designit)
data("longitudinal_subject_samples")
# we use a subset of longitudinal_subject_samples data
subject_data <- longitudinal_subject_samples %>%
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)
```
### Creating a `BatchContainer` and assigning samples
```{r random_assignment}
# a batch container with 3 batches and 11 locations per batch
bc <- BatchContainer$new(
dimensions = list("batch" = 3, "location" = 11),
)
# assign samples randomly
set.seed(17)
bc <- assign_random(bc, subject_data)
bc$get_samples() %>%
ggplot() +
aes(x = batch, fill = Group) +
geom_bar()
```
Random assignmet of samples to batches produced an uneven distribution.
### Optimizing the assignemnt
```{r optimized_assignment, warning=FALSE}
# set scoring functions
scoring_f <- list(
# 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")
)
bc <- optimize_design(
bc, scoring = scoring_f, max_iter = 150, quiet = TRUE
)
bc$get_samples() %>%
ggplot() +
aes(x = batch, fill = Group) +
geom_bar()
# show optimization trace
bc$plot_trace()
```
## Examples
See vignettes `vignette("basic_examples")`.
## Acknowledgement
The logo is inspired by [DALL-E 2](https://openai.com/dall-e-2/) and
[pipette icon by gsagri04](https://openclipart.org/detail/140941/micropipette).