`optimize_multi_plate_design` does not optimize within plate distribution of covariates
- Dominant language
- HTML
- Stars
- 9
- Forks
- 1
- Avg merge
- 10h 23m
- Merged PRs (30d)
- 4
Description
`optimize_multi_plate_design` does not really optimize within plate distribution of covariates. Instead, clusters form.
Replacing the parameters p = 1 and penalize_lines = "none" fixes the issue but these cannot be set in optimize_multi_plate_design
Example
```r
samples <- structure(list(Subject.Number = c(1, 2, 3, 3, 4, 4, 5, 5, 6,
7, 7, 8, 8, 9, 10, 10, 11, 12, 13, 13, 14, 14, 15, 15, 16, 17,
17, 18, 18, 19, 19, 20, 21, 21, 22, 22, 23, 24, 25, 26, 26, 27,
27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
42, 43, 43, 44, 44, 45, 46, 46, 47, 48, 49, 50, 51, 52, 53, 54,
55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68), Gender = c("Male",
"Male", "Female", "Female", "Male", "Male", "Male", "Male", "Male",
"Male", "Male", "Male", "Male", "Male", "Male", "Male", "Male",
"Female", "Female", "Female", "Female", "Female", "Male", "Male",
"Female", "Female", "Female", "Female", "Female", "Female", "Female",
"Female", "Male", "Male", "Male", "Male", "Male", "Male", "Male",
"Male", "Male", "Male", "Male", "Male", "Male", "Male", "Male",
"Male", "Female", "Female", "Male", "Female", "Male", "Male",
"Male", "Female", "Male", "Male", "Male", "Female", "Female",
"Female", "Female", "Male", "Female", "Female", "Male", "Female",
"Male", "Male", "Male", "Female", "Female", "Male", "Male", "Male",
"Female", "Female", "Male", "Male", "Female", "Male", "Male",
"Male", "Male", "Female", "Female", "Female"), Timepoint = c("DAY 1",
"DAY 1", "DAY 1", "DAY 168", "DAY 1", "DAY 168", "DAY 1", "DAY 112",
"DAY 1", "DAY 1", "DAY 112", "DAY 1", "DAY 112", "DAY 1", "DAY 1",
"DAY 112", "DAY 1", "DAY 1", "DAY 1", "DAY 168", "DAY 1", "DAY 112",
"DAY 1", "DAY 112", "DAY 1", "DAY 1", "DAY 112", "DAY 1", "DAY 112",
"DAY 1", "DAY 112", "DAY 1", "DAY 1", "DAY 112", "DAY 1", "DAY 112",
"DAY 1", "DAY 1", "DAY 1", "DAY 1", "DAY 112", "DAY 1", "DAY 112",
"DAY 1", "DAY 1", "DAY 1", "DAY 1", "DAY 1", "DAY 1", "DAY 1",
"DAY 1", "DAY 1", "DAY 1", "DAY 1", "DAY 1", "DAY 1", "DAY 1",
"DAY 1", "DAY 168", "DAY 1", "DAY 112", "DAY 1", "DAY 112", "DAY 1",
"DAY 1", "DAY 112", "DAY 1", "DAY 1", "DAY 1", "DAY 1", "DAY 1",
"DAY 1", "DAY 1", "DAY 1", "DAY 1", "DAY 1", "DAY 1", "DAY 1",
"DAY 1", "DAY 1", "DAY 1", "DAY 1", "DAY 1", "DAY 1", "DAY 1",
"DAY 1", "DAY 1", "DAY 1"), Site = c("350545", "350545", "350545",
"350545", "350545", "350545", "350545", "350545", "350545", "350545",
"350545", "350545", "350545", "350545", "350545", "350545", "350545",
"350545", "350545", "350545", "350545", "350545", "350545", "350545",
"350545", "350545", "350545", "350545", "350545", "350545", "350545",
"350545", "350545", "350545", "350545", "350545", "350545", "350545",
"350545", "350545", "350545", "350545", "350545", "350545", "350545",
"350545", "350545", "350545", "350545", "350545", "350545", "350545",
"350545", "356312", "356312", "356312", "356312", "356312", "356312",
"356312", "356312", "356312", "356312", "356312", "356312", "356312",
"356312", "356312", "356312", "356312", "356312", "356312", "356312",
"356312", "356312", "356312", "356312", "356312", "356312", "356312",
"356312", "356312", "356312", "356312", "356312", "356312", "356312",
"356312"), Previous_treatment = c("Tx naive", "Pre-treated",
"Tx naive", "Tx naive", "Pre-treated", "Pre-treated", "Pre-treated",
"Pre-treated", "Pre-treated", "Pre-treated", "Pre-treated", "Pre-treated",
"Pre-treated", "Tx naive", "Pre-treated", "Pre-treated", "Pre-treated",
"Pre-treated", "Tx naive", "Tx naive", "Tx naive", "Tx naive",
"Tx naive", "Tx naive", "Tx naive", "Tx naive", "Tx naive", "Tx naive",
"Tx naive", "Tx naive", "Tx naive", "Tx naive", "Tx naive", "Tx naive",
"Pre-treated", "Pre-treated", "Tx naive", "Tx naive", "Pre-treated",
"Tx naive", "Tx naive", "Tx naive", "Tx naive", "Tx naive", "Tx naive",
"Tx naive", "Pre-treated", "Pre-treated", "Pre-treated", "Pre-treated",
"Pre-treated", "Pre-treated", "Tx naive", "Tx naive", "Pre-treated",
"Pre-treated", "Pre-treated", "Pre-treated", "Pre-treated", "Pre-treated",
"Pre-treated", "Pre-treated", "Pre-treated", "Pre-treated", "Pre-treated",
"Pre-treated", "Pre-treated", "Tx naive", "Pre-treated", "Pre-treated",
"Tx naive", "Tx naive", "Tx naive", "Tx naive", "Tx naive", NA,
"Pre-treated", "Pre-treated", "Pre-treated", "Tx naive", "Tx naive",
"Pre-treated", "Pre-treated", "Pre-treated", "Pre-treated", "Pre-treated",
"Pre-treated", "Tx naive")), row.names = c(NA, -88L), class = "data.frame")
# make batch container
bc <- BatchContainer$new(
dimensions = list(
"plate" = 1,
"row" = list(values =c(1:8)),
"column" = list(values = c(1:11))
)
)
# initial assignment
bc <- assign_in_order(bc, samples)
# factors to balance
balance_variables <- c("Site", "Timepoint", "Previous_treatment", "Gender")
# running the wrapper
bc1 <- optimize_multi_plate_design(bc,
within_plate_variables = balance_variables,
plate = "plate",
row = "row",
column = "column",
n_shuffle = 2,
max_iter = 3000,
quiet = TRUE
)
# plot site
print(plot_plate(bc$get_samples(remove_empty_locations = FALSE),
column = column, row = row,
.color = Site)
# running it manually
# set scoring function for each balance variable
scoring_funcs <- purrr::map(
balance_variables,
~ mk_plate_scoring_functions(bc, row = "row", column = "column", group = .x, p = 1, penalize_lines = "none")
) %>% unlist()
names(scoring_funcs) <- balance_variables
bc2 <- optimize_design(
bc,
scoring = scoring_funcs,
max_iter = 3000,
quiet = TRUE,
acceptance_func = accept_leftmost_improvement
)
# plot site
print(plot_plate(bc$get_samples(remove_empty_locations = FALSE),
column = column, row = row,
.color = Site)
```
Contributor guide
No contributing guide indexed for this repository
Research direction
Start by tracing optimize_multi_plate_design and compare its scoring setup with the manually constructed scoring_funcs passed to optimize_design. Use the supplied samples and balance_variables to reproduce the clustered plate distribution. Done means the wrapper supports the needed scoring behavior and produces within-plate distributions consistent with the manual run.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- r
- Domain
- data
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100