An open API service indexing awesome lists of open source software.

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

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-"
)
```

# designit

[![Lifecycle: experimental](https://img.shields.io/badge/lifecycle-experimental-orange.svg)](https://lifecycle.r-lib.org/articles/stages.html#experimental)
[![Documentation](https://img.shields.io/badge/docs-pkgdown-blue.svg)](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
[![Designit: a flexible engine to generate experiment layouts, R in Pharma presentation](https://img.youtube.com/vi/mvPmSQJVy8o/0.jpg)](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).